Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
audetto committed Nov 26, 2021
2 parents f080599 + 0b2104c commit f61d207
Show file tree
Hide file tree
Showing 25 changed files with 132 additions and 148 deletions.
40 changes: 40 additions & 0 deletions source/Card.cpp
Expand Up @@ -70,3 +70,43 @@ void DummyCard::Update(const ULONG nExecutedCycles)
break;
}
}

void DummyCard::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
{
switch (QueryType())
{
case CT_GenericPrinter:
Printer_SaveSnapshot(yamlSaveHelper, m_slot);
break;
case CT_MockingboardC:
MB_SaveSnapshot(yamlSaveHelper, m_slot);
break;
case CT_Phasor:
Phasor_SaveSnapshot(yamlSaveHelper, m_slot);
break;
case CT_Z80:
Z80_SaveSnapshot(yamlSaveHelper, m_slot);
break;
case CT_Uthernet:
tfe_SaveSnapshot(yamlSaveHelper, m_slot);
break;
}
}

bool DummyCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version)
{
switch (QueryType())
{
case CT_GenericPrinter:
return Printer_LoadSnapshot(yamlLoadHelper, m_slot, version);
case CT_MockingboardC:
return MB_LoadSnapshot(yamlLoadHelper, m_slot, version);
case CT_Phasor:
return Phasor_LoadSnapshot(yamlLoadHelper, m_slot, version);
case CT_Z80:
return Z80_LoadSnapshot(yamlLoadHelper, m_slot, version);
case CT_Uthernet:
return tfe_LoadSnapshot(yamlLoadHelper, m_slot, version);
}
return false;
}
10 changes: 10 additions & 0 deletions source/Card.h
Expand Up @@ -28,6 +28,9 @@ enum SS_CARDTYPE

enum SLOTS { SLOT0=0, SLOT1, SLOT2, SLOT3, SLOT4, SLOT5, SLOT6, SLOT7, NUM_SLOTS, SLOT_AUX };

class YamlSaveHelper;
class YamlLoadHelper;

class Card
{
public:
Expand All @@ -38,6 +41,9 @@ class Card
virtual void Init(void) = 0;
virtual void Reset(const bool powerCycle) = 0;
virtual void Update(const ULONG nExecutedCycles) = 0;
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper) = 0;
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version) = 0;

SS_CARDTYPE QueryType(void) { return m_type; }

protected:
Expand All @@ -59,6 +65,8 @@ class EmptyCard : public Card
virtual void Init(void) {}
virtual void Reset(const bool powerCycle) {}
virtual void Update(const ULONG nExecutedCycles) {}
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper) {}
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version) { _ASSERT(0); return false; }
};

//
Expand All @@ -73,4 +81,6 @@ class DummyCard : public Card // For cards that currently can't be instantiated
virtual void Init(void) {}
virtual void Reset(const bool powerCycle) {}
virtual void Update(const ULONG nExecutedCycles);
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper);
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version);
};
11 changes: 11 additions & 0 deletions source/CardManager.cpp
Expand Up @@ -213,3 +213,14 @@ void CardManager::Update(const ULONG nExecutedCycles)
}
}
}

void CardManager::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
{
for (UINT i = 1; i < NUM_SLOTS; ++i)
{
if (m_slot[i])
{
m_slot[i]->SaveSnapshot(yamlSaveHelper);
}
}
}
6 changes: 2 additions & 4 deletions source/CardManager.h
Expand Up @@ -33,14 +33,11 @@ class CardManager
SS_CARDTYPE QuerySlot(UINT slot) { _ASSERT(slot<NUM_SLOTS); return m_slot[slot]->QueryType(); }
Card& GetRef(UINT slot)
{
SS_CARDTYPE t=QuerySlot(slot);
_ASSERT((t==CT_GenericHDD || t==CT_SSC || t==CT_MouseInterface || t==CT_Disk2 || t == CT_FourPlay || t == CT_SNESMAX || t == CT_SAM) && m_slot[slot]);
_ASSERT(m_slot[slot]);
return *m_slot[slot];
}
Card* GetObj(UINT slot)
{
SS_CARDTYPE t=QuerySlot(slot);
_ASSERT(t == CT_GenericHDD || t==CT_SSC || t==CT_MouseInterface || t==CT_Disk2 || t == CT_FourPlay || t == CT_SNESMAX || t == CT_SAM);
return m_slot[slot];
}

Expand All @@ -59,6 +56,7 @@ class CardManager

void InitializeIO(LPBYTE pCxRomPeripheral);
void Update(const ULONG nExecutedCycles);
void SaveSnapshot(YamlSaveHelper& yamlSaveHelper); // It DOES NOT save SLOT0

private:
void InsertInternal(UINT slot, SS_CARDTYPE type);
Expand Down
10 changes: 5 additions & 5 deletions source/Disk.cpp
Expand Up @@ -60,6 +60,9 @@ const BYTE Disk2InterfaceCard::m_T00S00Pattern[] = {0xD5,0xAA,0x96,0xAA,0xAA,0xA
Disk2InterfaceCard::Disk2InterfaceCard(UINT slot) :
Card(CT_Disk2, slot)
{
if (m_slot != 5 && m_slot != 6) // fixme
throw std::string("Card: wrong slot");

ResetSwitches();

m_floppyLatch = 0;
Expand Down Expand Up @@ -2027,7 +2030,7 @@ void Disk2InterfaceCard::SaveSnapshotDriveUnit(YamlSaveHelper& yamlSaveHelper, U
SaveSnapshotFloppy(yamlSaveHelper, unit);
}

void Disk2InterfaceCard::SaveSnapshot(class YamlSaveHelper& yamlSaveHelper)
void Disk2InterfaceCard::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
{
YamlSaveHelper::Slot slot(yamlSaveHelper, GetSnapshotCardName(), m_slot, kUNIT_VERSION);

Expand Down Expand Up @@ -2193,11 +2196,8 @@ void Disk2InterfaceCard::LoadSnapshotDriveUnit(YamlLoadHelper& yamlLoadHelper, U
}
}

bool Disk2InterfaceCard::LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version)
bool Disk2InterfaceCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version)
{
if (slot != 5 && slot != 6) // fixme
throw std::string("Card: wrong slot");

if (version < 1 || version > kUNIT_VERSION)
throw std::string("Card: wrong version");

Expand Down
4 changes: 2 additions & 2 deletions source/Disk.h
Expand Up @@ -166,8 +166,8 @@ class Disk2InterfaceCard : public Card
bool IsDriveConnected(int drive) { return m_floppyDrive[drive].m_isConnected; }

static std::string GetSnapshotCardName(void);
void SaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
bool LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version);
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper);
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version);

void LoadLastDiskImage(const int drive);
void SaveLastDiskImage(const int drive);
Expand Down
2 changes: 1 addition & 1 deletion source/FourPlay.cpp
Expand Up @@ -146,7 +146,7 @@ void FourPlayCard::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
// NB. No state for this card
}

bool FourPlayCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version)
bool FourPlayCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version)
{
if (version < 1 || version > kUNIT_VERSION)
throw std::string("Card: wrong version");
Expand Down
4 changes: 2 additions & 2 deletions source/FourPlay.h
Expand Up @@ -20,8 +20,8 @@ class FourPlayCard : public Card
static BYTE __stdcall IORead(WORD pc, WORD addr, BYTE bWrite, BYTE value, ULONG nExecutedCycles);

static std::string GetSnapshotCardName(void);
void SaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
bool LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version);
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper);
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version);

static const UINT JOYSTICKSTATIONARY = 0x20;

