⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snes9x.h

📁 著名SFC模拟器Snes9x的源代码。
💻 H
字号:
/* * Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. * * (c) Copyright 1996 - 2001 Gary Henderson (gary@daniver.demon.co.uk) 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@daniver.demon.co.uk). * * 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. */#ifndef _SNES9X_H_#define _SNES9X_H_#define VERSION "1.37"#include <stdio.h>#include <stdlib.h>#ifdef __WIN32__#include "..\wsnes9x.h"#include "..\zlib\zlib.h"#endif#include "port.h"#include "65c816.h"#include "messages.h"#if defined(USE_GLIDE) && !defined(GFX_MULTI_FORMAT)#define GFX_MULTI_FORMAT#endif#define ROM_NAME_LEN 23#ifdef ZLIB#ifndef __WIN32__#include "zlib.h"#endif#define STREAM gzFile#define READ_STREAM(p,l,s) gzread (s,p,l)#define WRITE_STREAM(p,l,s) gzwrite (s,p,l)#define OPEN_STREAM(f,m) gzopen (f,m)#define CLOSE_STREAM(s) gzclose (s)#else#define STREAM FILE *#define READ_STREAM(p,l,s) fread (p,1,l,s)#define WRITE_STREAM(p,l,s) fwrite (p,1,l,s)#define OPEN_STREAM(f,m) fopen (f,m)#define CLOSE_STREAM(s) fclose (s)#endif/* SNES screen width and height */#define SNES_WIDTH		256#define SNES_HEIGHT		224#define SNES_HEIGHT_EXTENDED	239#define IMAGE_WIDTH		(Settings.SupportHiRes ? SNES_WIDTH * 2 : SNES_WIDTH)#define IMAGE_HEIGHT		(Settings.SupportHiRes ? SNES_HEIGHT_EXTENDED * 2 : SNES_HEIGHT_EXTENDED)#define SNES_MAX_NTSC_VCOUNTER  262#define SNES_MAX_PAL_VCOUNTER   312#define SNES_HCOUNTER_MAX	342#define SPC700_TO_65C816_RATIO	2#define AUTO_FRAMERATE		200// NTSC master clock signal 21.47727MHz// PPU: master clock / 4// 1 / PPU clock * 342 -> 63.695us// 63.695us / (1 / 3.579545MHz) -> 228 cycles per scanline// From Earth Worm Jim: APU executes an average of 65.14285714 cycles per// scanline giving an APU clock speed of 1.022731096MHz// PAL master clock signal 21.28137MHz// PPU: master clock / 4// 1 / PPU clock * 342 -> 64.281us// 64.281us / (1 / 3.546895MHz) -> 228 cycles per scanline.#define SNES_SCANLINE_TIME (63.695e-6)#define SNES_CLOCK_SPEED (3579545)#define SNES_CLOCK_LEN (1.0 / SNES_CLOCK_SPEED)#ifdef VAR_CYCLES#define SNES_CYCLES_PER_SCANLINE ((uint32) ((SNES_SCANLINE_TIME / SNES_CLOCK_LEN) * 6 + 0.5))#else#define SNES_CYCLES_PER_SCANLINE ((uint32) (SNES_SCANLINE_TIME / SNES_CLOCK_LEN + 0.5))#endif#define SNES_TR_MASK	    (1 << 4)#define SNES_TL_MASK	    (1 << 5)#define SNES_X_MASK	    (1 << 6)#define SNES_A_MASK	    (1 << 7)#define SNES_RIGHT_MASK	    (1 << 8)#define SNES_LEFT_MASK	    (1 << 9)#define SNES_DOWN_MASK	    (1 << 10)#define SNES_UP_MASK	    (1 << 11)#define SNES_START_MASK	    (1 << 12)#define SNES_SELECT_MASK    (1 << 13)#define SNES_Y_MASK	    (1 << 14)#define SNES_B_MASK	    (1 << 15)enum {    SNES_MULTIPLAYER5,    SNES_JOYPAD,    SNES_MOUSE_SWAPPED,    SNES_MOUSE,    SNES_SUPERSCOPE,    SNES_MAX_CONTROLLER_OPTIONS};#define DEBUG_MODE_FLAG	    (1 << 0)#define TRACE_FLAG	    (1 << 1)#define SINGLE_STEP_FLAG    (1 << 2)#define BREAK_FLAG	    (1 << 3)#define SCAN_KEYS_FLAG	    (1 << 4)#define SAVE_SNAPSHOT_FLAG  (1 << 5)#define DELAYED_NMI_FLAG    (1 << 6)#define NMI_FLAG	    (1 << 7)#define PROCESS_SOUND_FLAG  (1 << 8)#define FRAME_ADVANCE_FLAG  (1 << 9)#define DELAYED_NMI_FLAG2   (1 << 10)#define IRQ_PENDING_FLAG    (1 << 11)#ifdef VAR_CYCLES#define ONE_CYCLE 6#define TWO_CYCLES 12#else#define ONE_CYCLE 1#define TWO_CYCLES 2#endifstruct SCPUState{    uint32  Flags;    bool8   BranchSkip;    bool8   NMIActive;    bool8   IRQActive;    bool8   WaitingForInterrupt;    bool8   InDMA;    uint8   WhichEvent;    uint8   *PC;    uint8   *PCBase;    uint8   *PCAtOpcodeStart;    uint8   *WaitAddress;    uint32  WaitCounter;    long   Cycles;    long   NextEvent;    long   V_Counter;    long   MemSpeed;    long   MemSpeedx2;    long   FastROMSpeed;    uint32 AutoSaveTimer;    bool8  SRAMModified;    uint32 NMITriggerPoint;    bool8  BRKTriggered;    bool8  TriedInterleavedMode2;    uint32 NMICycleCount;    uint32 IRQCycleCount;};#define HBLANK_START_EVENT 0#define HBLANK_END_EVENT 1#define HTIMER_BEFORE_EVENT 2#define HTIMER_AFTER_EVENT 3#define NO_EVENT 4struct SSettings{    // CPU options    bool8  APUEnabled;    bool8  Shutdown;    uint8  SoundSkipMethod;    long   H_Max;    long   HBlankStart;    long   CyclesPercentage;    bool8  DisableIRQ;    bool8  Paused;    bool8  ForcedPause;    bool8  StopEmulation;    // Tracing options    bool8  TraceDMA;    bool8  TraceHDMA;    bool8  TraceVRAM;    bool8  TraceUnknownRegisters;    bool8  TraceDSP;    // Joystick options    bool8  SwapJoypads;    bool8  JoystickEnabled;    // ROM timing options (see also H_Max above)    bool8  ForcePAL;    bool8  ForceNTSC;    bool8  PAL;    uint32 FrameTimePAL;    uint32 FrameTimeNTSC;    uint32 FrameTime;    uint32 SkipFrames;    // ROM image options    bool8  ForceLoROM;    bool8  ForceHiROM;    bool8  ForceHeader;    bool8  ForceNoHeader;    bool8  ForceInterleaved;    bool8  ForceInterleaved2;    bool8  ForceNotInterleaved;    // Peripherial options    bool8  ForceSuperFX;    bool8  ForceNoSuperFX;    bool8  ForceDSP1;    bool8  ForceNoDSP1;    bool8  ForceSA1;    bool8  ForceNoSA1;    bool8  ForceC4;    bool8  ForceNoC4;    bool8  ForceSDD1;    bool8  ForceNoSDD1;    bool8  MultiPlayer5;    bool8  Mouse;    bool8  SuperScope;    bool8  SRTC;    uint32 ControllerOption;        bool8  ShutdownMaster;    bool8  MultiPlayer5Master;    bool8  SuperScopeMaster;    bool8  MouseMaster;    bool8  SuperFX;    bool8  DSP1Master;    bool8  SA1;    bool8  C4;    bool8  SDD1;    // Sound options    uint32 SoundPlaybackRate;    bool8  TraceSoundDSP;    bool8  Stereo;    bool8  ReverseStereo;    bool8  SixteenBitSound;    int    SoundBufferSize;    int    SoundMixInterval;    bool8  SoundEnvelopeHeightReading;    bool8  DisableSoundEcho;    bool8  DisableSampleCaching;    bool8  DisableMasterVolume;    bool8  SoundSync;    bool8  InterpolatedSound;    bool8  ThreadSound;    bool8  Mute;    bool8  NextAPUEnabled;    bool8  AltSampleDecode;    // Graphics options    bool8  SixteenBit;    bool8  Transparency;    bool8  SupportHiRes;    bool8  Mode7Interpolate;    // SNES graphics options    bool8  BGLayering;    bool8  DisableGraphicWindows;    bool8  ForceTransparency;    bool8  ForceNoTransparency;    bool8  DisableHDMA;    bool8  DisplayFrameRate;    // Others    bool8  NetPlay;    bool8  NetPlayServer;    char   ServerName [128];    int    Port;    bool8  GlideEnable;    int32  AutoSaveDelay; // Time in seconds before S-RAM auto-saved if modified.    bool8  ApplyCheats;    bool8  TurboMode;    uint32 TurboSkipFrames;    uint32 AutoMaxSkipFrames;    // Fixes for individual games    uint32 Mode7CentreMask;    bool8  ChuckRock;    bool8  StarfoxHack;    bool8  WinterGold;    bool8  Dezaemon;    bool8  WrestlemaniaArcade;    bool8  BS;	// Japanese Satellite System games.#ifdef __WIN32__    int    SoundDriver;#endif};START_EXTERN_Cextern struct SSettings Settings;extern struct SCPUState CPU;extern char String [513];void S9xExit ();void S9xMessage (int type, int number, const char *message);END_EXTERN_Cenum {    PAUSE_NETPLAY_CONNECT = (1 << 0),    PAUSE_TOGGLE_FULL_SCREEN = (1 << 1),    PAUSE_EXIT = (1 << 2),    PAUSE_MENU = (1 << 3),    PAUSE_INACTIVE_WINDOW = (1 << 4),    PAUSE_WINDOW_ICONISED = (1 << 5),    PAUSE_RESTORE_GUI = (1 << 6),    PAUSE_FREEZE_FILE = (1 << 7)};void S9xSetPause (uint32 mask);void S9xClearPause (uint32 mask);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -