Changes

7,916 bytes added ,  20:27, 13 August 2023
Update ConfigInfoBlk numbers from cfg sysmodule
Line 21: Line 21:  
|-
 
|-
 
| 0xC
 
| 0xC
| 0x2?
+
| 0x1
| ???
+
| Model version (?)
 +
|-
 +
| 0xD
 +
| 0x1
 +
| CAL revision (incremented each time the CAL file is updated)
 
|-
 
|-
 
| 0xE
 
| 0xE
Line 30: Line 34:  
| 0x10
 
| 0x10
 
| 0x20
 
| 0x20
| On devunits and if 0x1FF81006 is 3 or 4 or 7 or 8 or 9 then SHA256,
+
| Signature of the data section.
otherwise HMACSHA256 signature of the data section
+
 
 +
HMACSHA256 is used always except in the below cases where SHA256 is used:
 +
  - devunits
 +
  - PARTNER-DEBUGGER
 +
  - PARTNER-CAPTURE
 +
  - the SNAKE counterparts of the above
 +
  - SNAKE-IS-DEBUGGER
 
|-
 
|-
 
| 0x30
 
| 0x30
 
| 0x1D0
 
| 0x1D0
| Zerofilled
+
| Zerofilled, padding for the 512byte block size
 
|}
 
|}
   Line 47: Line 57:  
|-
 
|-
 
| 1
 
| 1
| LCD flicker (always successful)
+
| LCD "flicker"/contrast (always successful)
 
|-
 
|-
 
| 2
 
| 2
Line 74: Line 84:  
|-
 
|-
 
| A
 
| A
| Power saving mode (ABL)
+
| Adaptive BackLight (ABL)
 
|-
 
|-
 
| B
 
| B
Line 89: Line 99:  
|-
 
|-
 
| F
 
| F
| Power saving mode (ABL) in legacy (DSi/GBA) mode
+
| Adaptive BackLight (ABL) in legacy (DSi/GBA) mode
 
|}
 
|}
   Line 96: Line 106:  
!  Offset
 
!  Offset
 
!  Size
 
!  Size
 +
!  [[Config_Savegame#Configuration_blocks|ConfigInfoBlk]]
 +
!  Since version
 
!  Description
 
!  Description
 +
|-
 +
| 0x00
 +
| 0x10
 +
| 0x00040000
 +
|
 +
| [[#Touch|Touch panel]]
 +
|-
 +
| 0x14
 +
| 0x08
 +
| ???
 +
|
 +
| [[#Circle_pad|Circle pad]]
 +
|-
 +
| 0x20
 +
| 2*
 +
| 0x00050000
 +
|
 +
| [[#Screen_flicker|Display panel contrast]]
 +
|-
 +
| 0x24
 +
| 1*
 +
| 0x00010000
 +
|
 +
| [[#RTC|RTC]]
 +
|-
 +
| 0x28
 +
| 1*
 +
| 0x00030000
 +
|
 +
| DSPRAM related
 
|-
 
|-
 
| 0x30
 
| 0x30
| 0x8C
+
| 0x8A
| Camera position
+
| ???
 +
|
 +
| [[#Camera_position|Camera position]]
 +
|-
 +
| 0xBC
 +
| 0x12
 +
| 0x00040002
 +
|
 +
| [[#Gyro|Gyroscope]]
 +
|-
 +
| 0xD0
 +
| 0xC
 +
| 0x00040003
 +
|
 +
| [[#Accel|Accelerometer]]
 +
|-
 +
| 0xE0
 +
| 0x134
 +
| 0x00020000
 +
| ???
 +
| [[#CDC|Codec]]
 
|-
 
|-
 
| 0x218
 
| 0x218
 
| 0x06
 
| 0x06
| Programmable Interrupt Timer??? (PIT)
+
| 0x00050007
 +
| 0x10
 +
| [[#PIT|Programmable Infrared Transmitter (PIT)]]
 +
|-
 +
| 0x220
 +
| 0x214
 +
| 0x00070000
 +
| 0x7
 +
| [[#3D_filters|3D filters]]
 +
|-
 +
| 0x440
 +
| 0x20
 +
| 0x00050003
 +
| 0x8
 +
| [[#ABL|Adaptive BackLight / Power saving mode]]
 +
|-
 +
| 0x470
 +
| 0x20
 +
| 0x00050005
 +
| 0xA
 +
| ???
 +
|-
 +
| 0x4A0
 +
| 0x38
 +
| 0x00050002
 +
| 0xB
 +
| [[#BLPWM|Backlight PWM]]
 +
|-
 +
| 0x4E0
 +
| 0x18
 +
| ???
 +
|
 +
| [[#Circle_pad_extra|Circle pad extra]]
 +
|-
 +
| 0x500
 +
| 0xC
 +
| ???
 +
|
 +
| ???
 +
|-
 +
| 0x510
 +
| 0x20
 +
| 0x00050004
 +
| 0x8
 +
| ???
 
|-
 
|-
 
| 0x540
 
| 0x540
| 0x0A
+
| 0x08
| MCU
+
| 0x00120000
 +
| 0x7
 +
| [[#MCU|MCU]]
 
|-
 
|-
 
| 0x550
 
| 0x550
| 0x04
+
| 0x02
| 3D screen (ULCD) delay
+
| 0x00050006
 +
| 0x9
 +
| [[#ULCD_delay|3D screen (ULCD) delay]]
 
|-
 
|-
 
| 0x560
 
| 0x560
| 0x0A
+
| 0x08
| Microphone echo cancelation
+
| 0x00070002
 +
| 0xD
 +
| [[#Microphone_echo_cancel|Microphone echo cancellation]]
 
|-
 
|-
 
| 0x570
 
| 0x570
| 0x10E
+
| 0x10C
| Power saving mode (ABL) extra
+
| 0x00050008
 +
| 0xF
 +
| [[#ABL_extra|Power saving mode (ABL) extra]]
 
|-
 
|-
 
| 0x680
 
| 0x680
| 0x0A
+
| 0x08
| CStick (Right stick)
+
| 0x00040004
 +
| 0xF
 +
| [[#CStick|CStick (Right stick)]]
 
|-
 
|-
 
| 0x690
 
| 0x690
| 0x1A
+
| 0x18
| Q Tracking Module (QTM)
+
| 0x00180001
 +
| 0x12
 +
| [[#QTM|Quad Tracking Module (QTM)]]
 
|}
 
|}
    
=Data block formats=
 
=Data block formats=
 +
 +
==Touch==
 +
Used for mapping touch ADC values to display pixel co-ordinates.
 +
 +
<code>
 +
[4096, 4096] --> [320, 240]
 +
 +
[RawX, RawY] --> [PointX, PointY]
 +
</code>
 +
 +
Usually [PointX0, PointY0] is placed around 25% from the top-left corner, and the same for [PointX1, PointY1] except 25% from the bottom-right corner.
 +
This offsetting is needed because the touch film starts to distort outside of that rectangle, which would skew the touch results near the center of the screen.
 +
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| s16 RawX0
 +
|-
 +
| 0x02
 +
| s16 RawY0
 +
|-
 +
| 0x04
 +
| s16 PointX0
 +
|-
 +
| 0x06
 +
| s16 PointY0
 +
|-
 +
| 0x08
 +
| s16 RawX1
 +
|-
 +
| 0x0A
 +
| s16 RawY1
 +
|-
 +
| 0x0C
 +
| s16 PointX1
 +
|-
 +
| 0x0E
 +
| s16 PointY1
 +
|}
 +
 +
==Circle pad==
 +
 +
Contains the centering position of the circle pad. For other circle pad settings, see [[#Circle_pad_extra|circle pad extra]].
 +
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
!  Description
 +
|-
 +
| 0x00
 +
| s16 CenterX
 +
|rowspan="2"| Raw analog values corresponding to zero input position
 +
|-
 +
| 0x02
 +
| s16 CenterY
 +
|}
 +
 +
==Screen flicker==
 +
 +
These values are written to MCU register 0x03 and 0x04 respectively. They both set the display contrast voltage.
 +
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
!  Description
 +
|-
 +
| 0
 +
| u8 FlickerTop
 +
|rowspan="2"| Contrast voltage
 +
|-
 +
| 1
 +
| u8 FlickerBottom
 +
|-
 +
| 2*
 +
|rowspan="2"| Inline checksum
 +
| Checksum low byte, NOT THIS[0]
 +
|-
 +
| 3*
 +
| Checksum high byte, THIS[1]
 +
|}
 +
 +
==RTC==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
!  Description
 +
|-
 +
| 0
 +
| u8 CompensationValue
 +
| (???)
 +
|-
 +
| 1*
 +
|
 +
| Checksum byte, NOT THIS[0]
 +
|}
    
==Camera position==
 
==Camera position==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
!  Offset
 
!  Offset
Description
+
Declaration
 
|-
 
|-
 
| 0x00
 
| 0x00
Line 197: Line 412:  
| 0x88
 
| 0x88
 
| s16 ccmPosition
 
| s16 ccmPosition
 +
|}
 +
 +
==Gyro==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| s16 ZeroX
 +
|-
 +
| 0x02
 +
| s16 PlusX
 +
|-
 +
| 0x04
 +
| s16 MinusX
 +
|-
 +
| 0x06
 +
| s16 ZeroY
 +
|-
 +
| 0x08
 +
| s16 PlusY
 +
|-
 +
| 0x0A
 +
| s16 MinusY
 +
|-
 +
| 0x0C
 +
| s16 ZeroZ
 +
|-
 +
| 0x0E
 +
| s16 PlusZ
 +
|-
 +
| 0x10
 +
| s16 MinusZ
 +
|}
 +
 +
==Accel==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| s16 OffsetX
 +
|-
 +
| 0x02
 +
| s16 ScaleX
 +
|-
 +
| 0x04
 +
| s16 OffsetY
 +
|-
 +
| 0x06
 +
| s16 ScaleY
 +
|-
 +
| 0x08
 +
| s16 OffsetZ
 +
|-
 +
| 0x0A
 +
| s16 ScaleZ
 +
|}
 +
 +
==CDC==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
!  Description
 +
|-
 +
| 0x00
 +
| u8 DriverGainHP
 +
| Headphone gain
 +
|-
 +
| 0x01
 +
| u8 DriverGainSP
 +
| Speaker gain
 +
|-
 +
| 0x02
 +
| u8 AnalogVolumeHP
 +
|
 +
|-
 +
| 0x03
 +
| u8 AnalogVolumeSP
 +
|
 +
|-
 +
| 0x04
 +
| s8 ShutterVolume[2]
 +
|
 +
|-
 +
| 0x06
 +
| u8 MicrophoneBias
 +
| Capacitive microphone bias voltage
 +
|-
 +
| 0x07
 +
| u8 QuickCharge
 +
| (???)
 +
|-
 +
| 0x08
 +
| u8 PGA_GAIN
 +
| ??? (microphone gain)
 +
|-
 +
| 0x09
 +
| u8 reserved[3]
 +
|-
 +
| 0x0C
 +
| s16 FilterHP32[3*5]
 +
| Headphone filter for 32728.49Hz sampling rate
 +
|-
 +
| 0x2A
 +
| s16 FilterHP47[3*5]
 +
| Headphone filter for 47605Hz sampling rate
 +
|-
 +
| 0x48
 +
| s16 FilterSP32[3*5]
 +
| Speaker filter for 32728.49Hz sampling rate
 +
|-
 +
| 0x66
 +
| s16 FilterSP47[3*5]
 +
| Speaker filter for 47605Hz sampling rate
 +
|-
 +
| 0x84
 +
| s16 FilterMic32[(1+2)+((1+4)*5)]
 +
| Microphone filter for 32728.49Hz sampling rate
 +
|-
 +
| 0xBC
 +
| s16 FilterMic47[(1+2)+((1+4)*5)]
 +
| Microphone filter for 47605Hz sampling rate
 +
|-
 +
| 0xF4
 +
| s16 FilterFree[(1+2)+((1+4)*5)]
 +
| Unknown
 +
|-
 +
| 0x12C
 +
| u8 AnalogInterval
 +
|-
 +
| 0x12D
 +
| u8 AnalogStabilize
 +
|-
 +
| 0x12E
 +
| u8 AnalogPrecharge
 +
|-
 +
| 0x12F
 +
| u8 AnalogSense
 +
|-
 +
| 0x130
 +
| u8 AnalogDebounce
 +
|-
 +
| 0x131
 +
| u8 Analog_XP_Pullup
 +
|-
 +
| 0x132
 +
| u8 YM_Driver
 +
| ??? (circle-pad or touch panel related?)
 +
|-
 +
| 0x133
 +
| u8 reserved
 +
|}
 +
 +
==PIT==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| u16 VisibleFactor
 +
|-
 +
| 0x02
 +
| u16 IRFactor
 +
|}
 +
 +
==3D filters==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| u16 SpecialFilter[0x100]
 +
|-
 +
| 0x200
 +
| u32 IIRSurroundFilter[5]
 +
|}
 +
 +
==ABL==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| u32 DitherPattern
 +
|-
 +
| 0x04
 +
| s16 StartX
 +
|-
 +
| 0x06
 +
| s16 StartY
 +
|-
 +
| 0x08
 +
| u16 SizeX
 +
|-
 +
| 0x0A
 +
| u16 SizeY
 +
|-
 +
| 0x0C
 +
| s16 GTH_Ratio
 +
|-
 +
| 0x0E
 +
| u8 DitherMode
 +
|-
 +
| 0x0F
 +
| u8 MinRS
 +
|-
 +
| 0x10
 +
| u8 MaxRS
 +
|-
 +
| 0x11
 +
| u8 MinGTH
 +
|-
 +
| 0x12
 +
| u8 MinMax (???)
 +
|-
 +
| 0x13
 +
| u8 ExMax (???)
 +
|-
 +
| 0x14
 +
| u8 inertia
 +
|-
 +
| 0x15
 +
| u8 LutListRS[9]
 +
|-
 +
| 0x1E
 +
| u8 reserved[2]
 +
|}
 +
 +
==BLPWM==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| float coefficient[3][3]
 +
|-
 +
| 0x24
 +
| u8 NumLevels
 +
|-
 +
| 0x25
 +
| u8 padding
 +
|-
 +
| 0x26
 +
| u16 brightnesses[7];
 +
|-
 +
| 0x34
 +
| u16 BaseDivisor
 +
|-
 +
| 0x36
 +
| u16 MinimumBrightnessHw
 +
|}
 +
 +
==Circle pad extra==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| float ScaleX
 +
|-
 +
| 0x04
 +
| float ScaleY
 +
|-
 +
| 0x08
 +
| s16 MaxX
 +
|-
 +
| 0x0A
 +
| s16 MinX
 +
|-
 +
| 0x0C
 +
| s16 MaxY
 +
|-
 +
| 0x0E
 +
| s16 MinY
 +
|-
 +
| 0x10
 +
| s16 type
 +
|-
 +
| 0x12
 +
| u8 unknown_padding[6]
 +
|}
 +
 +
==MCU==
 +
 +
Somewhat misleading, these values are actually used for clamping the MCU's raw slider readings to comprehensible values.
 +
 +
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
!  Description
 +
|-
 +
| 0x00
 +
| s16 SVR2_Min
 +
| Raw 3D volume slider values <= this map to 3D slider value 0.0
 +
|-
 +
| 0x02
 +
| s16 SVR2_Max
 +
| Raw 3D volume slider values >= this map to 3D slider value 1.0
 +
|-
 +
| 0x04
 +
| s16 VolumeSliderMin
 +
| Written to MCU reg 0x58. Volume slider values <= this map to volume value 0x00
 +
|-
 +
| 0x06
 +
| s16 VolumeSliderMax
 +
| Written to MCU reg 0x59. Volume slider values >= this map to volume value 0x3F
 +
|}
 +
 +
==ULCD delay==
 +
 +
There is a delay between switching the parallax barrier, and adjusting the backlight.
 +
These delay values determine how many VBlank events to wait on before switching the backlight curves to the appropriate mode.
 +
 +
This is needed only to prevent epillepsy from analog jitter causing unwanted mode switches, and both values are usually always set to 1 or 2.
 +
 +
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| u8 To2D
 +
|-
 +
| 0x01
 +
| u8 To3D
 +
|}
 +
 +
==Microphone echo cancel==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| s8 params[8]
 +
|}
 +
 +
==ABL extra==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| u8 MaxInertia
 +
|-
 +
| 0x01
 +
| u8 pad
 +
|-
 +
| 0x02
 +
| u16 PWM_CNT_EX
 +
|-
 +
| 0x04
 +
| u32 Histogram1
 +
|-
 +
| 0x08
 +
| u32 Histogram2
 +
|-
 +
| 0x0C
 +
| u32 adjust[0x40]
 +
|}
 +
 +
==CStick==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| u8 ThinningCountX(???)
 +
|-
 +
| 0x01
 +
| u8 ThinningCountY(???)
 +
|-
 +
| 0x02
 +
| u16 reserved[3]
 +
|}
 +
 +
==QTM==
 +
{| class="wikitable" border="1"
 +
!  Offset
 +
!  Declaration
 +
|-
 +
| 0x00
 +
| float DivisorAtZero (???)
 +
|-
 +
| 0x04
 +
| float TranslationX
 +
|-
 +
| 0x08
 +
| float TranslationY
 +
|-
 +
| 0x0C
 +
| float RotationZ
 +
|-
 +
| 0x10
 +
| float HorizontalAngle
 +
|-
 +
| 0x14
 +
| float OptimalDistance
 
|}
 
|}
  
Trusted
225

edits