mirror of https://github.com/bsnes-emu/bsnes.git
83 lines
1.3 KiB
C++
83 lines
1.3 KiB
C++
struct Sprite {
|
|
struct SpriteItem {
|
|
uint16 x;
|
|
uint16 y;
|
|
uint8 character;
|
|
bool nameselect;
|
|
bool vflip;
|
|
bool hflip;
|
|
uint8 priority;
|
|
uint8 palette;
|
|
bool size;
|
|
unsigned width() const;
|
|
unsigned height() const;
|
|
} list[128];
|
|
|
|
struct TileItem {
|
|
uint16 x;
|
|
uint16 priority;
|
|
uint16 palette;
|
|
bool hflip;
|
|
uint8 d0, d1, d2, d3;
|
|
};
|
|
|
|
struct State {
|
|
unsigned x;
|
|
unsigned y;
|
|
|
|
unsigned item_count;
|
|
unsigned tile_count;
|
|
|
|
bool active;
|
|
uint8 item[2][32];
|
|
TileItem tile[2][34];
|
|
} t;
|
|
|
|
struct Regs {
|
|
bool main_enable;
|
|
bool sub_enable;
|
|
bool interlace;
|
|
|
|
uint3 base_size;
|
|
uint2 nameselect;
|
|
uint16 tiledata_addr;
|
|
uint8 first_sprite;
|
|
|
|
unsigned priority0;
|
|
unsigned priority1;
|
|
unsigned priority2;
|
|
unsigned priority3;
|
|
|
|
bool time_over;
|
|
bool range_over;
|
|
} regs;
|
|
|
|
struct Output {
|
|
struct Pixel {
|
|
unsigned priority; //0 = none (transparent)
|
|
uint8 palette;
|
|
} main, sub;
|
|
} output;
|
|
|
|
//list.cpp
|
|
void update(unsigned addr, uint8 data);
|
|
void synchronize();
|
|
|
|
//sprite.cpp
|
|
void address_reset();
|
|
void set_first_sprite();
|
|
void frame();
|
|
void scanline();
|
|
void run();
|
|
void tilefetch();
|
|
void reset();
|
|
|
|
bool on_scanline(SpriteItem&);
|
|
|
|
void serialize(serializer&);
|
|
Sprite(PPU& self);
|
|
|
|
PPU& self;
|
|
friend class PPU;
|
|
};
|