bsnes/higan/sfc/ppu/object.hpp

87 lines
1.4 KiB
C++

struct OAM {
auto read(uint10 address) -> uint8;
auto write(uint10 address, uint8 data) -> void;
struct Object {
alwaysinline auto width() const -> uint;
alwaysinline auto height() const -> uint;
uint9 x;
uint8 y;
uint8 character;
uint1 nameselect;
uint1 vflip;
uint1 hflip;
uint2 priority;
uint3 palette;
uint1 size;
} object[128];
};
struct Object {
alwaysinline auto addressReset() -> void;
alwaysinline auto setFirstSprite() -> void;
auto frame() -> void;
auto scanline() -> void;
auto run() -> void;
auto tilefetch() -> void;
auto power() -> void;
auto onScanline(PPU::OAM::Object&) -> bool;
auto serialize(serializer&) -> void;
OAM oam;
struct IO {
bool aboveEnable;
bool belowEnable;
bool interlace;
uint3 baseSize;
uint2 nameselect;
uint16 tiledataAddress;
uint7 firstSprite;
uint priority[4];
bool timeOver;
bool rangeOver;
} io;
struct Item {
bool valid;
uint7 index;
};
struct Tile {
bool valid;
uint9 x;
uint2 priority;
uint8 palette;
uint1 hflip;
uint32 data;
};
struct State {
uint x;
uint y;
uint itemCount;
uint tileCount;
bool active;
Item item[2][32];
Tile tile[2][34];
} t;
struct Output {
struct Pixel {
uint priority; //0 = none (transparent)
uint8 palette;
} above, below;
} output;
friend class PPU;
};