From 734e3dd53bc4a13b59a9cc96f3a48d999f5d118f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 14 Nov 2015 05:02:53 +0100 Subject: move unused files --- src/rops.c | 422 +++++++++++++++++++++++++++------------------------------ src/snaporig.c | 411 ------------------------------------------------------- src/snaporig.h | 350 ----------------------------------------------- 3 files changed, 201 insertions(+), 982 deletions(-) delete mode 100644 src/snaporig.c delete mode 100644 src/snaporig.h (limited to 'src') 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 -#include -#include - -#if defined(__unix) || defined(__linux) || defined(__sun) || defined(__DJGPP) -//#include -#include -#include -#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 -- cgit v1.2.3