#pragma once #include namespace sm83 { #define INTERRUPT_VBLANK 0x01 #define INTERRUPT_LCD 0x02 #define INTERRUPT_TIMER 0x04 #define INTERRUPT_SERIAL 0x08 #define INTERRUPT_JOYPAD 0x10 #define SM83_OPTION_STOP_ON_INVALID 0 #define SM83_OPTION_BREAK_ON_INTERRUPT 1 #define SM83_OPTION_BREAK_ON_RET 2 #define SM83_NUM_OPTIONS 3 void reset(); void setClock(uint32_t freq); uint32_t getClock(); void interrupt(uint8_t type); uint32_t step(); uint8_t *getRegs(); uint16_t getAF(); uint16_t getBC(); uint16_t getDE(); uint16_t getHL(); uint16_t getSP(); uint16_t getPC(); uint8_t getI(); uint8_t getR(); void setPC(const uint16_t addr); const bool getOption(const int option); void setOption(const int option, const bool value); void toggleOption(const int option); }