From ca05f427217282221f36f4c9da11bd47f7ac7b8e Mon Sep 17 00:00:00 2001 From: Andrea Odetti Date: Sun, 7 Nov 2021 15:23:10 +0000 Subject: [PATCH] HD as a Card from AW. Signed-off-by: Andrea Odetti --- source/CardManager.cpp | 2 +- source/frontends/common2/utils.cpp | 19 +++++++-- source/frontends/libretro/game.cpp | 30 ++++++++++---- source/frontends/qt/options.cpp | 39 +++++++++---------- source/frontends/qt/qapple.cpp | 13 +++++-- source/frontends/sdl/imgui/sdlsettings.cpp | 11 +++--- source/frontends/sdl/imgui/settingshelper.cpp | 7 ---- source/frontends/sdl/processfile.cpp | 3 +- source/linux/duplicates/FourPlay.cpp | 2 +- source/linux/duplicates/SNESMAX.cpp | 2 +- source/linux/duplicates/SerialComms.cpp | 4 +- 11 files changed, 79 insertions(+), 53 deletions(-) diff --git a/source/CardManager.cpp b/source/CardManager.cpp index 39011e78..b496e0a3 100644 --- a/source/CardManager.cpp +++ b/source/CardManager.cpp @@ -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); diff --git a/source/frontends/common2/utils.cpp b/source/frontends/common2/utils.cpp index 36017de9..7c7d62c4 100644 --- a/source/frontends/common2/utils.cpp +++ b/source/frontends/common2/utils.cpp @@ -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(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(cardManager.GetRef(SLOT7)).Destroy(); + } + PrintDestroy(); CpuDestroy(); DebugDestroy(); diff --git a/source/frontends/libretro/game.cpp b/source/frontends/libretro/game.cpp index c7b23ad3..998dc10c 100644 --- a/source/frontends/libretro/game.cpp +++ b/source/frontends/libretro/game.cpp @@ -33,18 +33,32 @@ namespace return false; } - Disk2InterfaceCard& disk2Card = dynamic_cast(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(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(cardManager.GetObj(SLOT7)); + if (harddiskCard) + { + BOOL bRes = harddiskCard->Insert(HARDDISK_1, filename); + return bRes == TRUE; + } + + return false; } } diff --git a/source/frontends/qt/options.cpp b/source/frontends/qt/options.cpp index c277b49e..b3fa362c 100644 --- a/source/frontends/qt/options.cpp +++ b/source/frontends/qt/options.cpp @@ -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(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(cardManager.GetObj(SLOT6)); data.disks.resize(diskIDs.size()); + Disk2InterfaceCard* pDisk2Card = dynamic_cast(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(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 & frame, const Prefer { CardManager & cardManager = GetCardMgr(); Disk2InterfaceCard* pDisk2Card = dynamic_cast(cardManager.GetObj(SLOT6)); + HarddiskInterfaceCard* pHarddiskCard = dynamic_cast(cardManager.GetObj(SLOT7)); if (currentData.speakerVolume != newData.speakerVolume) { @@ -267,8 +267,7 @@ void setAppleWinPreferences(const std::shared_ptr & 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 & 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 & frame, const Prefer { if (currentData.hds[i] != newData.hds[i]) { - insertHD(newData.hds[i], hdIDs[i]); + insertHD(pHarddiskCard, newData.hds[i], hdIDs[i]); } } diff --git a/source/frontends/qt/qapple.cpp b/source/frontends/qt/qapple.cpp index bb6a6324..90303e49 100644 --- a/source/frontends/qt/qapple.cpp +++ b/source/frontends/qt/qapple.cpp @@ -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(cardManager.GetRef(SLOT7)).Reset(true); + } } void unloadEmulator(const std::shared_ptr & frame) @@ -116,7 +120,10 @@ namespace { pMouseCard->Reset(); } - HD_Destroy(); + if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD) + { + dynamic_cast(cardManager.GetRef(SLOT7)).Destroy(); + } PrintDestroy(); MemDestroy(); SpkrDestroy(); diff --git a/source/frontends/sdl/imgui/sdlsettings.cpp b/source/frontends/sdl/imgui/sdlsettings.cpp index 341421da..131ecefa 100644 --- a/source/frontends/sdl/imgui/sdlsettings.cpp +++ b/source/frontends/sdl/imgui/sdlsettings.cpp @@ -477,11 +477,12 @@ namespace sa2 ImGui::PopID(); } - if (HD_CardIsEnabled()) + HarddiskInterfaceCard* pHarddiskCard = dynamic_cast(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(); diff --git a/source/frontends/sdl/imgui/settingshelper.cpp b/source/frontends/sdl/imgui/settingshelper.cpp index 6f26d48b..df42e733 100644 --- a/source/frontends/sdl/imgui/settingshelper.cpp +++ b/source/frontends/sdl/imgui/settingshelper.cpp @@ -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) diff --git a/source/frontends/sdl/processfile.cpp b/source/frontends/sdl/processfile.cpp index 50d8e595..7fafcd10 100644 --- a/source/frontends/sdl/processfile.cpp +++ b/source/frontends/sdl/processfile.cpp @@ -31,7 +31,8 @@ namespace } case CT_GenericHDD: { - if (!HD_Insert(dragAndDropDrive, filename)) + HarddiskInterfaceCard * harddiskCard = dynamic_cast(cardManager.GetObj(dragAndDropSlot)); + if (!harddiskCard->Insert(dragAndDropDrive, filename)) { frame->FrameMessageBox("Invalid HD image", "ERROR", MB_OK); } diff --git a/source/linux/duplicates/FourPlay.cpp b/source/linux/duplicates/FourPlay.cpp index 13e082b2..c4962ab4 100644 --- a/source/linux/duplicates/FourPlay.cpp +++ b/source/linux/duplicates/FourPlay.cpp @@ -1,7 +1,7 @@ #include "StdAfx.h" #include "FourPlay.h" -void FourPlayCard::InitializeIO(LPBYTE pCxRomPeripheral, UINT slot) +void FourPlayCard::InitializeIO(LPBYTE pCxRomPeripheral) { } diff --git a/source/linux/duplicates/SNESMAX.cpp b/source/linux/duplicates/SNESMAX.cpp index fd1c276d..506a872a 100644 --- a/source/linux/duplicates/SNESMAX.cpp +++ b/source/linux/duplicates/SNESMAX.cpp @@ -1,7 +1,7 @@ #include "StdAfx.h" #include "SNESMAX.h" -void SNESMAXCard::InitializeIO(LPBYTE pCxRomPeripheral, UINT slot) +void SNESMAXCard::InitializeIO(LPBYTE pCxRomPeripheral) { } diff --git a/source/linux/duplicates/SerialComms.cpp b/source/linux/duplicates/SerialComms.cpp index 99dfa587..3f0f770b 100644 --- a/source/linux/duplicates/SerialComms.cpp +++ b/source/linux/duplicates/SerialComms.cpp @@ -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) { }