This commit is contained in:
@ -31,12 +31,12 @@ class Context {
|
|||||||
|
|
||||||
explicit Context(turbine::Context &tctx) noexcept: turbineCtx{tctx} {}
|
explicit Context(turbine::Context &tctx) noexcept: turbineCtx{tctx} {}
|
||||||
Context(Context &other) noexcept = delete;
|
Context(Context &other) noexcept = delete;
|
||||||
Context(Context const&other) noexcept = delete;
|
Context(Context const &other) noexcept = delete;
|
||||||
Context(Context const&&other) noexcept = delete;
|
Context(Context const &&other) noexcept = delete;
|
||||||
virtual ~Context() noexcept = default;
|
virtual ~Context() noexcept = default;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
ox::MemFS const&rom() const noexcept {
|
ox::MemFS const &rom() const noexcept {
|
||||||
return static_cast<ox::MemFS const&>(*turbine::rom(turbineCtx));
|
return static_cast<ox::MemFS const&>(*turbine::rom(turbineCtx));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ ox::Result<ox::UPtr<Context>> init(turbine::Context &tctx, InitParams const&) no
|
|||||||
ox::Error loadBgPalette(
|
ox::Error loadBgPalette(
|
||||||
Context&,
|
Context&,
|
||||||
size_t const palBank,
|
size_t const palBank,
|
||||||
CompactPalette const&palette,
|
CompactPalette const &palette,
|
||||||
size_t const page) noexcept {
|
size_t const page) noexcept {
|
||||||
if (palette.pages.empty()) {
|
if (palette.pages.empty()) {
|
||||||
return {};
|
return {};
|
||||||
@ -90,7 +90,7 @@ ox::Error loadBgPalette(
|
|||||||
|
|
||||||
ox::Error loadSpritePalette(
|
ox::Error loadSpritePalette(
|
||||||
Context&,
|
Context&,
|
||||||
CompactPalette const&palette,
|
CompactPalette const &palette,
|
||||||
size_t const page) noexcept {
|
size_t const page) noexcept {
|
||||||
if (palette.pages.empty()) {
|
if (palette.pages.empty()) {
|
||||||
return {};
|
return {};
|
||||||
@ -118,15 +118,15 @@ void clearCbbs(Context &ctx) noexcept {
|
|||||||
static ox::Error loadTileSheetSet(
|
static ox::Error loadTileSheetSet(
|
||||||
Context &ctx,
|
Context &ctx,
|
||||||
ox::Span<uint16_t> tileMapTargetMem,
|
ox::Span<uint16_t> tileMapTargetMem,
|
||||||
TileSheetSet const&set) noexcept {
|
TileSheetSet const &set) noexcept {
|
||||||
size_t tileWriteIdx = 0;
|
size_t tileWriteIdx = 0;
|
||||||
size_t const bppMod = set.bpp == 4;
|
size_t const bppMod = set.bpp == 4;
|
||||||
for (auto const&entry : set.entries) {
|
for (auto const &entry : set.entries) {
|
||||||
OX_REQUIRE(ts, keel::readObj<CompactTileSheet>(keelCtx(ctx), entry.tilesheet));
|
OX_REQUIRE(ts, keel::readObj<CompactTileSheet>(keelCtx(ctx), entry.tilesheet));
|
||||||
if (set.bpp != ts->bpp && ts->bpp == 8) {
|
if (set.bpp != ts->bpp && ts->bpp == 8) {
|
||||||
return ox::Error(1, "cannot load an 8 BPP tilesheet into a 4 BPP CBB");
|
return ox::Error(1, "cannot load an 8 BPP tilesheet into a 4 BPP CBB");
|
||||||
}
|
}
|
||||||
for (auto const&s : entry.sections) {
|
for (auto const &s : entry.sections) {
|
||||||
auto const cnt = (static_cast<size_t>(s.tiles) * PixelsPerTile) >> bppMod;
|
auto const cnt = (static_cast<size_t>(s.tiles) * PixelsPerTile) >> bppMod;
|
||||||
for (size_t i = 0; i < cnt; ++i) {
|
for (size_t i = 0; i < cnt; ++i) {
|
||||||
auto const begin = static_cast<size_t>(s.begin) * (PixelsPerTile >> bppMod);
|
auto const begin = static_cast<size_t>(s.begin) * (PixelsPerTile >> bppMod);
|
||||||
@ -145,7 +145,7 @@ static ox::Error loadTileSheetSet(
|
|||||||
ox::Error loadBgTileSheet(
|
ox::Error loadBgTileSheet(
|
||||||
Context &ctx,
|
Context &ctx,
|
||||||
unsigned const cbb,
|
unsigned const cbb,
|
||||||
CompactTileSheet const&ts,
|
CompactTileSheet const &ts,
|
||||||
size_t const dstTileIdx,
|
size_t const dstTileIdx,
|
||||||
size_t const srcTileIdx,
|
size_t const srcTileIdx,
|
||||||
size_t const tileCnt) noexcept {
|
size_t const tileCnt) noexcept {
|
||||||
@ -173,8 +173,8 @@ ox::Error loadBgTileSheet(
|
|||||||
ox::Error loadBgTileSheet(
|
ox::Error loadBgTileSheet(
|
||||||
Context &ctx,
|
Context &ctx,
|
||||||
unsigned const cbb,
|
unsigned const cbb,
|
||||||
CompactTileSheet const&ts,
|
CompactTileSheet const &ts,
|
||||||
ox::Optional<unsigned> const&paletteBank) noexcept {
|
ox::Optional<unsigned> const &paletteBank) noexcept {
|
||||||
auto const cnt = (ts.pixels.size() * PixelsPerTile) / (1 + (ts.bpp == 4));
|
auto const cnt = (ts.pixels.size() * PixelsPerTile) / (1 + (ts.bpp == 4));
|
||||||
for (size_t i = 0; i < cnt; ++i) {
|
for (size_t i = 0; i < cnt; ++i) {
|
||||||
auto const srcIdx = i * 2;
|
auto const srcIdx = i * 2;
|
||||||
@ -198,7 +198,7 @@ ox::Error loadBgTileSheet(
|
|||||||
ox::Error loadBgTileSheet(
|
ox::Error loadBgTileSheet(
|
||||||
Context &ctx,
|
Context &ctx,
|
||||||
unsigned const cbb,
|
unsigned const cbb,
|
||||||
TileSheetSet const&set) noexcept {
|
TileSheetSet const &set) noexcept {
|
||||||
auto const bpp = static_cast<unsigned>(set.bpp);
|
auto const bpp = static_cast<unsigned>(set.bpp);
|
||||||
OX_RETURN_ERROR(loadTileSheetSet(ctx, MEM_BG_TILES[cbb], set));
|
OX_RETURN_ERROR(loadTileSheetSet(ctx, MEM_BG_TILES[cbb], set));
|
||||||
// update bpp of all bgs with the updated cbb
|
// update bpp of all bgs with the updated cbb
|
||||||
@ -222,7 +222,7 @@ static void setSpritesBpp(unsigned const bpp) noexcept {
|
|||||||
|
|
||||||
ox::Error loadSpriteTileSheet(
|
ox::Error loadSpriteTileSheet(
|
||||||
Context &ctx,
|
Context &ctx,
|
||||||
CompactTileSheet const&ts,
|
CompactTileSheet const &ts,
|
||||||
bool const loadDefaultPalette) noexcept {
|
bool const loadDefaultPalette) noexcept {
|
||||||
for (size_t i = 0; i < ts.pixels.size(); i += 2) {
|
for (size_t i = 0; i < ts.pixels.size(); i += 2) {
|
||||||
uint16_t v = ts.pixels[i];
|
uint16_t v = ts.pixels[i];
|
||||||
@ -238,7 +238,7 @@ ox::Error loadSpriteTileSheet(
|
|||||||
|
|
||||||
ox::Error loadSpriteTileSheet(
|
ox::Error loadSpriteTileSheet(
|
||||||
Context &ctx,
|
Context &ctx,
|
||||||
TileSheetSet const&set) noexcept {
|
TileSheetSet const &set) noexcept {
|
||||||
auto const bpp = static_cast<unsigned>(set.bpp);
|
auto const bpp = static_cast<unsigned>(set.bpp);
|
||||||
OX_RETURN_ERROR(loadTileSheetSet(ctx, {MEM_SPRITE_TILES, 32 * ox::units::KB}, set));
|
OX_RETURN_ERROR(loadTileSheetSet(ctx, {MEM_SPRITE_TILES, 32 * ox::units::KB}, set));
|
||||||
setSpritesBpp(bpp);
|
setSpritesBpp(bpp);
|
||||||
@ -246,7 +246,7 @@ ox::Error loadSpriteTileSheet(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setBgTile(
|
void setBgTile(
|
||||||
Context &ctx, uint_t const bgIdx, int const column, int const row, BgTile const&tile) noexcept {
|
Context &ctx, uint_t const bgIdx, int const column, int const row, BgTile const &tile) noexcept {
|
||||||
auto const tileIdx = static_cast<std::size_t>(row * tileColumns(ctx) + column);
|
auto const tileIdx = static_cast<std::size_t>(row * tileColumns(ctx) + column);
|
||||||
// see Tonc 9.3
|
// see Tonc 9.3
|
||||||
MEM_BG_MAP[bgIdx][tileIdx] =
|
MEM_BG_MAP[bgIdx][tileIdx] =
|
||||||
@ -275,7 +275,7 @@ bool bgStatus(Context&, unsigned const bg) noexcept {
|
|||||||
|
|
||||||
void setBgStatus(Context&, unsigned const bg, bool const status) noexcept {
|
void setBgStatus(Context&, unsigned const bg, bool const status) noexcept {
|
||||||
constexpr auto Bg0Status = 8;
|
constexpr auto Bg0Status = 8;
|
||||||
const auto mask = static_cast<uint32_t>(status) << (Bg0Status + bg);
|
auto const mask = static_cast<uint32_t>(status) << (Bg0Status + bg);
|
||||||
REG_DISPCTL = REG_DISPCTL | ((REG_DISPCTL & ~mask) | mask);
|
REG_DISPCTL = REG_DISPCTL | ((REG_DISPCTL & ~mask) | mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,7 +312,7 @@ void showSprite(Context&, unsigned const idx) noexcept {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSprite(Context&, uint_t const idx, Sprite const&s) noexcept {
|
void setSprite(Context&, uint_t const idx, Sprite const &s) noexcept {
|
||||||
//oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow");
|
//oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow");
|
||||||
uint16_t const eightBpp = s.bpp == 8;
|
uint16_t const eightBpp = s.bpp == 8;
|
||||||
teagba::addSpriteUpdate({
|
teagba::addSpriteUpdate({
|
||||||
@ -333,7 +333,7 @@ void setSprite(Context&, uint_t const idx, Sprite const&s) noexcept {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
uint_t spriteCount(Context const&) noexcept {
|
uint_t spriteCount(Context const &) noexcept {
|
||||||
return SpriteCount;
|
return SpriteCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -341,7 +341,7 @@ uint_t spriteCount(Context const&) noexcept {
|
|||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
void panic(const char *file, int line, const char *panicMsg, ox::Error const&err) noexcept {
|
void panic(const char *file, int line, const char *panicMsg, ox::Error const &err) noexcept {
|
||||||
using namespace nostalgia::gfx;
|
using namespace nostalgia::gfx;
|
||||||
// reset heap to make sure we have enough memory to allocate context data
|
// reset heap to make sure we have enough memory to allocate context data
|
||||||
OX_ALLOW_UNSAFE_BUFFERS_BEGIN
|
OX_ALLOW_UNSAFE_BUFFERS_BEGIN
|
||||||
|
Reference in New Issue
Block a user