External Hardware
This comes in two different blocks.
0x60 is direction select, and 0x61 is pin current.
If a bit in 0x60 is
0, it is inbound, if the bit is 1, it is outbound. Most of the bits should
just be static, but EEPROM data needs to be toggled in order to read the
data
| Bit |
Description |
| 0 |
Infrared Data |
| 1 |
Infrared Data |
| 2 |
EEPROM data |
| 3 |
EEPROM clock |
| 4 |
Rumble |
| 5 |
Unknown |
| 6 |
Unknown |
| 7 |
Unknown |
Infrared Data
is mirrored, I'm assuming the port is mirrored to allow the bit to be read
and write at the same time.
EEPROM access
The EEPROM contains 8192 bytes of data...
the last 14 is the user settings block. EEPROM access is a raw bus with
the pins mapped to the PM.
Global Settings
| Address |
Description |
| 8178 |
Enable rumble (0: disabled 1: enabled) |
| 8179 |
Music volume (0-4) |
| 8180 |
Sound volume (0-2) |
| 8181 |
Contrast (0-63, 31 default) |
| 8182 |
Prior second counter (lo byte) |
| 8183 |
Prior second counter (med byte) |
| 8184 |
Prior second counter (high byte) |
| 8185 |
Years |
| 8186 |
Months |
| 8187 |
Days |
| 8188 |
Hours |
| 8189 |
Minutes |
| 8190 |
Seconds |
| 8191 |
Time Checksum |
Most of
the global settings are simply there to validate that the internal RTC is
valid. The 'prior counter' is a used to verify if the second counter has
been reset (the battery died), or overflown (battery has survived .5
years). The other time values are the base time. You add the number of
seconds to that, and you get the current real-world time. The time
checksum is simply the values of 8182 - 8190 added together.
Good
description of EEPROM I/O Return to
Pokemon
Mini specifications.