LCD Registers: Difference between revisions

Created page with "== Registers == {| class="wikitable" border="1" ! NAME ! PHYSICAL ADDRESS ! PROCESS VIRTUAL ADDRESS ! KERNEL VIRTUAL ADDRESS ! WIDTH |- | REG_LCDCOLORFILLMAIN | 0x10202204 |..."
 
Kynex7510 (talk | contribs)
m Generalize naming
 
(36 intermediate revisions by 13 users not shown)
Line 1: Line 1:
== Registers ==
Other registers that used to be documented on this page are now at [[GPU Registers]].
 
= Registers =
{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  NAME
!  NAME
Line 7: Line 9:
!  WIDTH
!  WIDTH
|-
|-
| REG_LCDCOLORFILLMAIN
| Parallax barrier enable
| 0x10202204
| 0x10202000
| 0x1ED02204
| 0x1ED02000
| 0xFFFD6204
| 0xFFFD6000
| 4
| 0x4
|-
|-
| REG_LCDCOLORFILLSUB
| Parallax barrier PWM
| 0x10202A04
| 0x10202004
| 0x1ED02A04
| 0x1ED02004
| 0xFFFD6A04
| 0xFFFD6004
| 4
| 0x4
|-
| LCD status
| 0x10202008
| 0x1ED02008
| 0xFFFD6008
| 0x4
|-
| LCD clock disable
| 0x1020200C
| 0x1ED0200C
| 0xFFFD600C
| 0x4
|-
| ?
| 0x10202010
| 0x1ED02010
| 0xFFFD6010
| 0x4
|-
| LCD reset
| 0x10202014
| 0x1ED02014
| 0xFFFD6014
| 0x4
|-
| Top Screen [[#LCD Configuration|LCD Configuration]]
| 0x10202200
| 0x1ED02200
| 0xFFFD6200
| 0x600
|-
| Bottom Screen [[#LCD Configuration|LCD Configuration]]
| 0x10202A00
| 0x1ED02A00
| 0xFFFD6A00
| 0x600
|-
| ?
| 0x10203200
| 0x1ED03200
| 0xFFFD7200
| 0x40
|}
|}


REG_*MAIN registers are used for the top LCD, while SUB is used for the bottom LCD.
On screen-init (error screen), Boot11 sets 0x10202004 to 0xA390A39.
 
== LCD Configuration ==
{| class="wikitable" border="1"
!  Offset
!  Size
!  Description
|-
| 0x00
| 0x4
| [[#Flags|Flags]]
|-
| 0x04
| 0x4
| [[#Fill Color|Fill Color]]
|-
| 0x10
| 0x10
| [[#ABL Area|ABL Area]]
|-
| 0x20
| 0x4
| GTH Ratio
|-
| 0x24
| 0x4
| Min GTH
|-
| 0x28
| 0x4
| MinMax
|-
| 0x2C
| 0x4
| ExMax
|-
| 0x30
| 0x4
| Inertia
|-
| 0x38
| 0x4
| MinRS
|-
| 0x3C
| 0x4
| MaxRS
|-
| 0x40
| 0x4
| [[#Backlight Level|Backlight Level]]
|-
| 0x44
| 0x4
| [[#Backlight Interval|Backlight Interval]]
|-
| 0x60
| 0x20
| Dither
|-
| 0x80
| 0x24
| LutListRS
|-
| 0xF0
| 0x0C
| ?
|-
| 0x100
| 0x100
| LCD calibration data, pulled from nand:/ro/sys/HWCAL0.dat offset 0x77C.
N3DS only. This area on old3DS is zero-filled and not writable.
|-
| 0x200
| 0x400
| ?
|}


== REG_LCDCOLORFILL ==
=== Flags ===
{| class="wikitable" border="1"
! Bit
! Description
|-
| 0
| ABL on
|-
| 8
| ?
|-
| 9
| ?
|}
 
Bits 8 and 9 control dither.
 
=== Fill Color ===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Bit
!  Bit
Line 38: Line 175:
| 24
| 24
| Enable
| Enable
|}
When the enable bit is set, the specified solid color is displayed on the LCD instead of the framebuffer.
=== ABL Area ===
{| class="wikitable" border="1"
!  Offset
!  Description
|-
| 0x00
| X begin
|-
| 0x04
| X end
|-
| 0x08
| Y begin
|-
|-
| 31-23
| 0x0C
| Y end
|}
 
The values refer to 90° clockwise rotated screens.
 
=== Backlight Level ===
{| class="wikitable" border="1"
!  Bit
!  Description
|-
| 9-0
| Backlight PWM duty on (0 = off)
|}
 
=== Backlight Interval ===
{| class="wikitable" border="1"
!  Bit
!  Description
|-
| 9-0
| Backlight PWM Interval, minus 1
|-
| 16
| Enable LCD (0 = disabled, 1 = enabled).
|-
| 17
| RS on (?)
|-
| 18
| ?
| ?
|}
|}
When the enable bit is set, the specified solid color is displayed on the LCD instead of the rendered graphics.
 
On old 2DS, disabling the top LCD does nothing, disabling the bottom LCD affects both screens.
Setting bit 18 makes the screen darker.