summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortwinaphex2015-11-14 05:02:53 +0100
committertwinaphex2015-11-14 05:02:53 +0100
commit734e3dd53bc4a13b59a9cc96f3a48d999f5d118f (patch)
tree308405fb83e55d90e46c878f63c404329228cd0d /src
parentebf506f7da2702963f28d8181f348e21787666f2 (diff)
downloadsnes9x2002-734e3dd53bc4a13b59a9cc96f3a48d999f5d118f.tar.gz
snes9x2002-734e3dd53bc4a13b59a9cc96f3a48d999f5d118f.tar.bz2
snes9x2002-734e3dd53bc4a13b59a9cc96f3a48d999f5d118f.zip
move unused files
Diffstat (limited to 'src')
-rw-r--r--src/rops.c422
-rw-r--r--src/snaporig.c411
-rw-r--r--src/snaporig.h350
3 files changed, 201 insertions, 982 deletions
diff --git a/src/rops.c b/src/rops.c
index 6dbf26a..e0dcf69 100644
--- a/src/rops.c
+++ b/src/rops.c
@@ -7,237 +7,217 @@ unsigned int ROpCount;
void doRaster(ROPSTRUCT* rop)
{
- if (!rop) return;
+ if (!rop)
+ return;
+
switch (rop->rop)
{
- case ROP_NOP:
- // NOP
- break;
- case ROP_FIXEDCOLOUR:
- {
- unsigned char col = rop->value & 0x1f;
- // Colour data for fixed colour addition/subtraction
- if (rop->value & 0x80) PPU.FixedColourBlue = col;
- if (rop->value & 0x40) PPU.FixedColourGreen = col;
- if (rop->value & 0x20) PPU.FixedColourRed = col;
- }
- break;
- case ROP_PALETTE:
- {
- // Pallette, colors
- unsigned char col = rop->value & 255;
- IPPU.Blue[col] = (rop->value >> (16 + 10)) & 0x1f;
- IPPU.Green[col] = (rop->value >> (16 + 5)) & 0x1f;
- IPPU.Red[col] = (rop->value >> (16 + 0)) & 0x1f;
- IPPU.ScreenColors[col] = (uint16) BUILD_PIXEL(IPPU.XB[IPPU.Red[col]], IPPU.XB[IPPU.Green[col]],
- IPPU.XB[IPPU.Blue[col]]);
- IPPU.ColorsChanged = TRUE;
- }
- break;
- case ROP_SCREEN_MODE:
- // Screen mode (0 - 7), background tile sizes and background 3 priority
- PPU.BG[0].BGSize = (rop->value >> 4) & 1;
- PPU.BG[1].BGSize = (rop->value >> 5) & 1;
- PPU.BG[2].BGSize = (rop->value >> 6) & 1;
- PPU.BG[3].BGSize = (rop->value >> 7) & 1;
- PPU.BGMode = rop->value & 7;
- // BJ: BG3Priority only takes effect if BGMode==1 and the bit is set
- PPU.BG3Priority = ((rop->value & 0x0f) == 0x09);
- break;
- case ROP_BRIGHTNESS:
- PPU.Brightness = rop->value;
- S9xFixColourBrightness();
- if (PPU.Brightness > IPPU.MaxBrightness) IPPU.MaxBrightness = PPU.Brightness;
- IPPU.ColorsChanged = TRUE;
- IPPU.DirectColourMapsNeedRebuild = TRUE;
- break;
- case ROP_FORCE_BLANKING:
- PPU.ForcedBlanking = rop->value;
- IPPU.ColorsChanged = TRUE;
- break;
- case ROP_TILE_ADDRESS:
- PPU.OBJNameBase = (rop->value & 3) << 14;
- PPU.OBJNameSelect = ((rop->value >> 3) & 3) << 13;
- PPU.OBJSizeSelect = (rop->value >> 5) & 7;
- IPPU.OBJChanged = TRUE;
- break;
- case ROP_MOSAIC:
- PPU.Mosaic = (rop->value >> 4) + 1;
- PPU.BGMosaic[0] = (rop->value & 1) && PPU.Mosaic > 1;
- PPU.BGMosaic[1] = (rop->value & 2) && PPU.Mosaic > 1;
- PPU.BGMosaic[2] = (rop->value & 4) && PPU.Mosaic > 1;
- PPU.BGMosaic[3] = (rop->value & 8) && PPU.Mosaic > 1;
- break;
- case ROP_BG_SCSIZE_SCBASE:
- PPU.BG[rop->value >> 16].SCSize = rop->value & 3;
- PPU.BG[rop->value >> 16].SCBase = (rop->value & 0x7c) << 8;
- break;
- case ROP_BG_NAMEBASE:
- PPU.BG[(rop->value >> 16) + 0].NameBase = (rop->value & 7) << 12;
- PPU.BG[(rop->value >> 16) + 1].NameBase = ((rop->value >> 4) & 7) << 12;
- break;
- case ROP_MODE7_ROTATION:
- PPU.Mode7Repeat = rop->value >> 6;
- if (PPU.Mode7Repeat == 1) PPU.Mode7Repeat = 0;
- PPU.Mode7VFlip = (rop->value & 2) >> 1;
- PPU.Mode7HFlip = rop->value & 1;
- break;
- case ROP_BG_WINDOW_ENABLE:
- PPU.ClipWindow1Enable[(rop->value >> 16) + 0] = !!(rop->value & 0x02);
- PPU.ClipWindow1Enable[(rop->value >> 16) + 1] = !!(rop->value & 0x20);
- PPU.ClipWindow2Enable[(rop->value >> 16) + 0] = !!(rop->value & 0x08);
- PPU.ClipWindow2Enable[(rop->value >> 16) + 1] = !!(rop->value & 0x80);
- PPU.ClipWindow1Inside[(rop->value >> 16) + 0] = !(rop->value & 0x01);
- PPU.ClipWindow1Inside[(rop->value >> 16) + 1] = !(rop->value & 0x10);
- PPU.ClipWindow2Inside[(rop->value >> 16) + 0] = !(rop->value & 0x04);
- PPU.ClipWindow2Inside[(rop->value >> 16) + 1] = !(rop->value & 0x40);
- PPU.RecomputeClipWindows = TRUE;
- break;
- case ROP_WINDOW1_LEFT:
- PPU.Window1Left = rop->value;
- PPU.RecomputeClipWindows = TRUE;
- break;
- case ROP_WINDOW1_RIGHT:
- PPU.Window1Right = rop->value;
- PPU.RecomputeClipWindows = TRUE;
- break;
- case ROP_WINDOW2_LEFT:
- PPU.Window2Left = rop->value;
- PPU.RecomputeClipWindows = TRUE;
- break;
- case ROP_WINDOW2_RIGHT:
- PPU.Window2Right = rop->value;
- PPU.RecomputeClipWindows = TRUE;
- break;
- case ROP_BG_WINDOW_LOGIC:
- PPU.ClipWindowOverlapLogic[0] = (rop->value & 0x03);
- PPU.ClipWindowOverlapLogic[1] = (rop->value & 0x0c) >> 2;
- PPU.ClipWindowOverlapLogic[2] = (rop->value & 0x30) >> 4;
- PPU.ClipWindowOverlapLogic[3] = (rop->value & 0xc0) >> 6;
- PPU.RecomputeClipWindows = TRUE;
- break;
- case ROP_OBJS_WINDOW_LOGIC:
- PPU.ClipWindowOverlapLogic[4] = (rop->value & 0x03);
- PPU.ClipWindowOverlapLogic[5] = (rop->value & 0x0c) >> 2;
- PPU.RecomputeClipWindows = TRUE;
- break;
- case ROP_MAIN_SCREEN_DESIG:
- // Main screen designation (backgrounds 1 - 4 and objects)
- if ((GFX.r212c_s & GFX.r212e_s & 0x1f) != (GFX.r212e_s & rop->value & 0x1f)) PPU.RecomputeClipWindows = TRUE;
- GFX.r212c_s = rop->value;
- break;
- case ROP_SUB_SCREEN_DESIG:
- // Sub-screen designation (backgrounds 1 - 4 and objects)
- if ((GFX.r212d_s & GFX.r212f_s & 0x1f) != (GFX.r212f_s & rop->value & 0x1f)) PPU.RecomputeClipWindows = TRUE;
- GFX.r212d_s = rop->value;
- break;
- case ROP_MAIN_SCREEN_WMASK:
- // Window mask designation for main screen ?
- if ((GFX.r212c_s & GFX.r212e_s & 0x1f) != (GFX.r212c_s & rop->value & 0x1f)) PPU.RecomputeClipWindows = TRUE;
- GFX.r212e_s = rop->value;
- break;
- case ROP_SUB_SCREEN_WMASK:
- // Window mask designation for sub-sreen ?
- if ((GFX.r212d_s & GFX.r212f_s & 0x1f) != (GFX.r212d_s & rop->value & 0x1f)) PPU.RecomputeClipWindows = TRUE;
- GFX.r212f_s = rop->value;
- break;
- case ROP_FIXEDCOL_OR_SCREEN:
- // Fixed colour addition or screen addition
- if ((GFX.r2130_s & 0xf0) != (rop->value & 0xf0)) PPU.RecomputeClipWindows = TRUE;
- GFX.r2130_s = rop->value;
- break;
- case ROP_ADD_OR_SUB_COLOR:
- // Backgrounds 1 - 4, objects and backdrop colour add/sub enable
- GFX.r2131_s = rop->value;
- break;
+ case ROP_NOP:
+ // NOP
+ break;
+ case ROP_FIXEDCOLOUR:
+ {
+ unsigned char col = rop->value & 0x1f;
+ // Colour data for fixed colour addition/subtraction
+ if (rop->value & 0x80) PPU.FixedColourBlue = col;
+ if (rop->value & 0x40) PPU.FixedColourGreen = col;
+ if (rop->value & 0x20) PPU.FixedColourRed = col;
+ }
+ break;
+ case ROP_PALETTE:
+ {
+ // Pallette, colors
+ unsigned char col = rop->value & 255;
+ IPPU.Blue[col] = (rop->value >> (16 + 10)) & 0x1f;
+ IPPU.Green[col] = (rop->value >> (16 + 5)) & 0x1f;
+ IPPU.Red[col] = (rop->value >> (16 + 0)) & 0x1f;
+ IPPU.ScreenColors[col] = (uint16) BUILD_PIXEL(IPPU.XB[IPPU.Red[col]], IPPU.XB[IPPU.Green[col]],
+ IPPU.XB[IPPU.Blue[col]]);
+ IPPU.ColorsChanged = TRUE;
+ }
+ break;
+ case ROP_SCREEN_MODE:
+ // Screen mode (0 - 7), background tile sizes and background 3 priority
+ PPU.BG[0].BGSize = (rop->value >> 4) & 1;
+ PPU.BG[1].BGSize = (rop->value >> 5) & 1;
+ PPU.BG[2].BGSize = (rop->value >> 6) & 1;
+ PPU.BG[3].BGSize = (rop->value >> 7) & 1;
+ PPU.BGMode = rop->value & 7;
+ // BJ: BG3Priority only takes effect if BGMode==1 and the bit is set
+ PPU.BG3Priority = ((rop->value & 0x0f) == 0x09);
+ break;
+ case ROP_BRIGHTNESS:
+ PPU.Brightness = rop->value;
+ S9xFixColourBrightness();
+ if (PPU.Brightness > IPPU.MaxBrightness) IPPU.MaxBrightness = PPU.Brightness;
+ IPPU.ColorsChanged = TRUE;
+ IPPU.DirectColourMapsNeedRebuild = TRUE;
+ break;
+ case ROP_FORCE_BLANKING:
+ PPU.ForcedBlanking = rop->value;
+ IPPU.ColorsChanged = TRUE;
+ break;
+ case ROP_TILE_ADDRESS:
+ PPU.OBJNameBase = (rop->value & 3) << 14;
+ PPU.OBJNameSelect = ((rop->value >> 3) & 3) << 13;
+ PPU.OBJSizeSelect = (rop->value >> 5) & 7;
+ IPPU.OBJChanged = TRUE;
+ break;
+ case ROP_MOSAIC:
+ PPU.Mosaic = (rop->value >> 4) + 1;
+ PPU.BGMosaic[0] = (rop->value & 1) && PPU.Mosaic > 1;
+ PPU.BGMosaic[1] = (rop->value & 2) && PPU.Mosaic > 1;
+ PPU.BGMosaic[2] = (rop->value & 4) && PPU.Mosaic > 1;
+ PPU.BGMosaic[3] = (rop->value & 8) && PPU.Mosaic > 1;
+ break;
+ case ROP_BG_SCSIZE_SCBASE:
+ PPU.BG[rop->value >> 16].SCSize = rop->value & 3;
+ PPU.BG[rop->value >> 16].SCBase = (rop->value & 0x7c) << 8;
+ break;
+ case ROP_BG_NAMEBASE:
+ PPU.BG[(rop->value >> 16) + 0].NameBase = (rop->value & 7) << 12;
+ PPU.BG[(rop->value >> 16) + 1].NameBase = ((rop->value >> 4) & 7) << 12;
+ break;
+ case ROP_MODE7_ROTATION:
+ PPU.Mode7Repeat = rop->value >> 6;
+ if (PPU.Mode7Repeat == 1) PPU.Mode7Repeat = 0;
+ PPU.Mode7VFlip = (rop->value & 2) >> 1;
+ PPU.Mode7HFlip = rop->value & 1;
+ break;
+ case ROP_BG_WINDOW_ENABLE:
+ PPU.ClipWindow1Enable[(rop->value >> 16) + 0] = !!(rop->value & 0x02);
+ PPU.ClipWindow1Enable[(rop->value >> 16) + 1] = !!(rop->value & 0x20);
+ PPU.ClipWindow2Enable[(rop->value >> 16) + 0] = !!(rop->value & 0x08);
+ PPU.ClipWindow2Enable[(rop->value >> 16) + 1] = !!(rop->value & 0x80);
+ PPU.ClipWindow1Inside[(rop->value >> 16) + 0] = !(rop->value & 0x01);
+ PPU.ClipWindow1Inside[(rop->value >> 16) + 1] = !(rop->value & 0x10);
+ PPU.ClipWindow2Inside[(rop->value >> 16) + 0] = !(rop->value & 0x04);
+ PPU.ClipWindow2Inside[(rop->value >> 16) + 1] = !(rop->value & 0x40);
+ PPU.RecomputeClipWindows = TRUE;
+ break;
+ case ROP_WINDOW1_LEFT:
+ PPU.Window1Left = rop->value;
+ PPU.RecomputeClipWindows = TRUE;
+ break;
+ case ROP_WINDOW1_RIGHT:
+ PPU.Window1Right = rop->value;
+ PPU.RecomputeClipWindows = TRUE;
+ break;
+ case ROP_WINDOW2_LEFT:
+ PPU.Window2Left = rop->value;
+ PPU.RecomputeClipWindows = TRUE;
+ break;
+ case ROP_WINDOW2_RIGHT:
+ PPU.Window2Right = rop->value;
+ PPU.RecomputeClipWindows = TRUE;
+ break;
+ case ROP_BG_WINDOW_LOGIC:
+ PPU.ClipWindowOverlapLogic[0] = (rop->value & 0x03);
+ PPU.ClipWindowOverlapLogic[1] = (rop->value & 0x0c) >> 2;
+ PPU.ClipWindowOverlapLogic[2] = (rop->value & 0x30) >> 4;
+ PPU.ClipWindowOverlapLogic[3] = (rop->value & 0xc0) >> 6;
+ PPU.RecomputeClipWindows = TRUE;
+ break;
+ case ROP_OBJS_WINDOW_LOGIC:
+ PPU.ClipWindowOverlapLogic[4] = (rop->value & 0x03);
+ PPU.ClipWindowOverlapLogic[5] = (rop->value & 0x0c) >> 2;
+ PPU.RecomputeClipWindows = TRUE;
+ break;
+ case ROP_MAIN_SCREEN_DESIG:
+ // Main screen designation (backgrounds 1 - 4 and objects)
+ if ((GFX.r212c_s & GFX.r212e_s & 0x1f) != (GFX.r212e_s & rop->value & 0x1f)) PPU.RecomputeClipWindows = TRUE;
+ GFX.r212c_s = rop->value;
+ break;
+ case ROP_SUB_SCREEN_DESIG:
+ // Sub-screen designation (backgrounds 1 - 4 and objects)
+ if ((GFX.r212d_s & GFX.r212f_s & 0x1f) != (GFX.r212f_s & rop->value & 0x1f)) PPU.RecomputeClipWindows = TRUE;
+ GFX.r212d_s = rop->value;
+ break;
+ case ROP_MAIN_SCREEN_WMASK:
+ // Window mask designation for main screen ?
+ if ((GFX.r212c_s & GFX.r212e_s & 0x1f) != (GFX.r212c_s & rop->value & 0x1f)) PPU.RecomputeClipWindows = TRUE;
+ GFX.r212e_s = rop->value;
+ break;
+ case ROP_SUB_SCREEN_WMASK:
+ // Window mask designation for sub-sreen ?
+ if ((GFX.r212d_s & GFX.r212f_s & 0x1f) != (GFX.r212d_s & rop->value & 0x1f)) PPU.RecomputeClipWindows = TRUE;
+ GFX.r212f_s = rop->value;
+ break;
+ case ROP_FIXEDCOL_OR_SCREEN:
+ // Fixed colour addition or screen addition
+ if ((GFX.r2130_s & 0xf0) != (rop->value & 0xf0)) PPU.RecomputeClipWindows = TRUE;
+ GFX.r2130_s = rop->value;
+ break;
+ case ROP_ADD_OR_SUB_COLOR:
+ // Backgrounds 1 - 4, objects and backdrop colour add/sub enable
+ GFX.r2131_s = rop->value;
+ break;
}
rop->rop = 0; // Raster Operation already done, invalidate it
}
bool wouldRasterAlterStatus(ROPSTRUCT* rop)
{
- if (!rop) return false;
- switch (rop->rop)
- {
- case ROP_NOP:
+ if (!rop)
return false;
- break;
- case ROP_FIXEDCOLOUR:
+ switch (rop->rop)
{
- unsigned char col = rop->value & 0x1f;
- // Colour data for fixed colour addition/subtraction
- if ((rop->value & 0x80) && (PPU.FixedColourBlue != col)) return true;
- if ((rop->value & 0x40) && (PPU.FixedColourGreen != col)) return true;
- if ((rop->value & 0x20) && (PPU.FixedColourRed != col)) return true;
- return false;
- }
- break;
- case ROP_PALETTE:
- return true;
- break;
- case ROP_SCREEN_MODE:
- return true;
- break;
- case ROP_BRIGHTNESS:
- return true;
- break;
- case ROP_FORCE_BLANKING:
- return true;
- break;
- case ROP_TILE_ADDRESS:
- return true;
- break;
- case ROP_MOSAIC:
- return true;
- break;
- case ROP_BG_SCSIZE_SCBASE:
- return true;
- break;
- case ROP_BG_NAMEBASE:
- return true;
- break;
- case ROP_MODE7_ROTATION:
- return true;
- break;
- case ROP_BG_WINDOW_ENABLE:
- return true;
- break;
- case ROP_WINDOW1_LEFT:
- return true;
- break;
- case ROP_WINDOW1_RIGHT:
- return true;
- break;
- case ROP_WINDOW2_LEFT:
- return true;
- break;
- case ROP_WINDOW2_RIGHT:
- return true;
- break;
- case ROP_BG_WINDOW_LOGIC:
- return true;
- break;
- case ROP_OBJS_WINDOW_LOGIC:
- return true;
- break;
- case ROP_MAIN_SCREEN_DESIG:
- return true;
- break;
- case ROP_SUB_SCREEN_DESIG:
- return true;
- break;
- case ROP_MAIN_SCREEN_WMASK:
- return true;
- break;
- case ROP_SUB_SCREEN_WMASK:
- return true;
- break;
- case ROP_FIXEDCOL_OR_SCREEN:
- return true;
- break;
- case ROP_ADD_OR_SUB_COLOR:
- return true;
- break;
+ case ROP_NOP:
+ return false;
+ case ROP_FIXEDCOLOUR:
+ {
+ unsigned char col = rop->value & 0x1f;
+ // Colour data for fixed colour addition/subtraction
+ if ((rop->value & 0x80) && (PPU.FixedColourBlue != col)) return true;
+ if ((rop->value & 0x40) && (PPU.FixedColourGreen != col)) return true;
+ if ((rop->value & 0x20) && (PPU.FixedColourRed != col)) return true;
+ return false;
+ }
+ break;
+ case ROP_PALETTE:
+ return true;
+ case ROP_SCREEN_MODE:
+ return true;
+ case ROP_BRIGHTNESS:
+ return true;
+ case ROP_FORCE_BLANKING:
+ return true;
+ case ROP_TILE_ADDRESS:
+ return true;
+ case ROP_MOSAIC:
+ return true;
+ case ROP_BG_SCSIZE_SCBASE:
+ return true;
+ case ROP_BG_NAMEBASE:
+ return true;
+ case ROP_MODE7_ROTATION:
+ return true;
+ case ROP_BG_WINDOW_ENABLE:
+ return true;
+ case ROP_WINDOW1_LEFT:
+ return true;
+ case ROP_WINDOW1_RIGHT:
+ return true;
+ case ROP_WINDOW2_LEFT:
+ return true;
+ case ROP_WINDOW2_RIGHT:
+ return true;
+ case ROP_BG_WINDOW_LOGIC:
+ return true;
+ case ROP_OBJS_WINDOW_LOGIC:
+ return true;
+ case ROP_MAIN_SCREEN_DESIG:
+ return true;
+ case ROP_SUB_SCREEN_DESIG:
+ return true;
+ case ROP_MAIN_SCREEN_WMASK:
+ return true;
+ case ROP_SUB_SCREEN_WMASK:
+ return true;
+ case ROP_FIXEDCOL_OR_SCREEN:
+ return true;
+ case ROP_ADD_OR_SUB_COLOR:
+ return true;
}
return true;
}
diff --git a/src/snaporig.c b/src/snaporig.c
deleted file mode 100644
index af9263a..0000000
--- a/src/snaporig.c
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * 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.
- */
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-
-#if defined(__unix) || defined(__linux) || defined(__sun) || defined(__DJGPP)
-//#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#endif
-
-#include "snapshot.h"
-#include "snaporig.h"
-#include "memmap.h"
-#include "snes9x.h"
-#include "65c816.h"
-#include "ppu.h"
-#include "cpuexec.h"
-#include "display.h"
-#include "apu.h"
-#include "soundux.h"
-
-struct SOrigPPU OrigPPU;
-struct SOrigDMA OrigDMA [8];
-struct SOrigRegisters OrigRegisters;
-struct SOrigCPUState OrigCPU;
-struct SOrigAPU OrigAPU;
-SOrigSoundData OrigSoundData;
-struct SOrigAPURegisters OrigAPURegisters;
-char ROMFilename [1025];
-
-static int ReadOrigSnapshot(STREAM);
-
-bool8_32 S9xLoadOrigSnapshot(const char* filename)
-{
- STREAM snapshot = NULL;
- if (S9xOpenSnapshotFile(filename, TRUE, &snapshot))
- {
- int result;
- if ((result = ReadOrigSnapshot(snapshot)) != SUCCESS)
- {
- S9xCloseSnapshotFile(snapshot);
- return (FALSE);
- }
- S9xCloseSnapshotFile(snapshot);
- return (TRUE);
- }
- return (FALSE);
-}
-
-static int ReadBlock(const char* key, void* block, int max_len, STREAM snap)
-{
- char buffer [20];
- int len = 0;
- int rem = 0;
-
- if (READ_STREAM(buffer, 11, snap) != 11 ||
- strncmp(buffer, key, 4) != 0 ||
- (len = atoi(&buffer [4])) == 0)
- return (WRONG_FORMAT);
-
- if (len > max_len)
- {
- rem = len - max_len;
- len = max_len;
- }
- if (READ_STREAM(block, len, snap) != len)
- return (WRONG_FORMAT);
-
- if (rem)
- {
- char* junk = new char [rem];
- READ_STREAM(junk, rem, snap);
- delete junk;
- }
-
- return (SUCCESS);
-}
-
-static int ReadOrigSnapshot(STREAM snap)
-{
- char buffer [_MAX_PATH];
- char rom_filename [_MAX_PATH];
- int result;
- int i;
- int j;
-
- int version;
- int len = strlen(ORIG_SNAPSHOT_MAGIC) + 1 + 4 + 1;
- if (READ_STREAM(buffer, len, snap) != len)
- return (WRONG_FORMAT);
- if (strncmp(buffer, ORIG_SNAPSHOT_MAGIC, strlen(ORIG_SNAPSHOT_MAGIC)) != 0)
- return (WRONG_FORMAT);
- if ((version = atoi(&buffer [strlen(SNAPSHOT_MAGIC) + 1])) > ORIG_SNAPSHOT_VERSION)
- return (WRONG_VERSION);
-
- if ((result = ReadBlock("NAM:", rom_filename, _MAX_PATH, snap)) != SUCCESS)
- return (result);
-
- if ((result = ReadBlock("HiR:", buffer, 0x41, snap)) != SUCCESS)
- return (result);
-
- if (strcasecmp(rom_filename, Memory.ROMFilename) != 0 &&
- strcasecmp(S9xBasename(rom_filename), S9xBasename(Memory.ROMFilename)) != 0)
- {
- S9xMessage(S9X_WARNING, S9X_FREEZE_ROM_NAME,
- "Current loaded ROM image doesn't match that required by freeze-game file.");
- }
-
- S9xReset();
- S9xSetSoundMute(TRUE);
- if ((result = ReadBlock("CPU:", &OrigCPU, sizeof(OrigCPU), snap)) != SUCCESS)
- return (result);
- OrigCPU.FastROMSpeed = OrigCPU.FastROMSpeed_old;
- Memory.FixROMSpeed();
- if (version == 3)
- {
- OrigCPU.Cycles = OrigCPU.Cycles_old;
- OrigCPU.NextEvent = OrigCPU.NextEvent_old;
- OrigCPU.V_Counter = OrigCPU.V_Counter_old;
- OrigCPU.MemSpeed = OrigCPU.MemSpeed_old;
- OrigCPU.MemSpeedx2 = OrigCPU.MemSpeedx2_old;
- OrigCPU.FastROMSpeed = OrigCPU.FastROMSpeed_old;
- }
- CPU.Flags = OrigCPU.Flags;
- CPU.BranchSkip = OrigCPU.BranchSkip;
- CPU.NMIActive = OrigCPU.NMIActive;
- CPU.IRQActive = OrigCPU.IRQActive;
- CPU.WaitingForInterrupt = OrigCPU.WaitingForInterrupt;
- CPU.WhichEvent = OrigCPU.WhichEvent;
- CPU.Cycles = OrigCPU.Cycles;
- CPU.NextEvent = OrigCPU.NextEvent;
- CPU.V_Counter = OrigCPU.V_Counter;
- CPU.MemSpeed = OrigCPU.MemSpeed;
- CPU.MemSpeedx2 = OrigCPU.MemSpeedx2;
- CPU.FastROMSpeed = OrigCPU.FastROMSpeed;
-
- if ((result = ReadBlock("REG:", &OrigRegisters, sizeof(OrigRegisters), snap)) != SUCCESS)
- return (result);
-
- Registers = *(struct SRegisters*) &OrigRegisters;
-
- if ((result = ReadBlock("PPU:", &OrigPPU, sizeof(OrigPPU), snap)) != SUCCESS)
- return (result);
-
- if (version == 2)
- {
- OrigPPU.OBJNameSelect = OrigPPU.OBJNameSelect_old << 13;
- OrigPPU.OBJNameBase <<= 1;
- OrigPPU.OBJNameSelect <<= 13;
- }
- PPU.BGMode = OrigPPU.BGMode;
- PPU.BG3Priority = OrigPPU.BG3Priority;
- PPU.Brightness = OrigPPU.Brightness;
-
- PPU.VMA.High = OrigPPU.VMA.High;
- PPU.VMA.Increment = OrigPPU.VMA.Increment;
- PPU.VMA.Address = OrigPPU.VMA.Address;
- PPU.VMA.Mask1 = OrigPPU.VMA.Mask1;
- PPU.VMA.FullGraphicCount = OrigPPU.VMA.FullGraphicCount;
- PPU.VMA.Shift = OrigPPU.VMA.Shift;
-
- for (i = 0; i < 4; i++)
- {
- PPU.BG[i].SCBase = OrigPPU.BG[i].SCBase;
- PPU.BG[i].VOffset = OrigPPU.BG[i].VOffset;
- PPU.BG[i].HOffset = OrigPPU.BG[i].HOffset;
- PPU.BG[i].BGSize = OrigPPU.BG[i].BGSize;
- PPU.BG[i].NameBase = OrigPPU.BG[i].NameBase;
- PPU.BG[i].SCSize = OrigPPU.BG[i].SCSize;
- }
-
- PPU.CGFLIP = OrigPPU.CGFLIP;
- for (i = 0; i < 256; i++)
- PPU.CGDATA [i] = OrigPPU.CGDATA [i];
- PPU.FirstSprite = OrigPPU.FirstSprite;
- for (i = 0; i < 128; i++)
- {
- PPU.OBJ[i].HPos = OrigPPU.OBJ [i].HPos;
- PPU.OBJ[i].VPos = OrigPPU.OBJ [i].VPos;
- PPU.OBJ[i].Name = OrigPPU.OBJ [i].Name;
- PPU.OBJ[i].VFlip = OrigPPU.OBJ [i].VFlip;
- PPU.OBJ[i].HFlip = OrigPPU.OBJ [i].HFlip;
- PPU.OBJ[i].Priority = OrigPPU.OBJ [i].Priority;
- PPU.OBJ[i].Palette = OrigPPU.OBJ [i].Palette;
- PPU.OBJ[i].Size = OrigPPU.OBJ [i].Size;
- }
- PPU.OAMPriorityRotation = OrigPPU.OAMPriorityRotation;
- PPU.OAMAddr = OrigPPU.OAMAddr;
-
- PPU.OAMFlip = OrigPPU.OAMFlip;
- PPU.OAMTileAddress = OrigPPU.OAMTileAddress;
- PPU.IRQVBeamPos = OrigPPU.IRQVBeamPos;
- PPU.IRQHBeamPos = OrigPPU.IRQHBeamPos;
- PPU.VBeamPosLatched = OrigPPU.VBeamPosLatched;
- PPU.HBeamPosLatched = OrigPPU.HBeamPosLatched;
-
- PPU.HBeamFlip = OrigPPU.HBeamFlip;
- PPU.VBeamFlip = OrigPPU.VBeamFlip;
- PPU.HVBeamCounterLatched = OrigPPU.HVBeamCounterLatched;
-
- PPU.MatrixA = OrigPPU.MatrixA;
- PPU.MatrixB = OrigPPU.MatrixB;
- PPU.MatrixC = OrigPPU.MatrixC;
- PPU.MatrixD = OrigPPU.MatrixD;
- PPU.CentreX = OrigPPU.CentreX;
- PPU.CentreY = OrigPPU.CentreY;
- PPU.Joypad1ButtonReadPos = OrigPPU.Joypad1ButtonReadPos;
- PPU.Joypad2ButtonReadPos = OrigPPU.Joypad2ButtonReadPos;
- PPU.Joypad3ButtonReadPos = OrigPPU.Joypad3ButtonReadPos;
-
- PPU.CGADD = OrigPPU.CGADD;
- PPU.FixedColourRed = OrigPPU.FixedColourRed;
- PPU.FixedColourGreen = OrigPPU.FixedColourGreen;
- PPU.FixedColourBlue = OrigPPU.FixedColourBlue;
- PPU.SavedOAMAddr = OrigPPU.SavedOAMAddr;
- PPU.ScreenHeight = OrigPPU.ScreenHeight;
- PPU.WRAM = OrigPPU.WRAM;
- PPU.ForcedBlanking = OrigPPU.ForcedBlanking;
- PPU.OBJNameSelect = OrigPPU.OBJNameSelect;
- PPU.OBJSizeSelect = OrigPPU.OBJSizeSelect;
- PPU.OBJNameBase = OrigPPU.OBJNameBase;
- PPU.OAMReadFlip = OrigPPU.OAMReadFlip;
- memmove(PPU.OAMData, OrigPPU.OAMData, sizeof(PPU.OAMData));
- PPU.VTimerEnabled = OrigPPU.VTimerEnabled;
- PPU.HTimerEnabled = OrigPPU.HTimerEnabled;
- PPU.HTimerPosition = OrigPPU.HTimerPosition;
- PPU.Mosaic = OrigPPU.Mosaic;
- memmove(PPU.BGMosaic, OrigPPU.BGMosaic, sizeof(PPU.BGMosaic));
- PPU.Mode7HFlip = OrigPPU.Mode7HFlip;
- PPU.Mode7VFlip = OrigPPU.Mode7VFlip;
- PPU.Mode7Repeat = OrigPPU.Mode7Repeat;
- PPU.Window1Left = OrigPPU.Window1Left;
- PPU.Window1Right = OrigPPU.Window1Right;
- PPU.Window2Left = OrigPPU.Window2Left;
- PPU.Window2Right = OrigPPU.Window2Right;
- for (i = 0; i < 6; i++)
- {
- PPU.ClipWindowOverlapLogic [i] = OrigPPU.ClipWindowOverlapLogic [i];
- PPU.ClipWindow1Enable [i] = OrigPPU.ClipWindow1Enable [i];
- PPU.ClipWindow2Enable [i] = OrigPPU.ClipWindow2Enable [i];
- PPU.ClipWindow1Inside [i] = OrigPPU.ClipWindow1Inside [i];
- PPU.ClipWindow2Inside [i] = OrigPPU.ClipWindow2Inside [i];
- }
- PPU.CGFLIPRead = OrigPPU.CGFLIPRead;
- PPU.Need16x8Mulitply = OrigPPU.Need16x8Mulitply;
-
- IPPU.ColorsChanged = TRUE;
- IPPU.OBJChanged = TRUE;
- S9xFixColourBrightness();
- IPPU.RenderThisFrame = FALSE;
-
- if ((result = ReadBlock("DMA:", OrigDMA, sizeof(OrigDMA), snap)) != SUCCESS)
- return (result);
-
- for (i = 0; i < 8; i++)
- {
- DMA[i].TransferDirection = OrigDMA[i].TransferDirection;
- DMA[i].AAddressFixed = OrigDMA[i].AAddressFixed;
- DMA[i].AAddressDecrement = OrigDMA[i].AAddressDecrement;
- DMA[i].TransferMode = OrigDMA[i].TransferMode;
- DMA[i].ABank = OrigDMA[i].ABank;
- DMA[i].AAddress = OrigDMA[i].AAddress;
- DMA[i].Address = OrigDMA[i].Address;
- DMA[i].BAddress = OrigDMA[i].BAddress;
- DMA[i].TransferBytes = OrigDMA[i].TransferBytes;
- DMA[i].HDMAIndirectAddressing = OrigDMA[i].HDMAIndirectAddressing;
- DMA[i].IndirectAddress = OrigDMA[i].IndirectAddress;
- DMA[i].IndirectBank = OrigDMA[i].IndirectBank;
- DMA[i].Repeat = OrigDMA[i].Repeat;
- DMA[i].LineCount = OrigDMA[i].LineCount;
- DMA[i].FirstLine = OrigDMA[i].FirstLine;
- }
-
- if ((result = ReadBlock("VRA:", Memory.VRAM, 0x10000, snap)) != SUCCESS)
- return (result);
- if ((result = ReadBlock("RAM:", Memory.RAM, 0x20000, snap)) != SUCCESS)
- return (result);
- if ((result = ReadBlock("SRA:", SRAM, 0x10000, snap)) != SUCCESS)
- return (result);
- if ((result = ReadBlock("FIL:", Memory.FillRAM, 0x8000, snap)) != SUCCESS)
- return (result);
- if (ReadBlock("APU:", &OrigAPU, sizeof(OrigAPU), snap) == SUCCESS)
- {
- APU = *(struct SAPU*) &OrigAPU;
-
- if ((result = ReadBlock("ARE:", &OrigAPURegisters,
- sizeof(OrigAPURegisters), snap)) != SUCCESS)
- return (result);
- APURegisters = *(struct SAPURegisters*) &OrigAPURegisters;
- if ((result = ReadBlock("ARA:", IAPU.RAM, 0x10000, snap)) != SUCCESS)
- return (result);
- if ((result = ReadBlock("SOU:", &OrigSoundData,
- sizeof(SOrigSoundData), snap)) != SUCCESS)
- return (result);
-
- SoundData.master_volume_left = OrigSoundData.master_volume_left;
- SoundData.master_volume_right = OrigSoundData.master_volume_right;
- SoundData.echo_volume_left = OrigSoundData.echo_volume_left;
- SoundData.echo_volume_right = OrigSoundData.echo_volume_right;
- SoundData.echo_enable = OrigSoundData.echo_enable;
- SoundData.echo_feedback = OrigSoundData.echo_feedback;
- SoundData.echo_ptr = OrigSoundData.echo_ptr;
- SoundData.echo_buffer_size = OrigSoundData.echo_buffer_size;
- SoundData.echo_write_enabled = OrigSoundData.echo_write_enabled;
- SoundData.echo_channel_enable = OrigSoundData.echo_channel_enable;
- SoundData.pitch_mod = OrigSoundData.pitch_mod;
-
- for (i = 0; i < 3; i++)
- SoundData.dummy [i] = OrigSoundData.dummy [i];
- for (i = 0; i < NUM_CHANNELS; i++)
- {
- SoundData.channels [i].state = OrigSoundData.channels [i].state;
- SoundData.channels [i].type = OrigSoundData.channels [i].type;
- SoundData.channels [i].volume_left = OrigSoundData.channels [i].volume_left;
- SoundData.channels [i].volume_right = OrigSoundData.channels [i].volume_right;
- SoundData.channels [i].hertz = OrigSoundData.channels [i].frequency;
- SoundData.channels [i].count = OrigSoundData.channels [i].count;
- SoundData.channels [i].loop = OrigSoundData.channels [i].loop;
- SoundData.channels [i].envx = OrigSoundData.channels [i].envx;
- SoundData.channels [i].left_vol_level = OrigSoundData.channels [i].left_vol_level;
- SoundData.channels [i].right_vol_level = OrigSoundData.channels [i].right_vol_level;
- SoundData.channels [i].envx_target = OrigSoundData.channels [i].envx_target;
- SoundData.channels [i].env_error = OrigSoundData.channels [i].env_error;
- SoundData.channels [i].erate = OrigSoundData.channels [i].erate;
- SoundData.channels [i].direction = OrigSoundData.channels [i].direction;
- SoundData.channels [i].attack_rate = OrigSoundData.channels [i].attack_rate;
- SoundData.channels [i].decay_rate = OrigSoundData.channels [i].decay_rate;
- SoundData.channels [i].sustain_rate = OrigSoundData.channels [i].sustain_rate;
- SoundData.channels [i].release_rate = OrigSoundData.channels [i].release_rate;
- SoundData.channels [i].sustain_level = OrigSoundData.channels [i].sustain_level;
- SoundData.channels [i].sample = OrigSoundData.channels [i].sample;
- for (j = 0; j < 16; j++)
- SoundData.channels [i].decoded [j] = OrigSoundData.channels [i].decoded [j];
-
- for (j = 0; j < 2; j++)
- SoundData.channels [i].previous [j] = OrigSoundData.channels [i].previous [j];
-
- SoundData.channels [i].sample_number = OrigSoundData.channels [i].sample_number;
- SoundData.channels [i].last_block = OrigSoundData.channels [i].last_block;
- SoundData.channels [i].needs_decode = OrigSoundData.channels [i].needs_decode;
- SoundData.channels [i].block_pointer = OrigSoundData.channels [i].block_pointer;
- SoundData.channels [i].sample_pointer = OrigSoundData.channels [i].sample_pointer;
- SoundData.channels [i].mode = OrigSoundData.channels [i].mode;
- }
-
- S9xSetSoundMute(FALSE);
- IAPU.PC = IAPU.RAM + IAPU.PC;
- S9xAPUUnpackStatus();
- if (APUCheckDirectPage())
- IAPU.DirectPage = IAPU.RAM + 0x100;
- else
- IAPU.DirectPage = IAPU.RAM;
- Settings.APUEnabled = TRUE;
- CPU.APU_APUExecuting = TRUE;
- }
- else
- {
- Settings.APUEnabled = FALSE;
- CPU.APU_APUExecuting = FALSE;
- S9xSetSoundMute(TRUE);
- }
- S9xFixSoundAfterSnapshotLoad();
- ICPU.ShiftedPB = Registers.PB << 16;
- ICPU.ShiftedDB = Registers.DB << 16;
- S9xSetPCBase(ICPU.ShiftedPB + Registers.PC, &CPU);
- S9xUnpackStatus();
- S9xFixCycles(&Registers, &ICPU);
- S9xReschedule();
-
- return (SUCCESS);
-}
diff --git a/src/snaporig.h b/src/snaporig.h
deleted file mode 100644
index e8b77be..0000000
--- a/src/snaporig.h
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * 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_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 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];
-};
-
-typedef union
-{
-#ifdef MSB_FIRST
- struct
- {
- uint8 Y, A;
- } B;
-#else
- struct
- {
- uint8 A, Y;
- } 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_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];
-} 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_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];
-
- 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 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_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;
-
- uint8 ABank;
- uint16 AAddress;
- uint16 Address;
- uint8 BAddress;
-
- // General DMA only:
- uint16 TransferBytes;
-
- // H-DMA only:
- bool8_32 HDMAIndirectAddressing;
- uint16 IndirectAddress;
- uint8 IndirectBank;
- uint8 Repeat;
- uint8 LineCount;
- uint8 FirstLine;
- bool8_32 JustStarted;
-};
-
-typedef union
-{
-#ifdef MSB_FIRST
- struct
- {
- uint8 h, l;
- } B;
-#else
- struct
- {
- uint8 l, h;
- } B;
-#endif
- uint16 W;
-} OrigPair;
-
-struct SOrigRegisters
-{
- uint8 PB;
- uint8 DB;
- OrigPair P;
- OrigPair A;
- OrigPair D;
- OrigPair S;
- OrigPair X;
- OrigPair Y;
- uint16 PC;
-};
-
-#endif