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.