mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-09-28 00:54:40 +00:00
717c5cba84
. Format now extensible for supporting new hardware types in the future . Include missing items like Apple2Type, CyclesThisVideoFrame (#255) Continue to support loading of old v1 format. Added card save/load for: . Mouse (#260) . HDD (#260) . Printer Extended card support for: . SSC Other: . Added save-state v1 struct size checks . Create SaveState_Structs_v2.h and split out common into SaveState_Structs_common.h . Refactor HardDisk.cpp to use imagehandle; and consolidate with Disk.cpp . Fix Disk/HD_GetFullPathName() which wasn't always returning full pathname . Consolidate common GetImageTitle() and move into DiskImage.cpp
198 lines
3.8 KiB
C
198 lines
3.8 KiB
C
#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];
|
|
};
|
|
|
|
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 IWORD
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
BYTE l;
|
|
BYTE h;
|
|
};
|
|
USHORT w;
|
|
};
|
|
};
|
|
|
|
struct SY6522
|
|
{
|
|
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)
|
|
};
|
|
|
|
struct SSI263A
|
|
{
|
|
BYTE DurationPhonome;
|
|
BYTE Inflection; // I10..I3
|
|
BYTE RateInflection;
|
|
BYTE CtrlArtAmp;
|
|
BYTE FilterFreq;
|
|
//
|
|
BYTE CurrentMode; // b7:6=Mode; b0=D7 pin (for IRQ)
|
|
};
|
|
|
|
struct MB_Unit
|
|
{
|
|
SY6522 RegsSY6522;
|
|
BYTE RegsAY8910[16];
|
|
SSI263A RegsSSI263;
|
|
BYTE nAYCurrentRegister;
|
|
bool bTimer1IrqPending;
|
|
bool bTimer2IrqPending;
|
|
bool bSpeechIrqPending;
|
|
};
|
|
|
|
const UINT MB_UNITS_PER_CARD = 2;
|
|
|
|
struct SS_CARD_MOCKINGBOARD
|
|
{
|
|
SS_CARD_HDR Hdr;
|
|
MB_Unit Unit[MB_UNITS_PER_CARD];
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
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 Mockingboard1; // Slot4
|
|
SS_CARD_MOCKINGBOARD Mockingboard2; // Slot5
|
|
SS_CARD_DISK2 Disk2; // Slot6
|
|
SS_CARD_EMPTY Empty7; // Slot7
|
|
};
|
|
|
|
const UINT kSnapshotSize_v1 = 145400; // Const size for v1
|