+static struct {
+ // unused members maintain savesate compatibility
+ unsigned char unused0;
+ unsigned char unused1;
+ unsigned char IrqMask;
+ unsigned char unused2;
+ unsigned char Ctrl;
+ unsigned char IrqStat;
+
+ unsigned char StatP;
+
+ unsigned char Transfer[DATA_SIZE];
+ struct {
+ unsigned char Track;
+ unsigned char Index;
+ unsigned char Relative[3];
+ unsigned char Absolute[3];
+ } subq;
+ unsigned char TrackChanged;
+ unsigned char ReportDelay;
+ unsigned char PhysCdPropagations;
+ unsigned short sectorsRead;
+ unsigned int freeze_ver;
+
+ unsigned char Prev[4];
+ unsigned char Param[8];
+ unsigned char Result[16];
+
+ unsigned char ParamC;
+ unsigned char ParamP;
+ unsigned char ResultC;
+ unsigned char ResultP;
+ unsigned char ResultReady;
+ unsigned char Cmd;
+ unsigned char SubqForwardSectors;
+ unsigned char SetlocPending;
+ u32 Reading;
+
+ unsigned char ResultTN[6];
+ unsigned char ResultTD[4];
+ unsigned char SetSectorPlay[4];
+ unsigned char SetSectorEnd[4];
+ unsigned char SetSector[4];
+ unsigned char Track;
+ boolean Play, Muted;
+ int CurTrack;
+ unsigned char Mode;
+ unsigned char FileChannelSelected;
+ unsigned char CurFile, CurChannel;
+ int FilterFile, FilterChannel;
+ unsigned char LocL[8];
+ int unused4;
+
+ xa_decode_t Xa;
+
+ u16 FifoOffset;
+ u16 FifoSize;
+
+ u16 CmdInProgress;
+ u8 Irq1Pending;
+ u8 AdpcmActive;
+ u32 LastReadSeekCycles;
+
+ u8 unused7;
+
+ u8 DriveState; // enum drive_state
+ u8 FastForward;
+ u8 FastBackward;
+ u8 errorRetryhack;
+
+ u8 AttenuatorLeftToLeft, AttenuatorLeftToRight;
+ u8 AttenuatorRightToRight, AttenuatorRightToLeft;
+ u8 AttenuatorLeftToLeftT, AttenuatorLeftToRightT;
+ u8 AttenuatorRightToRightT, AttenuatorRightToLeftT;
+} cdr;
+static s16 read_buf[CD_FRAMESIZE_RAW/2];