From b12858e97498c2ee4719db5672c0e4843c98c421 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 11 Aug 2024 20:04:35 -0700 Subject: [PATCH] GBA: Fix getting game info for multiboot ROMs --- CHANGES | 1 + src/gba/gba.c | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index c2617c316..0adab6673 100644 --- a/CHANGES +++ b/CHANGES @@ -25,6 +25,7 @@ Other fixes: - GB: Fix uninitialized save data when loading undersized temporary saves - GB, GBA Core: Fix memory leak if reloading debug symbols - GB Serialize: Prevent loading invalid states where LY >= 144 in modes other than 1 + - GBA: Fix getting game info for multiboot ROMs - GBA Audio: Fix crash if audio FIFOs and timers get out of sync - GBA Audio: Fix crash in audio subsampling if timing lockstep breaks - GBA Core: Fix loading symbols from ELF files if the file doesn't end with .elf diff --git a/src/gba/gba.c b/src/gba/gba.c index f9c4dad5d..ce7e3478e 100644 --- a/src/gba/gba.c +++ b/src/gba/gba.c @@ -408,10 +408,14 @@ bool GBALoadMB(struct GBA* gba, struct VFile* vf) { gba->mbVf = vf; vf->seek(vf, 0, SEEK_SET); memset(gba->memory.wram, 0, GBA_SIZE_EWRAM); - vf->read(vf, gba->memory.wram, GBA_SIZE_EWRAM); + off_t read = vf->read(vf, gba->memory.wram, GBA_SIZE_EWRAM); + if (read < 0) { + return false; + } if (gba->cpu && gba->memory.activeRegion == GBA_REGION_IWRAM) { gba->cpu->memory.setActiveRegion(gba->cpu, gba->cpu->gprs[ARM_PC]); } + gba->romCrc32 = doCrc32(gba->memory.wram, read); return true; } @@ -856,7 +860,7 @@ void GBAGetGameInfo(const struct GBA* gba, struct mGameInfo* info) { struct GBACartridge* cart = NULL; if (gba->memory.rom) { cart = (struct GBACartridge*) gba->memory.rom; - } else if (gba->isPristine && gba->memory.wram) { + } else if (gba->mbVf && gba->memory.wram) { cart = (struct GBACartridge*) gba->memory.wram; }