1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
/*
* Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
*
* (c) Copyright 1996, 1997, 1998 Gary Henderson (gary@daniver.demon.co.uk) and
* Jerremy Koot (jkoot@snes9x.com)
*
* Super FX C emulator code
* (c) Copyright 1997, 1998 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.
* DOS port code contains the works of other authors. See headers in
* individual files.
*
* Snes9x homepage: 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 "snes9x.h"
#include "memmap.h"
#include "ppu.h"
#include "dsp1.h"
#include "cpuexec.h"
#include "debug.h"
#include "apu.h"
#include "dma.h"
#ifndef ZSNES_FX
#include "fxemu.h"
extern struct FxInit_s SuperFX;
void S9xResetSuperFX ()
{
SuperFX.vFlags = 0; //FX_FLAG_ROM_BUFFER;// | FX_FLAG_ADDRESS_CHECKING;
FxReset (&SuperFX);
}
#endif
void S9xResetCPU ()
{
Registers.PB = 0;
Registers.PC = S9xGetWord (0xFFFC);
Registers.D.W = 0;
Registers.DB = 0;
Registers.SH = 1;
Registers.SL = 0xFF;
Registers.XH = 0;
Registers.YH = 0;
Registers.P.W = 0;
ICPU.ShiftedPB = 0;
ICPU.ShiftedDB = 0;
SetFlags (MemoryFlag | IndexFlag | IRQ | Emulation);
ClearFlags (Decimal);
CPU.Flags = 0;
CPU.Cycles = 0;
CPU.NextEvent = Settings.HBlankStart;
CPU.V_Counter = 0;
CPU.BranchSkip = FALSE;
CPU.NMIActive = FALSE;
CPU.IRQActive = FALSE;
CPU.WaitingForInterrupt = FALSE;
CPU.InDMA = FALSE;
CPU.WhichEvent = HBLANK_START_EVENT;
CPU.PC = NULL;
CPU.PCBase = NULL;
CPU.MemSpeed = 8;
CPU.MemSpeedx2 = 16;
CPU.FastROMSpeed = 8;
CPU.PCAtOpcodeStart = NULL;
CPU.WaitAddress = NULL;
CPU.WaitCounter = 0;
S9xSetPCBase (Registers.PC);
ICPU.Speed = S9xE1M1X1;
ICPU.S9xOpcodes = S9xOpcodesM1X1;
ICPU.CPUExecuting = TRUE;
S9xUnpackStatus();
}
#ifdef ZSNES_FX
EXTERN_C void S9xResetSuperFX ();
#endif
/**********************************************************************************************/
/* S9xReset */
/* This function resets the executer and clears all the ram areas */
/**********************************************************************************************/
void S9xReset (void)
{
if (Settings.SuperFX)
S9xResetSuperFX ();
S9xResetCPU ();
S9xResetPPU ();
S9xResetDMA ();
S9xResetAPU ();
S9xResetDSP1 ();
ZeroMemory (Memory.FillRAM, 0x8000);
memset (Memory.VRAM, 0x55, 0x10000);
memset (Memory.RAM, 0x55, 0x20000);
Settings.Paused = FALSE;
}
|