mirror of https://github.com/bsnes-emu/bsnes.git
87 lines
1.4 KiB
C++
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;
|
|
};
|