rlm@1: #ifndef VBA_SYSTEM_H rlm@1: #define VBA_SYSTEM_H rlm@1: rlm@1: #if _MSC_VER > 1000 rlm@1: #pragma once rlm@1: #endif // _MSC_VER > 1000 rlm@1: rlm@1: #include "zlib.h" rlm@1: #include "../Port.h" rlm@1: rlm@1: // c++ lacks a way to implement Smart Referrences or Delphi-Style Properties rlm@1: // in order to maintain consistency, value-copied things should not be modified too often rlm@1: struct EmulatedSystem rlm@1: { rlm@1: // main emulation function rlm@92: int (*emuMain)(int); rlm@1: // reset emulator rlm@1: void (*emuReset)(bool); rlm@1: // clean up memory rlm@1: void (*emuCleanUp)(); rlm@1: // load battery file rlm@1: bool (*emuReadBattery)(const char *); rlm@1: // write battery file rlm@1: bool (*emuWriteBattery)(const char *); rlm@1: // load battery file from stream rlm@1: bool (*emuReadBatteryFromStream)(gzFile); rlm@1: // write battery file to stream rlm@1: bool (*emuWriteBatteryToStream)(gzFile); rlm@1: // load state rlm@1: bool (*emuReadState)(const char *); rlm@1: // save state rlm@1: bool (*emuWriteState)(const char *); rlm@1: // load state from stream rlm@1: bool (*emuReadStateFromStream)(gzFile); rlm@1: // save state to stream rlm@1: bool (*emuWriteStateToStream)(gzFile); rlm@1: // load memory state (rewind) rlm@1: bool (*emuReadMemState)(char *, int); rlm@1: // write memory state (rewind) rlm@1: bool (*emuWriteMemState)(char *, int); rlm@1: // write PNG file rlm@1: bool (*emuWritePNG)(const char *); rlm@1: // write BMP file rlm@1: bool (*emuWriteBMP)(const char *); rlm@1: // emulator update CPSR (ARM only) rlm@1: void (*emuUpdateCPSR)(); rlm@1: // emulator has debugger rlm@1: bool emuHasDebugger; rlm@1: // clock ticks to emulate rlm@1: int emuCount; rlm@1: }; rlm@1: rlm@1: // why not convert the value type only when doing I/O? rlm@1: struct EmulatedSystemCounters rlm@1: { rlm@1: int32 frameCount; rlm@1: int32 lagCount; rlm@1: int32 extraCount; rlm@1: bool8 lagged; rlm@1: bool8 laggedLast; rlm@1: }; rlm@1: rlm@1: extern struct EmulatedSystem theEmulator; rlm@1: extern struct EmulatedSystemCounters systemCounters; rlm@1: rlm@1: extern void log(const char *, ...); rlm@1: rlm@1: extern void systemGbPrint(u8 *, int, int, int, int); rlm@1: extern int systemScreenCapture(int); rlm@1: extern void systemRefreshScreen(); rlm@1: extern void systemRenderFrame(); rlm@1: extern void systemRedrawScreen(); rlm@1: extern void systemUpdateListeners(); rlm@1: // updates the joystick data rlm@1: extern void systemSetSensorX(int32); rlm@1: extern void systemSetSensorY(int32); rlm@1: extern void systemResetSensor(); rlm@1: extern int32 systemGetSensorX(); rlm@1: extern int32 systemGetSensorY(); rlm@1: extern void systemUpdateMotionSensor(int); rlm@1: extern int systemGetDefaultJoypad(); rlm@1: extern void systemSetDefaultJoypad(int); rlm@1: extern bool systemReadJoypads(); rlm@1: // return information about the given joystick, -1 for default joystick... the bool is for if motion sensor should be handled rlm@1: // too rlm@1: extern u32 systemGetOriginalJoypad(int, bool); rlm@1: extern u32 systemGetJoypad(int, bool); rlm@1: extern void systemSetJoypad(int, u32); rlm@1: extern void systemClearJoypads(); rlm@1: extern void systemMessage(int, const char *, ...); rlm@1: extern void systemScreenMessage(const char *msg, int slot = 0, int duration = 3000, const char *colorList = NULL); rlm@1: extern bool systemSoundInit(); rlm@1: extern void systemSoundShutdown(); rlm@1: extern void systemSoundPause(); rlm@1: extern void systemSoundResume(); rlm@1: extern bool systemSoundIsPaused(); rlm@1: extern void systemSoundReset(); rlm@1: extern void systemSoundWriteToBuffer(); rlm@1: extern void systemSoundClearBuffer(); rlm@1: extern bool systemSoundCanChangeQuality(); rlm@1: extern bool systemSoundSetQuality(int quality); rlm@1: extern u32 systemGetClock(); rlm@1: extern void systemSetTitle(const char *); rlm@1: extern void systemShowSpeed(int); rlm@1: extern void systemIncreaseThrottle(); rlm@1: extern void systemDecreaseThrottle(); rlm@1: extern void systemSetThrottle(int); rlm@1: extern int systemGetThrottle(); rlm@1: extern void systemFrame(); rlm@1: extern int systemFramesToSkip(); rlm@1: extern bool systemIsEmulating(); rlm@1: extern void systemGbBorderOn(); rlm@1: extern bool systemIsRunningGBA(); rlm@1: extern bool systemIsSpedUp(); rlm@1: extern bool systemIsPaused(); rlm@1: extern void systemSetPause(bool pause); rlm@1: extern bool systemPauseOnFrame(); rlm@1: rlm@1: extern int systemCartridgeType; rlm@1: extern int systemSpeed; rlm@1: extern bool systemSoundOn; rlm@1: extern u16 systemColorMap16[0x10000]; rlm@1: extern u32 systemColorMap32[0x10000]; rlm@1: extern u16 systemGbPalette[24]; rlm@1: extern int systemRedShift; rlm@1: extern int systemGreenShift; rlm@1: extern int systemBlueShift; rlm@1: extern int systemColorDepth; rlm@1: extern int systemDebug; rlm@1: extern int systemVerbose; rlm@1: extern int systemFrameSkip; rlm@1: extern int systemSaveUpdateCounter; rlm@1: rlm@1: #define SYSTEM_SAVE_UPDATED 30 rlm@1: #define SYSTEM_SAVE_NOT_UPDATED 0 rlm@1: rlm@1: #endif // VBA_SYSTEM_H