HD as a Card from AW.

Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
This commit is contained in:
Andrea Odetti 2021-11-07 15:23:10 +00:00
parent b4aa5fff1e
commit ca05f42721
11 changed files with 79 additions and 53 deletions

View file

@ -91,7 +91,7 @@ void CardManager::InsertInternal(UINT slot, SS_CARDTYPE type)
m_slot[slot] = new DummyCard(type, slot); m_slot[slot] = new DummyCard(type, slot);
break; break;
case CT_Uthernet2: case CT_Uthernet2:
m_slot[slot] = new DummyCard(type); m_slot[slot] = new DummyCard(type, slot);
break; break;
case CT_FourPlay: case CT_FourPlay:
m_slot[slot] = new FourPlayCard(slot); m_slot[slot] = new FourPlayCard(slot);

View file

@ -102,8 +102,12 @@ namespace common2
MemInitialize(); MemInitialize();
GetCardMgr().GetDisk2CardMgr().Reset(); CardManager & cardManager = GetCardMgr();
HD_Reset(); cardManager.GetDisk2CardMgr().Reset();
if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD)
{
dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(SLOT7)).Reset(true);
}
Snapshot_Startup(); Snapshot_Startup();
@ -112,8 +116,10 @@ namespace common2
void DestroyEmulator() void DestroyEmulator()
{ {
CardManager & cardManager = GetCardMgr();
Snapshot_Shutdown(); Snapshot_Shutdown();
CMouseInterface* pMouseCard = GetCardMgr().GetMouseCard(); CMouseInterface* pMouseCard = cardManager.GetMouseCard();
if (pMouseCard) if (pMouseCard)
{ {
pMouseCard->Reset(); pMouseCard->Reset();
@ -126,7 +132,12 @@ namespace common2
unRegisterUthernet2(); unRegisterUthernet2();
tfe_shutdown(); tfe_shutdown();
HD_Destroy();
if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD)
{
dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(SLOT7)).Destroy();
}
PrintDestroy(); PrintDestroy();
CpuDestroy(); CpuDestroy();
DebugDestroy(); DebugDestroy();

View file

@ -33,20 +33,34 @@ namespace
return false; return false;
} }
Disk2InterfaceCard& disk2Card = dynamic_cast<Disk2InterfaceCard&>(GetCardMgr().GetRef(SLOT6)); CardManager & cardManager = GetCardMgr();
const ImageError_e error = disk2Card.InsertDisk(DRIVE_1, filename.c_str(), IMAGE_FORCE_WRITE_PROTECTED, IMAGE_DONT_CREATE);
Disk2InterfaceCard * disk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
if (disk2Card)
{
const ImageError_e error = disk2Card->InsertDisk(DRIVE_1, filename.c_str(), IMAGE_FORCE_WRITE_PROTECTED, IMAGE_DONT_CREATE);
if (error == eIMAGE_ERROR_NONE) if (error == eIMAGE_ERROR_NONE)
{ {
return true; return true;
} }
}
// try a hard disk if (cardManager.QuerySlot(SLOT7) != CT_GenericHDD)
HD_SetEnabled(true); {
BOOL bRes = HD_Insert(HARDDISK_1, filename); cardManager.Insert(SLOT7, CT_GenericHDD);
}
HarddiskInterfaceCard * harddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(SLOT7));
if (harddiskCard)
{
BOOL bRes = harddiskCard->Insert(HARDDISK_1, filename);
return bRes == TRUE; return bRes == TRUE;
} }
return false;
}
} }
namespace ra2 namespace ra2

View file

