mirror of
https://github.com/AppleWin/AppleWin.git
synced 2025-01-13 19:29:55 +00:00
Debugger: use dedicated MB structs to populate mini-mem views.
Remove old v1 save-state header files.
This commit is contained in:
parent
3f2f071fa6
commit
055c299bb4
@ -104,8 +104,6 @@
|
||||
<ClInclude Include="source\Riff.h" />
|
||||
<ClInclude Include="source\SAM.h" />
|
||||
<ClInclude Include="source\SaveState.h" />
|
||||
<ClInclude Include="source\SaveState_Structs_common.h" />
|
||||
<ClInclude Include="source\SaveState_Structs_v1.h" />
|
||||
<ClInclude Include="source\SerialComms.h" />
|
||||
<ClInclude Include="source\SNESMAX.h" />
|
||||
<ClInclude Include="source\SoundCore.h" />
|
||||
|
@ -522,12 +522,6 @@
|
||||
<ClInclude Include="source\YamlHelper.h">
|
||||
<Filter>Source Files\Emulator</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\SaveState_Structs_common.h">
|
||||
<Filter>Source Files\_Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\SaveState_Structs_v1.h">
|
||||
<Filter>Source Files\_Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\RGBMonitor.h">
|
||||
<Filter>Source Files\Video</Filter>
|
||||
</ClInclude>
|
||||
|
@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "PageInput.h"
|
||||
#include "PropertySheet.h"
|
||||
|
||||
#include "../SaveState_Structs_common.h"
|
||||
#include "../Common.h"
|
||||
#include "../Keyboard.h"
|
||||
#include "../Registry.h"
|
||||
|
@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "PageSound.h"
|
||||
#include "PropertySheet.h"
|
||||
|
||||
#include "../SaveState_Structs_common.h"
|
||||
#include "../Common.h"
|
||||
#include "../CardManager.h"
|
||||
#include "../Mockingboard.h"
|
||||
|
@ -50,6 +50,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
// #define DEBUG_ASM_HASH 1
|
||||
#define ALLOW_INPUT_LOWERCASE 1
|
||||
|
||||
#define MAKE_VERSION(a,b,c,d) ((a<<24) | (b<<16) | (c<<8) | (d))
|
||||
|
||||
// See /docs/Debugger_Changelog.txt for full details
|
||||
const int DEBUGGER_VERSION = MAKE_VERSION(2,9,1,14);
|
||||
|
||||
@ -3620,7 +3622,7 @@ bool MemoryDumpCheck (int nArgs, WORD * pAddress_ )
|
||||
else if (strncmp(g_aArgs[1].sArg, "AY", 2) == 0) // AY8910
|
||||
{
|
||||
nAddress = (g_aArgs[1].sArg[2] - '0') & 3;
|
||||
pArg->eDevice = DEV_AY8910;
|
||||
pArg->eDevice = DEV_AY8913;
|
||||
bUpdate = true;
|
||||
}
|
||||
#ifdef SUPPORT_Z80_EMU
|
||||
|
@ -1,6 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include "../SaveState_Structs_v1.h" // For SS_CARD_MOCKINGBOARD
|
||||
#include "../Common.h"
|
||||
|
||||
#include "Debugger_Types.h"
|
||||
|
@ -1951,15 +1951,25 @@ void DrawMemory ( int line, int iMemDump )
|
||||
DEVICE_e eDevice = pMD->eDevice;
|
||||
MemoryView_e iView = pMD->eView;
|
||||
|
||||
SS_CARD_MOCKINGBOARD_v1 SS_MB;
|
||||
MockingboardCard::DEBUGGER_MB_CARD MB;
|
||||
bool isMockingboardInSlot = false;
|
||||
|
||||
if ((eDevice == DEV_SY6522) || (eDevice == DEV_AY8910))
|
||||
if ((eDevice == DEV_SY6522) || (eDevice == DEV_AY8913))
|
||||
{
|
||||
UINT slot = 4 + (nAddr >> 1); // Slot4 or Slot5
|
||||
if (GetCardMgr().GetMockingboardCardMgr().IsMockingboard(slot))
|
||||
dynamic_cast<MockingboardCard&>(GetCardMgr().GetRef(slot)).GetSnapshot_v1(&SS_MB);
|
||||
else // No MB in this slot
|
||||
SS_MB.Hdr.UnitHdr.hdr.v2.Type = UT_Reserved;
|
||||
{
|
||||
dynamic_cast<MockingboardCard&>(GetCardMgr().GetRef(slot)).GetSnapshotForDebugger(&MB);
|
||||
isMockingboardInSlot = true;
|
||||
for (int i = 0; i < NUM_SUBUNITS_PER_MB; i++)
|
||||
{
|
||||
for (int j = 0; j < NUM_AY8913_PER_SUBUNIT; j++)
|
||||
{
|
||||
if (!MB.subUnit[i].isAYLatchedAddressValid[j])
|
||||
MB.subUnit[i].nAYCurrentRegister[j] = 0xff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RECT rect = { 0 };
|
||||
@ -1984,7 +1994,7 @@ void DrawMemory ( int line, int iMemDump )
|
||||
// sData = StrFormat("Mem at SY#%d", nAddr);
|
||||
sAddress = StrFormat( "SY#%d", nAddr );
|
||||
}
|
||||
else if (eDevice == DEV_AY8910)
|
||||
else if (eDevice == DEV_AY8913)
|
||||
{
|
||||
// sData = StrFormat("Mem at AY#%d", nAddr);
|
||||
sAddress = StrFormat( "AY#%d", nAddr );
|
||||
@ -2027,7 +2037,7 @@ void DrawMemory ( int line, int iMemDump )
|
||||
nCols = MAX_MEM_VIEW_TXT;
|
||||
}
|
||||
|
||||
if (eDevice == DEV_SY6522 || eDevice == DEV_AY8910)
|
||||
if (eDevice == DEV_SY6522 || eDevice == DEV_AY8913)
|
||||
{
|
||||
iAddress = 0;
|
||||
nCols = 4;
|
||||
@ -2065,16 +2075,16 @@ void DrawMemory ( int line, int iMemDump )
|
||||
// else
|
||||
if (eDevice == DEV_SY6522)
|
||||
{
|
||||
if (SS_MB.Hdr.UnitHdr.hdr.v2.Type == UT_Card)
|
||||
if (isMockingboardInSlot)
|
||||
{
|
||||
sText = StrFormat("%02X ", (unsigned)((BYTE*)&SS_MB.Unit[nAddr & 1].RegsSY6522)[iAddress]);
|
||||
if (SS_MB.Unit[nAddr & 1].bTimer1Active && (iAddress == 4 || iAddress == 5)) // T1C
|
||||
sText = StrFormat("%02X ", MB.subUnit[nAddr & 1].regsSY6522[iAddress]);
|
||||
if (MB.subUnit[nAddr & 1].timer1Active && (iAddress == 4 || iAddress == 5)) // T1C
|
||||
{
|
||||
DebuggerSetColorFG(DebuggerGetColor(FG_INFO_TITLE)); // if timer1 active then draw in white
|
||||
DebuggerSetColorFG(DebuggerGetColor(FG_INFO_TITLE)); // if timer1 active then draw in white
|
||||
}
|
||||
else if (SS_MB.Unit[nAddr & 1].bTimer2Active && (iAddress == 8 || iAddress == 9)) // T2C
|
||||
else if (MB.subUnit[nAddr & 1].timer2Active && (iAddress == 8 || iAddress == 9)) // T2C
|
||||
{
|
||||
DebuggerSetColorFG(DebuggerGetColor(FG_INFO_TITLE)); // if timer2 active then draw in white
|
||||
DebuggerSetColorFG(DebuggerGetColor(FG_INFO_TITLE)); // if timer2 active then draw in white
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2090,17 +2100,17 @@ void DrawMemory ( int line, int iMemDump )
|
||||
}
|
||||
}
|
||||
else
|
||||
if (eDevice == DEV_AY8910)
|
||||
if (eDevice == DEV_AY8913)
|
||||
{
|
||||
if (SS_MB.Hdr.UnitHdr.hdr.v2.Type == UT_Card)
|
||||
if (isMockingboardInSlot)
|
||||
{
|
||||
if (iAddress <= 13)
|
||||
sText = StrFormat("%02X ", (unsigned)SS_MB.Unit[nAddr & 1].RegsAY8910[iAddress]);
|
||||
sText = StrFormat("%02X ", MB.subUnit[nAddr & 1].regsAY8913[0][iAddress]); // TODO: Support AY2
|
||||
else
|
||||
sText = "-- "; // regs 14 & 15 aren't supported by AY-3-8913
|
||||
if (SS_MB.Unit[nAddr & 1].nAYCurrentRegister == iAddress)
|
||||
if (MB.subUnit[nAddr & 1].nAYCurrentRegister[0] == iAddress)
|
||||
{
|
||||
DebuggerSetColorFG(DebuggerGetColor(FG_INFO_TITLE)); // if latched address then draw in white
|
||||
DebuggerSetColorFG(DebuggerGetColor(FG_INFO_TITLE)); // if latched address then draw in white
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1175,7 +1175,7 @@ const DisasmData_t* pDisasmData; // If != NULL then bytes are marked up as data
|
||||
DEV_MEMORY,
|
||||
DEV_DISK2 ,
|
||||
DEV_SY6522,
|
||||
DEV_AY8910,
|
||||
DEV_AY8913,
|
||||
NUM_DEVICES
|
||||
};
|
||||
|
||||
|
@ -973,38 +973,24 @@ void MockingboardCard::SetVolume(DWORD volume, DWORD volumeMax)
|
||||
|
||||
//===========================================================================
|
||||
|
||||
#include "SaveState_Structs_v1.h"
|
||||
|
||||
// Called by debugger - Debugger_Display.cpp
|
||||
void MockingboardCard::GetSnapshot_v1(SS_CARD_MOCKINGBOARD_v1* const pSS)
|
||||
void MockingboardCard::GetSnapshotForDebugger(DEBUGGER_MB_CARD* const pMBForDebugger)
|
||||
{
|
||||
pSS->Hdr.UnitHdr.hdr.v2.Length = sizeof(SS_CARD_MOCKINGBOARD_v1);
|
||||
pSS->Hdr.UnitHdr.hdr.v2.Type = UT_Card;
|
||||
pSS->Hdr.UnitHdr.hdr.v2.Version = 1;
|
||||
|
||||
pSS->Hdr.Slot = m_slot;
|
||||
pSS->Hdr.Type = CT_MockingboardC;
|
||||
|
||||
MB_SUBUNIT* pMB = &m_MBSubUnit[0];
|
||||
|
||||
for (UINT i=0; i<MB_UNITS_PER_CARD_v1; i++)
|
||||
for (UINT i = 0; i < NUM_SUBUNITS_PER_MB; i++)
|
||||
{
|
||||
// 6522
|
||||
pMB->sy6522.GetRegs((BYTE*)&pSS->Unit[i].RegsSY6522); // continuous 16-byte array
|
||||
MB_SUBUNIT* pMB = &m_MBSubUnit[i];
|
||||
|
||||
// AY8913
|
||||
for (UINT j=0; j<16; j++)
|
||||
pMB->sy6522.GetRegs(pMBForDebugger->subUnit[i].regsSY6522); // continuous 16-byte array
|
||||
pMBForDebugger->subUnit[i].timer1Active = pMB->sy6522.IsTimer1Active();
|
||||
pMBForDebugger->subUnit[i].timer2Active = pMB->sy6522.IsTimer2Active();
|
||||
|
||||
for (UINT j = 0; j < NUM_AY8913_PER_SUBUNIT; j++)
|
||||
{
|
||||
pSS->Unit[i].RegsAY8910[j] = AYReadReg(i, 0, j); // FIXME: also support Phasor's 2nd AY8913
|
||||
for (UINT k = 0; k < 16; k++)
|
||||
pMBForDebugger->subUnit[i].regsAY8913[j][k] = AYReadReg(i, j, k);
|
||||
|
||||
pMBForDebugger->subUnit[i].nAYCurrentRegister[j] = pMB->nAYCurrentRegister[j];
|
||||
pMBForDebugger->subUnit[i].isAYLatchedAddressValid[j] = pMB->isAYLatchedAddressValid[j];
|
||||
}
|
||||
|
||||
memset(&pSS->Unit[i].RegsSSI263, 0, sizeof(SSI263A)); // Not used by debugger
|
||||
pSS->Unit[i].nAYCurrentRegister = pMB->isAYLatchedAddressValid[0] ? pMB->nAYCurrentRegister[0] : 0xff;
|
||||
pSS->Unit[i].bTimer1Active = pMB->sy6522.IsTimer1Active();
|
||||
pSS->Unit[i].bTimer2Active = pMB->sy6522.IsTimer2Active();
|
||||
pSS->Unit[i].bSpeechIrqPending = false;
|
||||
|
||||
pMB++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,20 @@ public:
|
||||
BYTE GetPCR(BYTE nDevice);
|
||||
bool IsAnyTimer1Active(void);
|
||||
|
||||
void GetSnapshot_v1(struct SS_CARD_MOCKINGBOARD_v1* const pSS);
|
||||
struct DEBUGGER_MB_SUBUNIT
|
||||
{
|
||||
BYTE regsSY6522[SY6522::SIZE_6522_REGS];
|
||||
bool timer1Active;
|
||||
bool timer2Active;
|
||||
BYTE regsAY8913[NUM_AY8913_PER_SUBUNIT][16];
|
||||
BYTE nAYCurrentRegister[NUM_AY8913_PER_SUBUNIT];
|
||||
bool isAYLatchedAddressValid[NUM_AY8913_PER_SUBUNIT];
|
||||
};
|
||||
struct DEBUGGER_MB_CARD
|
||||
{
|
||||
DEBUGGER_MB_SUBUNIT subUnit[NUM_SUBUNITS_PER_MB];
|
||||
};
|
||||
void GetSnapshotForDebugger(DEBUGGER_MB_CARD* const pMBForDebugger);
|
||||
|
||||
static std::string GetSnapshotCardName(void);
|
||||
static std::string GetSnapshotCardNamePhasor(void);
|
||||
@ -60,13 +73,13 @@ private:
|
||||
struct MB_SUBUNIT
|
||||
{
|
||||
SY6522 sy6522;
|
||||
AY8913 ay8913[2]; // Phasor has 2x AY per 6522
|
||||
AY8913 ay8913[NUM_AY8913_PER_SUBUNIT]; // Phasor has 2x AY per 6522
|
||||
SSI263 ssi263;
|
||||
BYTE nAY8910Number;
|
||||
BYTE nAYCurrentRegister[2];
|
||||
MockingboardUnitState_e state[2]; // AY's PSG function
|
||||
bool isAYLatchedAddressValid[2];
|
||||
bool isChipSelected[2];
|
||||
BYTE nAYCurrentRegister[NUM_AY8913_PER_SUBUNIT];
|
||||
MockingboardUnitState_e state[NUM_AY8913_PER_SUBUNIT]; // AY's PSG function
|
||||
bool isAYLatchedAddressValid[NUM_AY8913_PER_SUBUNIT];
|
||||
bool isChipSelected[NUM_AY8913_PER_SUBUNIT];
|
||||
|
||||
MB_SUBUNIT(UINT slot) : sy6522(slot), ssi263(slot)
|
||||
{
|
||||
|
@ -1,102 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// Structs used by save-state file
|
||||
|
||||
// *** DON'T CHANGE ANY STRUCT WITHOUT CONSIDERING BACKWARDS COMPATIBILITY WITH .AWS FORMAT ***
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define MAKE_VERSION(a,b,c,d) ((a<<24) | (b<<16) | (c<<8) | (d))
|
||||
|
||||
#define AW_SS_TAG 'SSWA' // 'AWSS' = AppleWin SnapShot
|
||||
|
||||
struct SS_FILE_HDR
|
||||
{
|
||||
DWORD dwTag; // "AWSS"
|
||||
DWORD dwVersion;
|
||||
DWORD dwChecksum;
|
||||
};
|
||||
|
||||
struct SS_UNIT_HDR
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
DWORD dwLength; // Byte length of this unit struct
|
||||
DWORD dwVersion;
|
||||
} v1;
|
||||
struct
|
||||
{
|
||||
DWORD Length; // Byte length of this unit struct
|
||||
WORD Type; // SS_UNIT_TYPE
|
||||
WORD Version; // Incrementing value from 1
|
||||
} v2;
|
||||
} hdr;
|
||||
};
|
||||
|
||||
enum SS_UNIT_TYPE
|
||||
{
|
||||
UT_Reserved = 0,
|
||||
UT_Apple2,
|
||||
UT_Card,
|
||||
UT_Config,
|
||||
};
|
||||
|
||||
const UINT nMemMainSize = 64*1024;
|
||||
const UINT nMemAuxSize = 64*1024;
|
||||
|
||||
struct SS_CARD_HDR
|
||||
{
|
||||
SS_UNIT_HDR UnitHdr;
|
||||
DWORD Type; // SS_CARDTYPE
|
||||
DWORD Slot; // [1..7], 0=Language card, 8=Aux
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct SS_CARD_EMPTY
|
||||
{
|
||||
SS_CARD_HDR Hdr;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct SY6522A
|
||||
{
|
||||
BYTE ORB; // $00 - Port B
|
||||
BYTE ORA; // $01 - Port A (with handshaking)
|
||||
BYTE DDRB; // $02 - Data Direction Register B
|
||||
BYTE DDRA; // $03 - Data Direction Register A
|
||||
//
|
||||
// $04 - Read counter (L) / Write latch (L)
|
||||
// $05 - Read / Write & initiate count (H)
|
||||
// $06 - Read / Write & latch (L)
|
||||
// $07 - Read / Write & latch (H)
|
||||
// $08 - Read counter (L) / Write latch (L)
|
||||
// $09 - Read counter (H) / Write latch (H)
|
||||
USHORT TIMER1_COUNTER;
|
||||
USHORT TIMER1_LATCH;
|
||||
USHORT TIMER2_COUNTER;
|
||||
USHORT TIMER2_LATCH;
|
||||
int timer1IrqDelay;
|
||||
int timer2IrqDelay;
|
||||
//
|
||||
BYTE SERIAL_SHIFT; // $0A
|
||||
BYTE ACR; // $0B - Auxiliary Control Register
|
||||
BYTE PCR; // $0C - Peripheral Control Register
|
||||
BYTE IFR; // $0D - Interrupt Flag Register
|
||||
BYTE IER; // $0E - Interrupt Enable Register
|
||||
BYTE ORA_NO_HS; // $0F - Port A (without handshaking)
|
||||
};
|
||||
|
||||
struct SSI263A
|
||||
{
|
||||
BYTE DurationPhoneme;
|
||||
BYTE Inflection; // I10..I3
|
||||
BYTE RateInflection;
|
||||
BYTE CtrlArtAmp;
|
||||
BYTE FilterFreq;
|
||||
//
|
||||
BYTE CurrentMode; // b7:6=Mode; b0=D7 pin (for IRQ)
|
||||
};
|
@ -1,147 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "DiskDefs.h"
|
||||
#include "SaveState_Structs_common.h"
|
||||
|
||||
// Structs used by save-state file v1
|
||||
|
||||
// *** DON'T CHANGE ANY STRUCT WITHOUT CONSIDERING BACKWARDS COMPATIBILITY WITH .AWS FORMAT ***
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct SS_CPU6502
|
||||
{
|
||||
BYTE A;
|
||||
BYTE X;
|
||||
BYTE Y;
|
||||
BYTE P;
|
||||
BYTE S;
|
||||
USHORT PC;
|
||||
unsigned __int64 nCumulativeCycles;
|
||||
// IRQ = OR-sum of all interrupt sources
|
||||
};
|
||||
|
||||
const UINT uRecvBufferSize = 9;
|
||||
|
||||
struct SS_IO_Comms
|
||||
{
|
||||
DWORD baudrate;
|
||||
BYTE bytesize;
|
||||
BYTE commandbyte;
|
||||
DWORD comminactivity; // If non-zero then COM port open
|
||||
BYTE controlbyte;
|
||||
BYTE parity;
|
||||
BYTE recvbuffer[uRecvBufferSize];
|
||||
DWORD recvbytes;
|
||||
BYTE stopbits;
|
||||
};
|
||||
|
||||
struct SS_IO_Joystick
|
||||
{
|
||||
unsigned __int64 nJoyCntrResetCycle;
|
||||
};
|
||||
|
||||
struct SS_IO_Keyboard
|
||||
{
|
||||
DWORD keyboardqueries;
|
||||
BYTE nLastKey;
|
||||
};
|
||||
|
||||
struct SS_IO_Speaker
|
||||
{
|
||||
unsigned __int64 nSpkrLastCycle;
|
||||
};
|
||||
|
||||
struct SS_IO_Video
|
||||
{
|
||||
bool bAltCharSet; // charoffs
|
||||
DWORD dwVidMode;
|
||||
};
|
||||
|
||||
struct SS_BaseMemory
|
||||
{
|
||||
DWORD dwMemMode;
|
||||
BOOL bLastWriteRam;
|
||||
BYTE nMemMain[nMemMainSize];
|
||||
BYTE nMemAux[nMemAuxSize];
|
||||
};
|
||||
|
||||
struct SS_APPLE2_Unit
|
||||
{
|
||||
SS_UNIT_HDR UnitHdr;
|
||||
SS_CPU6502 CPU6502;
|
||||
SS_IO_Comms Comms;
|
||||
SS_IO_Joystick Joystick;
|
||||
SS_IO_Keyboard Keyboard;
|
||||
SS_IO_Speaker Speaker;
|
||||
SS_IO_Video Video;
|
||||
SS_BaseMemory Memory;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct DISK2_Unit
|
||||
{
|
||||
char szFileName[MAX_PATH];
|
||||
int track;
|
||||
int phase;
|
||||
int byte;
|
||||
BOOL writeprotected;
|
||||
BOOL trackimagedata;
|
||||
BOOL trackimagedirty;
|
||||
DWORD spinning;
|
||||
DWORD writelight;
|
||||
int nibbles;
|
||||
BYTE nTrack[NIBBLES_PER_TRACK_NIB];
|
||||
};
|
||||
|
||||
struct SS_CARD_DISK2
|
||||
{
|
||||
SS_CARD_HDR Hdr;
|
||||
DISK2_Unit Unit[2];
|
||||
WORD phases;
|
||||
WORD currdrive;
|
||||
BOOL diskaccessed;
|
||||
BOOL enhancedisk;
|
||||
BYTE floppylatch;
|
||||
BOOL floppymotoron;
|
||||
BOOL floppywritemode;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct MB_Unit_v1
|
||||
{
|
||||
SY6522A RegsSY6522;
|
||||
BYTE RegsAY8910[16];
|
||||
SSI263A RegsSSI263;
|
||||
BYTE nAYCurrentRegister;
|
||||
bool bTimer1Active;
|
||||
bool bTimer2Active;
|
||||
bool bSpeechIrqPending;
|
||||
};
|
||||
|
||||
const UINT MB_UNITS_PER_CARD_v1 = 2;
|
||||
|
||||
struct SS_CARD_MOCKINGBOARD_v1
|
||||
{
|
||||
SS_CARD_HDR Hdr;
|
||||
MB_Unit_v1 Unit[MB_UNITS_PER_CARD_v1];
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct APPLEWIN_SNAPSHOT_v1
|
||||
{
|
||||
SS_FILE_HDR Hdr;
|
||||
SS_APPLE2_Unit Apple2Unit;
|
||||
SS_CARD_EMPTY Empty1; // Slot1
|
||||
SS_CARD_EMPTY Empty2; // Slot2
|
||||
SS_CARD_EMPTY Empty3; // Slot3
|
||||
SS_CARD_MOCKINGBOARD_v1 Mockingboard1; // Slot4
|
||||
SS_CARD_MOCKINGBOARD_v1 Mockingboard2; // Slot5
|
||||
SS_CARD_DISK2 Disk2; // Slot6
|
||||
SS_CARD_EMPTY Empty7; // Slot7
|
||||
};
|
||||
|
||||
const UINT kSnapshotSize_v1 = 145400; // Const size for v1
|
Loading…
x
Reference in New Issue
Block a user