bsnes/higan/sfc/ppu/sprite/sprite.hpp

90 lines
1.5 KiB
C++

struct Sprite {
struct Object {
uint9 x;
uint8 y;
uint8 character;
uint1 nameselect;
uint1 vflip;
uint1 hflip;
uint2 priority;
uint3 palette;
uint1 size;
alwaysinline auto width() const -> uint;
alwaysinline auto height() const -> uint;
} list[128];
struct Item {
bool valid;
uint7 index;
};
struct Tile {
bool valid;
uint9 x;
uint2 priority;
uint8 palette;
uint1 hflip;
uint8 d0, d1, d2, d3;
};
struct State {
uint x;
uint y;
uint item_count;
uint tile_count;
bool active;
Item item[2][32];
Tile tile[2][34];
} t;
struct Regs {
bool main_enable;
bool sub_enable;
bool interlace;
uint3 base_size;
uint2 nameselect;
uint16 tiledata_addr;
uint7 first_sprite;
uint priority0;
uint priority1;
uint priority2;
uint priority3;
bool time_over;
bool range_over;
} regs;
struct Output {
struct Pixel {
uint priority; //0 = none (transparent)
uint8 palette;
} main, sub;
} output;
Sprite(PPU& self);
//list.cpp
auto update(uint10 addr, uint8 data) -> void;
auto synchronize() -> void;
//sprite.cpp
alwaysinline auto address_reset() -> void;
alwaysinline auto set_first_sprite() -> void;
auto frame() -> void;
auto scanline() -> void;
auto run() -> void;
auto tilefetch() -> void;
auto reset() -> void;
auto on_scanline(Object&) -> bool;
auto serialize(serializer&) -> void;
PPU& self;
friend class PPU;
};