SNES: add Sufami Turbo support (combined rom) (#927)

This commit is contained in:
Sergiy Dvodnenko
2024-10-30 19:16:12 +02:00
committed by GitHub
parent 59916ebc52
commit 2ae40aeadb

View File

@@ -147,12 +147,31 @@ uint8_t* snes_get_header(fileTYPE *f)
*(uint32_t*)(&hdr[8]) = size;
uint32_t addr = find_header(buf, size);
bool is_bsx_bios = false;
if (!memcmp(buf+0x7FC0, "Satellaview BS-X ", 21)) {
is_bsx_bios = true;
}
uint32_t addr = find_header(buf, size);
bool is_sufami_bios = false, is_sufami_base = false, is_sufami_turbo = false;
if (!memcmp(buf, "BANDAI SFC-ADX", 14)) {
uint32_t offs = 0;
while (offs < size) {
if (!memcmp(buf + offs, "BANDAI SFC-ADX", 14)) {
if (!memcmp(buf + offs + 0x10, "SFC-ADX BACKUP", 14)) {
is_sufami_bios = true;
}
else {
if (!is_sufami_base) addr = offs;
is_sufami_turbo = is_sufami_base;
is_sufami_base = true;
}
offs += 1024 * 1024;
}
}
}
if (addr)
{
uint8_t ramsz = buf[addr + RamSize];
@@ -187,6 +206,13 @@ uint8_t* snes_get_header(fileTYPE *f)
if (is_bsx_bios) {
hdr[1] = 0x30;
}
else if (is_sufami_base) {
hdr[1] = 0x20 | (is_sufami_turbo ? 8 : 0) | (is_sufami_bios ? 4 : 0);
const uint8_t rom_sz_tbl[9] = { 0,7,8,9,9,10,10,10,10 };
const uint8_t ram_sz_tbl[5] = { 0,1,2,3,3 };
romsz = buf[addr + 0x36] >= 8 ? rom_sz_tbl[8] : rom_sz_tbl[buf[addr + 0x36] & 0x0F];
ramsz = buf[addr + 0x37] >= 4 ? ram_sz_tbl[4] : ram_sz_tbl[buf[addr + 0x37] & 0x07];
}
else {
//DSPn types 8..B
@@ -268,13 +294,13 @@ uint8_t* snes_get_header(fileTYPE *f)
hdr[1] |= 0x70;
}
//1..2,E..F - reserved for other mappers.
//1,E..F - reserved for other mappers.
}
hdr[2] = 0;
//PAL Regions
if ((buf[addr + CartRegion] >= 0x02 && buf[addr + CartRegion] <= 0x0C) || buf[addr + CartRegion] == 0x11)
if (((buf[addr + CartRegion] >= 0x02 && buf[addr + CartRegion] <= 0x0C) || buf[addr + CartRegion] == 0x11) && !is_sufami_base)
{
hdr[3] |= 1;
}