The header will be at 0x7xxx (for LoROM) or 0xFxxx (for HiROM) for the downloaded content. There may be more than one in a single Memory Pack.

xFB0-xFB1 = Licensee / Maker Code
xFB2-xFB5 = Program Type
xFB6-xFBF = Reserved
xFC0-xFCF = Title (Shift-JIS)
xFD0-xFD3 = Block Allocation Flags
xFD4-xFD5 = Limited Starts
xFD6      = Date - Month
xFD7      = Date - Day
xFD8      = ROM Speed (unconfirmed) & Map Mode
xFD9      = File/Execution Type
xFDA      = Fixed (0x33)
xFDB      = Version Number (unconfirmed)
xFDC-xFDD = Inverse Checksum
xFDE-xFDF = Checksum
xFE0-xFFF = Exception Vectors (Identical to SNES ROM header)

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

Inverse Checksum and Checksum must add up to 0xFFFF.

FLASH Download Requirements

For FLASH downloads, the data needs to be setup that way:

xFD0-xFD3 (Block Allocation Flags) must be set to 0xFFFFFFFF
xFD6 (Date - Month) must be set to 0xFF
xFD7 (Date - Day) must be set to 0xFF
xFDA (Fixed - 0x33) must be set to 0xFF

BS-X will validate the content and overwrite the values appropriately depending on size, on where it is downloaded, and when the file was available.

Program Type

This explains the type of program that is contained. The value is 32-bit Little Endian.

0x00000000 = 65C816 Code & Generic Program
0x00000100 = BS-X Bytecode Program
0x00000200 = SA-1 Program Code (used for Itoi Shigesato no Bass Tsuri No.1)
0xXXXXXXXX = 65C816 Code & Generic Program

BS-X treats every program type (other than BS-X Bytecode Content) as 65C816 Code & Generic Programs. The incompatible program contains code that will set up checks and display a message on screen before going back to the menu. Note that SA-1 Program Code does not apply for SD Gundam G-NEXT because there is no SA-1 specific code.

Block Allocation Flags

The value can be regarded as an allocation map (up to 32Mbit), i.e. where the data is actually stored on the Data Pack. One bit corresponds to one megabit block on the Memory Pack, with the MSB (bit7) being the last "page" ($CE0000-$CFFFFF) and the LSB (bit0) being the first ($C00000-$C1FFFF).

E.g. a 4MBit game with $F0 originally resided in the upper half of the Data Pack and should be loaded there for emulation. Otherwise an error 09 will occur because checksum calculation fails: BIOS checksums $C80000-$CFFFFF according to the map, but the game is stored in $C00000-$C7FFFF.

The flags supports up to 32Mbit but there are only 8Mbit Memory Packs that have been officially released, but it is fully supported in BS-X.

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

Date Format

The Date format goes like this (in bits):

%XXXX0000: Month
%XXXXX000: Day

The data itself is copied from the downloaded BS-X Satellite File Directory's dates.

ROM Speed & Map Mode

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

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

File/Execution Type

Sound Link settings and execution type

0x0? Bit0-3 (0000xxxx)  = Unknown/unused (always 0)
0x10 Bit4   (000x0000)  = Mute Soundlink Radio (1 = Mute, 0 = Unmute)
0x20 Bit5-6 (0xx00000)  = Execution Area:
                            0 = FLASH (Used for games for that are more than 4M in size)
                            1 = Copy FLASH to PSRAM (Used for games that are less or equal to 4M)
                            2/3 = Fail
0x80 Bit7   (x0000000)  = Skip the "J033-BS-TDM1 St.GIGA" Intro (0 = normal, 1 = skip)


The checksum is calculated by adding all bytes together, assuming 0x7FB0-0x7FDF (or 0xFFB0-0xFFDF in a case of HiROM game) are filled with 00h. When calculating the checksum, the Block Allocation flags are used to determine which blocks the checksum will be calculated from.

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 0x8000 (little endian).
Checksum and Inverse Checksum are blank or incorrect.
Fixed value is not 0x33.