Changes

Jump to navigation Jump to search
2,241 bytes added ,  06:11, 24 April 2017
→‎Device 3: added missing registers and their properties as placeholders and fixed mistakes
| ro
| Version low
|-
| 0x02
| s
| ro
| ?
|-
| 0x03
| s
| rw
| Top screen flicker
|-
| 0x04
| s
| rw
| Top Bottom screen flicker
|-
| 0x05
| s / 0x4003?
| rw / ?
| Bottom screen flicker or Danger zone - [[MCU_Services#MCU_firmware_versions|MCU firmware]] is uploaded here (???)|-| 0x06| s| rw| ?|-| 0x07| s| rw| ?
|-
| 0x08
| Volume slider state (0x00 - 0x3F)
This is the same value returned by [[MCUHWC:GetSoundVolume|MCUHWC:GetSoundVolume]]
|-
| 0x0A
| s
| ro
| ? (seems to be power management related?)
|-
| 0x0B
| ro
| 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
| ro
| System voltage
|-
| 0x0E
| s
| ro
| ?
|-
| 0x0F
| 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.
Needs confirmation (or some flags to enable).
|-
| 0x11
| s
| ro
| ?
|-
| 0x12
| ro
| 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
| s
| 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.
|-
| 0x21
| s
| ro(?)
| ?
|-
| 0x22
| 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
|-
| 0x23
| s
| ro(?)
| ?
|-
| 0x24
| ??
| 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
| s
| ro(rw?)
| Raw volume slider state
|-
|-
| 0x29
| dynamic(?)/ s| ro / rw| Repeat register, any byte written here 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
| s
| ro
| This [[MCURTC:GetInfoLEDStatus|returns]] the notification LED status when read.(1 means new cycle started)|-| 0x2F| s| ro(?)| ?
|-
| 0x30
| 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?)
|-
| 0x38
| s
| rw
| ?
|-
| 0x39
| s
| rw
| ?
|-
| 0x3A
| s
| rw
| ?
|-
| 0x3B
| s
| rw
| ?
|-
| 0x3C
| s
| rw
| ?
|-
| 0x3D
0x3E
| s (2)
| ro
| 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
| s
| rw(?)wo
| 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
| ro
| 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
| ro
| 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
| 0x100(?)| ro(?)
first byte is wo
| Looping queue register
|-
| 0x61
| 0x100(?)
| rw
| 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.
|-
| 0x62 - 0x7E
| s
| invalid (ro)
| These registers don't exist at all, thus reading them will yield 0xFF
|-
| 0x7F
byte 17: WiFi LED brightness
byte 18: raw button states?
bit0: unset while power button is held, bit1: unset while home button is held, bit2: unset while Wifi slider is held, bit4bit5: unset when charger while the charging LED is plugged in,active bit6: unset when charging LED while charger is activeplugged in
this byte is reset to 0 before an svcBreak takes effect
182

edits

Navigation menu