Difference between revisions of "LCD Registers"

From 3dbrew
Jump to navigation Jump to search
(19 intermediate revisions by 11 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
+
| ?
| 0x10202A04
+
| 0x10202004
| 0x1ED02A04
+
| 0x1ED02004
| 0xFFFD6A04
+
| 0xFFFD6004
| 4
+
| 0x4
|}
 
 
 
REG_*MAIN registers are used for the top LCD, while SUB is used for the bottom LCD. The registers for the main LCD is located at 0x1EF00400, while the sub LCD registers are located at 0x1EF00500.
 
 
 
== REG_LCDCOLORFILL ==
 
{| class="wikitable" border="1"
 
!  Bit
 
!  Description
 
|-
 
| 7-0
 
| Red component intensity
 
 
|-
 
|-
| 15-8
+
| Top Screen [[#LCD Configuration|LCD Configuration]]
| Green component intensity
+
| 0x10202200
|-
+
| 0x1ED02200
| 23-16
+
| 0xFFFD6200
| Blue component intensity
+
| 0x600
 
|-
 
|-
| 24
+
| Bottom Screen [[#LCD Configuration|LCD Configuration]]
| Enable
+
| 0x10202A00
 +
| 0x1ED02A00
 +
| 0xFFFD6A00
 +
| 0x600
 
|-
 
|-
| 31-25
 
 
| ?
 
| ?
 +
| 0x10203200
 +
| 0x1ED03200
 +
| 0xFFFD7200
 +
| 0x40
 
|}
 
|}
When the enable bit is set, the specified solid color is displayed on the LCD instead of the framebuffer.
 
  
== 0x1EF00X5C ==
+
On screen-init (error screen), Boot11 sets 0x10202004 to 0xA390A39.
 +
 
 +
== LCD Configuration ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Bit
+
Offset
 +
!  Size
 
!  Description
 
!  Description
 
|-
 
|-
| 15-0
+
| 0x00
| Framebuffer width
+
| 0x4
 +
| ?
 
|-
 
|-
| 31-16
+
| 0x04
| Framebuffer height
+
| 0x4
|}
+
| [[#Fill Color|Fill Color]]
 
 
This controls the displayed LCD framebuffer dimensions.
 
 
 
== 0x1EF00X70 ==
 
{| class="wikitable" border="1"
 
!  Bit
 
!  Description
 
 
|-
 
|-
| 15-0
+
| 0x10
| Framebuffer format
+
| 0x4
 +
| ?
 
|-
 
|-
| 31-16
+
| 0x14
 +
| 0x4
 
| ?
 
| ?
|}
 
 
=== Framebuffer format ===
 
{| class="wikitable" border="1"
 
 
|-
 
|-
!  Bit
+
| 0x18
!  Description
+
| 0x4
 +
| ?
 
|-
 
|-
| 3-0
+
| 0x1C
| Color format
+
| 0x4
 +
| ?
 
|-
 
|-
| 4
+
| 0x20
| Unused?
+
| 0x4
 +
| ?
 
|-
 
|-
| 5
+
| 0x24
| Set when the main screen 3D right framebuffer address is set.
+
| 0x4
 +
| ?
 
|-
 
|-
| 6
+
| 0x28
| 1 = main screen, 0 = sub screen. However if bit5 is set, this bit is cleared.
+
| 0x4
 +
| ?
 
|-
 
|-
| 7
+
| 0x2C
 +
| 0x4
 
| ?
 
| ?
 
|-
 
|-
| 9-8
+
| 0x30
| Value 1 = unknown, 3 = unknown.
+
| 0x4
 +
| ?
 
|-
 
|-
| 15-10
+
| 0x38
| Unused?
+
| 0x4
|}
+
| ?
 
 
GSP module only allows the LCD stereoscopy to enabled when bit5=1 and bit6=0 here. When GSP module updates this register, GSP module will automatically disable the stereoscopy if those bits are not set for enabling stereoscopy.
 
 
 
=== Framebuffer color formats ===
 
{| class="wikitable" border="1"
 
 
|-
 
|-
!  Value
+
| 0x3C
!  Description
+
| 0x4
 +
| ?
 
|-
 
|-
| 0
+
| 0x40
| GL_RGBA8_OES
+
| 0x4
 +
| Backlight
 
|-
 
|-
| 1
+
| 0x44
| GL_RGB8_OES
+
| 0x4
 +
| ?
 
|-
 
|-
| 2
+
| 0x60
| GL_RGB565_OES
+
| 0x4
 +
| ?
 
|-
 
|-
| 3
+
| 0x68
| GL_RGB5_A1_OES
+
| 0x4
 +
| ?
 
|-
 
|-
| 4
+
| 0x70
| GL_RGBA4_OES
+
| 0x4
|}
+
| ?
 
 
== 0x1EF00X78 ==
 
{| class="wikitable" border="1"
 
!  Bit
 
!  Description
 
 
|-
 
|-
| 0
+
| 0x78
| LCD framebuffer to display (0=first, 1=second)
+
| 0x4
 +
| ?
 
|-
 
|-
| 7-1
+
| 0x80
 +
| 0x4
 
| ?
 
| ?
 
|-
 
|-
| 31-8
+
| 0x100
| Unused
+
| 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.
 
|}
 
|}
  
== 0x1EF00X90 ==
+
=== Fill Color ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
!  Bit
 
!  Bit
 
!  Description
 
!  Description
 
|-
 
|-
| 31-0
+
| 7-0
| Framebuffer width * pixel byte-size.
+
| Red component intensity
|}
 
 
 
== Framebuffers ==
 
{| class="wikitable" border="1"
 
!  Address
 
!  Description
 
 
|-
 
|-
| 0x1EF00468
+
| 15-8
| Main LCD, first framebuffer for 3D left
+
| Green component intensity
 
|-
 
|-
| 0x1EF0046C
+
| 23-16
| Main LCD, second framebuffer for 3D left
+
| Blue component intensity
 
|-
 
|-
| 0x1EF00494
+
| 24
| Main LCD, first framebuffer for 3D right
+
| Enable
 
|-
 
|-
| 0x1EF00498
+
| 31-25
| Main LCD, second framebuffer for 3D right
+
| ?
|-
 
| 0x1EF00568
 
| Sub LCD, first framebuffer
 
|-
 
| 0x1EF0056C
 
| Sub LCD, second framebuffer
 
|-
 
| 0x1EF00594
 
| Sub LCD, unused first framebuffer
 
|-
 
| 0x1EF00598
 
| Sub LCD, unused second framebuffer
 
 
|}
 
|}
  
The above framebuffer registers contains the physical address for each framebuffer, normally located in FCRAM in the application's GSP heap. When other processes use GSP as well, the framebuffers for the process is stored in VRAM instead.
+
When the enable bit is set, the specified solid color is displayed on the LCD instead of the framebuffer.
 
 
These LCD framebuffers normally contain the last rendered frames from the GPU. The color format is BGR8. The framebuffers are drawn from left-to-right, instead of top-to-bottom.(Thus the beginning of the framebuffer is drawn starting at the left side of the screen)
 
 
 
Both of the 3D screen left/right framebuffers are displayed regardless of the 3D slider's state, however when the 3D slider is set to "off" the 3D effect is disabled. Normally when the 3D slider's state is set to "off" the left/right framebuffer addresses are set to the same physical address. When the 3D effect is disabled and the left/right framebuffers are set to separate addresses, the LCD seems to alternate between displaying the left/right framebuffer each frame.
 

Revision as of 01:54, 22 May 2017

Other registers that used to be documented on this page are now at GPU Registers.

Registers

NAME PHYSICAL ADDRESS PROCESS VIRTUAL ADDRESS KERNEL VIRTUAL ADDRESS WIDTH
Parallax barrier enable 0x10202000 0x1ED02000 0xFFFD6000 0x4
? 0x10202004 0x1ED02004 0xFFFD6004 0x4
Top Screen LCD Configuration 0x10202200 0x1ED02200 0xFFFD6200 0x600
Bottom Screen LCD Configuration 0x10202A00 0x1ED02A00 0xFFFD6A00 0x600
? 0x10203200 0x1ED03200 0xFFFD7200 0x40

On screen-init (error screen), Boot11 sets 0x10202004 to 0xA390A39.

LCD Configuration

Offset Size Description
0x00 0x4 ?
0x04 0x4 Fill Color
0x10 0x4 ?
0x14 0x4 ?
0x18 0x4 ?
0x1C 0x4 ?
0x20 0x4 ?
0x24 0x4 ?
0x28 0x4 ?
0x2C 0x4 ?
0x30 0x4 ?
0x38 0x4 ?
0x3C 0x4 ?
0x40 0x4 Backlight
0x44 0x4 ?
0x60 0x4 ?
0x68 0x4 ?
0x70 0x4 ?
0x78 0x4 ?
0x80 0x4 ?
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.

Fill Color

Bit Description
7-0 Red component intensity
15-8 Green component intensity
23-16 Blue component intensity
24 Enable
31-25 ?

When the enable bit is set, the specified solid color is displayed on the LCD instead of the framebuffer.