summaryrefslogtreecommitdiff
path: root/src/snaporig.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/snaporig.h')
-rw-r--r--src/snaporig.h484
1 files changed, 252 insertions, 232 deletions
diff --git a/src/snaporig.h b/src/snaporig.h
index b83a71f..13f1556 100644
--- a/src/snaporig.h
+++ b/src/snaporig.h
@@ -4,7 +4,7 @@
* (c) Copyright 1996 - 2001 Gary Henderson (gary.henderson@ntlworld.com) and
* Jerremy Koot (jkoot@snes9x.com)
*
- * Super FX C emulator code
+ * Super FX C emulator code
* (c) Copyright 1997 - 1999 Ivar (ivar@snes9x.com) and
* Gary Henderson.
* Super FX assembler emulator code (c) Copyright 1998 zsKnight and _Demo_.
@@ -44,287 +44,307 @@
#define ORIG_SNAPSHOT_MAGIC "#!snes96"
#define ORIG_SNAPSHOT_VERSION 4
-EXTERN_C bool8_32 S9xLoadOrigSnapshot (const char *filename);
+EXTERN_C bool8_32 S9xLoadOrigSnapshot(const char* filename);
-struct SOrigCPUState{
- uint32 Flags;
- short Cycles_old;
- short NextEvent_old;
- uint8 CurrentFrame;
- uint8 FastROMSpeed_old_old;
- uint16 V_Counter_old;
- bool8_32 BranchSkip;
- bool8_32 NMIActive;
- bool8_32 IRQActive;
- bool8_32 WaitingForInterrupt;
- bool8_32 InDMA;
- uint8 WhichEvent;
- uint8 *PC;
- uint8 *PCBase;
- uint16 MemSpeed_old;
- uint16 MemSpeedx2_old;
- uint16 FastROMSpeed_old;
- bool8_32 FastDP;
- uint8 *PCAtOpcodeStart;
- uint8 *WaitAddress;
- uint32 WaitCounter;
- long Cycles;
- long NextEvent;
- long V_Counter;
- long MemSpeed;
- long MemSpeedx2;
- long FastROMSpeed;
+struct SOrigCPUState
+{
+ uint32 Flags;
+ short Cycles_old;
+ short NextEvent_old;
+ uint8 CurrentFrame;
+ uint8 FastROMSpeed_old_old;
+ uint16 V_Counter_old;
+ bool8_32 BranchSkip;
+ bool8_32 NMIActive;
+ bool8_32 IRQActive;
+ bool8_32 WaitingForInterrupt;
+ bool8_32 InDMA;
+ uint8 WhichEvent;
+ uint8* PC;
+ uint8* PCBase;
+ uint16 MemSpeed_old;
+ uint16 MemSpeedx2_old;
+ uint16 FastROMSpeed_old;
+ bool8_32 FastDP;
+ uint8* PCAtOpcodeStart;
+ uint8* WaitAddress;
+ uint32 WaitCounter;
+ long Cycles;
+ long NextEvent;
+ long V_Counter;
+ long MemSpeed;
+ long MemSpeedx2;
+ long FastROMSpeed;
};
struct SOrigAPU
{
- uint32 Cycles;
- bool8_32 ShowROM;
- uint8 Flags;
- uint8 KeyedChannels;
- uint8 OutPorts [4];
- uint8 DSP [0x80];
- uint8 ExtraRAM [64];
- uint16 Timer [3];
- uint16 TimerTarget [3];
- bool8_32 TimerEnabled [3];
- bool8_32 TimerValueWritten [3];
+ uint32 Cycles;
+ bool8_32 ShowROM;
+ uint8 Flags;
+ uint8 KeyedChannels;
+ uint8 OutPorts [4];
+ uint8 DSP [0x80];
+ uint8 ExtraRAM [64];
+ uint16 Timer [3];
+ uint16 TimerTarget [3];
+ bool8_32 TimerEnabled [3];
+ bool8_32 TimerValueWritten [3];
};
typedef union
{
#ifdef LSB_FIRST
- struct { uint8 A, Y; } B;
+ struct
+ {
+ uint8 A, Y;
+ } B;
#else
- struct { uint8 Y, A; } B;
+ struct
+ {
+ uint8 Y, A;
+ } B;
#endif
- uint16 W;
+ uint16 W;
} OrigYAndA;
-struct SOrigAPURegisters{
- uint8 P;
- OrigYAndA YA;
- uint8 X;
- uint8 S;
- uint16 PC;
+struct SOrigAPURegisters
+{
+ uint8 P;
+ OrigYAndA YA;
+ uint8 X;
+ uint8 S;
+ uint16 PC;
};
#define ORIG_MAX_BUFFER_SIZE (1024 * 4)
#define NUM_CHANNELS 8
-typedef struct {
- int state;
- int type;
- short volume_left;
- short volume_right;
- int frequency;
- int count;
- signed short wave [ORIG_MAX_BUFFER_SIZE];
- bool8_32 loop;
- int envx;
- short left_vol_level;
- short right_vol_level;
- short envx_target;
- unsigned long int env_error;
- unsigned long erate;
- int direction;
- unsigned long attack_rate;
- unsigned long decay_rate;
- unsigned long sustain_rate;
- unsigned long release_rate;
- unsigned long sustain_level;
- signed short sample;
- signed short decoded [16];
- signed short previous [2];
- uint16 sample_number;
- bool8_32 last_block;
- bool8_32 needs_decode;
- uint32 block_pointer;
- uint32 sample_pointer;
- int *echo_buf_ptr;
- int mode;
- uint32 dummy [8];
+typedef struct
+{
+ int state;
+ int type;
+ short volume_left;
+ short volume_right;
+ int frequency;
+ int count;
+ signed short wave [ORIG_MAX_BUFFER_SIZE];
+ bool8_32 loop;
+ int envx;
+ short left_vol_level;
+ short right_vol_level;
+ short envx_target;
+ unsigned long int env_error;
+ unsigned long erate;
+ int direction;
+ unsigned long attack_rate;
+ unsigned long decay_rate;
+ unsigned long sustain_rate;
+ unsigned long release_rate;
+ unsigned long sustain_level;
+ signed short sample;
+ signed short decoded [16];
+ signed short previous [2];
+ uint16 sample_number;
+ bool8_32 last_block;
+ bool8_32 needs_decode;
+ uint32 block_pointer;
+ uint32 sample_pointer;
+ int* echo_buf_ptr;
+ int mode;
+ uint32 dummy [8];
} OrigChannel;
typedef struct
{
- short master_volume_left;
- short master_volume_right;
- short echo_volume_left;
- short echo_volume_right;
- int echo_enable;
- int echo_feedback;
- int echo_ptr;
- int echo_buffer_size;
- int echo_write_enabled;
- int echo_channel_enable;
- int pitch_mod;
- // Just incase they are needed in the future, for snapshot compatibility.
- uint32 dummy [3];
- OrigChannel channels [NUM_CHANNELS];
+ short master_volume_left;
+ short master_volume_right;
+ short echo_volume_left;
+ short echo_volume_right;
+ int echo_enable;
+ int echo_feedback;
+ int echo_ptr;
+ int echo_buffer_size;
+ int echo_write_enabled;
+ int echo_channel_enable;
+ int pitch_mod;
+ // Just incase they are needed in the future, for snapshot compatibility.
+ uint32 dummy [3];
+ OrigChannel channels [NUM_CHANNELS];
} SOrigSoundData;
struct SOrigOBJ
{
- short HPos;
- uint16 VPos;
- uint16 Name;
- uint8 VFlip;
- uint8 HFlip;
- uint8 Priority;
- uint8 Palette;
- uint8 Size;
- uint8 Prev;
- uint8 Next;
+ short HPos;
+ uint16 VPos;
+ uint16 Name;
+ uint8 VFlip;
+ uint8 HFlip;
+ uint8 Priority;
+ uint8 Palette;
+ uint8 Size;
+ uint8 Prev;
+ uint8 Next;
};
-struct SOrigPPU {
- uint8 BGMode;
- uint8 BG3Priority;
- uint8 Brightness;
+struct SOrigPPU
+{
+ uint8 BGMode;
+ uint8 BG3Priority;
+ uint8 Brightness;
- struct {
- bool8_32 High;
- uint8 Increment;
- uint16 Address;
- uint16 Mask1;
- uint16 FullGraphicCount;
- uint16 Shift;
- } VMA;
+ struct
+ {
+ bool8_32 High;
+ uint8 Increment;
+ uint16 Address;
+ uint16 Mask1;
+ uint16 FullGraphicCount;
+ uint16 Shift;
+ } VMA;
- struct {
- uint8 TileSize;
- uint16 TileAddress;
- uint8 Width;
- uint8 Height;
- uint16 SCBase;
- uint16 VOffset;
- uint16 HOffset;
- bool8_32 ThroughMain;
- bool8_32 ThroughSub;
- uint8 BGSize;
- uint16 NameBase;
- uint16 SCSize;
- bool8_32 Addition;
- } BG [4];
+ struct
+ {
+ uint8 TileSize;
+ uint16 TileAddress;
+ uint8 Width;
+ uint8 Height;
+ uint16 SCBase;
+ uint16 VOffset;
+ uint16 HOffset;
+ bool8_32 ThroughMain;
+ bool8_32 ThroughSub;
+ uint8 BGSize;
+ uint16 NameBase;
+ uint16 SCSize;
+ bool8_32 Addition;
+ } BG [4];
- bool8_32 CGFLIP;
- uint16 CGDATA [256];
- uint8 FirstSprite;
- uint8 LastSprite;
- struct SOrigOBJ OBJ [129];
- uint8 OAMPriorityRotation;
- uint16 OAMAddr;
+ bool8_32 CGFLIP;
+ uint16 CGDATA [256];
+ uint8 FirstSprite;
+ uint8 LastSprite;
+ struct SOrigOBJ OBJ [129];
+ uint8 OAMPriorityRotation;
+ uint16 OAMAddr;
- uint8 OAMFlip;
- uint16 OAMTileAddress;
- uint16 IRQVBeamPos;
- uint16 IRQHBeamPos;
- uint16 VBeamPosLatched;
- uint16 HBeamPosLatched;
+ uint8 OAMFlip;
+ uint16 OAMTileAddress;
+ uint16 IRQVBeamPos;
+ uint16 IRQHBeamPos;
+ uint16 VBeamPosLatched;
+ uint16 HBeamPosLatched;
- uint8 HBeamFlip;
- uint8 VBeamFlip;
- uint8 HVBeamCounterLatched;
+ uint8 HBeamFlip;
+ uint8 VBeamFlip;
+ uint8 HVBeamCounterLatched;
- short MatrixA;
- short MatrixB;
- short MatrixC;
- short MatrixD;
- short CentreX;
- short CentreY;
- uint8 Joypad1ButtonReadPos;
- uint8 Joypad2ButtonReadPos;
+ short MatrixA;
+ short MatrixB;
+ short MatrixC;
+ short MatrixD;
+ short CentreX;
+ short CentreY;
+ uint8 Joypad1ButtonReadPos;
+ uint8 Joypad2ButtonReadPos;
- uint8 CGADD;
- uint8 FixedColourRed;
- uint8 FixedColourGreen;
- uint8 FixedColourBlue;
- uint16 SavedOAMAddr;
- uint16 ScreenHeight;
- uint32 WRAM;
- uint8 BG_Forced;
- bool8_32 ForcedBlanking;
- bool8_32 OBJThroughMain;
- bool8_32 OBJThroughSub;
- uint8 OBJSizeSelect;
- uint8 OBJNameSelect_old;
- uint16 OBJNameBase;
- bool8_32 OBJAddition;
- uint8 OAMReadFlip;
- uint8 OAMData [512 + 32];
- bool8_32 VTimerEnabled;
- bool8_32 HTimerEnabled;
- short HTimerPosition;
- uint8 Mosaic;
- bool8_32 BGMosaic [4];
- bool8_32 Mode7HFlip;
- bool8_32 Mode7VFlip;
- uint8 Mode7Repeat;
- uint8 Window1Left;
- uint8 Window1Right;
- uint8 Window2Left;
- uint8 Window2Right;
- uint8 ClipCounts [6];
- uint8 ClipLeftEdges [3][6];
- uint8 ClipRightEdges [3][6];
- uint8 ClipWindowOverlapLogic [6];
- uint8 ClipWindow1Enable [6];
- uint8 ClipWindow2Enable [6];
- bool8_32 ClipWindow1Inside [6];
- bool8_32 ClipWindow2Inside [6];
- bool8_32 RecomputeClipWindows;
- uint8 CGFLIPRead;
- uint16 OBJNameSelect;
- bool8_32 Need16x8Mulitply;
- uint8 Joypad3ButtonReadPos;
- uint8 MouseSpeed[2];
+ uint8 CGADD;
+ uint8 FixedColourRed;
+ uint8 FixedColourGreen;
+ uint8 FixedColourBlue;
+ uint16 SavedOAMAddr;
+ uint16 ScreenHeight;
+ uint32 WRAM;
+ uint8 BG_Forced;
+ bool8_32 ForcedBlanking;
+ bool8_32 OBJThroughMain;
+ bool8_32 OBJThroughSub;
+ uint8 OBJSizeSelect;
+ uint8 OBJNameSelect_old;
+ uint16 OBJNameBase;
+ bool8_32 OBJAddition;
+ uint8 OAMReadFlip;
+ uint8 OAMData [512 + 32];
+ bool8_32 VTimerEnabled;
+ bool8_32 HTimerEnabled;
+ short HTimerPosition;
+ uint8 Mosaic;
+ bool8_32 BGMosaic [4];
+ bool8_32 Mode7HFlip;
+ bool8_32 Mode7VFlip;
+ uint8 Mode7Repeat;
+ uint8 Window1Left;
+ uint8 Window1Right;
+ uint8 Window2Left;
+ uint8 Window2Right;
+ uint8 ClipCounts [6];
+ uint8 ClipLeftEdges [3][6];
+ uint8 ClipRightEdges [3][6];
+ uint8 ClipWindowOverlapLogic [6];
+ uint8 ClipWindow1Enable [6];
+ uint8 ClipWindow2Enable [6];
+ bool8_32 ClipWindow1Inside [6];
+ bool8_32 ClipWindow2Inside [6];
+ bool8_32 RecomputeClipWindows;
+ uint8 CGFLIPRead;
+ uint16 OBJNameSelect;
+ bool8_32 Need16x8Mulitply;
+ uint8 Joypad3ButtonReadPos;
+ uint8 MouseSpeed[2];
};
-struct SOrigDMA {
- bool8_32 TransferDirection;
- bool8_32 AAddressFixed;
- bool8_32 AAddressDecrement;
- uint8 TransferMode;
+struct SOrigDMA
+{
+ bool8_32 TransferDirection;
+ bool8_32 AAddressFixed;
+ bool8_32 AAddressDecrement;
+ uint8 TransferMode;
- uint8 ABank;
- uint16 AAddress;
- uint16 Address;
- uint8 BAddress;
+ uint8 ABank;
+ uint16 AAddress;
+ uint16 Address;
+ uint8 BAddress;
- // General DMA only:
- uint16 TransferBytes;
+ // General DMA only:
+ uint16 TransferBytes;
- // H-DMA only:
- bool8_32 HDMAIndirectAddressing;
- uint16 IndirectAddress;
- uint8 IndirectBank;
- uint8 Repeat;
- uint8 LineCount;
- uint8 FirstLine;
- bool8_32 JustStarted;
+ // H-DMA only:
+ bool8_32 HDMAIndirectAddressing;
+ uint16 IndirectAddress;
+ uint8 IndirectBank;
+ uint8 Repeat;
+ uint8 LineCount;
+ uint8 FirstLine;
+ bool8_32 JustStarted;
};
typedef union
{
#ifdef LSB_FIRST
- struct { uint8 l,h; } B;
+ struct
+ {
+ uint8 l, h;
+ } B;
#else
- struct { uint8 h,l; } B;
+ struct
+ {
+ uint8 h, l;
+ } B;
#endif
- uint16 W;
+ uint16 W;
} OrigPair;
-struct SOrigRegisters{
- uint8 PB;
- uint8 DB;
- OrigPair P;
- OrigPair A;
- OrigPair D;
- OrigPair S;
- OrigPair X;
- OrigPair Y;
- uint16 PC;
+struct SOrigRegisters
+{
+ uint8 PB;
+ uint8 DB;
+ OrigPair P;
+ OrigPair A;
+ OrigPair D;
+ OrigPair S;
+ OrigPair X;
+ OrigPair Y;
+ uint16 PC;
};
#endif