diff --git a/source/CmdLine.cpp b/source/CmdLine.cpp index acfdca31c..d39a8baec 100644 --- a/source/CmdLine.cpp +++ b/source/CmdLine.cpp @@ -37,8 +37,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "Joystick.h" #include "SoundCore.h" #include "ParallelPrinter.h" -#include "CardManager.h" -#include "SerialComms.h" #include "Interface.h" CmdLine g_cmdLine; @@ -408,8 +406,7 @@ bool ProcessCmdLine(LPSTR lpCmdLine) } else if ((strcmp(lpCmdLine, "-dcd") == 0) || (strcmp(lpCmdLine, "-modem") == 0)) // GH#386 { - if (GetCardMgr().IsSSCInstalled()) - GetCardMgr().GetSSC()->SupportDCD(true); + g_cmdLine.supportDCD = true; } else if (strcmp(lpCmdLine, "-alt-enter=toggle-full-screen") == 0) // GH#556 { diff --git a/source/CmdLine.h b/source/CmdLine.h index b76dd0f4a..4a935e4f0 100644 --- a/source/CmdLine.h +++ b/source/CmdLine.h @@ -20,6 +20,7 @@ struct CmdLine bRemoveNoSlotClock = false; snesMaxAltControllerType[0] = false; snesMaxAltControllerType[1] = false; + supportDCD = false; szImageName_harddisk[HARDDISK_1] = NULL; szImageName_harddisk[HARDDISK_2] = NULL; szSnapshotName = NULL; @@ -59,6 +60,7 @@ struct CmdLine bool bSwapButtons0and1; bool bRemoveNoSlotClock; bool snesMaxAltControllerType[2]; + bool supportDCD; SS_CARDTYPE slotInsert[NUM_SLOTS]; LPCSTR szImageName_drive[NUM_SLOTS][NUM_DRIVES]; bool driveConnected[NUM_SLOTS][NUM_DRIVES]; diff --git a/source/Memory.cpp b/source/Memory.cpp index d74d19efd..c561892e2 100644 --- a/source/Memory.cpp +++ b/source/Memory.cpp @@ -1731,8 +1731,17 @@ void MemInitializeIO(void) // Called by: // . Snapshot_LoadState_v2() -void MemInitializeCardSlotAndExpansionRomFromSnapshot(void) +void MemInitializeFromSnapshot(void) { + MemInitializeROM(); + MemInitializeCustomROM(); + MemInitializeCustomF8ROM(); + MemInitializeIO(); + + // + // Card and Expansion ROM + // + // Remove all the cards' ROMs at $Csnn if internal ROM is enabled if (IsAppleIIeOrAbove(GetApple2Type()) && SW_INTCXROM) IoHandlerCardsOut(); @@ -1740,13 +1749,27 @@ void MemInitializeCardSlotAndExpansionRomFromSnapshot(void) // Potentially init a card's expansion ROM const UINT uSlot = g_uPeripheralRomSlot; - if (ExpansionRom[uSlot] == NULL) - return; + if (ExpansionRom[uSlot] != NULL) + { + _ASSERT(g_eExpansionRomType == eExpRomPeripheral); - _ASSERT(g_eExpansionRomType == eExpRomPeripheral); + memcpy(pCxRomPeripheral + 0x800, ExpansionRom[uSlot], FIRMWARE_EXPANSION_SIZE); + // NB. Copied to /mem/ by UpdatePaging(TRUE) + } + + MemUpdatePaging(TRUE); + + // + // VidHD + // - memcpy(pCxRomPeripheral+0x800, ExpansionRom[uSlot], FIRMWARE_EXPANSION_SIZE); - // NB. Copied to /mem/ by UpdatePaging(TRUE) + memVidHD = NULL; + + if (IsApple2PlusOrClone(GetApple2Type()) && (GetCardMgr().QuerySlot(SLOT3) == CT_VidHD)) + { + VidHDCard* vidHD = dynamic_cast(GetCardMgr().GetObj(SLOT3)); + memVidHD = vidHD->IsWriteAux() ? memaux : NULL; + } } inline DWORD getRandomTime() @@ -1778,6 +1801,8 @@ void MemReset() memset(memdirty, 0, 0x100); + memVidHD = NULL; + // int iByte; diff --git a/source/Memory.h b/source/Memory.h index 65030d9b3..bab41f50d 100644 --- a/source/Memory.h +++ b/source/Memory.h @@ -84,7 +84,7 @@ void MemInitializeROM(void); void MemInitializeCustomROM(void); void MemInitializeCustomF8ROM(void); void MemInitializeIO(void); -void MemInitializeCardSlotAndExpansionRomFromSnapshot(void); +void MemInitializeFromSnapshot(void); BYTE MemReadFloatingBus(const ULONG uExecutedCycles); BYTE MemReadFloatingBus(const BYTE highbit, const ULONG uExecutedCycles); void MemReset (); diff --git a/source/SaveState.cpp b/source/SaveState.cpp index ffbd5ec54..a217608b6 100644 --- a/source/SaveState.cpp +++ b/source/SaveState.cpp @@ -499,13 +499,7 @@ static void Snapshot_LoadState_v2(void) const CConfigNeedingRestart configNew = CConfigNeedingRestart::Create(); GetPropertySheet().ApplyNewConfigFromSnapshot(configNew); // Saves new state to Registry (not slot/cards though) - MemInitializeROM(); - MemInitializeCustomROM(); - MemInitializeCustomF8ROM(); - MemInitializeIO(); - MemInitializeCardSlotAndExpansionRomFromSnapshot(); - - MemUpdatePaging(TRUE); + MemInitializeFromSnapshot(); DebugReset(); if (g_nAppMode == MODE_DEBUG) diff --git a/source/Windows/AppleWin.cpp b/source/Windows/AppleWin.cpp index 80f419225..0caf82968 100644 --- a/source/Windows/AppleWin.cpp +++ b/source/Windows/AppleWin.cpp @@ -42,6 +42,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "Registry.h" #include "Riff.h" #include "SaveState.h" +#include "SerialComms.h" #include "SoundCore.h" #include "Speaker.h" #include "LanguageCard.h" @@ -670,6 +671,7 @@ static void RepeatInitialization(void) // NB. g_OldAppleWinVersion needed by LoadConfiguration() -> Config_Load_Video() const bool bShowAboutDlg = CheckOldAppleWinVersion(); // Post: g_OldAppleWinVersion + // Load configuration from Registry { bool loadImages = g_cmdLine.szSnapshotName == NULL; // don't load floppy/harddisk images if a snapshot is to be loaded later on LoadConfiguration(loadImages); @@ -747,6 +749,11 @@ static void RepeatInitialization(void) if (g_cmdLine.bSlotEmpty[SLOT6]) GetCardMgr().Remove(SLOT6); + if (g_cmdLine.supportDCD && GetCardMgr().IsSSCInstalled()) + { + GetCardMgr().GetSSC()->SupportDCD(true); + } + if (g_cmdLine.slotInsert[SLOT3] != CT_Empty && g_cmdLine.slotInsert[SLOT3] == CT_VidHD) // For now just support VidHD in slot 3 { GetCardMgr().Insert(SLOT3, g_cmdLine.slotInsert[SLOT3]);