I meant to post this ages ago but I was just recently reminded about it.
From what I recall, the current Sunsoft-1 & 2 implementations are incorrect
and a bit of a mess. First of all, m89 and m93 are exactly the same board
with a different jumper config to select between CHR ROM or RAM. They could
easily share the same mapper number and be distinguished by the presence (or
lack of) CHR ROM. Changing mapper numbers is basically impossible, so
personally if I were writing an emulator, I'd just have 89 and 93 share the
same code so they would work either way.
The fact that Fantasy Zone works as m93 is somewhat of a fluke I think, I remember
looking at some sources and saw they took some liberties that the cart does
not have. The 2 chips have a different register format, I don't remember how
emu's got around that, maybe they special cased it, I can't recall. Fantasy Zone most
definitely uses the Sunsoft-1 mapper, except they wired it to bank
PRG ROM instead of CHR ROM. Again, this can be detected by presence of CHR
and both setups could use 184 as mapper.
The only reason this stuff came to my attention was because I could not dump
Fantasy Zone as mapper 89/93 because its register is at $6000 not $8000 and
the format is different.
Here is how they are supposed to work:
Sunsoft-1 class / ines 184:
No bus-conflicts, hard-wired H/V mirroring, register at 6000h
register format:
bits 0-2 select 4K VROM at PPU 0000h or if it uses VRAM, select 16K PRG
at 8000h
bits 4-6 select 4K VROM at PPU 1000h or does nothing if using VRAM
Sunsoft-2 class / ines 89 (and 93)
Has bus-conflicts, mapper-controlled 1-screen mirroring or hardwired H/V,
register at 8000h-FFFFh
register format:
bits 0-2,7 select 8K VROM at PPU 0000h or do nothing if using VRAM**
bit 3 selects NT0 or NT1 or does nothing if hard-wired mirroring
bits 4-6 select 16K PRG at 8000h
**Note: Don't remember if VRAM is only available as a specific "bank #" or
if it's available regardless of VROM bits , probably the latter.
So what do you set the Fantasy Zone mapper too? m93 makes it work in current emulators,
but technically its wrong. Setting it to 184 makes it not work in current
emulators because they weren't aware of the issue. Perhaps m93 can be rigged
as a catch-all, where an emulator can properly implement 89 and 184 and have
93 a hack that works for whatever.
From what I recall, the current Sunsoft-1 & 2 implementations are incorrect
and a bit of a mess. First of all, m89 and m93 are exactly the same board
with a different jumper config to select between CHR ROM or RAM. They could
easily share the same mapper number and be distinguished by the presence (or
lack of) CHR ROM. Changing mapper numbers is basically impossible, so
personally if I were writing an emulator, I'd just have 89 and 93 share the
same code so they would work either way.
The fact that Fantasy Zone works as m93 is somewhat of a fluke I think, I remember
looking at some sources and saw they took some liberties that the cart does
not have. The 2 chips have a different register format, I don't remember how
emu's got around that, maybe they special cased it, I can't recall. Fantasy Zone most
definitely uses the Sunsoft-1 mapper, except they wired it to bank
PRG ROM instead of CHR ROM. Again, this can be detected by presence of CHR
and both setups could use 184 as mapper.
The only reason this stuff came to my attention was because I could not dump
Fantasy Zone as mapper 89/93 because its register is at $6000 not $8000 and
the format is different.
Here is how they are supposed to work:
Sunsoft-1 class / ines 184:
No bus-conflicts, hard-wired H/V mirroring, register at 6000h
register format:
bits 0-2 select 4K VROM at PPU 0000h or if it uses VRAM, select 16K PRG
at 8000h
bits 4-6 select 4K VROM at PPU 1000h or does nothing if using VRAM
Sunsoft-2 class / ines 89 (and 93)
Has bus-conflicts, mapper-controlled 1-screen mirroring or hardwired H/V,
register at 8000h-FFFFh
register format:
bits 0-2,7 select 8K VROM at PPU 0000h or do nothing if using VRAM**
bit 3 selects NT0 or NT1 or does nothing if hard-wired mirroring
bits 4-6 select 16K PRG at 8000h
**Note: Don't remember if VRAM is only available as a specific "bank #" or
if it's available regardless of VROM bits , probably the latter.
So what do you set the Fantasy Zone mapper too? m93 makes it work in current emulators,
but technically its wrong. Setting it to 184 makes it not work in current
emulators because they weren't aware of the issue. Perhaps m93 can be rigged
as a catch-all, where an emulator can properly implement 89 and 184 and have
93 a hack that works for whatever.