Last active
January 4, 2017 08:10
-
-
Save drhelius/3745961 to your computer and use it in GitHub Desktop.
Memory Bank Controller (MBC) 3 for GameBoy Information
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Memory Bank Controller (MBC) 3 for GameBoy Information | |
by bRILLO hEAD, 1-Jan-98 | |
The MBC3 is a memory controller for some GameBoy carts | |
that supports | |
ROMs up to 16megabits (2megabytes) and RAM up to 256kbits | |
(32kbytes). It has a built-in clock counter that requires | |
an external 32.768KHz crystal for operation. | |
Reg 0 - $0000-$1fff - RAM/clock write protect | |
$0A - Enable | |
$00 - Disable | |
Reg 1 - $2000-$3fff - ROM Bank Select | |
$00-$7F - Rom bank # | |
Reg 2 - $4000-$5fff - RAM Bank/Clock Reg Select | |
$00-$03 - RAM bank # | |
$08-$0c - Clock register # | |
Reg 3 - $6000-$7fff - Latch clock counter data | |
Writing $00 and then $01 latches clock data. | |
Another write $00 and write $01 is required | |
to latch data again. | |
Reg SEC - $08 - Seconds counter | |
Reg MIN - $09 - Minutes counter | |
Reg HRS - $0A - Hours counter | |
Reg DAYL- $0B - Lower 8 bits of day counter | |
Reg DAYH- $0C - bit 0 = Upper 1 bit of day counter | |
bit 6 = start(0)/stop(1) clock counter | |
bit 7 = Day counter carry bit | |
Notes: | |
Bit 7 of Reg DAYH once set stays set until a 0 is written. | |
To access the clock counter the ram bank must first be turned | |
on by writing $0A to Reg 0. | |
To read the clock counter value, set Reg 3 to $01. This latches | |
the values of all registers so they won't change on you while your | |
trying to read them. However, this does not prevent the internal | |
counters from keeping correct time. If reg 3 is already set to | |
$01 then write $00 and then $01. | |
For example, to read Reg SEC write $08 to Reg 2. The value of | |
Reg SEC can then be read from any address in $A000-$BFFF range. | |
Use a similar process for writing to a register. | |
Due to slow MBC3/clock interfacing, 4 machine cycles (16 clock cycles) | |
are required between register accesses. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment