Skip to content

Instantly share code, notes, and snippets.

@ZoomTen
Last active August 8, 2023 00:46
Show Gist options
  • Save ZoomTen/1161fb269cd012a2b927560e3290a9f4 to your computer and use it in GitHub Desktop.
Save ZoomTen/1161fb269cd012a2b927560e3290a9f4 to your computer and use it in GitHub Desktop.
MBC30 Compatibility Reference

MBC30 Compatibility Reference Table

MBC30 is a variant of the common MBC3 mapper that can access twice the memory as the regular variant. MBC30 allows for up to 4mb ROM and 64kb SRAM over MBC3's 2mb ROM and 32kb SRAM. It is only known to be used in the Japanese version of Pokemon Crystal, mainly for Mobile System GB features.

The added space provided by this variant is considered beneficial especially for ROM hacks. For example, Pokemon Coral (2022 demo and up) uses it for sampled cries and other extra content.

Note on hardware compatibility

Everdrives will not work, unless an OS update is released. Until then, you'll need to make/buy an MBC30 flashcart (such as this project, or BennVenn's custom cart), and have reflashing tools.

Emulator and retro-console-player compatibility

All data considered up to date as of 2023-01-27.

Legend:

  • ✅: Full support
  • ⚠️: Partial / incomplete / unknown support
  • ❌: No support

Italicized host platforms denote consoles specifically for retro gaming.

MBC30 Emulator Cores Host platforms Comments
BGB - Windows, WINE (Linux, Mac, FreeBSD, ReactOS) Best choice
RetroArch SameBoy Probably just about everything you have (Windows, Mac, Linux, Android, iOS, etc. etc. etc.) Best compatibility across multiple devices
mGBA
Mesen-S -
VBA-M Not recommended due to VBA's inaccurate and problematic reputation
⚠️ Gambatte -
⚠️ GearBoy -
⚠️ TGB Duel -
BizHawk Gambatte Windows, Linux -
SameBoy -
⚠️ GBHawk -
⚠️ SubGBHawk -

VBA-M - Windows, Linux Not recommended
  • ❌ v2.1.4 and below
  • ✅ v2.1.5 and above
SameBoy - Windows, Mac, Linux -
mGBA - Windows, Mac, Linux, 3DS, Switch, Wii, Vita BIOS may help to run faster
SkyEmu - Windows, Mac, Linux, Web Good compatibility if all you have is a web browser (or non-jailbreaked iOS)

Pizza Boy Pro - Android Reported
  • ❌ below v5.4.5
  • ✅ v5.4.5 and above
- - Analogue Pocket -
- - ODroid-Go / Retro-Go -
⚠️ JohnGBC - Android -
⚠️ Nostalgia.gbc - Android -
⚠️ GBCC - Android -
⚠️ Lemuroid - Android -
⚠️ EclipseEMU - Web -
⚠️ RetroGamesBot - Web -
⚠️ Aurora / Skitty.xyz - Web -
⚠️ HYLHH / Hayley.zone - Web -
⚠️ JohnGBC - Android -
⚠️ VGBA Next - Android Very buggy, bad audio
⚠️ GBC.emu - Android -
⚠️ Higan - Windows, Linux, macOS, FreeBSD -
⚠️ e[mulator] - PSP -
⚠️ RIN / HomersRIN / geMP - PSP -
⚠️ GNUboy - PSP -
⚠️ SpiceBoy - PSP -
⚠️ NO$GMB - Windows Only ROM is supported, no SRAM support yet.
⚠️ PlayGuy - Windows
⚠️ Emulicious - (Java)
⚠️ MoonEye GB - (Rust)
GameYob - Nintendo DS, Nintendo 3DS -
Pizza Boy - Android -
MyOldBoy! - Android -
Taisel Gameboy-Online - Web -
jsGBC - Web -
WASMBoy - Web -
VBA - Windows, Mac, Linux, BeOS? Haiku?? -
Goomba Color - GBA -
Linoscope CAMLBoy - Web -
Mednafen VBA-derived Windows, Linux, BSD, PS3, Wii -
KiGB - Windows -
rboy - (Rust) Currently crashes upon testing SRAM.
Boytacean - (Rust), Web -
GBC Virtual Console - Nintendo 3DS -

