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))
| ↑ | = 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 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:
/RESET line (= cartridge reset trace).
No other pulses will affect the RTC registers as long as the always-on domain power is maintained.
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.
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.
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.
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.
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 | |||
|---|---|---|---|---|
| 00 | 01 | = JAN | 1 | 1900 |
| 00 | 21 | = FEB | 1 | 1900 |
| ... | ||||
| 01 | 61 | = DEC | 1 | 1900 |
| 02 | 01 | = JAN | 1 | 1901 |
| ... | ||||
| FC | 01 | = JAN | 1 | 2026 |
| ... | ||||
| FF | 7F | = DEC | 31 | 2027 (EOL) |
@ $C4, 16-bit LE = time (seconds)
2 seconds increment, starts at 12:01a
03/2026