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 |
| |} | | |} |
| | | |