From ce97e265a3e26f7b1b25de872700fe3ef16fb450 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 21 Nov 2020 18:10:55 -0800 Subject: [PATCH] GB Video: Add constants for OBJ maxima --- include/mgba/gb/interface.h | 2 ++ include/mgba/internal/gb/video.h | 7 +++++-- src/gb/extra/proxy.c | 4 ++-- src/gb/renderers/software.c | 2 +- src/gb/video.c | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/mgba/gb/interface.h b/include/mgba/gb/interface.h index e963bd563..20eccd38e 100644 --- a/include/mgba/gb/interface.h +++ b/include/mgba/gb/interface.h @@ -10,6 +10,8 @@ CXX_GUARD_START +#include + enum GBModel { GB_MODEL_AUTODETECT = 0xFF, GB_MODEL_DMG = 0x00, diff --git a/include/mgba/internal/gb/video.h b/include/mgba/internal/gb/video.h index cd5a1e8d1..35f1b8fb2 100644 --- a/include/mgba/internal/gb/video.h +++ b/include/mgba/internal/gb/video.h @@ -31,6 +31,9 @@ enum { GB_VIDEO_TOTAL_LENGTH = 70224, + GB_VIDEO_MAX_OBJ = 40, + GB_VIDEO_MAX_LINE_OBJ = 10, + GB_BASE_MAP = 0x1800, GB_SIZE_MAP = 0x0400, @@ -63,8 +66,8 @@ struct GBObj { }; union GBOAM { - struct GBObj obj[40]; - uint8_t raw[160]; + struct GBObj obj[GB_VIDEO_MAX_OBJ]; + uint8_t raw[GB_VIDEO_MAX_OBJ * 4]; }; struct mCacheSet; diff --git a/src/gb/extra/proxy.c b/src/gb/extra/proxy.c index fd5d8d6cf..266bb634a 100644 --- a/src/gb/extra/proxy.c +++ b/src/gb/extra/proxy.c @@ -119,7 +119,7 @@ void GBVideoProxyRendererDeinit(struct GBVideoRenderer* renderer) { static bool _parsePacket(struct mVideoLogger* logger, const struct mVideoLoggerDirtyInfo* item) { struct GBVideoProxyRenderer* proxyRenderer = logger->context; uint8_t sgbPacket[16]; - struct GBObj legacyBuffer[40]; + struct GBObj legacyBuffer[GB_VIDEO_MAX_OBJ]; switch (item->type) { case DIRTY_REGISTER: proxyRenderer->backend->writeVideoRegister(proxyRenderer->backend, item->address, item->value); @@ -160,7 +160,7 @@ static bool _parsePacket(struct mVideoLogger* logger, const struct mVideoLoggerD case DIRTY_BUFFER: switch (item->address) { case BUFFER_OAM: - if (item->value2 / sizeof(struct GBObj) > 40) { + if (item->value2 / sizeof(struct GBObj) > GB_VIDEO_MAX_OBJ) { return false; } logger->readData(logger, legacyBuffer, item->value2, true); diff --git a/src/gb/renderers/software.c b/src/gb/renderers/software.c index f0436ee85..7426d4a5c 100644 --- a/src/gb/renderers/software.c +++ b/src/gb/renderers/software.c @@ -508,7 +508,7 @@ static void _cleanOAM(struct GBVideoSoftwareRenderer* renderer, int y) { } int o = 0; int i; - for (i = 0; i < 40 && o < 10; ++i) { + for (i = 0; i < GB_VIDEO_MAX_OBJ && o < GB_VIDEO_MAX_LINE_OBJ; ++i) { uint8_t oy = renderer->d.oam->obj[i].y; if (y < oy - 16 || y >= oy - 16 + spriteHeight) { continue; diff --git a/src/gb/video.c b/src/gb/video.c index 072e9db98..9826b601f 100644 --- a/src/gb/video.c +++ b/src/gb/video.c @@ -409,7 +409,7 @@ static void _cleanOAM(struct GBVideo* video, int y) { } int o = 0; int i; - for (i = 0; i < 40 && o < 10; ++i) { + for (i = 0; i < GB_VIDEO_MAX_OBJ && o < GB_VIDEO_MAX_LINE_OBJ; ++i) { uint8_t oy = video->oam.obj[i].y; if (y < oy - 16 || y >= oy - 16 + spriteHeight) { continue;