bsnes/supergameboy/interface/interface.hpp

81 lines
1.7 KiB
C++
Executable File

class SuperGameBoy : public Gambatte::VideoBlitter, public Gambatte::InputStateGetter {
public:
Gambatte::GB *gambatte;
//SuperGameBoy::MMIO
unsigned vram_row;
uint8_t vram[320];
struct MMIO {
uint8_t r6000;
uint8_t r6003;
uint8_t r6004;
uint8_t r6005;
uint8_t r6006;
uint8_t r6007;
uint8_t r7000[16];
unsigned r7800;
uint8_t mlt_req;
} mmio;
//SuperGameBoy::Packet
static const char command_name[32][64];
struct Packet {
uint8_t data[16];
uint8_t& operator[](unsigned addr) { return data[addr & 15]; }
};
Packet packet[64];
unsigned packetsize;
unsigned joyp_id;
bool joyp15lock;
bool joyp14lock;
bool pulselock;
bool strobelock;
bool packetlock;
Packet joyp_packet;
uint8_t packetoffset;
uint8_t bitdata, bitoffset;
void joyp_write(bool p15, bool p14);
//SuperGameBoy::Core
uint8_t *romdata, *ramdata, *rtcdata;
unsigned romsize, ramsize, rtcsize;
bool version;
bool init(bool version);
void term();
unsigned run(uint32_t *samplebuffer, unsigned samples);
void save();
void serialize(nall::serializer &s);
void power();
void reset();
void row(unsigned row);
uint8_t read(uint16_t addr);
void write(uint16_t addr, uint8_t data);
void mmio_reset();
void command_1e();
void render(unsigned row);
SuperGameBoy();
~SuperGameBoy();
//Gambatte::VideoBlitter
unsigned bufferWidth, bufferHeight;
uint32_t *buffer;
void setBufferDimensions(unsigned width, unsigned height);
const Gambatte::PixelBuffer inBuffer();
void blit();
//Gambatte::InputStateGetter
Gambatte::InputState inputState;
const Gambatte::InputState& operator()();
};
extern SuperGameBoy supergameboy;