Line 309: |
Line 309: |
| | s | | | s |
| | ro | | | ro |
− | | Special HID status flags: | + | | Received interrupt bitmask, see register 0x18 for possible values |
− | bit00: power button pressed
| + | If no interrupt was received this register is 0 |
− | bit01: power button pressed long
| |
− | bit02: home button pressed
| |
− | bit03: home button released
| |
− | bit04: wifi slider pressed
| |
− | bit05: shell got closed
| |
− | bit06: shell got opened
| |
− | bit07: ???, sends srv notification 0x20C
| |
− | bit08: charger plugged in
| |
− | bit09: charger plugged out
| |
− | bit11: ???, signals an event
| |
− | bit14: ???, sends srv notification 0x210
| |
− | bit15: ???, sends srv notification 0x20F
| |
− | bit22: volume slider position changed
| |
− | If nothing has changed this register is 0 | |
| |- | | |- |
| | 0x14 | | | 0x14 |
Line 350: |
Line 336: |
| | s | | | s |
| | rw | | | rw |
− | | Interrupt mask (0=enabled,1=disabled) | + | | Interrupt mask for register 0x10 (0=enabled,1=disabled) |
| + | bit00: Power button press |
| + | bit01: Power button held (the 3DS turns off regardless after a fixed time) |
| + | bit02: HOME button press |
| + | bit03: HOME button release |
| + | bit04: WiFi switch button |
| + | bit05: Shell close |
| + | bit06: Shell open |
| + | bit07: Fatal hardware condition([[Services#Notifications|?]]) |
| + | bit08: Charger removed |
| + | bit09: Charger plugged in |
| + | bit10: ??? (Power Management related?) |
| bit11: ??? (HID related) | | bit11: ??? (HID related) |
− | bit12: Accelerometer update | + | bit12: HID update |
| + | bit13: Battery dead(?) |
| + | bit14: ??? (Power Management related?) |
| + | bit15: ??? (Power Management related?) |
| + | bit22: Volume slider position change |
| + | bit24: ??? (???) |
| + | bit25: ??? (???) |
| + | bit26: ??? (???) |
| + | bit27: ??? (???) |
| + | bit28: ??? (???) |
| + | bit29: ??? (???) |
| bit30: forced off my mcu sysmodule | | bit30: forced off my mcu sysmodule |
| bit31: forced off my mcu sysmodule | | bit31: forced off my mcu sysmodule |
Line 434: |
Line 441: |
| |- | | |- |
| | 0x29 | | | 0x29 |
− | | dynamic / s | + | | ds(0x64) |
| | ro / rw | | | ro / rw |
− | | Repeat register, any byte written in the first byte gets repeated indefinitely(?, needs confirmation past 0xFF). The rest of the bytes are read-only. Setting the shared byte of this register (via overflow glitches) will also work, confirming that this is a semi-dynamic register as the first byte is stored in the shared register pool, but the rest of the bytes are fake. | + | | Empty battery pattern holder, repeats all written bytes |
| |- | | |- |
| | 0x2A | | | 0x2A |
Line 472: |
Line 479: |
| | s | | | s |
| | 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)). Byte 0 encodes seconds, byte 1 minutes, byte 2 hours, byte 3 is either the current day of the week or current week of month (not used by anything though), byte 4 days, byte 5 months and byte 6 years | + | | 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)). |
| + | byte 0: seconds |
| + | byte 1: minutes |
| + | byte 2: hours |
| + | byte 3: current day of the week (unused) |
| + | byte 4: days |
| + | byte 5: months |
| + | byte 6: years |
| + | byte 7: leap year counter (unused) |
| |- | | |- |
| | 0x37 | | | 0x37 |
Line 500: |
Line 515: |
| | s | | | s |
| | rw | | | rw |
− | | ? | + | | Pedometer state (?) |
| |- | | |- |
| | 0x41 | | | 0x41 |
Line 563: |
Line 578: |
| |- | | |- |
| | 0x4F | | | 0x4F |
− | | 6(?) | + | | 0x156 |
| | ro | | | ro |
− | | Unkonwn. Reading past the 6th byte is FF-filled, so register size of 6 is assumed. | + | | ??? |
| |- | | |- |
| | 0x50 | | | 0x50 |
| + | | s |
| + | | rw |
| + | | ??? |
| + | |- |
| + | | 0x51 |
| + | | s |
| + | | rw |
| + | | ??? |
| + | |- |
| + | | 0x52 |
| - 0x57 | | - 0x57 |
| | s | | | s |
Line 595: |
Line 620: |
| |- | | |- |
| | 0x60 | | | 0x60 |
− | | 0x100 | + | | ds(1) |
| | ro | | | ro |
| first byte is wo | | first byte is wo |
Line 603: |
Line 628: |
| |- | | |- |
| | 0x61 | | | 0x61 |
− | | 0x100 | + | | ds(0x100) |
| | rw | | | rw |
| | Writing to this register pushes values on top of register 0x60's stack. Reading from this register doesn't advance the stack. | | | Writing to this register pushes values on top of register 0x60's stack. Reading from this register doesn't advance the stack. |