From 07e0b2437e8e67cbda75a1c335a49a0a44f71dc0 Mon Sep 17 00:00:00 2001 From: Sergey Dvodnenko Date: Sun, 18 Oct 2020 22:09:24 +0300 Subject: [PATCH] snes: fix patch of incorrect BS header values * pcecd: read 256 sectors when length is 0 (Kabuki Itouryodan). * pcecd: send status immediately for commands with instant execution (Bomberman: Panic Bomber), some cleanup * snes: add BSX support * snes: add SPC loading * snes: fix patch of incorrect BS header values --- support/snes/snes.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/support/snes/snes.cpp b/support/snes/snes.cpp index 306734b..ed5722d 100644 --- a/support/snes/snes.cpp +++ b/support/snes/snes.cpp @@ -280,14 +280,23 @@ void snes_patch_bs_header(fileTYPE *f, uint8_t *buf) { if ((f->offset == 0x008000 && (buf[0xFD8] == 0x20 || buf[0xFD8] == 0x30)) || (f->offset == 0x010000 && (buf[0xFD8] == 0x21 || buf[0xFD8] == 0x31))) { - if (buf[0xFD0] == 0xFF && buf[0xFD1] == 0xFF && buf[0xFD2] == 0xFF && buf[0xFD3] == 0xFF) { + if (buf[0xFD0] == 0xF0 || (buf[0xFD1] == 0xFF && buf[0xFD2] == 0xFF && buf[0xFD3] == 0xFF)) { + printf("SNES: Patch bad BS header: offset %04X, bad value %02X %02X %02X %02X\n", 0x7FD0 | (f->offset == 0x008000 ? 0x0000 : 0x8000), buf[0xFD0], buf[0xFD1], buf[0xFD2], buf[0xFD3]); buf[0xFD3] = 0x00; buf[0xFD2] = 0x00; buf[0xFD1] = 0x00; buf[0xFD0] = f->size <= 256 * 1024 ? 0x03 : f->size <= 512 * 1024 ? 0x0F : 0xFF; - printf("SNES: Patch bad BS header: offset %06X, size %d\n", (int)f->offset, (int)f->size); + } + if (buf[0xFD5] >= 0x80) { + printf("SNES: Patch bad BS header: offset %04X, bad value %02X %02X\n", 0x7FD4 | (f->offset == 0x008000 ? 0x0000 : 0x8000), buf[0xFD4], buf[0xFD5]); + buf[0xFD5] = 0xFF; + buf[0xFD4] = 0xFF; + } + if (buf[0xFDA] != 0x33) { + printf("SNES: Patch bad BS header: offset %04X, bad value %02X\n", 0x7FDA | (f->offset == 0x008000 ? 0x0000 : 0x8000), buf[0xFDA]); + buf[0xFDA] = 0x33; } } } \ No newline at end of file