bsnes/higan/sfc/alt/ppu-performance/mmio/mmio.hpp

96 lines
1.5 KiB
C++
Executable File

public:
uint8 mmio_read(unsigned addr);
void mmio_write(unsigned addr, uint8 data);
private:
struct Regs {
//internal
uint8 ppu1_mdr;
uint8 ppu2_mdr;
uint16 vram_readbuffer;
uint8 oam_latchdata;
uint8 cgram_latchdata;
uint8 bgofs_latchdata;
uint8 mode7_latchdata;
bool counters_latched;
bool latch_hcounter;
bool latch_vcounter;
//$2100
bool display_disable;
unsigned display_brightness;
//$2102-$2103
uint16 oam_baseaddr;
uint16 oam_addr;
bool oam_priority;
//$2105
bool bg3_priority;
unsigned bgmode;
//$210d
uint16 mode7_hoffset;
//$210e
uint16 mode7_voffset;
//$2115
bool vram_incmode;
unsigned vram_mapping;
unsigned vram_incsize;
//$2116-$2117
uint16 vram_addr;
//$211a
unsigned mode7_repeat;
bool mode7_vflip;
bool mode7_hflip;
//$211b-$2120
uint16 m7a;
uint16 m7b;
uint16 m7c;
uint16 m7d;
uint16 m7x;
uint16 m7y;
//$2121
uint16 cgram_addr;
//$2126-$212a
unsigned window_one_left;
unsigned window_one_right;
unsigned window_two_left;
unsigned window_two_right;
//$2133
bool mode7_extbg;
bool pseudo_hires;
bool overscan;
bool interlace;
//$213c
uint16 hcounter;
//$213d
uint16 vcounter;
} regs;
uint16 get_vram_addr();
uint8 vram_read(unsigned addr);
void vram_write(unsigned addr, uint8 data);
uint8 oam_read(unsigned addr);
void oam_write(unsigned addr, uint8 data);
uint8 cgram_read(unsigned addr);
void cgram_write(unsigned addr, uint8 data);
void mmio_update_video_mode();
void mmio_reset();