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);
break;
case CT_Uthernet2:
m_slot[slot] = new DummyCard(type);
m_slot[slot] = new DummyCard(type, slot);
break;
case CT_FourPlay:
m_slot[slot] = new FourPlayCard(slot);

View file

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

View file

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

View file

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

View file

@ -103,8 +103,12 @@ namespace
MemInitialize();
frame->Initialize();
GetCardMgr().GetDisk2CardMgr().Reset();
HD_Reset();
CardManager & cardManager = GetCardMgr();
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)
@ -116,7 +120,10 @@ namespace
{
pMouseCard->Reset();
}
HD_Destroy();
if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD)
{
dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(SLOT7)).Destroy();
}
PrintDestroy();
MemDestroy();
SpkrDestroy();

View file

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

View file

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

View file

@ -31,7 +31,8 @@ namespace
}
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);
}

View file

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

View file

@ -6,7 +6,7 @@
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)
{
}