back

This documentation previews a version currently in development and is not yet available for download.

MBC3 detailed RTC registers definition.

$08h RTC S Seconds (0–59, 0–3Bh)
$09h RTC M Minutes (0–59, 0–3Bh)
$0Ah RTC H Hours (0–23, 0–17h)
$0Bh RTC DL Lower 8 bits of Day Counter (0–FFh)
$0Ch RTC DH Upper 1 bit of Day Counter (bit-0), Halt Flag (bit-6), Overflow (bit-7)

day count = DL + (256 * (DH bit-0))

MBC3-RTC

START

START to enable clock adjustment. Separators ':' will start flashing.

RTC


= DL + 1
= DL − 1
= DH bit-0 toggle
= DH bit-7 toggle (+)
Y = increment H
X = increment M
A = S reset to 00
 
L = load RTC register values from SD(*)
R = save RTC register values to SD(*)

(*) For RTC state quick recall only, savegames embed RTC data automatically.

DAY = 507 = 0xFB + (256 × bit-7) = 251 + (256 × 1)

SELECT

SELECT button to toggle DH bit-6.
= DH bit-6 set = RTC is halted! (time will stop incrementing)

All RTC registers appear to be 8-bit. When no coin cell battery is present (or dead battery), they initialize to random values when the 5V rail rises. /RESET has no effect in this scenario. The H, M, and S registers can temporarily hold values greater than 24, 59, and 59, respectively. They automatically self-correct upon their first increment (or (re)set via the MROM interface). This behavior is expected.

The registers will, however, be reset to zero with the following sequence:

  1. Apply power to the always-on domain (coin cell) while the 5V rail (cartridge supply) remains off.
  2. Power the main 5V cartridge rail.
  3. Pulse the MBC3 /RESET line (= cartridge reset trace).

No other pulses will affect the RTC registers as long as the always-on domain power is maintained.

SRAM-RTC

MBC3 + RTC snapshots are not interoperable. Emulation and openFPGA (+ MISTer?) use different formats. Currently, MROM only creates files in the openFPGA format, which are directly playable on the Analogue Pocket with budude2's MISTer GB/GBC core port. The ƒ indicator (openFPGA mode) is displayed and locked.

POKEMON_GLDAAU / ...

Pokémon Gold/Silver. The RTC is reset when you set the time in the game, then keeps running continuously, both during gameplay and while the system is powered down. Time can be rewound all the way back to when the game was first started (or when the time was last reconfigured).

All memory locations associated with the in-game time logic have been mapped; however, a custom decoder has not been implemented yet.

PM_CRYSTAL BYTE / ...

Pokémon Crystal. RTC usage follows the same mechanism as in Pokémon Gold/Silver; however, the variable locations for the time logic are different.

MBC3-RTC-POKEMON

The time displayed next to the Poké Ball is the in-game time, calculated and updated in real time.

No safeguards are currently implemented. If the savegame is invalid, the decoder behavior is undefined.

ETDIGICOMP BETE

E.T. the Extra-Terrestrial: Digital Companion. The RTC in this game is used only to track the time elapsed between gameplay sessions. When the game is running, time accrues in memory and the RTC is kept at 0. When the game stops, the RTC begins incrementing. When the game starts, the internal date/time is reconciled with the RTC advancement. This means you can only rewind time to your last session without madifying savegame data. This game will automatically restart the RTC if halted (bit-6 = 0). Time drift while monitoring the clock in the main menu is significant when running this game via openFPGA or directly on the Analogue Pocket. Time drift on actual Game Boy Color hardware is currently unknown.

ETDIGICOMP BETE has a December 31, 2027 EOL - no custom decoders will be implemented.

No checksum is present in the date/time region. The values can be altered freely.

@ $C2, 16-bit LE = year/month/day

((Y − 1900) × 0x200) + ((M − 1) × 2 × 0x10) + D

C3 C2
0001= JAN 11900
0021= FEB 11900
...
0161= DEC 11900
0201= JAN 11901
...
FC01= JAN 12026
...
FF7F= DEC312027 (EOL)

@ $C4, 16-bit LE = time (seconds)

2 seconds increment, starts at 12:01a


03/2026