If your emulator or hardware setup isn't listed here, use this test ROM to check.

ALL fields should have a dot if MBC30 is fully supported (see 01-SUCCESS.png).

If support is incomplete, there would be AT LEAST one X instead of a dot in one of the fields. If there is NO support, half or all the fields are X's (see 02-FAIL.png).

These incompatibility cases seem to be the most common:

  • X's in half the fields of the ROM, and in all of the fields of SRAM. This indicates no MBC30 support, so regular MBC3 must be used with this system.
  • X's in half the fields of the ROM, but the SRAM has no X's. This indicates partial MBC30 support — specifically: the ROM supports up to 2 MB and save files support up to 64 KB.
  • No X's in the ROM field, but half or all the SRAM fields are X's. This indicates partial MBC30 support — specifically: the ROM supports up to 4 MB and save files support up to 32 KB.

Addendum: ROM and SRAM patterns

TL;DR: Your game will mess up differently depending on which system you're using. The table in this section may give you an idea exactly how.

Various emulators have different behavior in dealing with banks outside what it can handle.

The easiest to inspect is SRAM behavior, since the .sav file (or equivalent) is produced by the emulator and can be viewed with a hex editor. The patterns are written as a single byte, where each byte is written to multiples of 0x2000 hex. The proper pattern is:

00 01 02 03 04 05 06 07

This means that 00 must be written to address 0x0000, 01 at 0x2000, 02 at 0x4000, and so on. However emulators may fail at handling out-of-bounds save banks, but what's interesting is how exactly they handle it. Some emulators refuse to write out-of-bounds saves, some wrap around on itself, etc.

ROM behavior, however, requires either access to the CPU state when a byte is being read (in other words, emulators with built-in debuggers) — or, by having the program print out its actual value. The former is the easiest but the number of possible emulators is quite limited, while the latter might need modifications to the test ROM or the creation of a new one.

It can be speculated that out-of-bounds ROM access behavior might be treated similarly to out-of-bounds SRAM behavior.

Therefore, the table below will mostly consist of SRAM pattern observations in various emulator setups.

Emulator ROM pattern SRAM pattern Comments
Nintendo 3DS GBC Virtual Console - 00 01 02 07 00 00 00 00 Initializes 8 save banks, writes only 4. Out-of-bounds save banks are redirected to bank 03.
PlayGuy - 00 01 02 03 Writes only 4 save banks, doesn't bother outside of that.
Taisel GameBoy Online
KiGB - 00 01 02 07 Out of bounds save banks redirected to bank 03.
No$GMB - 04 05 06 07 Writes only 4 save banks, wraps around on itself.
VisualBoyAdvance (legacy) 00 01 02 03 04 05 ... 7D 7E 7F 00 01 02 03 04 05 ... 7D 7E 7F 00 01 02 03 04 05 06 07 ROM reads are limited to 128 banks and will wrap around on itself.
Writes 8 save banks correctly.
VBA-M <2.1.5
BizHawk (GBHawk, SubGBHawk)
Goomba Color - 07 Reads 1 save bank? Not sure
MoonEye GB - 00 01 02 03 FF FF FF FF All ROM banks read.
Simply reads FF for out of bounds save banks.
Boytacean - 04 05 06 07 00 00 00 00 Initializes 8 save banks, writes only 4. Out-of-bounds save banks are wrap around banks 00–03.
WASMBoy 00 01 02 03 04 05 ... 7D 7E 7F 00 01 02 03 04 05 ... 7D 7E 7F 04 05 06 07 04 05 06 07 ROM reads are limited to 128 banks and will wrap around on itself.
Out-of-bounds reads and writes will wrap around banks 00–03.
jsGBC 00 01 02 03 04 05 ... 7D 7E 7F 00 01 02 03 04 05 ... 7D 7E 7F 00 01 02 03 00 00 00 00 ROM reads are limited to 128 banks and will wrap around on itself.
Initializes 8 save banks, writes only 4. Doesn't bother otherwise.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment