ROM header: Difference between revisions

From WSdev Wiki
Jump to navigationJump to search
(Adds byte bit markings.)
 
(7 intermediate revisions by 2 users not shown)
Line 28: Line 28:
| '''$C''' || '''1''' || '''Flags'''
| '''$C''' || '''1''' || '''Flags'''
|-
|-
| $D || 1 || Mapper type
| $D || 1 || Mapper
|-
|-
| $E || 2 || Checksum (sum of all ROM bytes excluding the checksum)
| $E || 2 || Checksum (sum of all ROM bytes excluding the checksum)
|}
|}


=== $5 - Maintenance ===
=== Maintenance ($5) ===
 
----
<pre>
<pre>
7  bit  0
7  bit  0
Line 47: Line 47:
</pre>
</pre>


=== $6 - Developer/Publisher ID ===
=== Developer/Publisher ID ($6) ===
 
----
{| class="wikitable"
{| class="wikitable"
|+ Known official developer/publisher IDs
|+ Known official developer/publisher IDs
|-
|-
! ID !! Publisher
! ID !! Publisher code !! Publisher
|-
| $01 || BAN || Bandai
|-
|-
| $01 || Bandai
| $02 || TAT || Taito
|-
|-
| $02 || Taito
| $03 || TMY || Tomy
|-
|-
| $03 || ?
| $04 || KEX || Koei
|-
|-
| $04 || Koei
| $05 || DTE || Data East
|-
|-
| $05 || Data East
| $06 || AAE || Asmik Ace
|-
|-
| $06 || Asmik Ace
| $07 || MDE || Media Entertainment
|-
|-
| $07 || Media Entertainment
| $08 || NHB || Nichibutsu
|-
|-
| $08 || Nichibutsu
| $0A || CCJ || Coconuts Japan
|-
|-
| $0A || Coconuts Japan
| $0B || SUM || Sammy
|-
|-
| $0B || Sammy
| $0C || SUN || Sunsoft
|-
|-
| $0C || Sunsoft
| $0D || PAW || Mebius
|-
|-
| $0D || ?
| $0E || BPR || Banpresto
|-
|-
| $0E || Banpresto
| $10 || JLC || Jaleco
|-
|-
| $10 || Jaleco
| $11 || MGA || Imagineer
|-
|-
| $11 || Imagineer
| $12 || KNM || Konami
|-
|-
| $12 || Konami
| $16 || KBS || Kobunsha
|-
|-
| $16 || Kobunsha
| $17 || BTM || Bottom Up
|-
|-
| $17 || Bottom Up
| $18 || KGT || Kaga Tech
|-
|-
| $18 || ?
| $19 || SRV || Sunrise
|-
|-
| $19 || Sunrise
| $1A || CFT || Cyber Front
|-
|-
| $1A || Cyber Front
| $1B || MGH || Megahouse
|-
|-
| $1B || Megahouse
| $1D || BEC || Interbec
|-
|-
| $1D || Interbec
| $1E || NAP || Nihon Application
|-
|-
| $1E || ?
| $1F || BVL || Bandai Visual
|-
|-
| $1F || ?
| $20 || ATN || Athena
|-
|-
| $20 || Athena
| $21 || KDX || KID
|-
|-
| $21 || KID
| $22 || HAL || HAL Corporation
|-
|-
| $22 || ?
| $23 || YKE || Yuki Enterprise
|-
|-
| $23 || ?
| $24 || OMN || Omega Micott
|-
|-
| $24 || Omega Micott
| $25 || LAY || Layup
|-
|-
| $25 || ?
| $26 || KDK || Kadokawa Shoten
|-
|-
| $26 || ?
| $27 || SHL || Shall Luck
|-
|-
| $27 || ?
| $28 || SQR || Squaresoft
|-
|-
| $28 || Squaresoft
| $2A || SCC || ?
|-
|-
| $2A || ?
| $2B || TMC || Tom Create
|-
|-
| $2B || ?
| $2D || NMC || Namco
|-
|-
| $2D || Namco
| $2E || SES || ?
|-
|-
| $2E || ?
| $2F || HTR || ?
|-
|-
| $2F || ?
| $31 || VGD || Vanguard
|-
|-
| $31 || ?
| $32 || MGT || Megatron
|-
|-
| $32 || ?
| $33 || WIZ || Wiz
|-
|-
| $33 || ?
| $35 || TAN || Tanita
|-
|-
| $36 || ?
| $36 || CPC || Capcom
|}
|}


Note that IDs $00 and $01 are used across a variety of commercial games. Homebrew is known to use arbitrary values in this field.
Note that IDs $00 and $01 are used across a variety of commercial games. Homebrew is known to use arbitrary values in this field.


=== $7 - Color ===
=== Color ($7) ===
 
----
<pre>
<pre>
7  bit  0
7  bit  0
Line 153: Line 155:
</pre>
</pre>


=== $9 - Game version? / Safe mode ===
=== Game version? / Safe mode ($9) ===
 
----
<pre>
<pre>
7  bit  0
7  bit  0
Line 168: Line 170:
</pre>
</pre>


=== $A - ROM size ===
=== ROM size ($A) ===
 
----
Unofficial ROM size values are marked in ''italic''.
Unofficial/inferred ROM size values are marked in ''italic''.


{| class="wikitable"
{| class="wikitable"
Line 197: Line 199:
| $09 || 128 Mbit (16 MiB)
| $09 || 128 Mbit (16 MiB)
|-
|-
| ''$0A'' || ''256 Mbit (32 MiB)''<ref name="2003only">Not supported by the [[Bandai 2001]] mapper, which is limited to 16 MiB. The [[Bandai 2003]] mapper is limited to 64 MiB.</ref>
| ''$0A'' || ''256 Mbit (32 MiB)''
|-
|-
| ''$0B'' || ''512 Mbit (64 MiB)''<ref name="2003only"/>
| ''$0B'' || ''512 Mbit (64 MiB)''
|}
|}


=== $B - Save type/size ===
Note that ROM sizes over 16 MiB are not supported by the [[Bandai 2001]] mapper. The [[Bandai 2003]] mapper is limited to 64 MiB.


=== Save type/size ($B) ===
----
{| class="wikitable"
{| class="wikitable"
|+ Save type values
|+ Save type values
Line 211: Line 215:
| $00 || colspan="2" style="text-align:center;" | None  
| $00 || colspan="2" style="text-align:center;" | None  
|-
|-
| $01 || rowspan="5" | SRAM || 64 Kbit (8 KiB)
| $01 || rowspan="5" | SRAM || rowspan="2" | 256 Kbit (32 KiB)
|-
|-
| $02 || 256 Kbit (32 KiB)
| $02
|-
|-
| $03 || 1 Mbit (128 KiB)
| $03 || 1 Mbit (128 KiB)
Line 228: Line 232:
|}
|}


=== $C - Flags ===
Note that while ID <code>$01</code> is commonly documented as <code>64 Kbit</code>, all known cartridges using that value come with <code>256 Kbit</code> SRAM chips. This requires further investigation.


=== Flags ($C) ===
----
<pre>
<pre>
7  bit  0
7  bit  0
Line 241: Line 247:
</pre>
</pre>


=== $D - Mapper type ===
=== Mapper ($D) ===
 
----
{| class="wikitable"
{| class="wikitable"
|+ Known mapper types
|+ Known mapper types
Line 248: Line 254:
! ID !! Mapper
! ID !! Mapper
|-
|-
| $00 || [[Bandai 2001]]
| $00 || [[Bandai 2001]] or [[KARNAK]]
|-
|-
| $01 || [[Bandai 2003]]
| $01 || [[Bandai 2003]]
|-
| $02 || [[KARNAK]] (Pocket Challenge V2)
|}
|}

Latest revision as of 18:30, 2 April 2024

Every WonderSwan ROM contains a header. It is stored at the end - final sixteen bytes - of the ROM image.

ROM header

Parts of this header are validated or otherwise used by the console's boot ROM - they are marked in bold.

Header contents
Offset Length Contents
$0 5 Far jump instruction: 0xEA, offset, segment.
$5 1 Maintenance
$6 1 Developer/Publisher ID
$7 1 Color
$8 1 Game ID (binary-coded decimal)
$9 1 Game version? / Safe mode
$A 1 ROM size
$B 1 Save type/size
$C 1 Flags
$D 1 Mapper
$E 2 Checksum (sum of all ROM bytes excluding the checksum)

Maintenance ($5)


