From e13048d07b90c81f5ac07e99f76cc89fafac6935 Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Thu, 3 Oct 2024 16:21:10 +0300 Subject: [PATCH] Improve ISX compatibility --- Core/gb.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Core/gb.c b/Core/gb.c index 050739b82..445f84ef9 100644 --- a/Core/gb.c +++ b/Core/gb.c @@ -559,7 +559,12 @@ int GB_load_isx(GB_gameboy_t *gb, const char *path) READ(address); address = LE16(address); - address &= 0x3FFF; + if (bank) { + address &= 0x3FFF; + } + else { + address &= 0x7FFF; + } READ(length); length = LE16(length); @@ -710,6 +715,17 @@ done:; } } + // Inject a correct checksum, the official linker doesn't always fix it, which breaks the official boot ROMs + uint8_t original_checksum = gb->rom[0x14d]; + gb->rom[0x14d] = 0; + for (unsigned addr = 0x0134; addr <= 0x014C; addr++) { + gb->rom[0x14d] -= gb->rom[addr] + 1; + } + + if (original_checksum != gb->rom[0x14d]) { + GB_log(gb, "This ROM's header checksum has been automatically corrected\n"); + } + if (old_rom) { free(old_rom); }