ROM header: Difference between revisions
From WSdev Wiki
Jump to navigationJump to search
(Created page with "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'''. {| class="wikitable" |+ Header contents |- ! Offset !! Length !! Contents |- | '''$0''' || '''5''' || Far jump instruction: '''0xEA''', offset, segment. |- | '''$5''' || '''1''' || '''Maintenance''' |- | $6 || 1 || Developer/Publishe...") |
|||
(8 intermediate revisions by 2 users not shown) | |||
Line 28: | Line 28: | ||
| '''$C''' || '''1''' || '''Flags''' | | '''$C''' || '''1''' || '''Flags''' | ||
|- | |- | ||
| $D || 1 || Mapper | | $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 ($5) === | ||
---- | |||
<pre> | <pre> | ||
s...0000 | 7 bit 0 | ||
| | ---- ---- | ||
| | s... 0000 | ||
+-------- (Color) Splash bypass: 0 = Disable, 1 = Enable. | | |||| | ||
| ++++- 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. | |||
</pre> | </pre> | ||
=== | === 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 | |||
|- | |- | ||
| $ | | $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 || | | $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 ($7) === | ||
---- | |||
<pre> | <pre> | ||
???????c | 7 bit 0 | ||
---- ---- | |||
???? ???c | |||
| | |||
+- 0 = Monochrome only, 1 = Supports Color mode. | |||
</pre> | </pre> | ||
=== | === Game version? / Safe mode ($9) === | ||
---- | |||
<pre> | <pre> | ||
7 bit 0 | |||
|+++++++- Game version? | ---- ---- | ||
+-------- Internal EEPROM write protect: 0 = Enable, 1 = Disable. | 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. | |||
</pre> | </pre> | ||
=== $A | === 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 188: | Line 199: | ||
| $09 || 128 Mbit (16 MiB) | | $09 || 128 Mbit (16 MiB) | ||
|- | |- | ||
| ''$0A'' || ''256 Mbit (32 MiB)'' | | ''$0A'' || ''256 Mbit (32 MiB)'' | ||
|- | |- | ||
| ''$0B'' || ''512 Mbit (64 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) === | |||
---- | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ Save type values | |+ Save type values | ||
Line 202: | Line 215: | ||
| $00 || colspan="2" style="text-align:center;" | None | | $00 || colspan="2" style="text-align:center;" | None | ||
|- | |- | ||
| $01 || rowspan="5" | SRAM || | | $01 || rowspan="5" | SRAM || rowspan="2" | 256 Kbit (32 KiB) | ||
|- | |- | ||
| $02 | | $02 | ||
|- | |- | ||
| $03 || 1 Mbit (128 KiB) | | $03 || 1 Mbit (128 KiB) | ||
Line 219: | Line 232: | ||
|} | |} | ||
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> | ||
?????SBv | 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. | |||
</pre> | </pre> | ||
=== $D | === Mapper ($D) === | ||
---- | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ Known mapper types | |+ Known mapper types | ||
Line 236: | Line 254: | ||
! ID !! Mapper | ! ID !! Mapper | ||
|- | |- | ||
| $00 || [[Bandai 2001]] | | $00 || [[Bandai 2001]] or [[KARNAK]] | ||
|- | |- | ||
| $01 || [[Bandai 2003]] | | $01 || [[Bandai 2003]] | ||
|} | |} |
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.
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)
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.
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)
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)
ID | Mapper |
---|---|
$00 | Bandai 2001 or KARNAK |
$01 | Bandai 2003 |