ROM header: Difference between revisions
From WSdev Wiki
Jump to navigationJump to search
(Manually adds horizontal lines to try to break up the page a bit.) |
|||
(6 intermediate revisions by the same user 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> | ||
Line 47: | Line 47: | ||
</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 || Bandai | | $01 || BAN || Bandai | ||
|- | |- | ||
| $02 || Taito | | $02 || TAT || Taito | ||
|- | |- | ||
| $03 || | | $03 || TMY || Tomy | ||
|- | |- | ||
| $04 || Koei | | $04 || KEX || Koei | ||
|- | |- | ||
| $05 || Data East | | $05 || DTE || Data East | ||
|- | |- | ||
| $06 || Asmik Ace | | $06 || AAE || Asmik Ace | ||
|- | |- | ||
| $07 || Media Entertainment | | $07 || MDE || Media Entertainment | ||
|- | |- | ||
| $08 || Nichibutsu | | $08 || NHB || Nichibutsu | ||
|- | |- | ||
| $0A || Coconuts Japan | | $0A || CCJ || Coconuts Japan | ||
|- | |- | ||
| $0B || Sammy | | $0B || SUM || Sammy | ||
|- | |- | ||
| $0C || Sunsoft | | $0C || SUN || Sunsoft | ||
|- | |- | ||
| $0D || | | $0D || PAW || Mebius | ||
|- | |- | ||
| $0E || Banpresto | | $0E || BPR || Banpresto | ||
|- | |- | ||
| $10 || Jaleco | | $10 || JLC || Jaleco | ||
|- | |- | ||
| $11 || Imagineer | | $11 || MGA || Imagineer | ||
|- | |- | ||
| $12 || Konami | | $12 || KNM || Konami | ||
|- | |- | ||
| $16 || Kobunsha | | $16 || KBS || Kobunsha | ||
|- | |- | ||
| $17 || Bottom Up | | $17 || BTM || Bottom Up | ||
|- | |- | ||
| $18 || | | $18 || KGT || Kaga Tech | ||
|- | |- | ||
| $19 || Sunrise | | $19 || SRV || Sunrise | ||
|- | |- | ||
| $1A || Cyber Front | | $1A || CFT || Cyber Front | ||
|- | |- | ||
| $1B || Megahouse | | $1B || MGH || Megahouse | ||
|- | |- | ||
| $1D || Interbec | | $1D || BEC || Interbec | ||
|- | |- | ||
| $1E || | | $1E || NAP || Nihon Application | ||
|- | |- | ||
| $1F || | | $1F || BVL || Bandai Visual | ||
|- | |- | ||
| $20 || Athena | | $20 || ATN || Athena | ||
|- | |- | ||
| $21 || KID | | $21 || KDX || KID | ||
|- | |- | ||
| $22 || | | $22 || HAL || HAL Corporation | ||
|- | |- | ||
| $23 || | | $23 || YKE || Yuki Enterprise | ||
|- | |- | ||
| $24 || Omega Micott | | $24 || OMN || Omega Micott | ||
|- | |- | ||
| $25 || | | $25 || LAY || Layup | ||
|- | |- | ||
| $26 || | | $26 || KDK || Kadokawa Shoten | ||
|- | |- | ||
| $27 || | | $27 || SHL || Shall Luck | ||
|- | |- | ||
| $28 || Squaresoft | | $28 || SQR || Squaresoft | ||
|- | |- | ||
| $2A || ? | | $2A || SCC || ? | ||
|- | |- | ||
| $2B || | | $2B || TMC || Tom Create | ||
|- | |- | ||
| $2D || Namco | | $2D || NMC || Namco | ||
|- | |- | ||
| $2E || ? | | $2E || SES || ? | ||
|- | |- | ||
| $2F || ? | | $2F || HTR || ? | ||
|- | |- | ||
| $31 || | | $31 || VGD || Vanguard | ||
|- | |- | ||
| $32 || | | $32 || MGT || Megatron | ||
|- | |- | ||
| $33 || | | $33 || WIZ || Wiz | ||
|- | |- | ||
| $36 || | | $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. | 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> | ||
Line 153: | Line 155: | ||
</pre> | </pre> | ||
=== | === Game version? / Safe mode ($9) === | ||
---- | ---- | ||
<pre> | <pre> | ||
Line 168: | Line 170: | ||
</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 197: | 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" | ||
Line 211: | 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 228: | Line 232: | ||
|} | |} | ||
=== $C | 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> | ||
Line 241: | Line 247: | ||
</pre> | </pre> | ||
=== $D | === Mapper ($D) === | ||
---- | ---- | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 248: | 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 |