ROM header: Difference between revisions
From WSdev Wiki
Jump to navigationJump to search
(add missing developer/publisher IDs (from up-n-atom)) |
|||
(3 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" | ||
Line 145: | Line 145: | ||
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 155: | Line 155: | ||
</pre> | </pre> | ||
=== | === Game version? / Safe mode ($9) === | ||
---- | ---- | ||
<pre> | <pre> | ||
Line 170: | 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 206: | Line 206: | ||
Note that ROM sizes over 16 MiB are not supported by the [[Bandai 2001]] mapper. The [[Bandai 2003]] mapper is limited to 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 215: | 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 232: | 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 245: | Line 247: | ||
</pre> | </pre> | ||
=== $D | === Mapper ($D) === | ||
---- | ---- | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 252: | 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 |