Changes

2,241 bytes added ,  05:11, 24 April 2017
→‎Device 3: added missing registers and their properties as placeholders and fixed mistakes
Line 242: Line 242:  
| ro
 
| ro
 
| Version low
 
| Version low
 +
|-
 +
| 0x02
 +
| s
 +
| ro
 +
| ?
 +
|-
 +
| 0x03
 +
| s
 +
| rw
 +
| Top screen flicker
 
|-
 
|-
 
| 0x04
 
| 0x04
 
| s
 
| s
 
| rw
 
| rw
| Top screen flicker
+
| Bottom screen flicker
 
|-
 
|-
 
| 0x05
 
| 0x05
 
| s / 0x4003?
 
| s / 0x4003?
 
| rw / ?
 
| rw / ?
| Bottom screen flicker or Danger zone - [[MCU_Services#MCU_firmware_versions|MCU firmware]] is uploaded here (???)
+
| Danger zone - [[MCU_Services#MCU_firmware_versions|MCU firmware]] is uploaded here (???)
 +
|-
 +
| 0x06
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x07
 +
| s
 +
| rw
 +
| ?
 
|-
 
|-
 
| 0x08
 
| 0x08
Line 263: Line 283:  
| Volume slider state (0x00 - 0x3F)
 
| Volume slider state (0x00 - 0x3F)
 
This is the same value returned by [[MCUHWC:GetSoundVolume|MCUHWC:GetSoundVolume]]
 
This is the same value returned by [[MCUHWC:GetSoundVolume|MCUHWC:GetSoundVolume]]
 +
|-
 +
| 0x0A
 +
| s
 +
| ro
 +
| ? (seems to be power management related?)
 
|-
 
|-
 
| 0x0B
 
| 0x0B
Line 268: Line 293:  
| ro
 
| ro
 
| Battery percentage
 
| Battery percentage
 +
|-
 +
| 0x0C
 +
| s
 +
| ro
 +
| ? (changes to 0 for a second when the charger is plugged in then it resets to its previous value)
 
|-
 
|-
 
| 0x0D
 
| 0x0D
Line 273: Line 303:  
| ro
 
| ro
 
| System voltage
 
| System voltage
 +
|-
 +
| 0x0E
 +
| s
 +
| ro
 +
| ?
 
|-
 
|-
 
| 0x0F
 
| 0x0F
Line 283: Line 318:  
| ro
 
| ro
 
| Special HID status flags: bit0 = power button pressed, bit1 = power button pressed long, bit2 = home button pressed, bit3 = home button released, bit4 = wifi slider enabled, bit5 = shell got closed, bit6 = shell got opened. If nothing has changed this register is 0.
 
| Special HID status flags: bit0 = power button pressed, bit1 = power button pressed long, bit2 = home button pressed, bit3 = home button released, bit4 = wifi slider enabled, bit5 = shell got closed, bit6 = shell got opened. If nothing has changed this register is 0.
 +
Needs confirmation (or some flags to enable).
 +
|-
 +
| 0x11
 +
| s
 +
| ro
 +
| ?
 
|-
 
|-
 
| 0x12
 
| 0x12
Line 288: Line 329:  
| ro
 
| ro
 
| 0x40 if volume slider position changed
 
| 0x40 if volume slider position changed
 +
Needs confirmation (or some flags to enable).
 +
|-
 +
| 0x13
 +
| s
 +
| ro
 +
| ?
 +
|-
 +
| 0x14
 +
| s
 +
| ro
 +
| ?
 +
|-
 +
| 0x15
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x16
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x17
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x18
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x19
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x1A
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x1B
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x1C
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x1D
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x1E
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x1F
 +
| s
 +
| rw
 +
| ?
 
|-
 
|-
 
| 0x20
 
| 0x20
 
| s
 
| s
| wo(?)
+
| wo
 
| System power control - bit0 = power off, bit1 = reboot (unused?). bit2 = reboot (used by mcu-module and LgyBg). bit3 = used by LgyBg to power off, causes hangs in 3DS-mode. bit4 = doesn't seem to do anything, but an mcu::RTC command uses this. Other bits are unused, and seem to do nothing.
 
| System power control - bit0 = power off, bit1 = reboot (unused?). bit2 = reboot (used by mcu-module and LgyBg). bit3 = used by LgyBg to power off, causes hangs in 3DS-mode. bit4 = doesn't seem to do anything, but an mcu::RTC command uses this. Other bits are unused, and seem to do nothing.
 +
|-
 +
| 0x21
 +
| s
 +
| ro(?)
 +
| ?
 
|-
 
|-
 
| 0x22
 
| 0x22
 
| s
 
| s
| rw(?)
+
| wo
 
| Used to set LCD states. bit0 = don't push to LCDs, bit1 = push to LCDs, bit2 = bottom screen backlight off, bit3 = bottom screen backlight on, bit4 = top screen backlight off, bit5 = top screen backlight on
 
| Used to set LCD states. bit0 = don't push to LCDs, bit1 = push to LCDs, bit2 = bottom screen backlight off, bit3 = bottom screen backlight on, bit4 = top screen backlight off, bit5 = top screen backlight on
 +
|-
 +
| 0x23
 +
| s
 +
| ro(?)
 +
| ?
 
|-
 
|-
 
| 0x24
 
| 0x24
Line 303: Line 420:  
| ??
 
| ??
 
| Watchdog timer. This must be set *before* the timer is triggered, otherwise the old value is used. Value zero disables the watchdog.
 
| Watchdog timer. This must be set *before* the timer is triggered, otherwise the old value is used. Value zero disables the watchdog.
 +
|-
 +
| 0x25
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x26
 +
| s
 +
| rw
 +
| ?
 
|-
 
|-
 
| 0x27
 
| 0x27
 
| s
 
| s
| ro
+
| ro (rw?)
 
| Raw volume slider state
 
| Raw volume slider state
 
|-
 
|-
Line 315: Line 442:  
|-
 
|-
 
| 0x29
 
| 0x29
| dynamic(?)
+
| dynamic / s
| rw
+
| ro / rw
| Repeat register, any byte written here gets repeated indefinitely(?)
+
| 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.
 
|-
 
|-
 
| 0x2A
 
| 0x2A
Line 342: Line 469:  
| s
 
| s
 
| ro
 
| ro
| This [[MCURTC:GetInfoLEDStatus|returns]] the notification LED status when read.
+
| This [[MCURTC:GetInfoLEDStatus|returns]] the notification LED status when read (1 means new cycle started)
 +
|-
 +
| 0x2F
 +
| s
 +
| ro(?)
 +
| ?
 
|-
 
|-
 
| 0x30
 
| 0x30
Line 349: Line 481:  
| 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 *4* days, byte 5 months and byte 6 years (byte 3 is unused?)
 
| 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 *4* days, byte 5 months and byte 6 years (byte 3 is unused?)
 +
|-
 +
| 0x38
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x39
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x3A
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x3B
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x3C
 +
| s
 +
| rw
 +
| ?
 
|-
 
|-
 
| 0x3D
 
| 0x3D
 +
0x3E
 
| s (2)
 
| s (2)
 
| ro
 
| ro
 
| RTC tick counter (resets to 0 when the seconds increase)
 
| RTC tick counter (resets to 0 when the seconds increase)
It seems to bug out register 0x3E due to having a size of 2 in the shared register pool
   
|-
 
|-
 
| 0x3F
 
| 0x3F
 
| s
 
| s
| rw(?)
+
| wo
 
| Peripheral power related? bit0 seems to depower everything, pressing the power key afterwards instantly turns the whole 3DS off
 
| Peripheral power related? bit0 seems to depower everything, pressing the power key afterwards instantly turns the whole 3DS off
 +
|-
 +
| 0x40
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x41
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x42
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x43
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x44
 +
| s
 +
| rw
 +
| ? (setting this seems to freeze the system for a second)
 +
|-
 +
| 0x45
 +
| s
 +
| rw
 +
| ?
 
|-
 
|-
 
| 0x46
 
| 0x46
Line 375: Line 562:  
| ro
 
| ro
 
| Gyro X(?) axis rotation (0x00 = 3DS base facing upwards, 0x40 = face-down flat, 0xBE = standing(?) flat)
 
| Gyro X(?) axis rotation (0x00 = 3DS base facing upwards, 0x40 = face-down flat, 0xBE = standing(?) flat)
 +
|-
 +
| 0x4B
 +
| s
 +
| rw
 +
| ? (setting this to 0xFF seems to freeze the system when trying to transition to Home Menu if some other registers are set accordingly)
 +
|-
 +
| 0x4C
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x4D
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x4E
 +
| s
 +
| rw
 +
| ?
 
|-
 
|-
 
| 0x4F
 
| 0x4F
Line 380: Line 587:  
| ro
 
| ro
 
| Unkonwn. Reading past the 6th byte is FF-filled, so register size of 6 is assumed.
 
| Unkonwn. Reading past the 6th byte is FF-filled, so register size of 6 is assumed.
 +
|-
 +
| 0x50
 +
- 0x57
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x58
 +
| s
 +
| rw
 +
| DSP volume slider 0% volume offset (setting this to 0xFF will esentially mute the DSP as it's the volume slider's maximum raw value)
 +
|-
 +
| 0x59
 +
| s
 +
| rw
 +
| DSP volume slider 100% volume offset (setting both this and the above to 0 will disable the volume slider with 100% volume, setting this to a lower value than the above will make the volume slider have only 2 states; on and off)
 +
|-
 +
| 0x5A
 +
| s
 +
| rw
 +
| ?
 +
|-
 +
| 0x5B
 +
- 0x5F
 +
| s
 +
| ro(?)
 +
| ? (these seem to be invalid regsiters)
 
|-
 
|-
 
| 0x60
 
| 0x60
| 0x100(?)
+
| 0x100
| ro(?)
+
| ro
 
first byte is wo
 
first byte is wo
 
| Looping queue register
 
| Looping queue register
Line 390: Line 624:  
|-
 
|-
 
| 0x61
 
| 0x61
| 0x100(?)
+
| 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.
 
The first byte is used to store flags for managing FIRM/NS state - bit0 = "WirelessDisabled", bit1 = "SoftwareClosed", bit2 = "PowerOffInitiated", bit4 = "LegacyJumpProhibited". This register survives power-off, but does not seem to be saved to non-volatile storage (does not survive battery pulls). This register doesn't seem to actually control MCU behaviour by itself, it just seems to be used for storing arbitrary data.
 
The first byte is used to store flags for managing FIRM/NS state - bit0 = "WirelessDisabled", bit1 = "SoftwareClosed", bit2 = "PowerOffInitiated", bit4 = "LegacyJumpProhibited". This register survives power-off, but does not seem to be saved to non-volatile storage (does not survive battery pulls). This register doesn't seem to actually control MCU behaviour by itself, it just seems to be used for storing arbitrary data.
 +
|-
 +
| 0x62 - 0x7E
 +
| s
 +
| invalid (ro)
 +
| These registers don't exist at all, thus reading them will yield 0xFF
 
|-
 
|-
 
| 0x7F
 
| 0x7F
Line 406: Line 645:  
   byte 17: WiFi LED brightness
 
   byte 17: WiFi LED brightness
 
   byte 18: raw button states?
 
   byte 18: raw button states?
     bit0: unset while power button is held,
+
     bit0: unset while power button is held
     bit1: unset while home button is held,
+
     bit1: unset while home button is held
     bit2: unset while Wifi slider is held,
+
     bit2: unset while Wifi slider is held
     bit4: unset when charger is plugged in,
+
     bit5: unset while the charging LED is active
     bit6: unset when charging LED is active
+
     bit6: unset while charger is plugged in
 
      
 
      
 
     this byte is reset to 0 before an svcBreak takes effect
 
     this byte is reset to 0 before an svcBreak takes effect
Trusted
225

edits