git @ Cat's Eye Technologies linapple / master inc / Structs.h
master

Tree @master (Download .tar.gz)

Structs.h @masterraw · history · blame

// 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 (('S'<<24)|('S'<<16)|('W'<<8)|'A')  // 'AWSS' = AppleWin SnapShot

typedef struct
{
  DWORD dwTag;    // "AWSS"
  DWORD dwVersion;
  DWORD dwChecksum;
} SS_FILE_HDR;

typedef struct
{
  DWORD dwLength;    // Byte length of this unit struct
  DWORD dwVersion;
} SS_UNIT_HDR;

/////////////////////////////////////////////////////////////////////////////////

const UINT nMemMainSize = 64*1024;
const UINT nMemAuxSize = 64*1024;

typedef struct
{
  BYTE A;
  BYTE X;
  BYTE Y;
  BYTE P;
  BYTE S;
  USHORT PC;
  unsigned __int64 g_nCumulativeCycles;
  // IRQ = OR-sum of all interrupt sources
} SS_CPU6502;

const UINT uRecvBufferSize = 9;

typedef struct
{
  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;
} SS_IO_Comms;

typedef struct
{
  unsigned __int64 g_nJoyCntrResetCycle;
} SS_IO_Joystick;

typedef struct
{
  DWORD keyboardqueries;
  BYTE nLastKey;
} SS_IO_Keyboard;

//typedef struct
//{
//} SS_IO_Memory;

typedef struct
{
  unsigned __int64 g_nSpkrLastCycle;
} SS_IO_Speaker;

typedef struct
{
  bool bAltCharSet;  // charoffs
  DWORD dwVidMode;
} SS_IO_Video;

typedef struct
{
  DWORD dwMemMode;
  BOOL bLastWriteRam;
  BYTE nMemMain[nMemMainSize];
  BYTE nMemAux[nMemAuxSize];
} SS_BaseMemory;

typedef struct
{
  SS_UNIT_HDR UnitHdr;
  SS_CPU6502 CPU6502;
  SS_IO_Comms Comms;
  SS_IO_Joystick Joystick;
  SS_IO_Keyboard Keyboard;
//  SS_IO_Memory Memory;
  SS_IO_Speaker Speaker;
  SS_IO_Video Video;
  SS_BaseMemory Memory;
} SS_APPLE2_Unit;

/////////////////////////////////////////////////////////////////////////////////

typedef struct
{
  DWORD dwComputerEmulation;
  bool bCustomSpeed;
  DWORD dwEmulationSpeed;
  bool bEnhancedDiskSpeed;
  DWORD dwJoystickType[2];
  bool bMockingboardEnabled;
  DWORD dwMonochromeColor;
  DWORD dwSerialPort;
  DWORD dwSoundType;  // Sound Emulation
  DWORD dwVideoType;  // Video Emulation
} SS_AW_CFG;

typedef struct
{
  char StartingDir[MAX_PATH];
  DWORD dwWindowXpos;
  DWORD dwWindowYpos;
} SS_AW_PREFS;

typedef struct
{
  SS_UNIT_HDR UnitHdr;
  DWORD dwAppleWinVersion;
  SS_AW_PREFS Prefs;
  SS_AW_CFG Cfg;
} SS_APPLEWIN_CONFIG;

/////////////////////////////////////////////////////////////////////////////////

typedef struct
{
  SS_UNIT_HDR UnitHdr;
  DWORD dwType;    // SS_CARDTYPE
  DWORD dwSlot;    // [1..7]
} SS_CARD_HDR;

enum SS_CARDTYPE
{
  CT_Empty = 0,
  CT_Disk2,      // Apple Disk][
  CT_SSC,        // Apple Super Serial Card
  CT_Mockingboard,
  CT_GenericPrinter,
  CT_GenericHDD,    // Hard disk
  CT_GenericClock,
  CT_MouseInterface,
};

/////////////////////////////////////////////////////////////////////////////////

typedef struct
{
  SS_CARD_HDR  Hdr;
} SS_CARD_EMPTY;

/////////////////////////////////////////////////////////////////////////////////

const UINT NIBBLES_PER_TRACK = 0x1A00;

typedef struct
{
  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];
} DISK2_Unit;

typedef struct
{
  SS_CARD_HDR  Hdr;
  DISK2_Unit  Unit[2];
      WORD    phases;
  WORD  currdrive;
  BOOL  diskaccessed;
  BOOL  enhancedisk;
  BYTE  floppylatch;
  BOOL  floppymotoron;
  BOOL  floppywritemode;
} SS_CARD_DISK2;

/////////////////////////////////////////////////////////////////////////////////

typedef struct
{
  union
  {
    struct
    {
      BYTE l;
      BYTE h;
    };
    USHORT w;
  };
} IWORD;

typedef struct
{
  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)
} SY6522;

typedef struct
{
  BYTE DurationPhonome;
  BYTE Inflection;    // I10..I3
  BYTE RateInflection;
  BYTE CtrlArtAmp;
  BYTE FilterFreq;
  //
  BYTE CurrentMode;    // b7:6=Mode; b0=D7 pin (for IRQ)
} SSI263A;

typedef struct
{
  SY6522    RegsSY6522;
  BYTE    RegsAY8910[16];
  SSI263A    RegsSSI263;
  BYTE    nAYCurrentRegister;
  bool    bTimer1IrqPending;
  bool    bTimer2IrqPending;
  bool    bSpeechIrqPending;
} MB_Unit;

const UINT MB_UNITS_PER_CARD = 2;

typedef struct
{
  SS_CARD_HDR  Hdr;
  MB_Unit    Unit[MB_UNITS_PER_CARD];
} SS_CARD_MOCKINGBOARD;

/////////////////////////////////////////////////////////////////////////////////

typedef struct
{
  SS_FILE_HDR Hdr;
  SS_APPLE2_Unit Apple2Unit;
//  SS_APPLEWIN_CONFIG AppleWinCfg;
  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
} APPLEWIN_SNAPSHOT;

/////////////////////////////////////////////////////////////////////////////////