From abb46602caf705a58514cdae7d8f5f28eb4a3c14 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 27 Feb 2025 02:38:04 -0800 Subject: [PATCH] GB: Allow use of CGB-E and AGB-0 BIOS versions (closes #3427) --- CHANGES | 1 + src/gb/gb.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/CHANGES b/CHANGES index 675d8c08d..d64aec336 100644 --- a/CHANGES +++ b/CHANGES @@ -44,6 +44,7 @@ Misc: - Core: Add MD5 hashing for ROMs - Core: Add support for specifying an arbitrary portable directory - GB: Prevent incompatible BIOSes from being used on differing models + - GB: Allow use of CGB-E and AGB-0 BIOS versions (closes mgba.io/i/3427) - GB Serialize: Add missing savestate support for MBC6 and NT (newer) - GBA: Improve detection of valid ELF ROMs - GBA Audio: Remove broken XQ audio pending rewrite diff --git a/src/gb/gb.c b/src/gb/gb.c index 875cbf86e..53b63f498 100644 --- a/src/gb/gb.c +++ b/src/gb/gb.c @@ -35,7 +35,9 @@ static const uint8_t _registeredTrademark[] = {0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA #define SGB2_BIOS_CHECKSUM 0X53D0DD63 #define CGB_BIOS_CHECKSUM 0x41884E46 #define CGB0_BIOS_CHECKSUM 0xE8EF5318 +#define CGBE_BIOS_CHECKSUM 0xE95DC95D #define AGB_BIOS_CHECKSUM 0xFFD6B0F1 +#define AGB0_BIOS_CHECKSUM 0x570337EA mLOG_DEFINE_CATEGORY(GB, "GB", "gb"); @@ -550,7 +552,9 @@ bool GBIsBIOS(struct VFile* vf) { case SGB2_BIOS_CHECKSUM: case CGB_BIOS_CHECKSUM: case CGB0_BIOS_CHECKSUM: + case CGBE_BIOS_CHECKSUM: case AGB_BIOS_CHECKSUM: + case AGB0_BIOS_CHECKSUM: return true; default: return false; @@ -567,7 +571,9 @@ bool GBIsCompatibleBIOS(struct VFile* vf, enum GBModel model) { return model < GB_MODEL_CGB; case CGB_BIOS_CHECKSUM: case CGB0_BIOS_CHECKSUM: + case CGBE_BIOS_CHECKSUM: case AGB_BIOS_CHECKSUM: + case AGB0_BIOS_CHECKSUM: return model >= GB_MODEL_CGB; default: return false; @@ -862,9 +868,11 @@ void GBDetectModel(struct GB* gb) { break; case CGB_BIOS_CHECKSUM: case CGB0_BIOS_CHECKSUM: + case CGBE_BIOS_CHECKSUM: gb->model = GB_MODEL_CGB; break; case AGB_BIOS_CHECKSUM: + case AGB0_BIOS_CHECKSUM: gb->model = GB_MODEL_AGB; break; default: