BizHawk/waterbox/bsnescore/bsnes/sfc/ppu/background.hpp

86 lines
1.7 KiB
C++

struct Background {
Background(uint id) : id(id) {}
alwaysinline auto hires() const -> bool;
//background.cpp
auto frame() -> void;
auto scanline() -> void;
auto begin() -> void;
auto fetchNameTable() -> void;
auto fetchOffset(uint y) -> void;
auto fetchCharacter(uint index, bool half = 0) -> void;
auto run(bool screen) -> void;
auto power() -> void;
//mode7.cpp
alwaysinline auto clip(int n) -> int;
auto runMode7() -> void;
auto serialize(serializer&) -> void;
struct ID { enum : uint { BG1, BG2, BG3, BG4 }; };
const uint id;
struct Mode { enum : uint { BPP2, BPP4, BPP8, Mode7, Inactive }; };
struct ScreenSize { enum : uint { Size32x32, Size32x64, Size64x32, Size64x64 }; };
struct TileSize { enum : uint { Size8x8, Size16x16 }; };
struct Screen { enum : uint { Above, Below }; };
struct IO {
uint16 tiledataAddress;
uint16 screenAddress;
uint2 screenSize;
uint1 tileSize;
uint8 mode;
uint8 priority[2];
uint1 aboveEnable;
uint1 belowEnable;
uint16 hoffset;
uint16 voffset;
} io;
struct Pixel {
uint8 priority; //0 = none (transparent)
uint8 palette;
uint3 paletteGroup;
} above, below;
struct Output {
Pixel above;
Pixel below;
} output;
struct Mosaic {
uint1 enable;
uint16 hcounter;
uint16 hoffset;
Pixel pixel;
} mosaic;
struct OffsetPerTile {
//set in BG3 only; used by BG1 and BG2
uint16 hoffset;
uint16 voffset;
} opt;
struct Tile {
uint16 address;
uint10 character;
uint8 palette;
uint3 paletteGroup;
uint8 priority;
uint1 hmirror;
uint1 vmirror;
uint16 data[4];
} tiles[66];
uint7 renderingIndex;
uint3 pixelCounter;
friend class PPU;
};