mirror of https://github.com/bsnes-emu/bsnes.git
123 lines
2.0 KiB
C++
123 lines
2.0 KiB
C++
struct PPU : Thread, MMIO {
|
|
uint8 vram[16384]; //GB = 8192, GBC = 16384
|
|
uint8 oam[160];
|
|
uint8 bgp[4];
|
|
uint8 obp[2][4];
|
|
uint8 bgpd[64];
|
|
uint8 obpd[64];
|
|
|
|
struct Status {
|
|
unsigned lx;
|
|
|
|
//$ff40 LCDC
|
|
bool display_enable;
|
|
bool window_tilemap_select;
|
|
bool window_display_enable;
|
|
bool bg_tiledata_select;
|
|
bool bg_tilemap_select;
|
|
bool ob_size;
|
|
bool ob_enable;
|
|
bool bg_enable;
|
|
|
|
//$ff41 STAT
|
|
bool interrupt_lyc;
|
|
bool interrupt_oam;
|
|
bool interrupt_vblank;
|
|
bool interrupt_hblank;
|
|
|
|
//$ff42 SCY
|
|
uint8 scy;
|
|
|
|
//$ff43 SCX
|
|
uint8 scx;
|
|
|
|
//$ff44 LY
|
|
uint8 ly;
|
|
|
|
//$ff45 LYC
|
|
uint8 lyc;
|
|
|
|
//$ff4a WY
|
|
uint8 wy;
|
|
|
|
//$ff4b WX
|
|
uint8 wx;
|
|
|
|
//$ff4f VBK
|
|
bool vram_bank;
|
|
|
|
//$ff68 BGPI
|
|
bool bgpi_increment;
|
|
uint6 bgpi;
|
|
|
|
//$ff6a OBPI
|
|
bool obpi_increment;
|
|
uint8 obpi;
|
|
} status;
|
|
|
|
uint32 screen[160 * 144];
|
|
|
|
struct Pixel {
|
|
uint16 color;
|
|
uint8 palette;
|
|
bool priority;
|
|
};
|
|
Pixel bg;
|
|
Pixel ob;
|
|
|
|
struct Sprite {
|
|
unsigned x;
|
|
unsigned y;
|
|
unsigned tile;
|
|
unsigned attr;
|
|
unsigned data;
|
|
};
|
|
Sprite sprite[10];
|
|
unsigned sprites;
|
|
|
|
unsigned px;
|
|
|
|
struct Background {
|
|
unsigned attr;
|
|
unsigned data;
|
|
};
|
|
Background background;
|
|
Background window;
|
|
|
|
static void Main();
|
|
void main();
|
|
void add_clocks(unsigned clocks);
|
|
void scanline();
|
|
void frame();
|
|
|
|
unsigned hflip(unsigned data) const;
|
|
|
|
//mmio.cpp
|
|
unsigned vram_addr(uint16 addr) const;
|
|
uint8 mmio_read(uint16 addr);
|
|
void mmio_write(uint16 addr, uint8 data);
|
|
|
|
//dmg.cpp
|
|
void dmg_read_tile(bool select, unsigned x, unsigned y, unsigned& data);
|
|
void dmg_scanline();
|
|
void dmg_run();
|
|
void dmg_run_bg();
|
|
void dmg_run_window();
|
|
void dmg_run_ob();
|
|
|
|
//cgb.cpp
|
|
void cgb_read_tile(bool select, unsigned x, unsigned y, unsigned& attr, unsigned& data);
|
|
void cgb_scanline();
|
|
void cgb_run();
|
|
void cgb_run_bg();
|
|
void cgb_run_window();
|
|
void cgb_run_ob();
|
|
|
|
void power();
|
|
|
|
void serialize(serializer&);
|
|
PPU();
|
|
};
|
|
|
|
extern PPU ppu;
|