@ -37,11 +37,8 @@ namespace
const QString REG_TIMER = QString::fromUtf8("QApple/Emulator/Timer"); const QString REG_TIMER = QString::fromUtf8("QApple/Emulator/Timer");
const QString REG_FULL_SPEED = QString::fromUtf8("QApple/Emulator/Full Speed"); const QString REG_FULL_SPEED = QString::fromUtf8("QApple/Emulator/Full Speed");
void insertDisk(const QString & filename, const int disk) void insertDisk(Disk2InterfaceCard* pDisk2Card, const QString & filename, const int disk)
{ {
CardManager & cardManager = GetCardMgr();
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
if (!pDisk2Card) if (!pDisk2Card)
return; return;
@ -61,15 +58,15 @@ namespace
} }
} }
void insertHD(const QString & filename, const int disk) void insertHD(HarddiskInterfaceCard * pHarddiskCard, const QString & filename, const int disk)
{ {
if (filename.isEmpty()) if (filename.isEmpty())
{ {
HD_Unplug(disk); pHarddiskCard->Unplug(disk);
} }
else else
{ {
if (!HD_Insert(disk, filename.toStdString())) if (!pHarddiskCard->Insert(disk, filename.toStdString()))
{ {
const QString message = QString("Error inserting '%1'").arg(filename); const QString message = QString("Error inserting '%1'").arg(filename);
QMessageBox::warning(nullptr, "Hard Disk error", message); QMessageBox::warning(nullptr, "Hard Disk error", message);
@ -90,9 +87,6 @@ namespace
// 2) Snapshot_LoadState_v2(): card already inserted // 2) Snapshot_LoadState_v2(): card already inserted
if (cardManager.QuerySlot(slot) != newCardType) if (cardManager.QuerySlot(slot) != newCardType)
cardManager.Insert(slot, newCardType); cardManager.Insert(slot, newCardType);
std::string& regSection = RegGetConfigSlotSection(slot);
RegSaveValue(regSection.c_str(), REGVALUE_CARD_TYPE, TRUE, CT_Disk2);
} }
} }
@ -175,8 +169,8 @@ void getAppleWinPreferences(PreferenceData & data)
{ {
CardManager & cardManager = GetCardMgr(); CardManager & cardManager = GetCardMgr();
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
data.disks.resize(diskIDs.size()); data.disks.resize(diskIDs.size());
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
if (pDisk2Card) if (pDisk2Card)
{ {
@ -191,19 +185,24 @@ void getAppleWinPreferences(PreferenceData & data)
} }
data.hds.resize(hdIDs.size()); data.hds.resize(hdIDs.size());
HarddiskInterfaceCard* pHarddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(SLOT7));
if (pHarddiskCard)
{
for (size_t i = 0; i < hdIDs.size(); ++i) for (size_t i = 0; i < hdIDs.size(); ++i)
{ {
const std::string & diskName = HD_GetFullName(hdIDs[i]); const std::string & diskName = pHarddiskCard->GetFullName(hdIDs[i]);
if (!diskName.empty()) if (!diskName.empty())
{ {
data.hds[i] = QString::fromStdString(diskName); data.hds[i] = QString::fromStdString(diskName);
} }
} }
}
data.enhancedSpeed = pDisk2Card && pDisk2Card->GetEnhanceDisk(); data.enhancedSpeed = pDisk2Card && pDisk2Card->GetEnhanceDisk();
data.cardInSlot4 = cardManager.QuerySlot(SLOT4); data.cardInSlot4 = cardManager.QuerySlot(SLOT4);
data.cardInSlot5 = cardManager.QuerySlot(SLOT5); data.cardInSlot5 = cardManager.QuerySlot(SLOT5);
data.hdInSlot7 = HD_CardIsEnabled(); data.hdInSlot7 = pHarddiskCard;
data.apple2Type = GetApple2Type(); data.apple2Type = GetApple2Type();
@ -236,6 +235,7 @@ void setAppleWinPreferences(const std::shared_ptr<QtFrame> & frame, const Prefer
{ {
CardManager & cardManager = GetCardMgr(); CardManager & cardManager = GetCardMgr();
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6)); Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
HarddiskInterfaceCard* pHarddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(SLOT7));
if (currentData.speakerVolume != newData.speakerVolume) if (currentData.speakerVolume != newData.speakerVolume)
{ {
@ -267,8 +267,7 @@ void setAppleWinPreferences(const std::shared_ptr<QtFrame> & frame, const Prefer
} }
if (currentData.hdInSlot7 != newData.hdInSlot7) if (currentData.hdInSlot7 != newData.hdInSlot7)
{ {
REGSAVE(TEXT(REGVALUE_HDD_ENABLED), newData.hdInSlot7 ? 1 : 0); SetSlot(SLOT7, newData.hdInSlot7 ? CT_GenericHDD : CT_Empty);
HD_SetEnabled(newData.hdInSlot7);
} }
if (pDisk2Card && (currentData.enhancedSpeed != newData.enhancedSpeed)) if (pDisk2Card && (currentData.enhancedSpeed != newData.enhancedSpeed))
@ -281,7 +280,7 @@ void setAppleWinPreferences(const std::shared_ptr<QtFrame> & frame, const Prefer
{ {
if (currentData.disks[i] != newData.disks[i]) if (currentData.disks[i] != newData.disks[i])
{ {
insertDisk(newData.disks[i], diskIDs[i]); insertDisk(pDisk2Card, newData.disks[i], diskIDs[i]);
} }
} }
@ -289,7 +288,7 @@ void setAppleWinPreferences(const std::shared_ptr<QtFrame> & frame, const Prefer
{ {
if (currentData.hds[i] != newData.hds[i]) if (currentData.hds[i] != newData.hds[i])
{ {
insertHD(newData.hds[i], hdIDs[i]); insertHD(pHarddiskCard, newData.hds[i], hdIDs[i]);
} }
} }

View file

@ -103,8 +103,12 @@ namespace
MemInitialize(); MemInitialize();
frame->Initialize(); frame->Initialize();
GetCardMgr().GetDisk2CardMgr().Reset(); CardManager & cardManager = GetCardMgr();
HD_Reset(); cardManager.GetDisk2CardMgr().Reset();
if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD)
{
dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(SLOT7)).Reset(true);
}
} }
void unloadEmulator(const std::shared_ptr<QtFrame> & frame) void unloadEmulator(const std::shared_ptr<QtFrame> & frame)
@ -116,7 +120,10 @@ namespace
{ {
pMouseCard->Reset(); pMouseCard->Reset();
} }
HD_Destroy(); if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD)
{
dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(SLOT7)).Destroy();
}
PrintDestroy(); PrintDestroy();
MemDestroy(); MemDestroy();
SpkrDestroy(); SpkrDestroy();

