[facebook] [skype] [twitter]
[view] bsx-info.md [raw]
MIME: text/plain Modified: 2017/07/13 @ 11:19:57 File Size: 2.38KB

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 Creative Commons Attribution-ShareAlike 4.0 International License.

[dir] Parent Directory