Expand Down
12 changes: 6 additions & 6 deletions source/Harddisk.cpp
Expand Up @@ -129,6 +129,9 @@ Overview
HarddiskInterfaceCard::HarddiskInterfaceCard(UINT slot) :
Card(CT_GenericHDD, slot)
{
if (m_slot != SLOT7) // fixme
throw std::string("Card: wrong slot");

m_unitNum = HARDDISK_1 << 7; // b7=unit

// The HDD interface has a single Command register for both drives:
Expand Down Expand Up @@ -838,15 +841,12 @@ bool HarddiskInterfaceCard::LoadSnapshotHDDUnit(YamlLoadHelper& yamlLoadHelper,
return bResSelectImage;
}

bool HarddiskInterfaceCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version, const std::string& strSaveStatePath)
bool HarddiskInterfaceCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version)
{
if (slot != SLOT7) // fixme
throw std::string("Card: wrong slot");

if (version < 1 || version > kUNIT_VERSION)
throw std::string("Card: wrong version");

if (version <= 2 && (regs.pc >> 8) == (0xC0|slot))
if (version <= 2 && (regs.pc >> 8) == (0xC0|m_slot))
throw std::string("HDD card: 6502 is running old HDD firmware");

m_unitNum = yamlLoadHelper.LoadUint(SS_YAML_KEY_CURRENT_UNIT); // b7=unit
Expand All @@ -866,7 +866,7 @@ bool HarddiskInterfaceCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT sl
bool bResSelectImage2 = LoadSnapshotHDDUnit(yamlLoadHelper, HARDDISK_2);

if (!bResSelectImage1 && !bResSelectImage2)
RegSaveString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_HDV_START_DIR), 1, strSaveStatePath);
RegSaveString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_HDV_START_DIR), 1, Snapshot_GetPath());

GetFrame().FrameRefreshStatus(DRAW_LEDS | DRAW_DISK_STATUS);

Expand Down
4 changes: 2 additions & 2 deletions source/Harddisk.h
Expand Up @@ -104,8 +104,8 @@ class HarddiskInterfaceCard : public Card
bool ImageSwap(void);

static std::string GetSnapshotCardName(void);
void SaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
bool LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version, const std::string& strSaveStatePath);
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper);
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version);

static BYTE __stdcall IORead(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nExecutedCycles);
static BYTE __stdcall IOWrite(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nExecutedCycles);
Expand Down
19 changes: 7 additions & 12 deletions source/LanguageCard.cpp
Expand Up @@ -139,6 +139,9 @@ bool LanguageCardUnit::IsOpcodeRMWabs(WORD addr)
LanguageCardSlot0::LanguageCardSlot0(SS_CARDTYPE type/*=CT_LanguageCard*/)
: LanguageCardUnit(type)
{
if (m_slot != LanguageCardUnit::kSlot0)
throw std::string("Card: wrong slot");

m_pMemory = new BYTE[kMemBankSize];
SetMemMainLanguageCard(m_pMemory);
}
Expand All @@ -152,7 +155,6 @@ LanguageCardSlot0::~LanguageCardSlot0(void)
//

static const UINT kUNIT_LANGUAGECARD_VER = 1;
static const UINT kSLOT_LANGUAGECARD = LanguageCardUnit::kSlot0;

#define SS_YAML_VALUE_CARD_LANGUAGECARD "Language Card"

Expand Down Expand Up @@ -194,7 +196,7 @@ void LanguageCardSlot0::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
return; // No Language Card support for //e and above
}

YamlSaveHelper::Slot slot(yamlSaveHelper, GetSnapshotCardName(), kSLOT_LANGUAGECARD, kUNIT_LANGUAGECARD_VER);
YamlSaveHelper::Slot slot(yamlSaveHelper, GetSnapshotCardName(), m_slot, kUNIT_LANGUAGECARD_VER);
YamlSaveHelper::Label state(yamlSaveHelper, "%s:\n", SS_YAML_KEY_STATE);

SaveLCState(yamlSaveHelper);
Expand All @@ -205,11 +207,8 @@ void LanguageCardSlot0::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
}
}

bool LanguageCardSlot0::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version)
bool LanguageCardSlot0::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version)
{
if (slot != kSLOT_LANGUAGECARD)
throw std::string("Card: wrong slot");

if (version != kUNIT_LANGUAGECARD_VER)
throw std::string("Card: wrong version");

Expand Down Expand Up @@ -365,7 +364,6 @@ BYTE __stdcall Saturn128K::IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValue, ULO
//

static const UINT kUNIT_SATURN_VER = 1;
static const UINT kSLOT_SATURN = LanguageCardUnit::kSlot0;

#define SS_YAML_VALUE_CARD_SATURN128 "Saturn 128"

Expand Down Expand Up @@ -393,7 +391,7 @@ void Saturn128K::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
return; // No Saturn support for //e and above
}

YamlSaveHelper::Slot slot(yamlSaveHelper, GetSnapshotCardName(), kSLOT_SATURN, kUNIT_SATURN_VER);
YamlSaveHelper::Slot slot(yamlSaveHelper, GetSnapshotCardName(), m_slot, kUNIT_SATURN_VER);
YamlSaveHelper::Label state(yamlSaveHelper, "%s:\n", SS_YAML_KEY_STATE);

