Broadcast Satellaview-X Internal ROM Info

The Broadcast Satellaview-X is one of the many pieces of SNES hardware
still not emulated quite right. Most emulators initialize the RAM
to the wrong value, causing extremely odd play times, and do not
emulate the system's extra 128KB of memory.

When I began work on a ROM renaming tool a while ago, I realized I
would need to be able to read information from these ROMS, which were
in a slightly different format than the standard SNES binary.

Here are the offsets, lengths and descriptions of all the bytes that
make up the internal ROM information for a BSX ROM. The addressing
used in the example is HiROM. Subtract $8000 for LoROM addressing.

To detect a BS-X ROM, read 5 bytes from $ffd0. If at least one of them
is less than 0x20, the ROM is likely BS-X. This is because those bytes
are used for title fields in normal carts, so they will be padded out
with 0x20 bytes.

$ffd4 is 0x00 in every dumped BS-X ROM.

$ffc0	- ROM Title (J-ASCII) [21 bytes, string]
$ffd6	- Release date: month [4 bits]
           Multiplier [4 bits]
             Note: All error except 0×00
$ffd7	- Release date: day [4 bits]
           Multiplier [4 bits]
             Multiplier Structure:
             0x0 – 0x3 = X*2
             0x8 – 0xb = X*2+1
               X > 0xb = Error
$ffd8	- ROM Speed [4 bits upper]
           0x0 – 0x2 = SlowROM (200ns)
             X > 0x2 = FastROM (120ns)
           HiROM/LoROM [4 bits lower]
           1=hirom, 0=lorom
$ffd9	- ROM type [4 bits upper]
             0x0 = FullSize+SoundLink
             0x1 = FullSize
             0x2 = PartSize+SoundLink
             0x3 = PartSize
           X > 3 = Error
           Lower 4 bits are 0 in every BS-X ROM
$ffda	- Licensee [1 byte]
           0x33 or 0xff = Reference to $ffb0.
           Grab 2 bytes' ASCII values for real licensee code. Reference
           codes from SNESKART.TXT.
$ffdb	- Version number [1 byte]
           This is an extension. Actual format is 1 + ord(val($ffdb))/10.
$ffdc	- Inverse Checksum [2 bytes]
$ffde	- Checksum [2 bytes]
           Inverse Checksum and Checksum must add up to 0xffff

Copyright (c) 2005 Derrick Sobodash. Some Rights Reserved.

This work is licensed under a CC Attribution-ShareAlike 4.0 International
License (