Line 105: |
Line 105: |
| | 7 | | | 7 |
| | Start/busy (0=Ready, 1=Start/busy) | | | Start/busy (0=Ready, 1=Start/busy) |
| + | |} |
| + | |
| + | == I2C_CNTEX == |
| + | {| class="wikitable" border="1" |
| + | ! BIT |
| + | ! DESCRIPTION |
| + | |- |
| + | | 0-1 |
| + | | ? Set to 2 normally. |
| + | |} |
| + | |
| + | == I2C_SCL == |
| + | {| class="wikitable" border="1" |
| + | ! BIT |
| + | ! DESCRIPTION |
| + | |- |
| + | | 0-5 |
| + | | ? |
| + | |- |
| + | | 8-12 |
| + | | ? Set to 5 normally. |
| |} | | |} |
| | | |
Line 337: |
Line 358: |
| | rw | | | rw |
| | Interrupt mask for register 0x10 (0=enabled,1=disabled) | | | Interrupt mask for register 0x10 (0=enabled,1=disabled) |
− | bit00: Power button press | + | bit00: Power button press (for 27 "ticks") |
− | bit01: Power button held (the 3DS turns off regardless after a fixed time) | + | bit01: Power button held (for 375 "ticks"; the 3DS turns off regardless after a fixed time) |
− | bit02: HOME button press | + | bit02: HOME button press (for 5 "ticks") |
| bit03: HOME button release | | bit03: HOME button release |
| bit04: WiFi switch button | | bit04: WiFi switch button |
| bit05: Shell close | | bit05: Shell close |
| bit06: Shell open | | bit06: Shell open |
− | bit07: Fatal hardware condition([[Services#Notifications|?]]) | + | bit07: Fatal hardware condition([[Services#Notifications|?]]) (sent when the MCU gets reset by the Watchdog timer) |
| bit08: Charger removed | | bit08: Charger removed |
| bit09: Charger plugged in | | bit09: Charger plugged in |
− | bit10: ??? (Power Management related?) | + | bit10: RTC alarm (when some conditions are met it's sent when the current day and month and year matches the current RTC time) |
− | bit11: ??? (HID related) | + | bit11: ??? (accelerometer related) |
| bit12: HID update | | bit12: HID update |
| bit13: Battery dead(?) | | bit13: Battery dead(?) |
− | bit14: ??? (Power Management related?) | + | bit14: Battery stop charging(?) (independent of charger state) |
− | bit15: ??? (Power Management related?) | + | bit15: Battery start charging(?) |
| + | Nonmaskable(?) interrupts |
| + | bit16: ??? |
| + | bit17: ??? (opposite even for bit16) |
| bit22: Volume slider position change | | bit22: Volume slider position change |
− | bit24: ??? (???) | + | bit23: ??? Register 0x0E update |
− | bit25: ??? (???) | + | bit24: ??? (the off event for below bit) |
| + | bit25: ??? (triggered when something related to the GPU is turned on) |
| bit26: ??? (???) | | bit26: ??? (???) |
| bit27: ??? (???) | | bit27: ??? (???) |
| bit28: ??? (???) | | bit28: ??? (???) |
− | bit29: ??? (???) | + | bit29: Battery percentage status change (triggered at 10%, 5%, and 0% while discharging) |
− | bit30: forced off by mcu sysmodule | + | bit30: bit set by mcu sysmodule |
− | bit31: forced off by mcu sysmodule | + | bit31: bit set by mcu sysmodule |
| |- | | |- |
| | 0x1C | | | 0x1C |
Line 471: |
Line 496: |
| | 0x30 | | | 0x30 |
| - 0x37 | | - 0x37 |
− | | s | + | | ds |
| | rw | | | rw |
| | RTC time (system clock). 7 bytes are read from this. The upper nibble of each byte encodes 10s (BCD), so each byte is post-processed with (byte & 0xF) + (10 * (byte >> 4)). | | | RTC time (system clock). 7 bytes are read from this. The upper nibble of each byte encodes 10s (BCD), so each byte is post-processed with (byte & 0xF) + (10 * (byte >> 4)). |
Line 484: |
Line 509: |
| |- | | |- |
| | 0x38 | | | 0x38 |
− | - 0x3A | + | - 0x3C |
| | s | | | s |
| | rw | | | rw |
| | RTC alarm registers | | | RTC alarm registers |
− | byte 0: minutes | + | byte 0: minutes(???) |
− | byte 1: hours | + | byte 1: hours(???) |
− | byte 2: week | + | byte 2: day |
| + | byte 3: month |
| + | byte 4: year |
| |- | | |- |
| | 0x3B | | | 0x3B |
| | s | | | s |
| | rw | | | rw |
− | | Register 0x3B could be used to upload [[MCU_Services#MCU_firmware_versions|MCU firmware]] if some conditions are met. | + | | Could be used on very old MCU_FIRM versions to upload [[MCU_Services#MCU_firmware_versions|MCU firmware]] if some conditions are met. |
− | |-
| |
− | | 0x3C
| |
− | | s
| |
− | | ro
| |
− | | ???
| |
| |- | | |- |
| | 0x3D | | | 0x3D |
| 0x3E | | 0x3E |
− | | s | + | | ds |
| | ro | | | ro |
| | RTC tick counter / "ITMC" (when resets to 0 the seconds increase) | | | RTC tick counter / "ITMC" (when resets to 0 the seconds increase) |
Line 619: |
Line 641: |
| | 0x5A | | | 0x5A |
| | s | | | s |
− | | rw | + | | ro/rw |
− | | ? | + | | Invalid, do not use! On newer MCU_FIRM versions this is unused, but on older MCU_FIRM versions this is a read-only counter. |
| |- | | |- |
| | 0x5B | | | 0x5B |
Line 648: |
Line 670: |
| |- | | |- |
| | 0x7F | | | 0x7F |
− | | d(0x13) | + | | d(9-0x13) |
| | ro | | | ro |
| | Various system state information. | | | Various system state information. |
Line 666: |
Line 688: |
| | | |
| this byte is reset to 0 before an svcBreak takes effect | | this byte is reset to 0 before an svcBreak takes effect |
| + | |
| + | On MCU_FIRM major version 1 the size of this is 9, reading past the 9th byte will yield AA instead of FF. |
| |- | | |- |
| | 0x80 | | | 0x80 |
Line 679: |
Line 703: |
| | | |
| Non-shared (dynamic) register: it's a register whose contents separate from the shared register pool. Messing with these registers will not affect the shared register pool at all. | | Non-shared (dynamic) register: it's a register whose contents separate from the shared register pool. Messing with these registers will not affect the shared register pool at all. |
| + | |
| + | On old versions of MCU_FIRM none of the invalid registers are masked away by the read handler function, but are still read-only. Newer MCU_FIRM versions return the hardcoded value FF instead. |
| | | |
| == Device 5 & 6 == | | == Device 5 & 6 == |