View file

@ -477,11 +477,12 @@ namespace sa2
ImGui::PopID(); ImGui::PopID();
} }
if (HD_CardIsEnabled()) HarddiskInterfaceCard* pHarddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(SLOT7));
if (pHarddiskCard)
{ {
ImGui::PushID(7); ImGui::PushID(7);
Disk_Status_e disk1Status_; Disk_Status_e disk1Status_;
HD_GetLightStatus(&disk1Status_); pHarddiskCard->GetLightStatus(&disk1Status_);
for (size_t drive = HARDDISK_1; drive < NUM_HARDDISKS; ++drive) for (size_t drive = HARDDISK_1; drive < NUM_HARDDISKS; ++drive)
{ {
ImGui::PushID(drive); ImGui::PushID(drive);
@ -501,12 +502,12 @@ namespace sa2
ImGui::TableNextColumn(); ImGui::TableNextColumn();
if (ImGui::SmallButton("Eject")) if (ImGui::SmallButton("Eject"))
{ {
HD_Unplug(drive); pHarddiskCard->Unplug(drive);
} }
ImGui::TableNextColumn(); ImGui::TableNextColumn();
if (ImGui::SmallButton("Swap")) if (ImGui::SmallButton("Swap"))
{ {
HD_ImageSwap(); pHarddiskCard->ImageSwap();
} }
ImGui::TableNextColumn(); ImGui::TableNextColumn();
if (ImGui::RadioButton("", (dragAndDropSlot == SLOT7) && (dragAndDropDrive == drive))) if (ImGui::RadioButton("", (dragAndDropSlot == SLOT7) && (dragAndDropDrive == drive)))
@ -515,7 +516,7 @@ namespace sa2
} }
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::TextUnformatted(HD_GetFullName(drive).c_str()); ImGui::TextUnformatted(pHarddiskCard->GetFullName(drive).c_str());
ImGui::PopID(); ImGui::PopID();
} }
ImGui::PopID(); ImGui::PopID();

View file

@ -180,13 +180,6 @@ namespace sa2
} }
break; break;
} }
case 7:
{
const bool enabled = card == CT_GenericHDD;
REGSAVE(REGVALUE_HDD_ENABLED, enabled);
HD_SetEnabled(enabled);
break;
}
}; };
if (card == CT_Uthernet2) if (card == CT_Uthernet2)

View file

@ -31,7 +31,8 @@ namespace
} }
case CT_GenericHDD: case CT_GenericHDD:
{ {
if (!HD_Insert(dragAndDropDrive, filename)) HarddiskInterfaceCard * harddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(dragAndDropSlot));
if (!harddiskCard->Insert(dragAndDropDrive, filename))
{ {
frame->FrameMessageBox("Invalid HD image", "ERROR", MB_OK); frame->FrameMessageBox("Invalid HD image", "ERROR", MB_OK);
} }

View file

@ -1,7 +1,7 @@
#include "StdAfx.h" #include "StdAfx.h"
#include "FourPlay.h" #include "FourPlay.h"
void FourPlayCard::InitializeIO(LPBYTE pCxRomPeripheral, UINT slot) void FourPlayCard::InitializeIO(LPBYTE pCxRomPeripheral)
{ {
} }

View file

@ -1,7 +1,7 @@
#include "StdAfx.h" #include "StdAfx.h"
#include "SNESMAX.h" #include "SNESMAX.h"
void SNESMAXCard::InitializeIO(LPBYTE pCxRomPeripheral, UINT slot) void SNESMAXCard::InitializeIO(LPBYTE pCxRomPeripheral)
{ {
} }

View file

@ -6,7 +6,7 @@
CSuperSerialCard::CSuperSerialCard(UINT slot) : CSuperSerialCard::CSuperSerialCard(UINT slot) :
Card(CT_SSC), m_uSlot(slot) Card(CT_SSC, slot)
{ {
} }
@ -22,7 +22,7 @@ void CSuperSerialCard::CommReset()
{ {
} }
void CSuperSerialCard::CommInitialize(LPBYTE pCxRomPeripheral, UINT uSlot) void CSuperSerialCard::InitializeIO(LPBYTE pCxRomPeripheral)
{ {
} }