7  bit  0
---- ----
s... 0000
|    ||||
|    ++++- Must be zero; otherwise the console will prohibit execution.
|          Purpose unknown.
+--------- (Color) Splash bypass: 0 = Disable, 1 = Enable.
           Bypasses the custom boot splash stored in the console's
           internal EEPROM; presumably used for bricked console recovery.

Developer/Publisher ID ($6)


Known official developer/publisher IDs
ID Publisher code Publisher
$01 BAN Bandai
$02 TAT Taito
$03 TMY Tomy
$04 KEX Koei
$05 DTE Data East
$06 AAE Asmik Ace
$07 MDE Media Entertainment
$08 NHB Nichibutsu
$0A CCJ Coconuts Japan
$0B SUM Sammy
$0C SUN Sunsoft
$0D PAW Mebius
$0E BPR Banpresto
$10 JLC Jaleco
$11 MGA Imagineer
$12 KNM Konami
$16 KBS Kobunsha
$17 BTM Bottom Up
$18 KGT Kaga Tech
$19 SRV Sunrise
$1A CFT Cyber Front
$1B MGH Megahouse
$1D BEC Interbec
$1E NAP Nihon Application
$1F BVL Bandai Visual
$20 ATN Athena
$21 KDX KID
$22 HAL HAL Corporation
$23 YKE Yuki Enterprise
$24 OMN Omega Micott
$25 LAY Layup
$26 KDK Kadokawa Shoten
$27 SHL Shall Luck
$28 SQR Squaresoft
$2A SCC ?
$2B TMC Tom Create
$2D NMC Namco
$2E SES ?
$2F HTR ?
$31 VGD Vanguard
$32 MGT Megatron
$33 WIZ Wiz
$35 TAN Tanita
$36 CPC Capcom

Note that IDs $00 and $01 are used across a variety of commercial games. Homebrew is known to use arbitrary values in this field.

Color ($7)


7  bit  0
---- ----
???? ???c
        |
        +- 0 = Monochrome only, 1 = Supports Color mode.

Game version? / Safe mode ($9)


7  bit  0
---- ----
pvvv vvvv
|||| ||||
|+++ ++++- Game version?
+--------- Internal EEPROM write protect: 0 = Enable, 1 = Disable.
           This prohibits writing to the internal EEPROM for addresses
           0x60 and above (user settings, custom splash screen).
           Games are expected to enable write protection; however, the
           WonderWitch is factory configured with it disabled.

ROM size ($A)


Unofficial/inferred ROM size values are marked in italic.

ROM size values
ID Size
$00 1 Mbit (128 KiB)
$01 2 Mbit (256 KiB)
$02 4 Mbit (512 KiB)
$03 8 Mbit (1 MiB)
$04 16 Mbit (2 MiB)
$05 24 Mbit (3 MiB)
$06 32 Mbit (4 MiB)
$07 48 Mbit (6 MiB)
$08 64 Mbit (8 MiB)
$09 128 Mbit (16 MiB)
$0A 256 Mbit (32 MiB)
$0B 512 Mbit (64 MiB)

Note that ROM sizes over 16 MiB are not supported by the Bandai 2001 mapper. The Bandai 2003 mapper is limited to 64 MiB.

Save type/size ($B)


Save type values
ID Type Size
$00 None
$01 SRAM 256 Kbit (32 KiB)
$02
$03 1 Mbit (128 KiB)
$04 2 Mbit (256 KiB)
$05 4 Mbit (512 KiB)
$10 EEPROM 1 Kbit (128 B)
$20 16 Kbit (2 KiB)
$50 8 Kbit (1 KiB)

Note that while ID $01 is commonly documented as 64 Kbit, all known cartridges using that value come with 256 Kbit SRAM chips. This requires further investigation.

Flags ($C)


7  bit  0
---- ----
???? ?SBv
      |||
      ||+- Starting screen orientation: 0 = Horizontal, 1 = Vertical.
      ||   Controls the splash screen's orientation.
      |+-- ROM bus width: 0 = 16-bit, 1 = 8-bit.
      +--- ROM access time: 0 = 3 CPU cycles, 1 = 1 CPU cycle.

Mapper ($D)


Known mapper types
ID Mapper
$00 Bandai 2001 or KARNAK
$01 Bandai 2003