Skip to content
Permalink
mecm
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
/*
* Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
*
* (c) Copyright 1996 - 2001 Gary Henderson (gary.henderson@ntlworld.com) and
* Jerremy Koot (jkoot@snes9x.com)
*
* 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_.
*
* DSP1 emulator code (c) Copyright 1998 Ivar, _Demo_ and Gary Henderson.
* C4 asm and some C emulation code (c) Copyright 2000 zsKnight and _Demo_.
* C4 C code (c) Copyright 2001 Gary Henderson (gary.henderson@ntlworld.com).
*
* DOS port code contains the works of other authors. See headers in
* individual files.
*
* Snes9x homepage: http://www.snes9x.com
*
* Permission to use, copy, modify and distribute Snes9x in both binary and
* source form, for non-commercial purposes, is hereby granted without fee,
* providing that this license information and copyright notice appear with
* all copies and any derived work.
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event shall the authors be held liable for any damages
* arising from the use of this software.
*
* Snes9x is freeware for PERSONAL USE only. Commercial users should
* seek permission of the copyright holders first. Commercial use includes
* charging money for Snes9x or software derived from Snes9x.
*
* The copyright holders request that bug fixes and improvements to the code
* should be forwarded to them so everyone can benefit from the modifications
* in future versions.
*
* Super NES and Super Nintendo Entertainment System are trademarks of
* Nintendo Co., Limited and its subsidiary companies.
*/
#ifndef _SNAPORIG_H_
#define _SNAPORIG_H_
#define ORIG_SNAPSHOT_MAGIC "#!snes96"
#define ORIG_SNAPSHOT_VERSION 4
EXTERN_C bool8 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 BranchSkip;
bool8 NMIActive;
bool8 IRQActive;
bool8 WaitingForInterrupt;
bool8 InDMA;
uint8 WhichEvent;
uint8 *PC;
uint8 *PCBase;
uint16 MemSpeed_old;
uint16 MemSpeedx2_old;
uint16 FastROMSpeed_old;
bool8 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 ShowROM;
uint8 Flags;
uint8 KeyedChannels;
uint8 OutPorts [4];
uint8 DSP [0x80];
uint8 ExtraRAM [64];
uint16 Timer [3];
uint16 TimerTarget [3];
bool8 TimerEnabled [3];
bool8 TimerValueWritten [3];
};
typedef union
{
#ifdef LSB_FIRST
struct { uint8 A, Y; } B;
#else
struct { uint8 Y, A; } B;
#endif
uint16 W;
} OrigYAndA;
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 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 last_block;
bool8 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];
} SOrigSoundData;
struct SOrigOBJ
{
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 {
bool8 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 ThroughMain;
bool8 ThroughSub;
uint8 BGSize;
uint16 NameBase;
uint16 SCSize;
bool8 Addition;
} BG [4];
bool8 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 HBeamFlip;
uint8 VBeamFlip;
uint8 HVBeamCounterLatched;
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 ForcedBlanking;
bool8 OBJThroughMain;
bool8 OBJThroughSub;
uint8 OBJSizeSelect;
uint8 OBJNameSelect_old;
uint16 OBJNameBase;
bool8 OBJAddition;
uint8 OAMReadFlip;
uint8 OAMData [512 + 32];
bool8 VTimerEnabled;
bool8 HTimerEnabled;
short HTimerPosition;
uint8 Mosaic;
bool8 BGMosaic [4];
bool8 Mode7HFlip;
bool8 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 ClipWindow1Inside [6];
bool8 ClipWindow2Inside [6];
bool8 RecomputeClipWindows;
uint8 CGFLIPRead;
uint16 OBJNameSelect;
bool8 Need16x8Mulitply;
uint8 Joypad3ButtonReadPos;
uint8 MouseSpeed[2];
};
struct SOrigDMA {
bool8 TransferDirection;
bool8 AAddressFixed;
bool8 AAddressDecrement;
uint8 TransferMode;
uint8 ABank;
uint16 AAddress;
uint16 Address;
uint8 BAddress;
// General DMA only:
uint16 TransferBytes;
// H-DMA only:
bool8 HDMAIndirectAddressing;
uint16 IndirectAddress;
uint8 IndirectBank;
uint8 Repeat;
uint8 LineCount;
uint8 FirstLine;
bool8 JustStarted;
};
typedef union
{
#ifdef LSB_FIRST
struct { uint8 l,h; } B;
#else
struct { uint8 h,l; } B;
#endif
uint16 W;
} OrigPair;
#endif