SNES Development
BS-X Satellaview Header

The header will be at 0x7xxx (for LoROM) or 0xFxxx (for HiROM).

xFB0      = 01
xFB2      = ?? Unknown, gets compared to 0001
xFC0-xFCF = Title
xFD0-xFD3 = Internal Size (32MBit max)
xFD4-xFD5 = Limited Starts
xFD6      = Date - Month [4 bits]
xFD7      = Date - day [5 bits]
xFD8      = ROM Speed (Upper 4 bits) & HiROM / LoROM (Lower 4 bits)
xFD9      = Type (Upper 4 bits)
xFDA      = Licensee / Maker
xFDB      = Version Number
xFDC-xFDD = Checksum
xFDE-xFDF = Inverse Checksum
xFE0-xFE3 = Unknown
xFE4-xFFF = Pointers (16-bit)

Titles may be rendered in Shift-JIS Japanese rather than using English text.

Licensee will be 0x33 or 0xFF. Reference to $ffb0. Grab 2 bytes’ ASCII values for real licensee code.

Version Number is an extension. Actual format is 1 + ord(val($ffdb))/10.

Inverse Checksum and Checksum must add up to 0xFFFF.

ROM Types

0x0 = Full Size + Sound Link
0x1 = Full Size
0x2 = Part Size + Sound Link
0x3 = Part Size
X>3 = Error

Lower 4 bits are 0 in every BS-X ROM

ROM Speed & HiROM / LoROM

ROM Speed (Upper 4 bits)
0x0 - 0x2 = SlowROM (200ns)
  X > 0x2 = FastROM (120ns)

HiROM/LoROM (Lower 4 bits)
0 = LoROM
1 = HiROM

Internal Size

Retail (demo) games usually have ffff here (exception BS Camp Arnold Marvelous); Satellaview games use 0f-ff; Add-On maskrom packs use 0000. The values correspond to the filesize of the ROM.

$FF  8M     (Most download games, demos and Soundlink data. Largest filesize)
$0F  4M (?) (Example - Tamori no Picross series)
$F0  4M (?) (Example - Kirby no Omachahako series)
$B8  4M (?) (Example - Game Tora no Ooana Special magazine)
$03  2M     (Example - Konae Chan no DokiDoki Pengin Kazoku)
$01  1M     (Example - Tsukuru-line Data Pack data)
$00  1M (?) (Example - Same Game Koma Data data pack)

(These were checked through the BS-X’s “Erase data” option.0F and F0 turned out the same. The only ROMs I know marked $00 do not detect on the BS-X itself.)

Limited Starts

If bit15 set: limited starts. number of starts left is determined by bits 0-14.

Boot Limits

When a Satellaview download is booted from BS-X, BS-X will re-write xFD4-xFD5 if it’s value is not 0x00. This is for the Boot Limit, designed to prevent bootup of downloads after a certain playcount. These are the known limited boot header values:

0xFC (11111100): 5 boots
0xBC (10111100): 4 boots
0x9C (10011100): 3 boots
0x8C (10001100): 2 boots
0x84 (10000100): 1 boot
0x80 (10000000): 0 boots (Game will not detect on BS-X)
0x00 (00000000): Unlimited Boots

Type

If bit4 is set, 2197.7 is toggled. If bit7 is set, no satellite intro is shown. Bits 6,5 relate to each other. If only bit5 is set, the rom is copied to PSRAM.

Date Format

The Date format goes like this (in bits):

%XXXX0000: Months
%XXXXX000: Days

Pointers

Pointers are used to be at the end of the header, as 16-bit and Little Endian.

It is found that this one is mainly used :

xFFC - Main Pointer (Points to Program Start)

Conditions under which BS-X will not read/detect software data

These are all the known conditions under which the BS-X will not detect data (Not to be confused with conditions under which the BS-X will spew out an error when trying to play data.)

xFD4-xFD5's value is 0x80.
Checksum and Inverse Checksum are blank.
"Maker" value is not 0x33.