AppleWin/source/SaveState_Structs_v1.h

198 lines
3.8 KiB
C
Raw Normal View History

2009-02-16 19:19:03 +00:00
#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 ***
2006-02-25 20:50:29 +00:00
/////////////////////////////////////////////////////////////////////////////////
struct SS_CPU6502
2006-02-25 20:50:29 +00:00
{
BYTE A;
BYTE X;
BYTE Y;
BYTE P;
BYTE S;
USHORT PC;
unsigned __int64 nCumulativeCycles;
2006-02-25 20:50:29 +00:00
// IRQ = OR-sum of all interrupt sources
};
2006-02-25 20:50:29 +00:00
const UINT uRecvBufferSize = 9;
struct SS_IO_Comms
2006-02-25 20:50:29 +00:00
{
DWORD baudrate;
BYTE bytesize;
BYTE commandbyte;
DWORD comminactivity; // If non-zero then COM port open
BYTE controlbyte;
BYTE parity;
BYTE recvbuffer[uRecvBufferSize];
2006-02-25 20:50:29 +00:00
DWORD recvbytes;
BYTE stopbits;
};
2006-02-25 20:50:29 +00:00
struct SS_IO_Joystick
2006-02-25 20:50:29 +00:00
{
unsigned __int64 nJoyCntrResetCycle;
};
2006-02-25 20:50:29 +00:00
struct SS_IO_Keyboard
2006-02-25 20:50:29 +00:00
{
DWORD keyboardqueries;
BYTE nLastKey;
};
2006-02-25 20:50:29 +00:00
struct SS_IO_Speaker
2006-02-25 20:50:29 +00:00
{
unsigned __int64 nSpkrLastCycle;
};
2006-02-25 20:50:29 +00:00
struct SS_IO_Video
2006-02-25 20:50:29 +00:00
{
bool bAltCharSet; // charoffs
DWORD dwVidMode;
};
2006-02-25 20:50:29 +00:00
struct SS_BaseMemory
2006-02-25 20:50:29 +00:00
{
DWORD dwMemMode;
BOOL bLastWriteRam;
BYTE nMemMain[nMemMainSize];
BYTE nMemAux[nMemAuxSize];
};
2006-02-25 20:50:29 +00:00
struct SS_APPLE2_Unit
2006-02-25 20:50:29 +00:00
{
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
2006-02-25 20:50:29 +00:00
{
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];
};
2006-02-25 20:50:29 +00:00
struct SS_CARD_DISK2
2006-02-25 20:50:29 +00:00
{
SS_CARD_HDR Hdr;
DISK2_Unit Unit[2];
WORD phases;
WORD currdrive;
2006-02-25 20:50:29 +00:00
BOOL diskaccessed;
BOOL enhancedisk;
BYTE floppylatch;
BOOL floppymotoron;
BOOL floppywritemode;
};
2006-02-25 20:50:29 +00:00
/////////////////////////////////////////////////////////////////////////////////
struct IWORD
2006-02-25 20:50:29 +00:00
{
union
{
struct
{
BYTE l;
BYTE h;
};
USHORT w;
};
};
2006-02-25 20:50:29 +00:00
struct SY6522
2006-02-25 20:50:29 +00:00
{
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)
IWORD TIMER1_COUNTER;
IWORD TIMER1_LATCH;
IWORD TIMER2_COUNTER;
IWORD TIMER2_LATCH;
//
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)
};
2006-02-25 20:50:29 +00:00
struct SSI263A
2006-02-25 20:50:29 +00:00
{
BYTE DurationPhonome;
BYTE Inflection; // I10..I3
BYTE RateInflection;
BYTE CtrlArtAmp;
BYTE FilterFreq;
//
BYTE CurrentMode; // b7:6=Mode; b0=D7 pin (for IRQ)
};
2006-02-25 20:50:29 +00:00
struct MB_Unit
2006-02-25 20:50:29 +00:00
{
SY6522 RegsSY6522;
BYTE RegsAY8910[16];
SSI263A RegsSSI263;
BYTE nAYCurrentRegister;
bool bTimer1IrqPending;
bool bTimer2IrqPending;
bool bSpeechIrqPending;
};
2006-02-25 20:50:29 +00:00
const UINT MB_UNITS_PER_CARD = 2;
struct SS_CARD_MOCKINGBOARD
2006-02-25 20:50:29 +00:00
{
SS_CARD_HDR Hdr;
MB_Unit Unit[MB_UNITS_PER_CARD];
};
2006-02-25 20:50:29 +00:00
/////////////////////////////////////////////////////////////////////////////////
struct APPLEWIN_SNAPSHOT_v1
2006-02-25 20:50:29 +00:00
{
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 Mockingboard1; // Slot4
SS_CARD_MOCKINGBOARD Mockingboard2; // Slot5
SS_CARD_DISK2 Disk2; // Slot6
SS_CARD_EMPTY Empty7; // Slot7
};
2006-02-25 20:50:29 +00:00
const UINT kSnapshotSize_v1 = 145400; // Const size for v1