Cartridge Types
---------------
The following define the byte at cart location 0147:
ROM ONLY
This is a 32kB (256kb) ROM and occupies 0000-7FFF.
MBC1 (Memory Bank Controller 1)
MBC1 has two different maximum memory modes:
16Mbit ROM/8KByte RAM or 4Mbit ROM/32KByte RAM.
The MBC1 defaults to 16Mbit ROM/8KByte RAM mode
on power up. Writing a value (XXXXXXXS - X = Don't
care, S = Memory model select) into 6000-7FFF area
will select the memory model to use. S = 0 selects
16/8 mode. S = 1 selects 4/32 mode.
Writing a value (XXXBBBBB - X = Don't cares, B =
bank select bits) into 2000-3FFF area will select an
appropriate ROM bank at 4000-7FFF. Values of 0 and 1
do the same thing and point to ROM bank 1. Rom bank 0
is not accessible from 4000-7FFF and can only be read
from 0000-3FFF.
If memory model is set to 4/32:
Writing a value (XXXXXXBB - X = Don't care, B =
bank select bits) into 4000-5FFF area will select an
appropriate RAM bank at A000-C000. Before you can
read or write to a RAM bank you have to enable it by
writing a XXXX1010 into 0000-1FFF area*. To disable
RAM bank operations write any value but XXXX1010
into 0000-1FFF area. Disabling a RAM bank probably
protects that bank from false writes during power
down of the GameBoy. (NOTE: Nintendo suggests values
$0A to enable and $00 to disable RAM bank!!)
If memory model is set to 16/8 mode:
Writing a value (XXXXXXBB - X = Don't care, B =
bank select bits) into 4000-5FFF area will set the
two most significant ROM address lines.
* NOTE: The Super Smart Card doesn't require this
operation because it's RAM bank is ALWAYS enabled.
Include this operation anyway to allow your code
to work with both.
MBC2 (Memory Bank Controller 2):
This memory controller works much like the MBC1
controller with the following exceptions:
MBC2 will work with ROM sizes up to 2Mbit.
Writing a value (XXXXBBBB - X = Don't cares, B =
bank select bits) into 2000-3FFF area will select an
appropriate ROM bank at 4000-7FFF.
RAM switching is not provided. Unlike the MBC1 which
uses external RAM, MBC2 has 512 x 4 bits of RAM which
is in the controller itself. It still requires an
external battery to save data during power-off though.
The least significant bit of the upper address byte
must be zero to enable/disable cart RAM. For example
the following addresses can be used to enable/disable
cart RAM:
0000-00FF, 0200-02FF, 0400-04FF, ..., 1E00-1EFF.
The suggested address range to use for MBC2 ram
enable/disable is 0000-00FF.
The least significant bit of the upper address byte
must be one to select a ROM bank. For example the
following addresses can be used to select a ROM bank:
2100-21FF, 2300-23FF, 2500-25FF, ..., 3F00-3FFF.
The suggested address range to use for MBC2 rom
bank selection is 2100-21FF.
MBC3 (Memory Bank Controller 3):
This controller is similar to MBC1 except it accesses
all 16mbits of ROM without requiring any writes to the
4000-5FFF area.
Writing a value (XBBBBBBB - X = Don't care, B =
bank select bits) into 2000-3FFF area will select an
appropriate ROM bank at 4000-7FFF.
Also, this MBC has a built-in battery-backed Real
Time Clock (RTC) not found in any other MBC. Some
MBC3 carts do not support it (WarioLand II non-color
version) but some do (Harvest Moon/Japanese version.)
MBC5 (Memory Bank Controller 5):
This controller is the first MBC that is guaranteed
to run in GameBoy Color double-speed mode but it
appears the other MBC's run fine in GBC double-speed
mode as well.
It is similar to the MBC3 (but no RTC) but can
access up to 64mbits of ROM and up to 1mbit of RAM.
The lower 8 bits of the 9-bit rom bank select is
written to the 2000-2FFF area while the upper bit
is written to the least significant bit of the
3000-3FFF area.
Writing a value (XXXXBBBB - X = Don't care, B =
bank select bits) into 4000-5FFF area will select an
appropriate RAM bank at A000-BFFF if the cart
contains RAM. Ram sizes are 64kbit,256kbit, & 1mbit.
Also, this is the first MBC that allows rom bank 0
to appear in the 4000-7FFF range by writing $000
to the rom bank select.
Rumble Carts:
Rumble carts use an MBC5 memory bank controller.
Rumble carts can only have up to 256kbits of RAM.
The highest RAM address line that allows 1mbit of
RAM on MBC5 non-rumble carts is used as the motor
on/off for the rumble cart.
Writing a value (XXXXMBBB - X = Don't care, M =
motor, B = bank select bits) into 4000-5FFF area
will select an appropriate RAM bank at A000-BFFF
if the cart contains RAM. RAM sizes are 64kbit or
256kbits. To turn the rumble motor on set M = 1,
M = 0 turns it off.
HuC1 (Memory Bank / Infrared Controller):
This controller made by Hudson Soft appears to be
very similar to an MBC1 with the main difference
being that it supports infrared LED input / output.
The Japanese cart "Fighting Phoenix" (internal cart
name: SUPER B DAMAN) is known to contain this chip.