SaveLCState(yamlSaveHelper);
Expand All @@ -409,11 +407,8 @@ void Saturn128K::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
}
}

bool Saturn128K::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version)
bool Saturn128K::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version)
{
if (slot != kSLOT_SATURN) // fixme
throw std::string("Card: wrong slot");

if (version != kUNIT_SATURN_VER)
throw std::string("Card: wrong version");

Expand Down
12 changes: 6 additions & 6 deletions source/LanguageCard.h
Expand Up @@ -20,8 +20,8 @@ class LanguageCardUnit : public Card
virtual void InitializeIO(LPBYTE pCxRomPeripheral);
virtual void SetMemorySize(UINT banks) {} // No-op for //e and slot-0 16K LC
virtual UINT GetActiveBank(void) { return 0; } // Always 0 as only 1x 16K bank
virtual void SaveSnapshot(class YamlSaveHelper& yamlSaveHelper) { _ASSERT(0); } // Not used for //e
virtual bool LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version) { _ASSERT(0); return false; } // Not used for //e
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper) { _ASSERT(0); } // Not used for //e
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version) { _ASSERT(0); return false; } // Not used for //e

BOOL GetLastRamWrite(void) { return m_uLastRamWrite; }
void SetLastRamWrite(BOOL count) { m_uLastRamWrite = count; }
Expand All @@ -47,8 +47,8 @@ class LanguageCardSlot0 : public LanguageCardUnit
LanguageCardSlot0(SS_CARDTYPE = CT_LanguageCard);
virtual ~LanguageCardSlot0(void);

virtual void SaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
virtual bool LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version);
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper);
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version);

static const UINT kMemBankSize = 16*1024;
static std::string GetSnapshotCardName(void);
Expand Down Expand Up @@ -76,8 +76,8 @@ class Saturn128K : public LanguageCardSlot0
virtual void InitializeIO(LPBYTE pCxRomPeripheral);
virtual void SetMemorySize(UINT banks);
virtual UINT GetActiveBank(void);
virtual void SaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
virtual bool LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version);
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper);
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version);

static BYTE __stdcall IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValue, ULONG nExecutedCycles);

Expand Down
10 changes: 5 additions & 5 deletions source/MouseInterface.cpp
Expand Up @@ -138,6 +138,9 @@ CMouseInterface::CMouseInterface(UINT slot) :
m_pSlotRom(NULL),
m_syncEvent(slot, 0, SyncEventCallback) // use slot# as "unique" id for MouseInterfaces
{
if (m_slot != 4) // fixme
throw std::string("Card: wrong slot");

m_6821.SetListenerB( this, M6821_Listener_B );
m_6821.SetListenerA( this, M6821_Listener_A );

Expand Down Expand Up @@ -651,7 +654,7 @@ void CMouseInterface::SaveSnapshotMC6821(YamlSaveHelper& yamlSaveHelper, std::st
yamlSaveHelper.SaveUint(SS_YAML_KEY_IB, byIB);
}

void CMouseInterface::SaveSnapshot(class YamlSaveHelper& yamlSaveHelper)
void CMouseInterface::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
{
// if (!m_bActive)
// return;
Expand Down Expand Up @@ -710,11 +713,8 @@ void CMouseInterface::LoadSnapshotMC6821(YamlLoadHelper& yamlLoadHelper, std::st
yamlLoadHelper.PopMap();
}

bool CMouseInterface::LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version)
bool CMouseInterface::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version)
{
if (slot != 4) // fixme
throw std::string("Card: wrong slot");

if (version != 1)
throw std::string("Card: wrong version");

Expand Down
4 changes: 2 additions & 2 deletions source/MouseInterface.h
Expand Up @@ -44,8 +44,8 @@ class CMouseInterface : public Card
}

static std::string GetSnapshotCardName(void);
void SaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
bool LoadSnapshot(class YamlLoadHelper& yamlLoadHelper, UINT slot, UINT version);
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper);
virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version);

protected:
void InitializeROM(void);
Expand Down

0 comments on commit f61d207

Please sign in to comment.