<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Steveice10</id>
	<title>3dbrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Steveice10"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/Steveice10"/>
	<updated>2026-05-13T06:45:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=GPU/Shader_Instruction_Set&amp;diff=22319</id>
		<title>GPU/Shader Instruction Set</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=GPU/Shader_Instruction_Set&amp;diff=22319"/>
		<updated>2023-08-24T15:54:39Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: More thorough behavior testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:GPU]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A compiled shader binary is comprised of two parts : the main instruction sequence and the operand descriptor table. These are both sent to the GPU around the same time but using separate [[GPU/Internal_Registers|GPU Commands]]. Instructions (such as format 1 instruction) may reference operand descriptors. When such is the case, the operand descriptor ID is the offset, in words, of the descriptor within the table.&lt;br /&gt;
Both instructions and descriptors are coded in little endian.&lt;br /&gt;
Basic implementations of the following specification can be found at [https://github.com/smealum/aemstro] and [https://github.com/neobrain/nihstro].&lt;br /&gt;
The instruction set seems to have been heavily inspired by Microsoft&#039;s vs_3_0 [http://msdn.microsoft.com/en-us/library/windows/desktop/bb172938%28v=vs.85%29.aspx] and the Direct3D shader code [https://msdn.microsoft.com/en-us/library/windows/hardware/ff552891%28v=vs.85%29.aspx].&lt;br /&gt;
Please note that this page is being written as the instruction set is reverse engineered; as such it may very well contain mistakes.&lt;br /&gt;
&lt;br /&gt;
Debug information found in the code.bin of &amp;quot;Ironfall: Invasion&amp;quot; suggests that there may not be more than 512 instructions and 128 operand descriptors in a shader.&lt;br /&gt;
&lt;br /&gt;
== Nomenclature ==&lt;br /&gt;
&lt;br /&gt;
* opcode names with I appended to them are the same as their non-I version, except they use the inverted instruction format, giving 7 bits to SRC2 (and access to constant registers) and 5 bits to SRC1&lt;br /&gt;
&lt;br /&gt;
* opcode names with U appended to them are the same as their non-U version, except they are executed conditionally based on the value of a constant boolean register.&lt;br /&gt;
&lt;br /&gt;
* opcode names with C appended to them are the same as their non-C version, except they are executed conditionally based on a logical expression specified in the instruction.&lt;br /&gt;
&lt;br /&gt;
== Instruction formats ==&lt;br /&gt;
&lt;br /&gt;
Format 1 : (used for register operations)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x7&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0xC&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC1 (IDX_1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 1i : (used for register operations)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x7&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0xE&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC2 (IDX_2)&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 1u : (used for unary register operations)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0xC&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  0x2&lt;br /&gt;
|   Address register index for SRC1 (IDX_1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 1c : (used for comparison operations)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x7&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0xC&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC1 (IDX_1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  0x3&lt;br /&gt;
|  Comparison operator for Y (CMPY)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x3&lt;br /&gt;
|  Comparison operator for X (CMPX)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1B&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 2 : (used for flow control instructions)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Number of instructions (NUM)&lt;br /&gt;
|-&lt;br /&gt;
|  0xA&lt;br /&gt;
|  0xC&lt;br /&gt;
|  Destination offset (in words) (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Condition boolean operator (CONDOP)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Y reference bit (REFY)&lt;br /&gt;
|-&lt;br /&gt;
|  0x19&lt;br /&gt;
|  0x1&lt;br /&gt;
|  X reference bit (REFX)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 3 : (used for constant-based conditional flow control instructions)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Number of instructions ? (NUM)&lt;br /&gt;
|-&lt;br /&gt;
|  0xA&lt;br /&gt;
|  0xC&lt;br /&gt;
|  Destination offset (in words) (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x4&lt;br /&gt;
|  Constant ID (BOOL/INT)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 4 : (used for SETEMIT)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Winding flag (FLAG_WINDING)&lt;br /&gt;
|-&lt;br /&gt;
|  0x17&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Primitive emit flag (FLAG_PRIMEMIT)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Vertex ID (VTXID)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 5 : (used for MAD)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x5&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 3 register (SRC3)&lt;br /&gt;
|-&lt;br /&gt;
|  0xA&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0x11&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC2 (IDX_2)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1D&lt;br /&gt;
|  0x3&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 5i : (used for MADI)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x5&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 3 register (SRC3)&lt;br /&gt;
|-&lt;br /&gt;
|  0xC&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0x11&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC3 (IDX_3)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1D&lt;br /&gt;
|  0x3&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
Unless noted otherwise, SRC1 and SRC2 refer to their respectively indexed float[4] registers (after swizzling). Similarly, DST refers to its indexed register modulo destination component masking, i.e. an expression like DST=SRC1 might actually just set DST.y to SRC1.y.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Format&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x00&lt;br /&gt;
|  1&lt;br /&gt;
|  ADD&lt;br /&gt;
|  Adds two vectors component by component; DST[i] = SRC1[i]+SRC2[i] for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x01&lt;br /&gt;
|  1&lt;br /&gt;
|  DP3&lt;br /&gt;
|  Computes dot product on 3-component vectors; DST = SRC1.SRC2&lt;br /&gt;
|-&lt;br /&gt;
|  0x02&lt;br /&gt;
|  1&lt;br /&gt;
|  DP4&lt;br /&gt;
|  Computes dot product on 4-component vectors; DST = SRC1.SRC2&lt;br /&gt;
|-&lt;br /&gt;
|  0x03&lt;br /&gt;
|  1&lt;br /&gt;
|  DPH&lt;br /&gt;
|  Computes dot product on a 3-component vector with 1.0 appended to it and a 4-component vector; DST = SRC1.SRC2 (with SRC1 homogenous)&lt;br /&gt;
|-&lt;br /&gt;
|  0x04&lt;br /&gt;
|  1&lt;br /&gt;
|  DST&lt;br /&gt;
|  Equivalent to Microsoft&#039;s [https://msdn.microsoft.com/en-us/library/windows/desktop/bb219790.aspx dst] instruction: DST = {1, SRC1[1]*SRC2[1], SRC1[2], SRC2[3]}&lt;br /&gt;
|-&lt;br /&gt;
|  0x05&lt;br /&gt;
|  1u&lt;br /&gt;
|  EX2&lt;br /&gt;
|  Computes SRC1&#039;s first component exponent with base 2; DST[i] = EXP2(SRC1[0]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x06&lt;br /&gt;
|  1u&lt;br /&gt;
|  LG2&lt;br /&gt;
|  Computes SRC1&#039;s first component logarithm with base 2; DST[i] = LOG2(SRC1[0]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x07&lt;br /&gt;
|  1u&lt;br /&gt;
|  LITP&lt;br /&gt;
|  Appears to be related to Microsoft&#039;s [https://msdn.microsoft.com/en-us/library/windows/desktop/bb174703.aspx lit] instruction; DST = clamp(SRC1, min={0, -127.9961, 0, 0}, max={inf, 127.9961, 0, inf}); n.b.: 127.9961 = 0x7FFF / 0x100&lt;br /&gt;
|-&lt;br /&gt;
|  0x08&lt;br /&gt;
|  1&lt;br /&gt;
|  MUL&lt;br /&gt;
|  Multiplies two vectors component by component; DST[i] = SRC1[i].SRC2[i] for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x09&lt;br /&gt;
|  1&lt;br /&gt;
|  SGE&lt;br /&gt;
|  Sets output if SRC1 is greater than or equal to SRC2; DST[i] = (SRC1[i] &amp;gt;= SRC2[i]) ? 1.0 : 0.0 for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0A&lt;br /&gt;
|  1&lt;br /&gt;
|  SLT&lt;br /&gt;
|  Sets output if SRC1 is strictly less than SRC2; DST[i] = (SRC1[i] &amp;lt; SRC2[i]) ? 1.0 : 0.0 for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0B&lt;br /&gt;
|  1u&lt;br /&gt;
|  FLR&lt;br /&gt;
|  Computes SRC1&#039;s floor component by component; DST[i] = FLOOR(SRC1[i]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0C&lt;br /&gt;
|  1&lt;br /&gt;
|  MAX&lt;br /&gt;
|  Takes the max of two vectors, component by component; DST[i] = MAX(SRC1[i], SRC2[i]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0D&lt;br /&gt;
|  1&lt;br /&gt;
|  MIN&lt;br /&gt;
|  Takes the min of two vectors, component by component; DST[i] = MIN(SRC1[i], SRC2[i]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0E&lt;br /&gt;
|  1u&lt;br /&gt;
|  RCP&lt;br /&gt;
|  Computes the reciprocal of the vector&#039;s first component; DST[i] = 1/SRC1[0] for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0F&lt;br /&gt;
|  1u&lt;br /&gt;
|  RSQ&lt;br /&gt;
|  Computes the reciprocal of the square root of the vector&#039;s first component; DST[i] = 1/sqrt(SRC1[0]) for all i&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| ?&lt;br /&gt;
| ???&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| ?&lt;br /&gt;
| ???&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x12&lt;br /&gt;
|  1u&lt;br /&gt;
|  MOVA&lt;br /&gt;
|  Move to address register; Casts the float value given by SRC1 to an integer (truncating the fractional part) and assigns the result to (a0.x, a0.y, _, _), respecting the destination component mask.&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  1u&lt;br /&gt;
|  MOV&lt;br /&gt;
|  Moves value from one register to another; DST = SRC1.&lt;br /&gt;
|-&lt;br /&gt;
|  0x14&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x17&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  1i&lt;br /&gt;
|  DPHI&lt;br /&gt;
|  Computes dot product on a 3-component vector with 1.0 appended to it and a 4-component vector; DST = SRC1.SRC2 (with SRC1 homogenous)&lt;br /&gt;
|-&lt;br /&gt;
|  0x19&lt;br /&gt;
|  1i&lt;br /&gt;
|  DSTI&lt;br /&gt;
|  DST with sources swapped.&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  1i&lt;br /&gt;
|  SGEI&lt;br /&gt;
|  Sets output if SRC1 is greater than or equal to SRC2; DST[i] = (SRC1[i] &amp;gt;= SRC2[i]) ? 1.0 : 0.0 for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x1B&lt;br /&gt;
|  1i&lt;br /&gt;
|  SLTI&lt;br /&gt;
|  Sets output if SRC1 is strictly less than SRC2; DST[i] = (SRC1[i] &amp;lt; SRC2[i]) ? 1.0 : 0.0 for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x1C&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x1D&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x1E&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x1F&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x20&lt;br /&gt;
|  0&lt;br /&gt;
|  BREAK&lt;br /&gt;
|  Breaks out of LOOP block; do not use while in nested IF/CALL block inside LOOP block.&lt;br /&gt;
|-&lt;br /&gt;
|  0x21&lt;br /&gt;
|  0&lt;br /&gt;
|  NOP&lt;br /&gt;
|  Does literally nothing.&lt;br /&gt;
|-&lt;br /&gt;
|  0x22&lt;br /&gt;
|  0&lt;br /&gt;
|  END&lt;br /&gt;
|  Signals the shader unit that processing for this vertex/primitive is done.&lt;br /&gt;
|-&lt;br /&gt;
|  0x23&lt;br /&gt;
|  2&lt;br /&gt;
|  BREAKC&lt;br /&gt;
|  If condition (see [[#Conditions|below]] for details) is true, then breaks out of LOOP block.&lt;br /&gt;
|-&lt;br /&gt;
|  0x24&lt;br /&gt;
|  2&lt;br /&gt;
|  CALL&lt;br /&gt;
|  Jumps to DST and executes instructions until it reaches DST+NUM instructions&lt;br /&gt;
|-&lt;br /&gt;
|  0x25&lt;br /&gt;
|  2&lt;br /&gt;
|  CALLC&lt;br /&gt;
|  If condition (see [[#Conditions|below]] for details) is true, then jumps to DST and executes instructions until it reaches DST+NUM instructions, else does nothing.&lt;br /&gt;
|-&lt;br /&gt;
|  0x26&lt;br /&gt;
|  3&lt;br /&gt;
|  CALLU&lt;br /&gt;
|  Jumps to DST and executes instructions until it reaches DST+NUM instructions if BOOL is true&lt;br /&gt;
|-&lt;br /&gt;
|  0x27&lt;br /&gt;
|  3&lt;br /&gt;
|  IFU&lt;br /&gt;
|  If condition BOOL is true, then executes instructions until DST, then jumps to DST+NUM; else, jumps to DST.&lt;br /&gt;
|-&lt;br /&gt;
|  0x28&lt;br /&gt;
|  2&lt;br /&gt;
|  IFC&lt;br /&gt;
|  If condition (see [[#Conditions|below]] for details) is true, then executes instructions until DST, then jumps to DST+NUM; else, jumps to DST&lt;br /&gt;
|-&lt;br /&gt;
|  0x29&lt;br /&gt;
|  3&lt;br /&gt;
|  LOOP&lt;br /&gt;
|  Loops over the code between itself and DST (inclusive), performing INT.x+1 iterations in total. First, aL is initialized to INT.y. After each iteration, aL is incremented by INT.z.&lt;br /&gt;
|-&lt;br /&gt;
|  0x2A&lt;br /&gt;
|  0 (no param)&lt;br /&gt;
|  EMIT&lt;br /&gt;
|  (geometry shader only) Emits a vertex (and primitive if FLAG_PRIMEMIT was set in the corresponding SETEMIT). SETEMIT must be called before this.&lt;br /&gt;
|-&lt;br /&gt;
|  0x2B&lt;br /&gt;
|  4&lt;br /&gt;
|  SETEMIT&lt;br /&gt;
|  (geometry shader only) Sets VTXID, FLAG_WINDING and FLAG_PRIMEMIT for the next EMIT instruction. VTXID is the ID of the vertex about to be emitted within the primitive, while FLAG_PRIMEMIT is zero if we are just emitting a single vertex and non-zero if are emitting a vertex and primitive simultaneously. FLAG_WINDING controls the output primitive&#039;s winding. Note that the output vertex buffer (which holds 4 vertices) is &#039;&#039;&#039;not&#039;&#039;&#039; cleared when the primitive is emitted, meaning that vertices from the previous primitive can be reused for the current one. (this is still a working hypothesis and unconfirmed)&lt;br /&gt;
|-&lt;br /&gt;
|  0x2C&lt;br /&gt;
|  2&lt;br /&gt;
|  JMPC&lt;br /&gt;
|  If condition (see [[#Conditions|below]] for details) is true, then jumps to DST, else does nothing.&lt;br /&gt;
|-&lt;br /&gt;
|  0x2D&lt;br /&gt;
|  3&lt;br /&gt;
|  JMPU&lt;br /&gt;
|  If condition BOOL is true, then jumps to DST, else does nothing. Having bit 0 of NUM = 1 will invert the test, jumping if BOOL is false instead.&lt;br /&gt;
|-&lt;br /&gt;
|  0x2E-0x2F&lt;br /&gt;
|  1c&lt;br /&gt;
|  CMP&lt;br /&gt;
|  Sets booleans cmp.x and cmp.y based on the operand&#039;s x and y components and the CMPX and CMPY comparison operators respectively. See [[#Comparison_operator|below]] for details about operators. It&#039;s unknown whether CMP respects the destination component mask or not.&lt;br /&gt;
|-&lt;br /&gt;
|  0x30-0x37&lt;br /&gt;
|  5i&lt;br /&gt;
|  MADI&lt;br /&gt;
|  Multiplies two vectors and adds a third one component by component; DST[i] = SRC3[i] + SRC2[i].SRC1[i] for all i; this is not an FMA, the intermediate result is rounded&lt;br /&gt;
|-&lt;br /&gt;
|  0x38-0x3F&lt;br /&gt;
|  5&lt;br /&gt;
|  MAD&lt;br /&gt;
|  Multiplies two vectors and adds a third one component by component; DST[i] = SRC3[i] + SRC2[i].SRC1[i] for all i; this is not an FMA, the intermediate result is rounded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operand descriptors ==&lt;br /&gt;
Sizes below are in bits, not bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x4&lt;br /&gt;
|  Destination component mask. Bit 3 = x, 2 = y, 1 = z, 0 = w.&lt;br /&gt;
|-&lt;br /&gt;
|  0x4&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Source 1 negation bit&lt;br /&gt;
|-&lt;br /&gt;
|  0x5&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Source 1 component selector&lt;br /&gt;
|-&lt;br /&gt;
|  0xD&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Source 2 negation bit&lt;br /&gt;
|-&lt;br /&gt;
|  0xE&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Source 2 component selector&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Source 3 negation bit&lt;br /&gt;
|-&lt;br /&gt;
|  0x17&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Source 3 component selector&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Component selector :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Component 3 value&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Component 2 value&lt;br /&gt;
|-&lt;br /&gt;
|  0x4&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Component 1 value&lt;br /&gt;
|-&lt;br /&gt;
|  0x6&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Component 0 value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Component&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  x&lt;br /&gt;
|-&lt;br /&gt;
|  0x1&lt;br /&gt;
|  y&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  z&lt;br /&gt;
|-&lt;br /&gt;
|  0x3&lt;br /&gt;
|  w&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The component selector enables swizzling. For example, component selector 0x1B is equivalent to .xyzw, while 0x55 is equivalent to .yyyy.&lt;br /&gt;
&lt;br /&gt;
Depending on the current shader opcode, source components are disabled implicitly by setting the destination component mask. For example, ADD o0.xy, r0.xyzw, r1.xyzw will not make use of r0&#039;s or r1&#039;s z/w components, while DP4 o0.xy, r0.xyzw, r1.xyzw will use all input components regardless of the used destination component mask.&lt;br /&gt;
&lt;br /&gt;
== Relative addressing ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  IDX raw value&lt;br /&gt;
!  Register name&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  None&lt;br /&gt;
|-&lt;br /&gt;
|  0x1&lt;br /&gt;
|  a0.x&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  a0.y&lt;br /&gt;
|-&lt;br /&gt;
|  0x3&lt;br /&gt;
|  aL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are 3 address registers: a0.x, a0.y and aL (loop counter). For format 1 instructions, when IDX != 0, the value of the corresponding address register is added to SRC1&#039;s value. For example, if IDX = 2, a0.y = 3 and SRC1 = c8, then instead SRC1+a0.y = c11 will be used for the instruction. It is only possible to use address registers on constant registers, attempting to use them on input attribute or temporary registers results in the address register being ignored (i.e. read as zero).&lt;br /&gt;
&lt;br /&gt;
a0.x and a0.y are set manually through the MOVA instruction by rounding a float value to integer precision. Hence, they may take negative values. The way out-of-bounds values behave when reading uniforms is as follows:&lt;br /&gt;
* If the offset is out of byte bounds (less than -128 or greater than 127), the offset is not applied (treated as 0).&lt;br /&gt;
* The offset is added to the constant register index and masked by 0x7F.&lt;br /&gt;
* If the resulting index is greater than 95, the result is (1, 1, 1, 1).&lt;br /&gt;
* Otherwise, the result is the value at the indexed constant register.&lt;br /&gt;
&lt;br /&gt;
aL can only be set indirectly by the LOOP instruction. It is still accessible and valid after exiting a LOOP block, though.&lt;br /&gt;
&lt;br /&gt;
== Comparison operator ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  CMPX/CMPY raw value&lt;br /&gt;
!  Operator name&lt;br /&gt;
!  Expression&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  EQ&lt;br /&gt;
|  src1 == src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x1&lt;br /&gt;
|  NE&lt;br /&gt;
|  src1 != src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  LT&lt;br /&gt;
|  src1 &amp;lt; src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x3&lt;br /&gt;
|  LE&lt;br /&gt;
|  src1 &amp;lt;= src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x4&lt;br /&gt;
|  GT&lt;br /&gt;
|  src1 &amp;gt; src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x5&lt;br /&gt;
|  GE&lt;br /&gt;
|  src1 &amp;gt;= src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x6&lt;br /&gt;
|  ??&lt;br /&gt;
|  true ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x7&lt;br /&gt;
|  ??&lt;br /&gt;
|  true ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
6 and 7 seem to always return true.&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
&lt;br /&gt;
A number of format 2 instructions are executed conditionally. These conditions are based on two boolean registers which can be set with CMP : cmp.x and cmp.y.&lt;br /&gt;
&lt;br /&gt;
Conditional instructions include 3 parameters : CONDOP, REFX and REFY. REFX and REFY are reference values which are tested for equality against cmp.x and cmp.y, respectively. CONDOP describes how the final truth value is constructed from the results of the two tests. There are four conditional expression formats :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  CONDOP raw value&lt;br /&gt;
!  Expression&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  &amp;lt;nowiki&amp;gt;cmp.x == REFX || cmp.y == REFY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|  OR&lt;br /&gt;
|-&lt;br /&gt;
|  0x1&lt;br /&gt;
|  &amp;lt;nowiki&amp;gt;cmp.x == REFX &amp;amp;&amp;amp; cmp.y == REFY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|  AND&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  cmp.x == REFX&lt;br /&gt;
|  X&lt;br /&gt;
|-&lt;br /&gt;
|  0x3&lt;br /&gt;
|  cmp.y == REFY&lt;br /&gt;
|  Y&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Name&lt;br /&gt;
!  Format&lt;br /&gt;
!  Type&lt;br /&gt;
!  Access&lt;br /&gt;
!  Written by&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  v0-v15&lt;br /&gt;
|  vector&lt;br /&gt;
|  float&lt;br /&gt;
|  Read only&lt;br /&gt;
|  Application/Vertex-stream&lt;br /&gt;
|  Input registers.&lt;br /&gt;
|-&lt;br /&gt;
|  o0-o15&lt;br /&gt;
|  vector&lt;br /&gt;
|  float&lt;br /&gt;
|  Write only&lt;br /&gt;
|  Vertex shader&lt;br /&gt;
|  Output registers.&lt;br /&gt;
|-&lt;br /&gt;
|  r0-r15&lt;br /&gt;
|  vector&lt;br /&gt;
|  float&lt;br /&gt;
|  Read/Write&lt;br /&gt;
|  Vertex shader&lt;br /&gt;
|  Temporary registers.&lt;br /&gt;
|-&lt;br /&gt;
|  c0-c95&lt;br /&gt;
|  vector&lt;br /&gt;
|  float&lt;br /&gt;
|  Read only&lt;br /&gt;
|  Application/Vertex-stream&lt;br /&gt;
|  Floating-point Constant registers.&lt;br /&gt;
|-&lt;br /&gt;
|  i0-i3&lt;br /&gt;
|  vector&lt;br /&gt;
|  integer&lt;br /&gt;
|  Read only&lt;br /&gt;
|  Application&lt;br /&gt;
|  Integer Constant registers. (special purpose)&lt;br /&gt;
|-&lt;br /&gt;
|  b0-b15&lt;br /&gt;
|  scalar&lt;br /&gt;
|  boolean&lt;br /&gt;
|  Read only&lt;br /&gt;
|  Application&lt;br /&gt;
|  Boolean Constant registers. (special purpose)&lt;br /&gt;
|-&lt;br /&gt;
|  a0.x &amp;amp; a0.y&lt;br /&gt;
|  scalar&lt;br /&gt;
|  integer&lt;br /&gt;
|  Use/Write&lt;br /&gt;
|  Vertex shader&lt;br /&gt;
|  Address registers.&lt;br /&gt;
|-&lt;br /&gt;
|  aL&lt;br /&gt;
|  scalar&lt;br /&gt;
|  integer&lt;br /&gt;
|  Use&lt;br /&gt;
|  Vertex shader&lt;br /&gt;
|  Loop count register.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Input attribute registers store the per-vertex data given by the CPU and hence are read-only.&lt;br /&gt;
&lt;br /&gt;
Output registers hold the data to be passed to the later GPU stages and are write-only. Each of the output register is assigned a semantic by setting the corresponding [[GPU_Internal_Registers]]. Output registers o7-o15 are only available in vertex shaders.&lt;br /&gt;
Keep in mind that writing to the same output register/component more than once appears appears to cause problems (e.g. GPU hangs).&lt;br /&gt;
&lt;br /&gt;
Temporary registers can be used for intermediate calculations and can be both read and written.&lt;br /&gt;
&lt;br /&gt;
Constant registers hold data uploaded by the application which remain constant throughout all processed vertices. There are 96 float[4] constant registers (c0-c95), eight boolean constant registers (b0-b7), and four int[4] constant registers (i0-i3).&lt;br /&gt;
Many shader instructions which take float arguments can only provide the full 7 bits for one SRC operand. All other source operands can only be used to refer to input attributes or temporary registers and cannot be passed Floating-point Constant registers.&lt;br /&gt;
&lt;br /&gt;
Address registers and the Loop count register can be used to to provide relative addressing for the designated SRC operand. For more information, see the section on [[#Relative_addressing|relative addressing]].&lt;br /&gt;
&lt;br /&gt;
DST mapping :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  DST raw value&lt;br /&gt;
!  Register name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0-0xF&lt;br /&gt;
|  o0-o15&lt;br /&gt;
|  Output registers.&lt;br /&gt;
|-&lt;br /&gt;
|  0x10-0x1F&lt;br /&gt;
|  r0-r15&lt;br /&gt;
|  Temporary registers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SRC mapping :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  SRC raw value&lt;br /&gt;
!  Register name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0-0xF&lt;br /&gt;
|  v0-v15&lt;br /&gt;
|  Input attribute registers.&lt;br /&gt;
|-&lt;br /&gt;
|  0x10-0x1F&lt;br /&gt;
|  r0-r15&lt;br /&gt;
|  Temporary registers.&lt;br /&gt;
|-&lt;br /&gt;
|  0x20-0x7F&lt;br /&gt;
|  c0-c95&lt;br /&gt;
|  Constant registers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Floating-Point Behavior ==&lt;br /&gt;
&lt;br /&gt;
The PICA200 is not IEEE-compliant. It has positive and negative infinities and NaN, but does not seem to have negative 0. Input and output subnormals are flushed to +0. The internal floating point format seems to be the same as used in shader binaries: 1 sign bit, 7 exponent bits, 16 (explicit) mantissa bits. Several instructions also have behavior that differs from the IEEE functions. Here are the results from some tests done on hardware (s = largest subnormal, n = smallest positive normal):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Computation&lt;br /&gt;
!  Result&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
|  inf * 0&lt;br /&gt;
|  0&lt;br /&gt;
|  Including inside MUL, MAD, DP4, etc.&lt;br /&gt;
|-&lt;br /&gt;
|  NaN * 0&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  +inf - +inf&lt;br /&gt;
|  NaN&lt;br /&gt;
|  Indicates +inf is real inf, not FLT_MAX&lt;br /&gt;
|-&lt;br /&gt;
|  rsq(rcp(-inf))&lt;br /&gt;
|  +inf&lt;br /&gt;
|  Indicates that there isn&#039;t -0.0.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  rcp(-0)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  no -0 so differs from IEEE where rcp(-0) = -inf &lt;br /&gt;
|-&lt;br /&gt;
|  rcp(0)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rcp(+inf)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rcp(NaN)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  rsq(-0)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  no -0 so differs from IEEE where rsq(-0) = -inf &lt;br /&gt;
|-&lt;br /&gt;
|  rsq(-2)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rsq(+inf)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rsq(-inf)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rsq(NaN)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  max(0, +inf)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  max(0, -inf)&lt;br /&gt;
|  -inf&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  max(0, NaN)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  max violates IEEE but match GLSL spec&lt;br /&gt;
|-&lt;br /&gt;
|  max(NaN, 0)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  max(-inf, +inf)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  min(0, +inf)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  min(0, -inf)&lt;br /&gt;
|  -inf&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  min(0, NaN)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  min violates IEEE but match GLSL spec&lt;br /&gt;
|-&lt;br /&gt;
|  min(NaN, 0)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  min(-inf, +inf)&lt;br /&gt;
|  -inf&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  cmp(s, 0)&lt;br /&gt;
|  false&lt;br /&gt;
|  cmp does not flush input subnormals&lt;br /&gt;
|-&lt;br /&gt;
|  max(s, 0)&lt;br /&gt;
|  s&lt;br /&gt;
|  max does not flush input or output subnormals&lt;br /&gt;
|-&lt;br /&gt;
|  mul(s, 2)&lt;br /&gt;
|  0&lt;br /&gt;
|  input subnormals are flushed in arithmetic instructions&lt;br /&gt;
|-&lt;br /&gt;
|  mul(n, 0.5)&lt;br /&gt;
|  0&lt;br /&gt;
|  output subnormals are flushed in arithmetic instructions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
1.0 can be multiplied 63 times by 0.5 until the result compares equal zero. This is consistent with a 7-bit exponent and output subnormal flushing.&lt;br /&gt;
&lt;br /&gt;
== Control Flow ==&lt;br /&gt;
&lt;br /&gt;
Control flow is implemented using four independent stacks:&lt;br /&gt;
&lt;br /&gt;
* 4-deep CALL stack&lt;br /&gt;
* 8-deep IF stack&lt;br /&gt;
* 4-deep LOOP stack&lt;br /&gt;
&lt;br /&gt;
All stacks are initially empty. After every instruction but before JMP takes effect, the PC is incremented and a copy is sent to each stack. Each stack is checked against its copy of the PC. If an entry is popped from the stack, the copied PC is updated and used for the next check of this stack, although the IF/LOOP stacks can each only pop one entry per instruction, whereas the CALL stack is checked again until it doesn&#039;t match or the stack is empty. The updated PC copy with the highest priority wins: LOOP (highest), IF, CALL, JMP, original PC (lowest).&lt;br /&gt;
&lt;br /&gt;
Special cases:&lt;br /&gt;
* JMP overwrites the PC *after* the stacks checks (and only if no stack was popped).&lt;br /&gt;
* Executing a BREAK on an empty LOOP stack hangs the GPU.&lt;br /&gt;
* A stack overflow discards the oldest element, so you could think of it as a queue or a ring buffer.&lt;br /&gt;
* If the CALL stack is popped four times in a row, the fourth update to its copy of the PC is missed (the third PC update will be propagated). Probably a hardware bug.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=GPU/Shader_Instruction_Set&amp;diff=22318</id>
		<title>GPU/Shader Instruction Set</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=GPU/Shader_Instruction_Set&amp;diff=22318"/>
		<updated>2023-08-24T08:53:23Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Relative addressing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:GPU]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A compiled shader binary is comprised of two parts : the main instruction sequence and the operand descriptor table. These are both sent to the GPU around the same time but using separate [[GPU/Internal_Registers|GPU Commands]]. Instructions (such as format 1 instruction) may reference operand descriptors. When such is the case, the operand descriptor ID is the offset, in words, of the descriptor within the table.&lt;br /&gt;
Both instructions and descriptors are coded in little endian.&lt;br /&gt;
Basic implementations of the following specification can be found at [https://github.com/smealum/aemstro] and [https://github.com/neobrain/nihstro].&lt;br /&gt;
The instruction set seems to have been heavily inspired by Microsoft&#039;s vs_3_0 [http://msdn.microsoft.com/en-us/library/windows/desktop/bb172938%28v=vs.85%29.aspx] and the Direct3D shader code [https://msdn.microsoft.com/en-us/library/windows/hardware/ff552891%28v=vs.85%29.aspx].&lt;br /&gt;
Please note that this page is being written as the instruction set is reverse engineered; as such it may very well contain mistakes.&lt;br /&gt;
&lt;br /&gt;
Debug information found in the code.bin of &amp;quot;Ironfall: Invasion&amp;quot; suggests that there may not be more than 512 instructions and 128 operand descriptors in a shader.&lt;br /&gt;
&lt;br /&gt;
== Nomenclature ==&lt;br /&gt;
&lt;br /&gt;
* opcode names with I appended to them are the same as their non-I version, except they use the inverted instruction format, giving 7 bits to SRC2 (and access to constant registers) and 5 bits to SRC1&lt;br /&gt;
&lt;br /&gt;
* opcode names with U appended to them are the same as their non-U version, except they are executed conditionally based on the value of a constant boolean register.&lt;br /&gt;
&lt;br /&gt;
* opcode names with C appended to them are the same as their non-C version, except they are executed conditionally based on a logical expression specified in the instruction.&lt;br /&gt;
&lt;br /&gt;
== Instruction formats ==&lt;br /&gt;
&lt;br /&gt;
Format 1 : (used for register operations)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x7&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0xC&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC1 (IDX_1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 1i : (used for register operations)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x7&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0xE&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC2 (IDX_2)&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 1u : (used for unary register operations)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0xC&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  0x2&lt;br /&gt;
|   Address register index for SRC1 (IDX_1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 1c : (used for comparison operations)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x7&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0xC&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC1 (IDX_1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  0x3&lt;br /&gt;
|  Comparison operator for Y (CMPY)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x3&lt;br /&gt;
|  Comparison operator for X (CMPX)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1B&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 2 : (used for flow control instructions)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Number of instructions (NUM)&lt;br /&gt;
|-&lt;br /&gt;
|  0xA&lt;br /&gt;
|  0xC&lt;br /&gt;
|  Destination offset (in words) (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Condition boolean operator (CONDOP)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Y reference bit (REFY)&lt;br /&gt;
|-&lt;br /&gt;
|  0x19&lt;br /&gt;
|  0x1&lt;br /&gt;
|  X reference bit (REFX)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 3 : (used for constant-based conditional flow control instructions)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Number of instructions ? (NUM)&lt;br /&gt;
|-&lt;br /&gt;
|  0xA&lt;br /&gt;
|  0xC&lt;br /&gt;
|  Destination offset (in words) (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x4&lt;br /&gt;
|  Constant ID (BOOL/INT)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 4 : (used for SETEMIT)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Winding flag (FLAG_WINDING)&lt;br /&gt;
|-&lt;br /&gt;
|  0x17&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Primitive emit flag (FLAG_PRIMEMIT)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Vertex ID (VTXID)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  0x6&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 5 : (used for MAD)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x5&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 3 register (SRC3)&lt;br /&gt;
|-&lt;br /&gt;
|  0xA&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0x11&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC2 (IDX_2)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1D&lt;br /&gt;
|  0x3&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format 5i : (used for MADI)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size (bits)&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Operand descriptor ID (DESC)&lt;br /&gt;
|-&lt;br /&gt;
|  0x5&lt;br /&gt;
|  0x7&lt;br /&gt;
|  Source 3 register (SRC3)&lt;br /&gt;
|-&lt;br /&gt;
|  0xC&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 2 register (SRC2)&lt;br /&gt;
|-&lt;br /&gt;
|  0x11&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Source 1 register (SRC1)&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Address register index for SRC3 (IDX_3)&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  0x5&lt;br /&gt;
|  Destination register (DST)&lt;br /&gt;
|-&lt;br /&gt;
|  0x1D&lt;br /&gt;
|  0x3&lt;br /&gt;
|  Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
Unless noted otherwise, SRC1 and SRC2 refer to their respectively indexed float[4] registers (after swizzling). Similarly, DST refers to its indexed register modulo destination component masking, i.e. an expression like DST=SRC1 might actually just set DST.y to SRC1.y.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Format&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x00&lt;br /&gt;
|  1&lt;br /&gt;
|  ADD&lt;br /&gt;
|  Adds two vectors component by component; DST[i] = SRC1[i]+SRC2[i] for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x01&lt;br /&gt;
|  1&lt;br /&gt;
|  DP3&lt;br /&gt;
|  Computes dot product on 3-component vectors; DST = SRC1.SRC2&lt;br /&gt;
|-&lt;br /&gt;
|  0x02&lt;br /&gt;
|  1&lt;br /&gt;
|  DP4&lt;br /&gt;
|  Computes dot product on 4-component vectors; DST = SRC1.SRC2&lt;br /&gt;
|-&lt;br /&gt;
|  0x03&lt;br /&gt;
|  1&lt;br /&gt;
|  DPH&lt;br /&gt;
|  Computes dot product on a 3-component vector with 1.0 appended to it and a 4-component vector; DST = SRC1.SRC2 (with SRC1 homogenous)&lt;br /&gt;
|-&lt;br /&gt;
|  0x04&lt;br /&gt;
|  1&lt;br /&gt;
|  DST&lt;br /&gt;
|  Equivalent to Microsoft&#039;s [https://msdn.microsoft.com/en-us/library/windows/desktop/bb219790.aspx dst] instruction: DST = {1, SRC1[1]*SRC2[1], SRC1[2], SRC2[3]}&lt;br /&gt;
|-&lt;br /&gt;
|  0x05&lt;br /&gt;
|  1u&lt;br /&gt;
|  EX2&lt;br /&gt;
|  Computes SRC1&#039;s first component exponent with base 2; DST[i] = EXP2(SRC1[0]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x06&lt;br /&gt;
|  1u&lt;br /&gt;
|  LG2&lt;br /&gt;
|  Computes SRC1&#039;s first component logarithm with base 2; DST[i] = LOG2(SRC1[0]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x07&lt;br /&gt;
|  1u&lt;br /&gt;
|  LITP&lt;br /&gt;
|  Appears to be related to Microsoft&#039;s [https://msdn.microsoft.com/en-us/library/windows/desktop/bb174703.aspx lit] instruction; DST = clamp(SRC1, min={0, -127.9961, 0, 0}, max={inf, 127.9961, 0, inf}); n.b.: 127.9961 = 0x7FFF / 0x100&lt;br /&gt;
|-&lt;br /&gt;
|  0x08&lt;br /&gt;
|  1&lt;br /&gt;
|  MUL&lt;br /&gt;
|  Multiplies two vectors component by component; DST[i] = SRC1[i].SRC2[i] for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x09&lt;br /&gt;
|  1&lt;br /&gt;
|  SGE&lt;br /&gt;
|  Sets output if SRC1 is greater than or equal to SRC2; DST[i] = (SRC1[i] &amp;gt;= SRC2[i]) ? 1.0 : 0.0 for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0A&lt;br /&gt;
|  1&lt;br /&gt;
|  SLT&lt;br /&gt;
|  Sets output if SRC1 is strictly less than SRC2; DST[i] = (SRC1[i] &amp;lt; SRC2[i]) ? 1.0 : 0.0 for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0B&lt;br /&gt;
|  1u&lt;br /&gt;
|  FLR&lt;br /&gt;
|  Computes SRC1&#039;s floor component by component; DST[i] = FLOOR(SRC1[i]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0C&lt;br /&gt;
|  1&lt;br /&gt;
|  MAX&lt;br /&gt;
|  Takes the max of two vectors, component by component; DST[i] = MAX(SRC1[i], SRC2[i]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0D&lt;br /&gt;
|  1&lt;br /&gt;
|  MIN&lt;br /&gt;
|  Takes the min of two vectors, component by component; DST[i] = MIN(SRC1[i], SRC2[i]) for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0E&lt;br /&gt;
|  1u&lt;br /&gt;
|  RCP&lt;br /&gt;
|  Computes the reciprocal of the vector&#039;s first component; DST[i] = 1/SRC1[0] for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x0F&lt;br /&gt;
|  1u&lt;br /&gt;
|  RSQ&lt;br /&gt;
|  Computes the reciprocal of the square root of the vector&#039;s first component; DST[i] = 1/sqrt(SRC1[0]) for all i&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| ?&lt;br /&gt;
| ???&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| ?&lt;br /&gt;
| ???&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x12&lt;br /&gt;
|  1u&lt;br /&gt;
|  MOVA&lt;br /&gt;
|  Move to address register; Casts the float value given by SRC1 to an integer (truncating the fractional part) and assigns the result to (a0.x, a0.y, _, _), respecting the destination component mask.&lt;br /&gt;
|-&lt;br /&gt;
|  0x13&lt;br /&gt;
|  1u&lt;br /&gt;
|  MOV&lt;br /&gt;
|  Moves value from one register to another; DST = SRC1.&lt;br /&gt;
|-&lt;br /&gt;
|  0x14&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x15&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x17&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x18&lt;br /&gt;
|  1i&lt;br /&gt;
|  DPHI&lt;br /&gt;
|  Computes dot product on a 3-component vector with 1.0 appended to it and a 4-component vector; DST = SRC1.SRC2 (with SRC1 homogenous)&lt;br /&gt;
|-&lt;br /&gt;
|  0x19&lt;br /&gt;
|  1i&lt;br /&gt;
|  DSTI&lt;br /&gt;
|  DST with sources swapped.&lt;br /&gt;
|-&lt;br /&gt;
|  0x1A&lt;br /&gt;
|  1i&lt;br /&gt;
|  SGEI&lt;br /&gt;
|  Sets output if SRC1 is greater than or equal to SRC2; DST[i] = (SRC1[i] &amp;gt;= SRC2[i]) ? 1.0 : 0.0 for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x1B&lt;br /&gt;
|  1i&lt;br /&gt;
|  SLTI&lt;br /&gt;
|  Sets output if SRC1 is strictly less than SRC2; DST[i] = (SRC1[i] &amp;lt; SRC2[i]) ? 1.0 : 0.0 for all i&lt;br /&gt;
|-&lt;br /&gt;
|  0x1C&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x1D&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x1E&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x1F&lt;br /&gt;
|  ?&lt;br /&gt;
|  ???&lt;br /&gt;
|  ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x20&lt;br /&gt;
|  0&lt;br /&gt;
|  BREAK&lt;br /&gt;
|  Breaks out of LOOP block; do not use while in nested IF/CALL block inside LOOP block.&lt;br /&gt;
|-&lt;br /&gt;
|  0x21&lt;br /&gt;
|  0&lt;br /&gt;
|  NOP&lt;br /&gt;
|  Does literally nothing.&lt;br /&gt;
|-&lt;br /&gt;
|  0x22&lt;br /&gt;
|  0&lt;br /&gt;
|  END&lt;br /&gt;
|  Signals the shader unit that processing for this vertex/primitive is done.&lt;br /&gt;
|-&lt;br /&gt;
|  0x23&lt;br /&gt;
|  2&lt;br /&gt;
|  BREAKC&lt;br /&gt;
|  If condition (see [[#Conditions|below]] for details) is true, then breaks out of LOOP block.&lt;br /&gt;
|-&lt;br /&gt;
|  0x24&lt;br /&gt;
|  2&lt;br /&gt;
|  CALL&lt;br /&gt;
|  Jumps to DST and executes instructions until it reaches DST+NUM instructions&lt;br /&gt;
|-&lt;br /&gt;
|  0x25&lt;br /&gt;
|  2&lt;br /&gt;
|  CALLC&lt;br /&gt;
|  If condition (see [[#Conditions|below]] for details) is true, then jumps to DST and executes instructions until it reaches DST+NUM instructions, else does nothing.&lt;br /&gt;
|-&lt;br /&gt;
|  0x26&lt;br /&gt;
|  3&lt;br /&gt;
|  CALLU&lt;br /&gt;
|  Jumps to DST and executes instructions until it reaches DST+NUM instructions if BOOL is true&lt;br /&gt;
|-&lt;br /&gt;
|  0x27&lt;br /&gt;
|  3&lt;br /&gt;
|  IFU&lt;br /&gt;
|  If condition BOOL is true, then executes instructions until DST, then jumps to DST+NUM; else, jumps to DST.&lt;br /&gt;
|-&lt;br /&gt;
|  0x28&lt;br /&gt;
|  2&lt;br /&gt;
|  IFC&lt;br /&gt;
|  If condition (see [[#Conditions|below]] for details) is true, then executes instructions until DST, then jumps to DST+NUM; else, jumps to DST&lt;br /&gt;
|-&lt;br /&gt;
|  0x29&lt;br /&gt;
|  3&lt;br /&gt;
|  LOOP&lt;br /&gt;
|  Loops over the code between itself and DST (inclusive), performing INT.x+1 iterations in total. First, aL is initialized to INT.y. After each iteration, aL is incremented by INT.z.&lt;br /&gt;
|-&lt;br /&gt;
|  0x2A&lt;br /&gt;
|  0 (no param)&lt;br /&gt;
|  EMIT&lt;br /&gt;
|  (geometry shader only) Emits a vertex (and primitive if FLAG_PRIMEMIT was set in the corresponding SETEMIT). SETEMIT must be called before this.&lt;br /&gt;
|-&lt;br /&gt;
|  0x2B&lt;br /&gt;
|  4&lt;br /&gt;
|  SETEMIT&lt;br /&gt;
|  (geometry shader only) Sets VTXID, FLAG_WINDING and FLAG_PRIMEMIT for the next EMIT instruction. VTXID is the ID of the vertex about to be emitted within the primitive, while FLAG_PRIMEMIT is zero if we are just emitting a single vertex and non-zero if are emitting a vertex and primitive simultaneously. FLAG_WINDING controls the output primitive&#039;s winding. Note that the output vertex buffer (which holds 4 vertices) is &#039;&#039;&#039;not&#039;&#039;&#039; cleared when the primitive is emitted, meaning that vertices from the previous primitive can be reused for the current one. (this is still a working hypothesis and unconfirmed)&lt;br /&gt;
|-&lt;br /&gt;
|  0x2C&lt;br /&gt;
|  2&lt;br /&gt;
|  JMPC&lt;br /&gt;
|  If condition (see [[#Conditions|below]] for details) is true, then jumps to DST, else does nothing.&lt;br /&gt;
|-&lt;br /&gt;
|  0x2D&lt;br /&gt;
|  3&lt;br /&gt;
|  JMPU&lt;br /&gt;
|  If condition BOOL is true, then jumps to DST, else does nothing. Having bit 0 of NUM = 1 will invert the test, jumping if BOOL is false instead.&lt;br /&gt;
|-&lt;br /&gt;
|  0x2E-0x2F&lt;br /&gt;
|  1c&lt;br /&gt;
|  CMP&lt;br /&gt;
|  Sets booleans cmp.x and cmp.y based on the operand&#039;s x and y components and the CMPX and CMPY comparison operators respectively. See [[#Comparison_operator|below]] for details about operators. It&#039;s unknown whether CMP respects the destination component mask or not.&lt;br /&gt;
|-&lt;br /&gt;
|  0x30-0x37&lt;br /&gt;
|  5i&lt;br /&gt;
|  MADI&lt;br /&gt;
|  Multiplies two vectors and adds a third one component by component; DST[i] = SRC3[i] + SRC2[i].SRC1[i] for all i; this is not an FMA, the intermediate result is rounded&lt;br /&gt;
|-&lt;br /&gt;
|  0x38-0x3F&lt;br /&gt;
|  5&lt;br /&gt;
|  MAD&lt;br /&gt;
|  Multiplies two vectors and adds a third one component by component; DST[i] = SRC3[i] + SRC2[i].SRC1[i] for all i; this is not an FMA, the intermediate result is rounded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operand descriptors ==&lt;br /&gt;
Sizes below are in bits, not bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x4&lt;br /&gt;
|  Destination component mask. Bit 3 = x, 2 = y, 1 = z, 0 = w.&lt;br /&gt;
|-&lt;br /&gt;
|  0x4&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Source 1 negation bit&lt;br /&gt;
|-&lt;br /&gt;
|  0x5&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Source 1 component selector&lt;br /&gt;
|-&lt;br /&gt;
|  0xD&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Source 2 negation bit&lt;br /&gt;
|-&lt;br /&gt;
|  0xE&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Source 2 component selector&lt;br /&gt;
|-&lt;br /&gt;
|  0x16&lt;br /&gt;
|  0x1&lt;br /&gt;
|  Source 3 negation bit&lt;br /&gt;
|-&lt;br /&gt;
|  0x17&lt;br /&gt;
|  0x8&lt;br /&gt;
|  Source 3 component selector&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Component selector :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Component 3 value&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Component 2 value&lt;br /&gt;
|-&lt;br /&gt;
|  0x4&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Component 1 value&lt;br /&gt;
|-&lt;br /&gt;
|  0x6&lt;br /&gt;
|  0x2&lt;br /&gt;
|  Component 0 value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Component&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  x&lt;br /&gt;
|-&lt;br /&gt;
|  0x1&lt;br /&gt;
|  y&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  z&lt;br /&gt;
|-&lt;br /&gt;
|  0x3&lt;br /&gt;
|  w&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The component selector enables swizzling. For example, component selector 0x1B is equivalent to .xyzw, while 0x55 is equivalent to .yyyy.&lt;br /&gt;
&lt;br /&gt;
Depending on the current shader opcode, source components are disabled implicitly by setting the destination component mask. For example, ADD o0.xy, r0.xyzw, r1.xyzw will not make use of r0&#039;s or r1&#039;s z/w components, while DP4 o0.xy, r0.xyzw, r1.xyzw will use all input components regardless of the used destination component mask.&lt;br /&gt;
&lt;br /&gt;
== Relative addressing ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  IDX raw value&lt;br /&gt;
!  Register name&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  None&lt;br /&gt;
|-&lt;br /&gt;
|  0x1&lt;br /&gt;
|  a0.x&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  a0.y&lt;br /&gt;
|-&lt;br /&gt;
|  0x3&lt;br /&gt;
|  aL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are 3 address registers: a0.x, a0.y and aL (loop counter). For format 1 instructions, when IDX != 0, the value of the corresponding address register is added to SRC1&#039;s value. For example, if IDX = 2, a0.y = 3 and SRC1 = c8, then instead SRC1+a0.y = c11 will be used for the instruction. It is only possible to use address registers on constant registers, attempting to use them on input attribute or temporary registers results in the address register being ignored (i.e. read as zero).&lt;br /&gt;
&lt;br /&gt;
a0.x and a0.y are set manually through the MOVA instruction by rounding a float value to integer precision. Hence, they may take negative values. The way out-of-bounds values behave when reading uniforms is as follows:&lt;br /&gt;
* If the value is out of byte bounds (less than -128 or greater than 127), the result is the vector (0, 0, 0, 0).&lt;br /&gt;
* If the value without its sign bit (value &amp;amp; 0x7F) is greater than 95, the result is the vector (1, 1, 1, 1).&lt;br /&gt;
* Otherwise, the index of the resulting uniform value is the value without its sign bit (value &amp;amp; 0x7F).&lt;br /&gt;
&lt;br /&gt;
aL can only be set indirectly by the LOOP instruction. It is still accessible and valid after exiting a LOOP block, though.&lt;br /&gt;
&lt;br /&gt;
== Comparison operator ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  CMPX/CMPY raw value&lt;br /&gt;
!  Operator name&lt;br /&gt;
!  Expression&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  EQ&lt;br /&gt;
|  src1 == src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x1&lt;br /&gt;
|  NE&lt;br /&gt;
|  src1 != src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  LT&lt;br /&gt;
|  src1 &amp;lt; src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x3&lt;br /&gt;
|  LE&lt;br /&gt;
|  src1 &amp;lt;= src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x4&lt;br /&gt;
|  GT&lt;br /&gt;
|  src1 &amp;gt; src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x5&lt;br /&gt;
|  GE&lt;br /&gt;
|  src1 &amp;gt;= src2&lt;br /&gt;
|-&lt;br /&gt;
|  0x6&lt;br /&gt;
|  ??&lt;br /&gt;
|  true ?&lt;br /&gt;
|-&lt;br /&gt;
|  0x7&lt;br /&gt;
|  ??&lt;br /&gt;
|  true ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
6 and 7 seem to always return true.&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
&lt;br /&gt;
A number of format 2 instructions are executed conditionally. These conditions are based on two boolean registers which can be set with CMP : cmp.x and cmp.y.&lt;br /&gt;
&lt;br /&gt;
Conditional instructions include 3 parameters : CONDOP, REFX and REFY. REFX and REFY are reference values which are tested for equality against cmp.x and cmp.y, respectively. CONDOP describes how the final truth value is constructed from the results of the two tests. There are four conditional expression formats :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  CONDOP raw value&lt;br /&gt;
!  Expression&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  &amp;lt;nowiki&amp;gt;cmp.x == REFX || cmp.y == REFY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|  OR&lt;br /&gt;
|-&lt;br /&gt;
|  0x1&lt;br /&gt;
|  &amp;lt;nowiki&amp;gt;cmp.x == REFX &amp;amp;&amp;amp; cmp.y == REFY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|  AND&lt;br /&gt;
|-&lt;br /&gt;
|  0x2&lt;br /&gt;
|  cmp.x == REFX&lt;br /&gt;
|  X&lt;br /&gt;
|-&lt;br /&gt;
|  0x3&lt;br /&gt;
|  cmp.y == REFY&lt;br /&gt;
|  Y&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Name&lt;br /&gt;
!  Format&lt;br /&gt;
!  Type&lt;br /&gt;
!  Access&lt;br /&gt;
!  Written by&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  v0-v15&lt;br /&gt;
|  vector&lt;br /&gt;
|  float&lt;br /&gt;
|  Read only&lt;br /&gt;
|  Application/Vertex-stream&lt;br /&gt;
|  Input registers.&lt;br /&gt;
|-&lt;br /&gt;
|  o0-o15&lt;br /&gt;
|  vector&lt;br /&gt;
|  float&lt;br /&gt;
|  Write only&lt;br /&gt;
|  Vertex shader&lt;br /&gt;
|  Output registers.&lt;br /&gt;
|-&lt;br /&gt;
|  r0-r15&lt;br /&gt;
|  vector&lt;br /&gt;
|  float&lt;br /&gt;
|  Read/Write&lt;br /&gt;
|  Vertex shader&lt;br /&gt;
|  Temporary registers.&lt;br /&gt;
|-&lt;br /&gt;
|  c0-c95&lt;br /&gt;
|  vector&lt;br /&gt;
|  float&lt;br /&gt;
|  Read only&lt;br /&gt;
|  Application/Vertex-stream&lt;br /&gt;
|  Floating-point Constant registers.&lt;br /&gt;
|-&lt;br /&gt;
|  i0-i3&lt;br /&gt;
|  vector&lt;br /&gt;
|  integer&lt;br /&gt;
|  Read only&lt;br /&gt;
|  Application&lt;br /&gt;
|  Integer Constant registers. (special purpose)&lt;br /&gt;
|-&lt;br /&gt;
|  b0-b15&lt;br /&gt;
|  scalar&lt;br /&gt;
|  boolean&lt;br /&gt;
|  Read only&lt;br /&gt;
|  Application&lt;br /&gt;
|  Boolean Constant registers. (special purpose)&lt;br /&gt;
|-&lt;br /&gt;
|  a0.x &amp;amp; a0.y&lt;br /&gt;
|  scalar&lt;br /&gt;
|  integer&lt;br /&gt;
|  Use/Write&lt;br /&gt;
|  Vertex shader&lt;br /&gt;
|  Address registers.&lt;br /&gt;
|-&lt;br /&gt;
|  aL&lt;br /&gt;
|  scalar&lt;br /&gt;
|  integer&lt;br /&gt;
|  Use&lt;br /&gt;
|  Vertex shader&lt;br /&gt;
|  Loop count register.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Input attribute registers store the per-vertex data given by the CPU and hence are read-only.&lt;br /&gt;
&lt;br /&gt;
Output registers hold the data to be passed to the later GPU stages and are write-only. Each of the output register is assigned a semantic by setting the corresponding [[GPU_Internal_Registers]]. Output registers o7-o15 are only available in vertex shaders.&lt;br /&gt;
Keep in mind that writing to the same output register/component more than once appears appears to cause problems (e.g. GPU hangs).&lt;br /&gt;
&lt;br /&gt;
Temporary registers can be used for intermediate calculations and can be both read and written.&lt;br /&gt;
&lt;br /&gt;
Constant registers hold data uploaded by the application which remain constant throughout all processed vertices. There are 96 float[4] constant registers (c0-c95), eight boolean constant registers (b0-b7), and four int[4] constant registers (i0-i3).&lt;br /&gt;
Many shader instructions which take float arguments can only provide the full 7 bits for one SRC operand. All other source operands can only be used to refer to input attributes or temporary registers and cannot be passed Floating-point Constant registers.&lt;br /&gt;
&lt;br /&gt;
Address registers and the Loop count register can be used to to provide relative addressing for the designated SRC operand. For more information, see the section on [[#Relative_addressing|relative addressing]].&lt;br /&gt;
&lt;br /&gt;
DST mapping :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  DST raw value&lt;br /&gt;
!  Register name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0-0xF&lt;br /&gt;
|  o0-o15&lt;br /&gt;
|  Output registers.&lt;br /&gt;
|-&lt;br /&gt;
|  0x10-0x1F&lt;br /&gt;
|  r0-r15&lt;br /&gt;
|  Temporary registers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SRC mapping :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  SRC raw value&lt;br /&gt;
!  Register name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0-0xF&lt;br /&gt;
|  v0-v15&lt;br /&gt;
|  Input attribute registers.&lt;br /&gt;
|-&lt;br /&gt;
|  0x10-0x1F&lt;br /&gt;
|  r0-r15&lt;br /&gt;
|  Temporary registers.&lt;br /&gt;
|-&lt;br /&gt;
|  0x20-0x7F&lt;br /&gt;
|  c0-c95&lt;br /&gt;
|  Constant registers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Floating-Point Behavior ==&lt;br /&gt;
&lt;br /&gt;
The PICA200 is not IEEE-compliant. It has positive and negative infinities and NaN, but does not seem to have negative 0. Input and output subnormals are flushed to +0. The internal floating point format seems to be the same as used in shader binaries: 1 sign bit, 7 exponent bits, 16 (explicit) mantissa bits. Several instructions also have behavior that differs from the IEEE functions. Here are the results from some tests done on hardware (s = largest subnormal, n = smallest positive normal):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Computation&lt;br /&gt;
!  Result&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
|  inf * 0&lt;br /&gt;
|  0&lt;br /&gt;
|  Including inside MUL, MAD, DP4, etc.&lt;br /&gt;
|-&lt;br /&gt;
|  NaN * 0&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  +inf - +inf&lt;br /&gt;
|  NaN&lt;br /&gt;
|  Indicates +inf is real inf, not FLT_MAX&lt;br /&gt;
|-&lt;br /&gt;
|  rsq(rcp(-inf))&lt;br /&gt;
|  +inf&lt;br /&gt;
|  Indicates that there isn&#039;t -0.0.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  rcp(-0)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  no -0 so differs from IEEE where rcp(-0) = -inf &lt;br /&gt;
|-&lt;br /&gt;
|  rcp(0)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rcp(+inf)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rcp(NaN)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  rsq(-0)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  no -0 so differs from IEEE where rsq(-0) = -inf &lt;br /&gt;
|-&lt;br /&gt;
|  rsq(-2)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rsq(+inf)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rsq(-inf)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  rsq(NaN)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  max(0, +inf)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  max(0, -inf)&lt;br /&gt;
|  -inf&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  max(0, NaN)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  max violates IEEE but match GLSL spec&lt;br /&gt;
|-&lt;br /&gt;
|  max(NaN, 0)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  max(-inf, +inf)&lt;br /&gt;
|  +inf&lt;br /&gt;
|  &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  min(0, +inf)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  min(0, -inf)&lt;br /&gt;
|  -inf&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  min(0, NaN)&lt;br /&gt;
|  NaN&lt;br /&gt;
|  min violates IEEE but match GLSL spec&lt;br /&gt;
|-&lt;br /&gt;
|  min(NaN, 0)&lt;br /&gt;
|  0&lt;br /&gt;
|  &lt;br /&gt;
|-&lt;br /&gt;
|  min(-inf, +inf)&lt;br /&gt;
|  -inf&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
|  cmp(s, 0)&lt;br /&gt;
|  false&lt;br /&gt;
|  cmp does not flush input subnormals&lt;br /&gt;
|-&lt;br /&gt;
|  max(s, 0)&lt;br /&gt;
|  s&lt;br /&gt;
|  max does not flush input or output subnormals&lt;br /&gt;
|-&lt;br /&gt;
|  mul(s, 2)&lt;br /&gt;
|  0&lt;br /&gt;
|  input subnormals are flushed in arithmetic instructions&lt;br /&gt;
|-&lt;br /&gt;
|  mul(n, 0.5)&lt;br /&gt;
|  0&lt;br /&gt;
|  output subnormals are flushed in arithmetic instructions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
1.0 can be multiplied 63 times by 0.5 until the result compares equal zero. This is consistent with a 7-bit exponent and output subnormal flushing.&lt;br /&gt;
&lt;br /&gt;
== Control Flow ==&lt;br /&gt;
&lt;br /&gt;
Control flow is implemented using four independent stacks:&lt;br /&gt;
&lt;br /&gt;
* 4-deep CALL stack&lt;br /&gt;
* 8-deep IF stack&lt;br /&gt;
* 4-deep LOOP stack&lt;br /&gt;
&lt;br /&gt;
All stacks are initially empty. After every instruction but before JMP takes effect, the PC is incremented and a copy is sent to each stack. Each stack is checked against its copy of the PC. If an entry is popped from the stack, the copied PC is updated and used for the next check of this stack, although the IF/LOOP stacks can each only pop one entry per instruction, whereas the CALL stack is checked again until it doesn&#039;t match or the stack is empty. The updated PC copy with the highest priority wins: LOOP (highest), IF, CALL, JMP, original PC (lowest).&lt;br /&gt;
&lt;br /&gt;
Special cases:&lt;br /&gt;
* JMP overwrites the PC *after* the stacks checks (and only if no stack was popped).&lt;br /&gt;
* Executing a BREAK on an empty LOOP stack hangs the GPU.&lt;br /&gt;
* A stack overflow discards the oldest element, so you could think of it as a queue or a ring buffer.&lt;br /&gt;
* If the CALL stack is popped four times in a row, the fourth update to its copy of the PC is missed (the third PC update will be propagated). Probably a hardware bug.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=GPU/Internal_Registers&amp;diff=22314</id>
		<title>GPU/Internal Registers</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=GPU/Internal_Registers&amp;diff=22314"/>
		<updated>2023-08-19T02:50:26Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* GPUREG_LIGHTING_CONFIG1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:GPU]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
GPU internal registers are written to through GPU commands. They are used to control the GPU&#039;s behavior, that is to say tell it to draw stuff and how we want it drawn.&lt;br /&gt;
&lt;br /&gt;
Each command is at least 8 bytes wide. The first word is the command parameter and the second word constitutes the command header. Optionally, more parameter words may follow (potentially including a padding word to align commands to multiples of 8 bytes).&lt;br /&gt;
&lt;br /&gt;
In the simplest case, a command is exactly 8 bytes wide. You can think of such a command as writing the parameter word to an internal register (the index of which is given in the command header). The more general case where more than one parameter word is given is equivalent to multiple simple commands (one for each parameter word). If consecutive writing mode is enabled in the command header, the current command index will be incremented after each parameter write. Otherwise, the parameters will be consecutively written to the same register.&lt;br /&gt;
&lt;br /&gt;
For example, the sequence &amp;quot;0xAAAAAAAA 0x802F011C 0xBBBBBBBB 0xCCCCCCCC&amp;quot; is equivalent to a call to commands 0xF011C with parameter 0xAAAAAAAA, 0xF011D with parameter 0xBBBBBBBB and 0xF011E with parameter 0xCCCCCCCC. If consecutive writing mode were disabled, the command would be equivalent to three consecutive calls to 0xF011C (once with parameter 0xAAAAAAAA, once with 0xBBBBBBBB, and finally with 0xCCCCCCCC).&lt;br /&gt;
&lt;br /&gt;
Invalid GPU command parameters including NaN floats can cause the GPU to hang, which then causes the GSP module to hang as well.&lt;br /&gt;
&lt;br /&gt;
The size of GPU command buffers must be 0x10-byte aligned; the lower 3 bits of the size are cleared. A common pitfall is having the finalization command (write to register 0x0010) not executed because it was the last 8 bytes of a non-0x10 byte aligned command buffer, and having the GPU hang as a result.&lt;br /&gt;
&lt;br /&gt;
=== Command Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| Command ID&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| Parameter mask&lt;br /&gt;
|-&lt;br /&gt;
| 20-27&lt;br /&gt;
| Number of extra parameters (may be zero)&lt;br /&gt;
|-&lt;br /&gt;
| 28-30&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Consecutive writing mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Parameter masking ===&lt;br /&gt;
&lt;br /&gt;
Using a value other than 0xF, parts of a word in internal GPU memory can be updated without touching the other bits of it. For example, setting bit 16 to zero indicates that the least significant byte of the parameter will not be overwritten, setting bit 17 to zero indicates that the parameter&#039;s second LSB will not be overwritten, etc. This means that for instance commands 0x00010107 and 0x00020107 refer to the same thing but write different parts of the parameter.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
There are three main types of registers :&lt;br /&gt;
* configuration registers, which directly map to various rendering properties (for example: [[#GPUREG_FACECULLING_CONFIG|GPUREG_FACECULLING_CONFIG]])&lt;br /&gt;
* data transfer registers, which can be seen as FIFOs that let us send sequential chunks of data to the GPU, such as shader code or 1D samplers (for example: [[#GPUREG_SH_CODETRANSFER_DATA|GPUREG_GSH_CODETRANSFER_DATA]])&lt;br /&gt;
* action triggering registers, which tell the GPU to do something, like draw a primitive (for example: [[#GPUREG_DRAWARRAYS|GPUREG_DRAWARRAYS]])&lt;br /&gt;
&lt;br /&gt;
=== Aliases ===&lt;br /&gt;
&lt;br /&gt;
It is possible for multiple register (sequential) IDs to correspond to the same register. This is done to leverage the consecutive writing mode for GPU commands, which makes it possible for a single command to write data to multiple sequential register IDs. For example, register IDs 02C1 through 02C8 all correspond to [[#GPUREG_VSH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA&#039;&#039;i&#039;&#039;]] so that a consecutively writing command based at 02C0 will write its first parameter to [[#GPUREG_VSH_FLOATUNIFORM_INDEX|GPUREG_VSH_FLOATUNIFORM_INDEX]] and ever subsequent ones to [[#GPUREG_VSH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA&#039;&#039;i&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| signed&lt;br /&gt;
| Signed integer&lt;br /&gt;
|-&lt;br /&gt;
| unsigned&lt;br /&gt;
| Unsigned integer&lt;br /&gt;
|-&lt;br /&gt;
| floatX.Y.Z&lt;br /&gt;
| Floating-point number with X sign bits, Y exponent bits, and Z mantissa bits&lt;br /&gt;
|-&lt;br /&gt;
| fixedX.Y.Z&lt;br /&gt;
| Fixed-point number with X sign bits, Y integer bits, and Z fractional bits&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Register list ==&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous registers (0x000-0x03F) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Register ID&lt;br /&gt;
! Register name&lt;br /&gt;
! Notes&lt;br /&gt;
! Official Name&lt;br /&gt;
|-&lt;br /&gt;
| 0000&lt;br /&gt;
| [[#GPUREG_0000|GPUREG_0000]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0001&lt;br /&gt;
| [[#GPUREG_0001|GPUREG_0001]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0002&lt;br /&gt;
| [[#GPUREG_0002|GPUREG_0002]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0003&lt;br /&gt;
| [[#GPUREG_0003|GPUREG_0003]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0004&lt;br /&gt;
| [[#GPUREG_0004|GPUREG_0004]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0005&lt;br /&gt;
| [[#GPUREG_0005|GPUREG_0005]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0006&lt;br /&gt;
| [[#GPUREG_0006|GPUREG_0006]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0007&lt;br /&gt;
| [[#GPUREG_0007|GPUREG_0007]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0008&lt;br /&gt;
| [[#GPUREG_0008|GPUREG_0008]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0009&lt;br /&gt;
| [[#GPUREG_0009|GPUREG_0009]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 000A&lt;br /&gt;
| [[#GPUREG_000A|GPUREG_000A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 000B&lt;br /&gt;
| [[#GPUREG_000B|GPUREG_000B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 000C&lt;br /&gt;
| [[#GPUREG_000C|GPUREG_000C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 000D&lt;br /&gt;
| [[#GPUREG_000D|GPUREG_000D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 000E&lt;br /&gt;
| [[#GPUREG_000E|GPUREG_000E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 000F&lt;br /&gt;
| [[#GPUREG_000F|GPUREG_000F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0010&lt;br /&gt;
| [[#GPUREG_FINALIZE|GPUREG_FINALIZE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_INTERRUPT&lt;br /&gt;
|-&lt;br /&gt;
| 0011&lt;br /&gt;
| [[#GPUREG_0011|GPUREG_0011]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0012&lt;br /&gt;
| [[#GPUREG_0012|GPUREG_0012]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0013&lt;br /&gt;
| [[#GPUREG_0013|GPUREG_0013]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0014&lt;br /&gt;
| [[#GPUREG_0014|GPUREG_0014]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0015&lt;br /&gt;
| [[#GPUREG_0015|GPUREG_0015]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0016&lt;br /&gt;
| [[#GPUREG_0016|GPUREG_0016]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0017&lt;br /&gt;
| [[#GPUREG_0017|GPUREG_0017]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0018&lt;br /&gt;
| [[#GPUREG_0018|GPUREG_0018]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0019&lt;br /&gt;
| [[#GPUREG_0019|GPUREG_0019]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 001A&lt;br /&gt;
| [[#GPUREG_001A|GPUREG_001A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 001B&lt;br /&gt;
| [[#GPUREG_001B|GPUREG_001B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 001C&lt;br /&gt;
| [[#GPUREG_001C|GPUREG_001C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 001D&lt;br /&gt;
| [[#GPUREG_001D|GPUREG_001D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 001E&lt;br /&gt;
| [[#GPUREG_001E|GPUREG_001E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 001F&lt;br /&gt;
| [[#GPUREG_001F|GPUREG_001F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0020&lt;br /&gt;
| [[#GPUREG_0020|GPUREG_0020]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0021&lt;br /&gt;
| [[#GPUREG_0021|GPUREG_0021]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0022&lt;br /&gt;
| [[#GPUREG_0022|GPUREG_0022]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0023&lt;br /&gt;
| [[#GPUREG_0023|GPUREG_0023]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0024&lt;br /&gt;
| [[#GPUREG_0024|GPUREG_0024]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0025&lt;br /&gt;
| [[#GPUREG_0025|GPUREG_0025]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0026&lt;br /&gt;
| [[#GPUREG_0026|GPUREG_0026]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0027&lt;br /&gt;
| [[#GPUREG_0027|GPUREG_0027]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0028&lt;br /&gt;
| [[#GPUREG_0028|GPUREG_0028]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0029&lt;br /&gt;
| [[#GPUREG_0029|GPUREG_0029]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 002A&lt;br /&gt;
| [[#GPUREG_002A|GPUREG_002A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 002B&lt;br /&gt;
| [[#GPUREG_002B|GPUREG_002B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 002C&lt;br /&gt;
| [[#GPUREG_002C|GPUREG_002C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 002D&lt;br /&gt;
| [[#GPUREG_002D|GPUREG_002D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 002E&lt;br /&gt;
| [[#GPUREG_002E|GPUREG_002E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 002F&lt;br /&gt;
| [[#GPUREG_002F|GPUREG_002F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0030&lt;br /&gt;
| [[#GPUREG_0030|GPUREG_0030]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0031&lt;br /&gt;
| [[#GPUREG_0031|GPUREG_0031]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0032&lt;br /&gt;
| [[#GPUREG_0032|GPUREG_0032]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0033&lt;br /&gt;
| [[#GPUREG_0033|GPUREG_0033]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0034&lt;br /&gt;
| [[#GPUREG_0034|GPUREG_0034]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0035&lt;br /&gt;
| [[#GPUREG_0035|GPUREG_0035]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0036&lt;br /&gt;
| [[#GPUREG_0036|GPUREG_0036]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0037&lt;br /&gt;
| [[#GPUREG_0037|GPUREG_0037]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0038&lt;br /&gt;
| [[#GPUREG_0038|GPUREG_0038]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0039&lt;br /&gt;
| [[#GPUREG_0039|GPUREG_0039]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 003A&lt;br /&gt;
| [[#GPUREG_003A|GPUREG_003A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 003B&lt;br /&gt;
| [[#GPUREG_003B|GPUREG_003B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 003C&lt;br /&gt;
| [[#GPUREG_003C|GPUREG_003C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 003D&lt;br /&gt;
| [[#GPUREG_003D|GPUREG_003D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 003E&lt;br /&gt;
| [[#GPUREG_003E|GPUREG_003E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 003F&lt;br /&gt;
| [[#GPUREG_003F|GPUREG_003F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rasterizer registers (0x040-0x07F) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Register ID&lt;br /&gt;
! Register name&lt;br /&gt;
! Notes&lt;br /&gt;
! Official Name&lt;br /&gt;
|-&lt;br /&gt;
| 0040&lt;br /&gt;
| [[#GPUREG_FACECULLING_CONFIG|GPUREG_FACECULLING_CONFIG]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_CULL_FACE&lt;br /&gt;
|-&lt;br /&gt;
| 0041&lt;br /&gt;
| [[#GPUREG_VIEWPORT_WIDTH|GPUREG_VIEWPORT_WIDTH]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_VIEWPORT_WIDTH1&lt;br /&gt;
|-&lt;br /&gt;
| 0042&lt;br /&gt;
| [[#GPUREG_VIEWPORT_INVW|GPUREG_VIEWPORT_INVW]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_VIEWPORT_WIDTH2&lt;br /&gt;
|-&lt;br /&gt;
| 0043&lt;br /&gt;
| [[#GPUREG_VIEWPORT_HEIGHT|GPUREG_VIEWPORT_HEIGHT]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_VIEWPORT_HEIGHT1&lt;br /&gt;
|-&lt;br /&gt;
| 0044&lt;br /&gt;
| [[#GPUREG_VIEWPORT_INVH|GPUREG_VIEWPORT_INVH]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_VIEWPORT_HEIGHT2&lt;br /&gt;
|-&lt;br /&gt;
| 0045&lt;br /&gt;
| [[#GPUREG_0045|GPUREG_0045]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0046&lt;br /&gt;
| [[#GPUREG_0046|GPUREG_0046]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0047&lt;br /&gt;
| [[#GPUREG_FRAGOP_CLIP|GPUREG_FRAGOP_CLIP]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAGOP_CLIP&lt;br /&gt;
|-&lt;br /&gt;
| 0048&lt;br /&gt;
| [[#GPUREG_FRAGOP_CLIP_DATAi|GPUREG_FRAGOP_CLIP_DATA0]]&lt;br /&gt;
|? &lt;br /&gt;
|PICA_REG_FRAGOP_CLIP_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 0049&lt;br /&gt;
| [[#GPUREG_FRAGOP_CLIP_DATAi|GPUREG_FRAGOP_CLIP_DATA1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAGOP_CLIP_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 004A&lt;br /&gt;
| [[#GPUREG_FRAGOP_CLIP_DATAi|GPUREG_FRAGOP_CLIP_DATA2]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAGOP_CLIP_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 004B&lt;br /&gt;
| [[#GPUREG_FRAGOP_CLIP_DATAi|GPUREG_FRAGOP_CLIP_DATA3]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAGOP_CLIP_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 004C&lt;br /&gt;
| [[#GPUREG_004C|GPUREG_004C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 004D&lt;br /&gt;
| [[#GPUREG_DEPTHMAP_SCALE|GPUREG_DEPTHMAP_SCALE]]&lt;br /&gt;
| As f24&lt;br /&gt;
|PICA_REG_FRAGOP_WSCALE_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 004E&lt;br /&gt;
| [[#GPUREG_DEPTHMAP_OFFSET|GPUREG_DEPTHMAP_OFFSET]]&lt;br /&gt;
| As f24&lt;br /&gt;
|PICA_REG_FRAGOP_WSCALE_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 004F&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_TOTAL|GPUREG_SH_OUTMAP_TOTAL]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_OUT_REG_NUM0 / PICA_REG_VS_OUT_REG_NUM0&lt;br /&gt;
|-&lt;br /&gt;
| 0050&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_Oi|GPUREG_SH_OUTMAP_O0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_OUT_ATTR0 / PICA_REG_VS_OUT_ATTR0&lt;br /&gt;
|-&lt;br /&gt;
| 0051&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_Oi|GPUREG_SH_OUTMAP_O1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_OUT_ATTR1 / PICA_REG_VS_OUT_ATTR1&lt;br /&gt;
|-&lt;br /&gt;
| 0052&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_Oi|GPUREG_SH_OUTMAP_O2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_OUT_ATTR2 / PICA_REG_VS_OUT_ATTR2&lt;br /&gt;
|-&lt;br /&gt;
| 0053&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_Oi|GPUREG_SH_OUTMAP_O3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_OUT_ATTR3 / PICA_REG_VS_OUT_ATTR3&lt;br /&gt;
|-&lt;br /&gt;
| 0054&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_Oi|GPUREG_SH_OUTMAP_O4]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_OUT_ATTR4 / PICA_REG_VS_OUT_ATTR4&lt;br /&gt;
|-&lt;br /&gt;
| 0055&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_Oi|GPUREG_SH_OUTMAP_O5]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_OUT_ATTR5 / PICA_REG_VS_OUT_ATTR5&lt;br /&gt;
|-&lt;br /&gt;
| 0056&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_Oi|GPUREG_SH_OUTMAP_O6]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_OUT_ATTR6 / PICA_REG_VS_OUT_ATTR6&lt;br /&gt;
|-&lt;br /&gt;
| 0057&lt;br /&gt;
| [[#GPUREG_0057|GPUREG_0057]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0058&lt;br /&gt;
| [[#GPUREG_0058|GPUREG_0058]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0059&lt;br /&gt;
| [[#GPUREG_0059|GPUREG_0059]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 005A&lt;br /&gt;
| [[#GPUREG_005A|GPUREG_005A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 005B&lt;br /&gt;
| [[#GPUREG_005B|GPUREG_005B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 005C&lt;br /&gt;
| [[#GPUREG_005C|GPUREG_005C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 005D&lt;br /&gt;
| [[#GPUREG_005D|GPUREG_005D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 005E&lt;br /&gt;
| [[#GPUREG_005E|GPUREG_005E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 005F&lt;br /&gt;
| [[#GPUREG_005F|GPUREG_005F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0060&lt;br /&gt;
| [[#GPUREG_0060|GPUREG_0060]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0061&lt;br /&gt;
| [[#GPUREG_EARLYDEPTH_FUNC|GPUREG_EARLYDEPTH_FUNC]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_EARLY_DEPTH_FUNC&lt;br /&gt;
|-&lt;br /&gt;
| 0062&lt;br /&gt;
| [[#GPUREG_EARLYDEPTH_TEST1|GPUREG_EARLYDEPTH_TEST1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_EARLY_DEPTH_TEST1&lt;br /&gt;
|-&lt;br /&gt;
| 0063&lt;br /&gt;
| [[#GPUREG_EARLYDEPTH_CLEAR|GPUREG_EARLYDEPTH_CLEAR]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_EARLY_DEPTH_CLEAR&lt;br /&gt;
|-&lt;br /&gt;
| 0064&lt;br /&gt;
| [[#GPUREG_SH_OUTATTR_MODE|GPUREG_SH_OUTATTR_MODE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GS_OUT_ATTR_MODE / PICA_REG_VS_OUT_ATTR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 0065&lt;br /&gt;
| [[#GPUREG_SCISSORTEST_MODE|GPUREG_SCISSORTEST_MODE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_SCISSOR&lt;br /&gt;
|-&lt;br /&gt;
| 0066&lt;br /&gt;
| [[#GPUREG_SCISSORTEST_POS|GPUREG_SCISSORTEST_POS]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_SCISSOR_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0067&lt;br /&gt;
| [[#GPUREG_SCISSORTEST_DIM|GPUREG_SCISSORTEST_DIM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_SCISSOR_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 0068&lt;br /&gt;
| [[#GPUREG_VIEWPORT_XY|GPUREG_VIEWPORT_XY]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_VIEWPORT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0069&lt;br /&gt;
| [[#GPUREG_0069|GPUREG_0069]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 006A&lt;br /&gt;
| [[#GPUREG_EARLYDEPTH_DATA|GPUREG_EARLYDEPTH_DATA]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_EARLY_DEPTH_DATA&lt;br /&gt;
|-&lt;br /&gt;
| 006B&lt;br /&gt;
| [[#GPUREG_006B|GPUREG_006B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 006C&lt;br /&gt;
| [[#GPUREG_006C|GPUREG_006C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 006D&lt;br /&gt;
| [[#GPUREG_DEPTHMAP_ENABLE|GPUREG_DEPTHMAP_ENABLE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAGOP_WSCALE&lt;br /&gt;
|-&lt;br /&gt;
| 006E&lt;br /&gt;
| [[#GPUREG_RENDERBUF_DIM|GPUREG_RENDERBUF_DIM]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_RENDER_BUF_RESOLUTION1&lt;br /&gt;
|-&lt;br /&gt;
| 006F&lt;br /&gt;
| [[#GPUREG_SH_OUTATTR_CLOCK|GPUREG_SH_OUTATTR_CLOCK]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GS_OUT_ATTR_CLK / PICA_REG_VS_OUT_ATTR_CLK&lt;br /&gt;
|-&lt;br /&gt;
| 0070&lt;br /&gt;
| [[#GPUREG_0070|GPUREG_0070]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0071&lt;br /&gt;
| [[#GPUREG_0071|GPUREG_0071]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0072&lt;br /&gt;
| [[#GPUREG_0072|GPUREG_0072]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0073&lt;br /&gt;
| [[#GPUREG_0073|GPUREG_0073]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0074&lt;br /&gt;
| [[#GPUREG_0074|GPUREG_0074]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0075&lt;br /&gt;
| [[#GPUREG_0075|GPUREG_0075]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0076&lt;br /&gt;
| [[#GPUREG_0076|GPUREG_0076]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0077&lt;br /&gt;
| [[#GPUREG_0077|GPUREG_0077]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0078&lt;br /&gt;
| [[#GPUREG_0078|GPUREG_0078]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0079&lt;br /&gt;
| [[#GPUREG_0079|GPUREG_0079]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 007A&lt;br /&gt;
| [[#GPUREG_007A|GPUREG_007A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 007B&lt;br /&gt;
| [[#GPUREG_007B|GPUREG_007B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 007C&lt;br /&gt;
| [[#GPUREG_007C|GPUREG_007C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 007D&lt;br /&gt;
| [[#GPUREG_007D|GPUREG_007D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 007E&lt;br /&gt;
| [[#GPUREG_007E|GPUREG_007E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 007F&lt;br /&gt;
| [[#GPUREG_007F|GPUREG_007F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texturing registers (0x080-0x0FF) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Register ID&lt;br /&gt;
! Register name&lt;br /&gt;
! Notes&lt;br /&gt;
! Official Name&lt;br /&gt;
|-&lt;br /&gt;
| 0080&lt;br /&gt;
| [[#GPUREG_TEXUNIT_CONFIG|GPUREG_TEXUNIT_CONFIG]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_TEXTURE_FUNC&lt;br /&gt;
|-&lt;br /&gt;
| 0081&lt;br /&gt;
| [[#GPUREG_TEXUNITi_BORDER_COLOR|GPUREG_TEXUNIT0_BORDER_COLOR]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_TEXTURE0_BORDER_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 0082&lt;br /&gt;
| [[#GPUREG_TEXUNITi_DIM|GPUREG_TEXUNIT0_DIM]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_TEXTURE0_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 0083&lt;br /&gt;
| [[#GPUREG_TEXUNITi_PARAM|GPUREG_TEXUNIT0_PARAM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE0_WRAP_FILTER&lt;br /&gt;
|-&lt;br /&gt;
| 0084&lt;br /&gt;
| [[#GPUREG_TEXUNITi_LOD|GPUREG_TEXUNIT0_LOD]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE0_LOD&lt;br /&gt;
|-&lt;br /&gt;
| 0085&lt;br /&gt;
| [[#GPUREG_TEXUNITi_ADDRi|GPUREG_TEXUNIT0_ADDR1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE0_ADDR1&lt;br /&gt;
|-&lt;br /&gt;
| 0086&lt;br /&gt;
| [[#GPUREG_TEXUNITi_ADDRi|GPUREG_TEXUNIT0_ADDR2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE0_ADDR2&lt;br /&gt;
|-&lt;br /&gt;
| 0087&lt;br /&gt;
| [[#GPUREG_TEXUNITi_ADDRi|GPUREG_TEXUNIT0_ADDR3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE0_ADDR3&lt;br /&gt;
|-&lt;br /&gt;
| 0088&lt;br /&gt;
| [[#GPUREG_TEXUNITi_ADDRi|GPUREG_TEXUNIT0_ADDR4]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE0_ADDR4&lt;br /&gt;
|-&lt;br /&gt;
| 0089&lt;br /&gt;
| [[#GPUREG_TEXUNITi_ADDRi|GPUREG_TEXUNIT0_ADDR5]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE0_ADDR5&lt;br /&gt;
|-&lt;br /&gt;
| 008A&lt;br /&gt;
| [[#GPUREG_TEXUNITi_ADDRi|GPUREG_TEXUNIT0_ADDR6]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE0_ADDR6&lt;br /&gt;
|-&lt;br /&gt;
| 008B&lt;br /&gt;
| [[#GPUREG_TEXUNITi_SHADOW|GPUREG_TEXUNIT0_SHADOW]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE0_SHADOW&lt;br /&gt;
|-&lt;br /&gt;
| 008C&lt;br /&gt;
| [[#GPUREG_008C|GPUREG_008C]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 008D&lt;br /&gt;
| [[#GPUREG_008D|GPUREG_008D]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 008E&lt;br /&gt;
| [[#GPUREG_TEXUNITi_TYPE|GPUREG_TEXUNIT0_TYPE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE0_FORMAT&lt;br /&gt;
|-&lt;br /&gt;
| 008F&lt;br /&gt;
| [[#GPUREG_LIGHTING_ENABLE0|GPUREG_LIGHTING_ENABLE0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_EN0&lt;br /&gt;
|-&lt;br /&gt;
| 0090&lt;br /&gt;
| [[#GPUREG_0090|GPUREG_0090]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0091&lt;br /&gt;
| [[#GPUREG_TEXUNITi_BORDER_COLOR|GPUREG_TEXUNIT1_BORDER_COLOR]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_TEXTURE1_BORDER_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 0092&lt;br /&gt;
| [[#GPUREG_TEXUNITi_DIM|GPUREG_TEXUNIT1_DIM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE1_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 0093&lt;br /&gt;
| [[#GPUREG_TEXUNITi_PARAM|GPUREG_TEXUNIT1_PARAM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE1_WRAP_FILTER&lt;br /&gt;
|-&lt;br /&gt;
| 0094&lt;br /&gt;
| [[#GPUREG_TEXUNITi_LOD|GPUREG_TEXUNIT1_LOD]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE1_LOD&lt;br /&gt;
|-&lt;br /&gt;
| 0095&lt;br /&gt;
| [[#GPUREG_TEXUNITi_ADDRi|GPUREG_TEXUNIT1_ADDR]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE1_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 0096&lt;br /&gt;
| [[#GPUREG_TEXUNITi_TYPE|GPUREG_TEXUNIT1_TYPE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE1_FORMAT&lt;br /&gt;
|-&lt;br /&gt;
| 0097&lt;br /&gt;
| [[#GPUREG_0097|GPUREG_0097]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0098&lt;br /&gt;
| [[#GPUREG_0098|GPUREG_0098]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0099&lt;br /&gt;
| [[#GPUREG_TEXUNITi_BORDER_COLOR|GPUREG_TEXUNIT2_BORDER_COLOR]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_TEXTURE2_BORDER_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 009A&lt;br /&gt;
| [[#GPUREG_TEXUNITi_DIM|GPUREG_TEXUNIT2_DIM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE2_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 009B&lt;br /&gt;
| [[#GPUREG_TEXUNITi_PARAM|GPUREG_TEXUNIT2_PARAM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE2_WRAP_FILTER&lt;br /&gt;
|-&lt;br /&gt;
| 009C&lt;br /&gt;
| [[#GPUREG_TEXUNITi_LOD|GPUREG_TEXUNIT2_LOD]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE2_LOD&lt;br /&gt;
|-&lt;br /&gt;
| 009D&lt;br /&gt;
| [[#GPUREG_TEXUNITi_ADDRi|GPUREG_TEXUNIT2_ADDR]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_TEXTURE2_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 009E&lt;br /&gt;
| [[#GPUREG_TEXUNITi_TYPE|GPUREG_TEXUNIT2_TYPE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEXTURE2_FORMAT&lt;br /&gt;
|-&lt;br /&gt;
| 009F&lt;br /&gt;
| [[#GPUREG_009F|GPUREG_009F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00A0&lt;br /&gt;
| [[#GPUREG_00A0|GPUREG_00A0]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00A1&lt;br /&gt;
| [[#GPUREG_00A1|GPUREG_00A1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00A2&lt;br /&gt;
| [[#GPUREG_00A2|GPUREG_00A2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00A3&lt;br /&gt;
| [[#GPUREG_00A3|GPUREG_00A3]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00A4&lt;br /&gt;
| [[#GPUREG_00A4|GPUREG_00A4]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00A5&lt;br /&gt;
| [[#GPUREG_00A5|GPUREG_00A5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00A6&lt;br /&gt;
| [[#GPUREG_00A6|GPUREG_00A6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00A7&lt;br /&gt;
| [[#GPUREG_00A7|GPUREG_00A7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00A8&lt;br /&gt;
| [[#GPUREG_TEXUNIT3_PROCTEX0|GPUREG_TEXUNIT3_PROCTEX0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE3_PROCTEX0&lt;br /&gt;
|-&lt;br /&gt;
| 00A9&lt;br /&gt;
| [[#GPUREG_TEXUNIT3_PROCTEX1|GPUREG_TEXUNIT3_PROCTEX1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE3_PROCTEX1&lt;br /&gt;
|-&lt;br /&gt;
| 00AA&lt;br /&gt;
| [[#GPUREG_TEXUNIT3_PROCTEX2|GPUREG_TEXUNIT3_PROCTEX2]]&lt;br /&gt;
|? &lt;br /&gt;
|PICA_REG_TEXTURE3_PROCTEX2&lt;br /&gt;
|-&lt;br /&gt;
| 00AB&lt;br /&gt;
| [[#GPUREG_TEXUNIT3_PROCTEX3|GPUREG_TEXUNIT3_PROCTEX3]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE3_PROCTEX3&lt;br /&gt;
|-&lt;br /&gt;
| 00AC&lt;br /&gt;
| [[#GPUREG_TEXUNIT3_PROCTEX4|GPUREG_TEXUNIT3_PROCTEX4]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE3_PROCTEX4&lt;br /&gt;
|-&lt;br /&gt;
| 00AD&lt;br /&gt;
| [[#GPUREG_TEXUNIT3_PROCTEX5|GPUREG_TEXUNIT3_PROCTEX5]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEXTURE3_PROCTEX5&lt;br /&gt;
|-&lt;br /&gt;
| 00AE&lt;br /&gt;
| [[#GPUREG_00AE|GPUREG_00AE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00AF&lt;br /&gt;
| [[#GPUREG_PROCTEX_LUT|GPUREG_PROCTEX_LUT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_PROCTEX_LUT&lt;br /&gt;
|-&lt;br /&gt;
| 00B0&lt;br /&gt;
| [[#GPUREG_PROCTEX_LUT_DATAi|GPUREG_PROCTEX_LUT_DATA0]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_PROCTEX_LUT_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 00B1&lt;br /&gt;
| [[#GPUREG_PROCTEX_LUT_DATAi|GPUREG_PROCTEX_LUT_DATA1]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_PROCTEX_LUT_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 00B2&lt;br /&gt;
| [[#GPUREG_PROCTEX_LUT_DATAi|GPUREG_PROCTEX_LUT_DATA2]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_PROCTEX_LUT_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 00B3&lt;br /&gt;
| [[#GPUREG_PROCTEX_LUT_DATAi|GPUREG_PROCTEX_LUT_DATA3]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_PROCTEX_LUT_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 00B4&lt;br /&gt;
| [[#GPUREG_PROCTEX_LUT_DATAi|GPUREG_PROCTEX_LUT_DATA4]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_PROCTEX_LUT_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 00B5&lt;br /&gt;
| [[#GPUREG_PROCTEX_LUT_DATAi|GPUREG_PROCTEX_LUT_DATA5]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_PROCTEX_LUT_DATA5&lt;br /&gt;
|-&lt;br /&gt;
| 00B6&lt;br /&gt;
| [[#GPUREG_PROCTEX_LUT_DATAi|GPUREG_PROCTEX_LUT_DATA6]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_PROCTEX_LUT_DATA6&lt;br /&gt;
|-&lt;br /&gt;
| 00B7&lt;br /&gt;
| [[#GPUREG_PROCTEX_LUT_DATAi|GPUREG_PROCTEX_LUT_DATA7]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_PROCTEX_LUT_DATA7&lt;br /&gt;
|-&lt;br /&gt;
| 00B8&lt;br /&gt;
| [[#GPUREG_00B8|GPUREG_00B8]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00B9&lt;br /&gt;
| [[#GPUREG_00B9|GPUREG_00B9]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00BA&lt;br /&gt;
| [[#GPUREG_00BA|GPUREG_00BA]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00BB&lt;br /&gt;
| [[#GPUREG_00BB|GPUREG_00BB]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00BC&lt;br /&gt;
| [[#GPUREG_00BC|GPUREG_00BC]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00BD&lt;br /&gt;
| [[#GPUREG_00BD|GPUREG_00BD]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00BE&lt;br /&gt;
| [[#GPUREG_00BE|GPUREG_00BE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00BF&lt;br /&gt;
| [[#GPUREG_00BF|GPUREG_00BF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00C0&lt;br /&gt;
| [[#GPUREG_TEXENVi_SOURCE|GPUREG_TEXENV0_SOURCE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_0&lt;br /&gt;
|-&lt;br /&gt;
| 00C1&lt;br /&gt;
| [[#GPUREG_TEXENVi_OPERAND|GPUREG_TEXENV0_OPERAND]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_0_OPERAND&lt;br /&gt;
|-&lt;br /&gt;
| 00C2&lt;br /&gt;
| [[#GPUREG_TEXENVi_COMBINER|GPUREG_TEXENV0_COMBINER]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_0_COMBINE&lt;br /&gt;
|-&lt;br /&gt;
| 00C3&lt;br /&gt;
| [[#GPUREG_TEXENVi_COLOR|GPUREG_TEXENV0_COLOR]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_0_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 00C4&lt;br /&gt;
| [[#GPUREG_TEXENVi_SCALE|GPUREG_TEXENV0_SCALE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_0_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 00C5&lt;br /&gt;
| [[#GPUREG_00C5|GPUREG_00C5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00C6&lt;br /&gt;
| [[#GPUREG_00C6|GPUREG_00C6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00C7&lt;br /&gt;
| [[#GPUREG_00C7|GPUREG_00C7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00C8&lt;br /&gt;
| [[#GPUREG_TEXENVi_SOURCE|GPUREG_TEXENV1_SOURCE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_1&lt;br /&gt;
|-&lt;br /&gt;
| 00C9&lt;br /&gt;
| [[#GPUREG_TEXENVi_OPERAND|GPUREG_TEXENV1_OPERAND]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_1_OPERAND&lt;br /&gt;
|-&lt;br /&gt;
| 00CA&lt;br /&gt;
| [[#GPUREG_TEXENVi_COMBINER|GPUREG_TEXENV1_COMBINER]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_1_COMBINE&lt;br /&gt;
|-&lt;br /&gt;
| 00CB&lt;br /&gt;
| [[#GPUREG_TEXENVi_COLOR|GPUREG_TEXENV1_COLOR]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_1_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 00CC&lt;br /&gt;
| [[#GPUREG_TEXENVi_SCALE|GPUREG_TEXENV1_SCALE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_1_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 00CD&lt;br /&gt;
| [[#GPUREG_00CD|GPUREG_00CD]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00CE&lt;br /&gt;
| [[#GPUREG_00CE|GPUREG_00CE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00CF&lt;br /&gt;
| [[#GPUREG_00CF|GPUREG_00CF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00D0&lt;br /&gt;
| [[#GPUREG_TEXENVi_SOURCE|GPUREG_TEXENV2_SOURCE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_2&lt;br /&gt;
|-&lt;br /&gt;
| 00D1&lt;br /&gt;
| [[#GPUREG_TEXENVi_OPERAND|GPUREG_TEXENV2_OPERAND]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_2_OPERAND&lt;br /&gt;
|-&lt;br /&gt;
| 00D2&lt;br /&gt;
| [[#GPUREG_TEXENVi_COMBINER|GPUREG_TEXENV2_COMBINER]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_2_COMBINE&lt;br /&gt;
|-&lt;br /&gt;
| 00D3&lt;br /&gt;
| [[#GPUREG_TEXENVi_COLOR|GPUREG_TEXENV2_COLOR]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_2_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 00D4&lt;br /&gt;
| [[#GPUREG_TEXENVi_SCALE|GPUREG_TEXENV2_SCALE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_2_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 00D5&lt;br /&gt;
| [[#GPUREG_00D5|GPUREG_00D5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00D6&lt;br /&gt;
| [[#GPUREG_00D6|GPUREG_00D6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00D7&lt;br /&gt;
| [[#GPUREG_00D7|GPUREG_00D7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00D8&lt;br /&gt;
| [[#GPUREG_TEXENVi_SOURCE|GPUREG_TEXENV3_SOURCE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_3&lt;br /&gt;
|-&lt;br /&gt;
| 00D9&lt;br /&gt;
| [[#GPUREG_TEXENVi_OPERAND|GPUREG_TEXENV3_OPERAND]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_3_OPERAND&lt;br /&gt;
|-&lt;br /&gt;
| 00DA&lt;br /&gt;
| [[#GPUREG_TEXENVi_COMBINER|GPUREG_TEXENV3_COMBINER]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_3_COMBINE&lt;br /&gt;
|-&lt;br /&gt;
| 00DB&lt;br /&gt;
| [[#GPUREG_TEXENVi_COLOR|GPUREG_TEXENV3_COLOR]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_3_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 00DC&lt;br /&gt;
| [[#GPUREG_TEXENVi_SCALE|GPUREG_TEXENV3_SCALE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_3_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 00DD&lt;br /&gt;
| [[#GPUREG_00DD|GPUREG_00DD]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00DE&lt;br /&gt;
| [[#GPUREG_00DE|GPUREG_00DE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00DF&lt;br /&gt;
| [[#GPUREG_00DF|GPUREG_00DF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00E0&lt;br /&gt;
| [[#GPUREG_TEXENV_UPDATE_BUFFER|GPUREG_TEXENV_UPDATE_BUFFER]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GAS_FOG_MODE / PICA_REG_TEX_ENV_BUF_INPUT&lt;br /&gt;
|-&lt;br /&gt;
| 00E1&lt;br /&gt;
| [[#GPUREG_FOG_COLOR|GPUREG_FOG_COLOR]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FOG_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 00E2&lt;br /&gt;
| [[#GPUREG_00E2|GPUREG_00E2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00E3&lt;br /&gt;
| [[#GPUREG_00E3|GPUREG_00E3]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00E4&lt;br /&gt;
| [[#GPUREG_GAS_ATTENUATION|GPUREG_GAS_ATTENUATION]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GAS_ATTENUATION&lt;br /&gt;
|-&lt;br /&gt;
| 00E5&lt;br /&gt;
| [[#GPUREG_GAS_ACCMAX|GPUREG_GAS_ACCMAX]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GAS_ACCMAX&lt;br /&gt;
|-&lt;br /&gt;
| 00E6&lt;br /&gt;
| [[#GPUREG_FOG_LUT_INDEX|GPUREG_FOG_LUT_INDEX]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FOG_LUT_INDEX&lt;br /&gt;
|-&lt;br /&gt;
| 00E7&lt;br /&gt;
| [[#GPUREG_00E7|GPUREG_00E7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00E8&lt;br /&gt;
| [[#GPUREG_FOG_LUT_DATAi|GPUREG_FOG_LUT_DATA0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FOG_LUT_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 00E9&lt;br /&gt;
| [[#GPUREG_FOG_LUT_DATAi|GPUREG_FOG_LUT_DATA1]]&lt;br /&gt;
|? &lt;br /&gt;
|PICA_REG_FOG_LUT_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 00EA&lt;br /&gt;
| [[#GPUREG_FOG_LUT_DATAi|GPUREG_FOG_LUT_DATA2]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FOG_LUT_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 00EB&lt;br /&gt;
| [[#GPUREG_FOG_LUT_DATAi|GPUREG_FOG_LUT_DATA3]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FOG_LUT_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 00EC&lt;br /&gt;
| [[#GPUREG_FOG_LUT_DATAi|GPUREG_FOG_LUT_DATA4]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FOG_LUT_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 00ED&lt;br /&gt;
| [[#GPUREG_FOG_LUT_DATAi|GPUREG_FOG_LUT_DATA5]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FOG_LUT_DATA5&lt;br /&gt;
|-&lt;br /&gt;
| 00EE&lt;br /&gt;
| [[#GPUREG_FOG_LUT_DATAi|GPUREG_FOG_LUT_DATA6]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FOG_LUT_DATA6&lt;br /&gt;
|-&lt;br /&gt;
| 00EF&lt;br /&gt;
| [[#GPUREG_FOG_LUT_DATAi|GPUREG_FOG_LUT_DATA7]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FOG_LUT_DATA7&lt;br /&gt;
|-&lt;br /&gt;
| 00F0&lt;br /&gt;
| [[#GPUREG_TEXENVi_SOURCE|GPUREG_TEXENV4_SOURCE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_4&lt;br /&gt;
|-&lt;br /&gt;
| 00F1&lt;br /&gt;
| [[#GPUREG_TEXENVi_OPERAND|GPUREG_TEXENV4_OPERAND]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_4_OPERAND&lt;br /&gt;
|-&lt;br /&gt;
| 00F2&lt;br /&gt;
| [[#GPUREG_TEXENVi_COMBINER|GPUREG_TEXENV4_COMBINER]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_4_COMBINE&lt;br /&gt;
|-&lt;br /&gt;
| 00F3&lt;br /&gt;
| [[#GPUREG_TEXENVi_COLOR|GPUREG_TEXENV4_COLOR]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_4_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 00F4&lt;br /&gt;
| [[#GPUREG_TEXENVi_SCALE|GPUREG_TEXENV4_SCALE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_4_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 00F5&lt;br /&gt;
| [[#GPUREG_00F5|GPUREG_00F5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00F6&lt;br /&gt;
| [[#GPUREG_00F6|GPUREG_00F6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00F7&lt;br /&gt;
| [[#GPUREG_00F7|GPUREG_00F7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00F8&lt;br /&gt;
| [[#GPUREG_TEXENVi_SOURCE|GPUREG_TEXENV5_SOURCE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_5&lt;br /&gt;
|-&lt;br /&gt;
| 00F9&lt;br /&gt;
| [[#GPUREG_TEXENVi_OPERAND|GPUREG_TEXENV5_OPERAND]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_5_OPERAND&lt;br /&gt;
|-&lt;br /&gt;
| 00FA&lt;br /&gt;
| [[#GPUREG_TEXENVi_COMBINER|GPUREG_TEXENV5_COMBINER]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_5_COMBINE&lt;br /&gt;
|-&lt;br /&gt;
| 00FB&lt;br /&gt;
| [[#GPUREG_TEXENVi_COLOR|GPUREG_TEXENV5_COLOR]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_5_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 00FC&lt;br /&gt;
| [[#GPUREG_TEXENVi_SCALE|GPUREG_TEXENV5_SCALE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_TEX_ENV_5_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 00FD&lt;br /&gt;
| [[#GPUREG_TEXENV_BUFFER_COLOR|GPUREG_TEXENV_BUFFER_COLOR]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_TEX_ENV_BUF_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 00FE&lt;br /&gt;
| [[#GPUREG_00FE|GPUREG_00FE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 00FF&lt;br /&gt;
| [[#GPUREG_00FF|GPUREG_00FF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer registers (0x100-0x13F) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Register ID&lt;br /&gt;
! Register name&lt;br /&gt;
! Notes&lt;br /&gt;
! Official Name&lt;br /&gt;
|-&lt;br /&gt;
| 0100&lt;br /&gt;
| [[#GPUREG_COLOR_OPERATION|GPUREG_COLOR_OPERATION]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_COLOR_OPERATION&lt;br /&gt;
|-&lt;br /&gt;
| 0101&lt;br /&gt;
| [[#GPUREG_BLEND_FUNC|GPUREG_BLEND_FUNC]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_BLEND_FUNC&lt;br /&gt;
|-&lt;br /&gt;
| 0102&lt;br /&gt;
| [[#GPUREG_LOGIC_OP|GPUREG_LOGIC_OP]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_LOGIC_OP&lt;br /&gt;
|-&lt;br /&gt;
| 0103&lt;br /&gt;
| [[#GPUREG_BLEND_COLOR|GPUREG_BLEND_COLOR]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_BLEND_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 0104&lt;br /&gt;
| [[#GPUREG_FRAGOP_ALPHA_TEST|GPUREG_FRAGOP_ALPHA_TEST]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAGOP_ALPHA_TEST&lt;br /&gt;
|-&lt;br /&gt;
| 0105&lt;br /&gt;
| [[#GPUREG_STENCIL_TEST|GPUREG_STENCIL_TEST]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_STENCIL_TEST&lt;br /&gt;
|-&lt;br /&gt;
| 0106&lt;br /&gt;
| [[#GPUREG_STENCIL_OP|GPUREG_STENCIL_OP]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_STENCIL_OP&lt;br /&gt;
|-&lt;br /&gt;
| 0107&lt;br /&gt;
| [[#GPUREG_DEPTH_COLOR_MASK|GPUREG_DEPTH_COLOR_MASK]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_DEPTH_COLOR_MASK&lt;br /&gt;
|-&lt;br /&gt;
| 0108&lt;br /&gt;
| [[#GPUREG_0108|GPUREG_0108]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0109&lt;br /&gt;
| [[#GPUREG_0109|GPUREG_0109]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 010A&lt;br /&gt;
| [[#GPUREG_010A|GPUREG_010A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 010B&lt;br /&gt;
| [[#GPUREG_010B|GPUREG_010B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 010C&lt;br /&gt;
| [[#GPUREG_010C|GPUREG_010C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 010D&lt;br /&gt;
| [[#GPUREG_010D|GPUREG_010D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 010E&lt;br /&gt;
| [[#GPUREG_010E|GPUREG_010E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 010F&lt;br /&gt;
| [[#GPUREG_010F|GPUREG_010F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0110&lt;br /&gt;
| [[#GPUREG_FRAMEBUFFER_INVALIDATE|GPUREG_FRAMEBUFFER_INVALIDATE]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_COLOR_BUFFER_CLEAR0&lt;br /&gt;
|-&lt;br /&gt;
| 0111&lt;br /&gt;
| [[#GPUREG_FRAMEBUFFER_FLUSH|GPUREG_FRAMEBUFFER_FLUSH]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_COLOR_BUFFER_CLEAR1&lt;br /&gt;
|-&lt;br /&gt;
| 0112&lt;br /&gt;
| [[#GPUREG_COLORBUFFER_READ|GPUREG_COLORBUFFER_READ]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_COLOR_BUFFER_READ&lt;br /&gt;
|-&lt;br /&gt;
| 0113&lt;br /&gt;
| [[#GPUREG_COLORBUFFER_WRITE|GPUREG_COLORBUFFER_WRITE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_COLOR_BUFFER_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 0114&lt;br /&gt;
| [[#GPUREG_DEPTHBUFFER_READ|GPUREG_DEPTHBUFFER_READ]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_DEPTH_STENCIL_READ&lt;br /&gt;
|-&lt;br /&gt;
| 0115&lt;br /&gt;
| [[#GPUREG_DEPTHBUFFER_WRITE|GPUREG_DEPTHBUFFER_WRITE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_DEPTH_STENCIL_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 0116&lt;br /&gt;
| [[#GPUREG_DEPTHBUFFER_FORMAT|GPUREG_DEPTHBUFFER_FORMAT]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_RENDER_BUF_DEPTH_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 0117&lt;br /&gt;
| [[#GPUREG_COLORBUFFER_FORMAT|GPUREG_COLORBUFFER_FORMAT]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_RENDER_BUF_COLOR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 0118&lt;br /&gt;
| [[#GPUREG_EARLYDEPTH_TEST2|GPUREG_EARLYDEPTH_TEST2]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_EARLY_DEPTH_TEST2&lt;br /&gt;
|-&lt;br /&gt;
| 0119&lt;br /&gt;
| [[#GPUREG_0119|GPUREG_0119]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 011A&lt;br /&gt;
| [[#GPUREG_011A|GPUREG_011A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 011B&lt;br /&gt;
| [[#GPUREG_FRAMEBUFFER_BLOCK32|GPUREG_FRAMEBUFFER_BLOCK32]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_RENDER_BLOCK_FORMAT&lt;br /&gt;
|-&lt;br /&gt;
| 011C&lt;br /&gt;
| [[#GPUREG_DEPTHBUFFER_LOC|GPUREG_DEPTHBUFFER_LOC]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_RENDER_BUF_DEPTH_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 011D&lt;br /&gt;
| [[#GPUREG_COLORBUFFER_LOC|GPUREG_COLORBUFFER_LOC]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_RENDER_BUF_COLOR_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 011E&lt;br /&gt;
| [[#GPUREG_FRAMEBUFFER_DIM|GPUREG_FRAMEBUFFER_DIM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_RENDER_BUF_RESOLUTION0&lt;br /&gt;
|-&lt;br /&gt;
| 011F&lt;br /&gt;
| [[#GPUREG_011F|GPUREG_011F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0120&lt;br /&gt;
| [[#GPUREG_GAS_LIGHT_XY|GPUREG_GAS_LIGHT_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GAS_LIGHT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0121&lt;br /&gt;
| [[#GPUREG_GAS_LIGHT_Z|GPUREG_GAS_LIGHT_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GAS_LIGHT_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0122&lt;br /&gt;
| [[#GPUREG_GAS_LIGHT_Z_COLOR|GPUREG_GAS_LIGHT_Z_COLOR]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GAS_LIGHT_Z_COLOR&lt;br /&gt;
|-&lt;br /&gt;
| 0123&lt;br /&gt;
| [[#GPUREG_GAS_LUT_INDEX|GPUREG_GAS_LUT_INDEX]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GAS_LUT_INDEX&lt;br /&gt;
|-&lt;br /&gt;
| 0124&lt;br /&gt;
| [[#GPUREG_GAS_LUT_DATA|GPUREG_GAS_LUT_DATA]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GAS_LUT_DATA&lt;br /&gt;
|-&lt;br /&gt;
| 0125&lt;br /&gt;
| [[#GPUREG_0125|GPUREG_0125]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0126&lt;br /&gt;
| [[#GPUREG_GAS_DELTAZ_DEPTH|GPUREG_GAS_DELTAZ_DEPTH]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GAS_DELTAZ_DEPTH&lt;br /&gt;
|-&lt;br /&gt;
| 0127&lt;br /&gt;
| [[#GPUREG_0127|GPUREG_0127]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0128&lt;br /&gt;
| [[#GPUREG_0128|GPUREG_0128]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0129&lt;br /&gt;
| [[#GPUREG_0129|GPUREG_0129]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 012A&lt;br /&gt;
| [[#GPUREG_012A|GPUREG_012A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 012B&lt;br /&gt;
| [[#GPUREG_012B|GPUREG_012B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 012C&lt;br /&gt;
| [[#GPUREG_012C|GPUREG_012C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 012D&lt;br /&gt;
| [[#GPUREG_012D|GPUREG_012D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 012E&lt;br /&gt;
| [[#GPUREG_012E|GPUREG_012E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 012F&lt;br /&gt;
| [[#GPUREG_012F|GPUREG_012F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0130&lt;br /&gt;
| [[#GPUREG_FRAGOP_SHADOW|GPUREG_FRAGOP_SHADOW]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAGOP_SHADOW&lt;br /&gt;
|-&lt;br /&gt;
| 0131&lt;br /&gt;
| [[#GPUREG_0131|GPUREG_0131]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0132&lt;br /&gt;
| [[#GPUREG_0132|GPUREG_0132]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0133&lt;br /&gt;
| [[#GPUREG_0133|GPUREG_0133]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0134&lt;br /&gt;
| [[#GPUREG_0134|GPUREG_0134]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0135&lt;br /&gt;
| [[#GPUREG_0135|GPUREG_0135]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0136&lt;br /&gt;
| [[#GPUREG_0136|GPUREG_0136]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0137&lt;br /&gt;
| [[#GPUREG_0137|GPUREG_0137]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0138&lt;br /&gt;
| [[#GPUREG_0138|GPUREG_0138]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0139&lt;br /&gt;
| [[#GPUREG_0139|GPUREG_0139]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 013A&lt;br /&gt;
| [[#GPUREG_013A|GPUREG_013A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 013B&lt;br /&gt;
| [[#GPUREG_013B|GPUREG_013B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 013C&lt;br /&gt;
| [[#GPUREG_013C|GPUREG_013C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 013D&lt;br /&gt;
| [[#GPUREG_013D|GPUREG_013D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 013E&lt;br /&gt;
| [[#GPUREG_013E|GPUREG_013E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 013F&lt;br /&gt;
| [[#GPUREG_013F|GPUREG_013F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment lighting registers (0x140-0x1FF) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Register ID&lt;br /&gt;
! Register name&lt;br /&gt;
! Notes&lt;br /&gt;
! Official Name&lt;br /&gt;
|-&lt;br /&gt;
| 0140&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR0|GPUREG_LIGHT0_SPECULAR0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_SPECULAR0 / PICA_REG_FRAG_LIGHT_START&lt;br /&gt;
|-&lt;br /&gt;
| 0141&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR1|GPUREG_LIGHT0_SPECULAR1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_SPECULAR1&lt;br /&gt;
|-&lt;br /&gt;
| 0142&lt;br /&gt;
| [[#GPUREG_LIGHTi_DIFFUSE|GPUREG_LIGHT0_DIFFUSE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_DIFFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 0143&lt;br /&gt;
| [[#GPUREG_LIGHTi_AMBIENT|GPUREG_LIGHT0_AMBIENT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_AMBIENT&lt;br /&gt;
|-&lt;br /&gt;
| 0144&lt;br /&gt;
| [[#GPUREG_LIGHTi_XY|GPUREG_LIGHT0_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_POSITION_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0145&lt;br /&gt;
| [[#GPUREG_LIGHTi_Z|GPUREG_LIGHT0_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_POSITION_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0146&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_XY|GPUREG_LIGHT0_SPOTDIR_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_SPOT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0147&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_Z|GPUREG_LIGHT0_SPOTDIR_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_SPOT_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0148&lt;br /&gt;
| [[#GPUREG_0148|GPUREG_0148]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0149&lt;br /&gt;
| [[#GPUREG_LIGHTi_CONFIG|GPUREG_LIGHT0_CONFIG]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_TYPE&lt;br /&gt;
|-&lt;br /&gt;
| 014A&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_BIAS|GPUREG_LIGHT0_ATTENUATION_BIAS]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_DIST_ATTN_BIAS&lt;br /&gt;
|-&lt;br /&gt;
| 014B&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_SCALE|GPUREG_LIGHT0_ATTENUATION_SCALE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT0_DIST_ATTN_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 014C&lt;br /&gt;
| [[#GPUREG_014C|GPUREG_014C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014D&lt;br /&gt;
| [[#GPUREG_014D|GPUREG_014D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014E&lt;br /&gt;
| [[#GPUREG_014E|GPUREG_014E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014F&lt;br /&gt;
| [[#GPUREG_014F|GPUREG_014F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0150&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR0|GPUREG_LIGHT1_SPECULAR0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_SPECULAR0&lt;br /&gt;
|-&lt;br /&gt;
| 0151&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR1|GPUREG_LIGHT1_SPECULAR1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_SPECULAR1&lt;br /&gt;
|-&lt;br /&gt;
| 0152&lt;br /&gt;
| [[#GPUREG_LIGHTi_DIFFUSE|GPUREG_LIGHT1_DIFFUSE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_DIFFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 0153&lt;br /&gt;
| [[#GPUREG_LIGHTi_AMBIENT|GPUREG_LIGHT1_AMBIENT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_AMBIENT&lt;br /&gt;
|-&lt;br /&gt;
| 0154&lt;br /&gt;
| [[#GPUREG_LIGHTi_XY|GPUREG_LIGHT1_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_POSITION_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0155&lt;br /&gt;
| [[#GPUREG_LIGHTi_Z|GPUREG_LIGHT1_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_POSITION_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0156&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_XY|GPUREG_LIGHT1_SPOTDIR_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_SPOT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0157&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_Z|GPUREG_LIGHT1_SPOTDIR_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_SPOT_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0158&lt;br /&gt;
| [[#GPUREG_0158|GPUREG_0158]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0159&lt;br /&gt;
| [[#GPUREG_LIGHTi_CONFIG|GPUREG_LIGHT1_CONFIG]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_TYPE&lt;br /&gt;
|-&lt;br /&gt;
| 015A&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_BIAS|GPUREG_LIGHT1_ATTENUATION_BIAS]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_DIST_ATTN_BIAS&lt;br /&gt;
|-&lt;br /&gt;
| 015B&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_SCALE|GPUREG_LIGHT1_ATTENUATION_SCALE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT1_DIST_ATTN_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 015C&lt;br /&gt;
| [[#GPUREG_015C|GPUREG_015C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 015D&lt;br /&gt;
| [[#GPUREG_015D|GPUREG_015D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 015E&lt;br /&gt;
| [[#GPUREG_015E|GPUREG_015E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 015F&lt;br /&gt;
| [[#GPUREG_015F|GPUREG_015F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0160&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR0|GPUREG_LIGHT2_SPECULAR0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_SPECULAR0&lt;br /&gt;
|-&lt;br /&gt;
| 0161&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR1|GPUREG_LIGHT2_SPECULAR1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_SPECULAR1&lt;br /&gt;
|-&lt;br /&gt;
| 0162&lt;br /&gt;
| [[#GPUREG_LIGHTi_DIFFUSE|GPUREG_LIGHT2_DIFFUSE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_DIFFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 0163&lt;br /&gt;
| [[#GPUREG_LIGHTi_AMBIENT|GPUREG_LIGHT2_AMBIENT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_AMBIENT&lt;br /&gt;
|-&lt;br /&gt;
| 0164&lt;br /&gt;
| [[#GPUREG_LIGHTi_XY|GPUREG_LIGHT2_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_POSITION_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0165&lt;br /&gt;
| [[#GPUREG_LIGHTi_Z|GPUREG_LIGHT2_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_POSITION_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0166&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_XY|GPUREG_LIGHT2_SPOTDIR_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_SPOT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0167&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_Z|GPUREG_LIGHT2_SPOTDIR_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_SPOT_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0168&lt;br /&gt;
| [[#GPUREG_0168|GPUREG_0168]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0169&lt;br /&gt;
| [[#GPUREG_LIGHTi_CONFIG|GPUREG_LIGHT2_CONFIG]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_TYPE&lt;br /&gt;
|-&lt;br /&gt;
| 016A&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_BIAS|GPUREG_LIGHT2_ATTENUATION_BIAS]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_DIST_ATTN_BIAS&lt;br /&gt;
|-&lt;br /&gt;
| 016B&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_SCALE|GPUREG_LIGHT2_ATTENUATION_SCALE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT2_DIST_ATTN_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 016C&lt;br /&gt;
| [[#GPUREG_016C|GPUREG_016C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 016D&lt;br /&gt;
| [[#GPUREG_016D|GPUREG_016D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 016E&lt;br /&gt;
| [[#GPUREG_016E|GPUREG_016E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 016F&lt;br /&gt;
| [[#GPUREG_016F|GPUREG_016F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0170&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR0|GPUREG_LIGHT3_SPECULAR0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_SPECULAR0&lt;br /&gt;
|-&lt;br /&gt;
| 0171&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR1|GPUREG_LIGHT3_SPECULAR1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_SPECULAR1&lt;br /&gt;
|-&lt;br /&gt;
| 0172&lt;br /&gt;
| [[#GPUREG_LIGHTi_DIFFUSE|GPUREG_LIGHT3_DIFFUSE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_DIFFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 0173&lt;br /&gt;
| [[#GPUREG_LIGHTi_AMBIENT|GPUREG_LIGHT3_AMBIENT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_AMBIENT&lt;br /&gt;
|-&lt;br /&gt;
| 0174&lt;br /&gt;
| [[#GPUREG_LIGHTi_XY|GPUREG_LIGHT3_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_POSITION_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0175&lt;br /&gt;
| [[#GPUREG_LIGHTi_Z|GPUREG_LIGHT3_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_POSITION_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0176&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_XY|GPUREG_LIGHT3_SPOTDIR_XY]]&lt;br /&gt;
|? &lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_SPOT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0177&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_Z|GPUREG_LIGHT3_SPOTDIR_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_SPOT_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0178&lt;br /&gt;
| [[#GPUREG_0178|GPUREG_0178]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0179&lt;br /&gt;
| [[#GPUREG_LIGHTi_CONFIG|GPUREG_LIGHT3_CONFIG]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_TYPE&lt;br /&gt;
|-&lt;br /&gt;
| 017A&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_BIAS|GPUREG_LIGHT3_ATTENUATION_BIAS]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_DIST_ATTN_BIAS&lt;br /&gt;
|-&lt;br /&gt;
| 017B&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_SCALE|GPUREG_LIGHT3_ATTENUATION_SCALE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT3_DIST_ATTN_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 017C&lt;br /&gt;
| [[#GPUREG_017C|GPUREG_017C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 017D&lt;br /&gt;
| [[#GPUREG_017D|GPUREG_017D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 017E&lt;br /&gt;
| [[#GPUREG_017E|GPUREG_017E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 017F&lt;br /&gt;
| [[#GPUREG_017F|GPUREG_017F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0180&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR0|GPUREG_LIGHT4_SPECULAR0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_SPECULAR0&lt;br /&gt;
|-&lt;br /&gt;
| 0181&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR1|GPUREG_LIGHT4_SPECULAR1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_SPECULAR1&lt;br /&gt;
|-&lt;br /&gt;
| 0182&lt;br /&gt;
| [[#GPUREG_LIGHTi_DIFFUSE|GPUREG_LIGHT4_DIFFUSE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_DIFFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 0183&lt;br /&gt;
| [[#GPUREG_LIGHTi_AMBIENT|GPUREG_LIGHT4_AMBIENT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_AMBIENT&lt;br /&gt;
|-&lt;br /&gt;
| 0184&lt;br /&gt;
| [[#GPUREG_LIGHTi_XY|GPUREG_LIGHT4_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_POSITION_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0185&lt;br /&gt;
| [[#GPUREG_LIGHTi_Z|GPUREG_LIGHT4_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_POSITION_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0186&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_XY|GPUREG_LIGHT4_SPOTDIR_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_SPOT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0187&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_Z|GPUREG_LIGHT4_SPOTDIR_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_SPOT_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0188&lt;br /&gt;
| [[#GPUREG_0188|GPUREG_0188]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0189&lt;br /&gt;
| [[#GPUREG_LIGHTi_CONFIG|GPUREG_LIGHT4_CONFIG]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_TYPE&lt;br /&gt;
|-&lt;br /&gt;
| 018A&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_BIAS|GPUREG_LIGHT4_ATTENUATION_BIAS]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_DIST_ATTN_BIAS&lt;br /&gt;
|-&lt;br /&gt;
| 018B&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_SCALE|GPUREG_LIGHT4_ATTENUATION_SCALE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT4_DIST_ATTN_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 018C&lt;br /&gt;
| [[#GPUREG_018C|GPUREG_018C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 018D&lt;br /&gt;
| [[#GPUREG_018D|GPUREG_018D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 018E&lt;br /&gt;
| [[#GPUREG_018E|GPUREG_018E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 018F&lt;br /&gt;
| [[#GPUREG_018F|GPUREG_018F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0190&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR0|GPUREG_LIGHT5_SPECULAR0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_SPECULAR0&lt;br /&gt;
|-&lt;br /&gt;
| 0191&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR1|GPUREG_LIGHT5_SPECULAR1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_SPECULAR1&lt;br /&gt;
|-&lt;br /&gt;
| 0192&lt;br /&gt;
| [[#GPUREG_LIGHTi_DIFFUSE|GPUREG_LIGHT5_DIFFUSE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_DIFFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 0193&lt;br /&gt;
| [[#GPUREG_LIGHTi_AMBIENT|GPUREG_LIGHT5_AMBIENT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_AMBIENT&lt;br /&gt;
|-&lt;br /&gt;
| 0194&lt;br /&gt;
| [[#GPUREG_LIGHTi_XY|GPUREG_LIGHT5_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_POSITION_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0195&lt;br /&gt;
| [[#GPUREG_LIGHTi_Z|GPUREG_LIGHT5_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_POSITION_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0196&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_XY|GPUREG_LIGHT5_SPOTDIR_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_SPOT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 0197&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_Z|GPUREG_LIGHT5_SPOTDIR_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_SPOT_Z&lt;br /&gt;
|-&lt;br /&gt;
| 0198&lt;br /&gt;
| [[#GPUREG_0198|GPUREG_0198]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0199&lt;br /&gt;
| [[#GPUREG_LIGHTi_CONFIG|GPUREG_LIGHT5_CONFIG]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_TYPE&lt;br /&gt;
|-&lt;br /&gt;
| 019A&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_BIAS|GPUREG_LIGHT5_ATTENUATION_BIAS]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_DIST_ATTN_BIAS&lt;br /&gt;
|-&lt;br /&gt;
| 019B&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_SCALE|GPUREG_LIGHT5_ATTENUATION_SCALE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT5_DIST_ATTN_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 019C&lt;br /&gt;
| [[#GPUREG_019C|GPUREG_019C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 019D&lt;br /&gt;
| [[#GPUREG_019D|GPUREG_019D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 019E&lt;br /&gt;
| [[#GPUREG_019E|GPUREG_019E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 019F&lt;br /&gt;
| [[#GPUREG_019F|GPUREG_019F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01A0&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR0|GPUREG_LIGHT6_SPECULAR0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_SPECULAR0&lt;br /&gt;
|-&lt;br /&gt;
| 01A1&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR1|GPUREG_LIGHT6_SPECULAR1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_SPECULAR1&lt;br /&gt;
|-&lt;br /&gt;
| 01A2&lt;br /&gt;
| [[#GPUREG_LIGHTi_DIFFUSE|GPUREG_LIGHT6_DIFFUSE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_DIFFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 01A3&lt;br /&gt;
| [[#GPUREG_LIGHTi_AMBIENT|GPUREG_LIGHT6_AMBIENT]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_AMBIENT&lt;br /&gt;
|-&lt;br /&gt;
| 01A4&lt;br /&gt;
| [[#GPUREG_LIGHTi_XY|GPUREG_LIGHT6_XY]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_POSITION_XY&lt;br /&gt;
|-&lt;br /&gt;
| 01A5&lt;br /&gt;
| [[#GPUREG_LIGHTi_Z|GPUREG_LIGHT6_Z]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_POSITION_Z&lt;br /&gt;
|-&lt;br /&gt;
| 01A6&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_XY|GPUREG_LIGHT6_SPOTDIR_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_SPOT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 01A7&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_Z|GPUREG_LIGHT6_SPOTDIR_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_SPOT_Z&lt;br /&gt;
|-&lt;br /&gt;
| 01A8&lt;br /&gt;
| [[#GPUREG_01A8|GPUREG_01A8]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01A9&lt;br /&gt;
| [[#GPUREG_LIGHTi_CONFIG|GPUREG_LIGHT6_CONFIG]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_TYPE&lt;br /&gt;
|-&lt;br /&gt;
| 01AA&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_BIAS|GPUREG_LIGHT6_ATTENUATION_BIAS]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_DIST_ATTN_BIAS&lt;br /&gt;
|-&lt;br /&gt;
| 01AB&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_SCALE|GPUREG_LIGHT6_ATTENUATION_SCALE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT6_DIST_ATTN_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 01AC&lt;br /&gt;
| [[#GPUREG_01AC|GPUREG_01AC]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01AD&lt;br /&gt;
| [[#GPUREG_01AD|GPUREG_01AD]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01AE&lt;br /&gt;
| [[#GPUREG_01AE|GPUREG_01AE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01AF&lt;br /&gt;
| [[#GPUREG_01AF|GPUREG_01AF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01B0&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR0|GPUREG_LIGHT7_SPECULAR0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_SPECULAR0&lt;br /&gt;
|-&lt;br /&gt;
| 01B1&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPECULAR1|GPUREG_LIGHT7_SPECULAR1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_SPECULAR1&lt;br /&gt;
|-&lt;br /&gt;
| 01B2&lt;br /&gt;
| [[#GPUREG_LIGHTi_DIFFUSE|GPUREG_LIGHT7_DIFFUSE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_DIFFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 01B3&lt;br /&gt;
| [[#GPUREG_LIGHTi_AMBIENT|GPUREG_LIGHT7_AMBIENT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_AMBIENT&lt;br /&gt;
|-&lt;br /&gt;
| 01B4&lt;br /&gt;
| [[#GPUREG_LIGHTi_XY|GPUREG_LIGHT7_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_POSITION_XY&lt;br /&gt;
|-&lt;br /&gt;
| 01B5&lt;br /&gt;
| [[#GPUREG_LIGHTi_Z|GPUREG_LIGHT7_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_POSITION_Z&lt;br /&gt;
|-&lt;br /&gt;
| 01B6&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_XY|GPUREG_LIGHT7_SPOTDIR_XY]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_SPOT_XY&lt;br /&gt;
|-&lt;br /&gt;
| 01B7&lt;br /&gt;
| [[#GPUREG_LIGHTi_SPOTDIR_Z|GPUREG_LIGHT7_SPOTDIR_Z]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_SPOT_Z&lt;br /&gt;
|-&lt;br /&gt;
| 01B8&lt;br /&gt;
| [[#GPUREG_01B8|GPUREG_01B8]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01B9&lt;br /&gt;
| [[#GPUREG_LIGHTi_CONFIG|GPUREG_LIGHT7_CONFIG]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_TYPE&lt;br /&gt;
|-&lt;br /&gt;
| 01BA&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_BIAS|GPUREG_LIGHT7_ATTENUATION_BIAS]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_DIST_ATTN_BIAS&lt;br /&gt;
|-&lt;br /&gt;
| 01BB&lt;br /&gt;
| [[#GPUREG_LIGHTi_ATTENUATION_SCALE|GPUREG_LIGHT7_ATTENUATION_SCALE]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_FRAG_LIGHT7_DIST_ATTN_SCALE&lt;br /&gt;
|-&lt;br /&gt;
| 01BC&lt;br /&gt;
| [[#GPUREG_01BC|GPUREG_01BC]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01BD&lt;br /&gt;
| [[#GPUREG_01BD|GPUREG_01BD]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01BE&lt;br /&gt;
| [[#GPUREG_01BE|GPUREG_01BE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01BF&lt;br /&gt;
| [[#GPUREG_01BF|GPUREG_01BF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01C0&lt;br /&gt;
| [[#GPUREG_LIGHTING_AMBIENT|GPUREG_LIGHTING_AMBIENT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_AMBIENT&lt;br /&gt;
|-&lt;br /&gt;
| 01C1&lt;br /&gt;
| [[#GPUREG_01C1|GPUREG_01C1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01C2&lt;br /&gt;
| [[#GPUREG_LIGHTING_NUM_LIGHTS|GPUREG_LIGHTING_NUM_LIGHTS]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_SRC_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 01C3&lt;br /&gt;
| [[#GPUREG_LIGHTING_CONFIG0|GPUREG_LIGHTING_CONFIG0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_FUNC_MODE0&lt;br /&gt;
|-&lt;br /&gt;
| 01C4&lt;br /&gt;
| [[#GPUREG_LIGHTING_CONFIG1|GPUREG_LIGHTING_CONFIG1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_FUNC_MODE1&lt;br /&gt;
|-&lt;br /&gt;
| 01C5&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUT_INDEX|GPUREG_LIGHTING_LUT_INDEX]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUT&lt;br /&gt;
|-&lt;br /&gt;
| 01C6&lt;br /&gt;
| [[#GPUREG_LIGHTING_ENABLE1|GPUREG_LIGHTING_ENABLE1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_EN1&lt;br /&gt;
|-&lt;br /&gt;
| 01C7&lt;br /&gt;
| [[#GPUREG_01C7|GPUREG_01C7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01C8&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUT_DATAi|GPUREG_LIGHTING_LUT_DATA0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUT_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 01C9&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUT_DATAi|GPUREG_LIGHTING_LUT_DATA1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUT_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 01CA&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUT_DATAi|GPUREG_LIGHTING_LUT_DATA2]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUT_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 01CB&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUT_DATAi|GPUREG_LIGHTING_LUT_DATA3]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUT_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 01CC&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUT_DATAi|GPUREG_LIGHTING_LUT_DATA4]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUT_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 01CD&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUT_DATAi|GPUREG_LIGHTING_LUT_DATA5]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUT_DATA5&lt;br /&gt;
|-&lt;br /&gt;
| 01CE&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUT_DATAi|GPUREG_LIGHTING_LUT_DATA6]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUT_DATA6&lt;br /&gt;
|-&lt;br /&gt;
| 01CF&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUT_DATAi|GPUREG_LIGHTING_LUT_DATA7]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUT_DATA7&lt;br /&gt;
|-&lt;br /&gt;
| 01D0&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUTINPUT_ABS|GPUREG_LIGHTING_LUTINPUT_ABS]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_ABSLUTINPUT&lt;br /&gt;
|-&lt;br /&gt;
| 01D1&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUTINPUT_SELECT|GPUREG_LIGHTING_LUTINPUT_SELECT]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUTINPUT&lt;br /&gt;
|-&lt;br /&gt;
| 01D2&lt;br /&gt;
| [[#GPUREG_LIGHTING_LUTINPUT_SCALE|GPUREG_LIGHTING_LUTINPUT_SCALE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_LUTSCALE&lt;br /&gt;
|-&lt;br /&gt;
| 01D3&lt;br /&gt;
| [[#GPUREG_01D3|GPUREG_01D3]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01D4&lt;br /&gt;
| [[#GPUREG_01D4|GPUREG_01D4]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01D5&lt;br /&gt;
| [[#GPUREG_01D5|GPUREG_01D5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01D6&lt;br /&gt;
| [[#GPUREG_01D6|GPUREG_01D6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01D7&lt;br /&gt;
| [[#GPUREG_01D7|GPUREG_01D7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01D8&lt;br /&gt;
| [[#GPUREG_01D8|GPUREG_01D8]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01D9&lt;br /&gt;
| [[#GPUREG_LIGHTING_LIGHT_PERMUTATION|GPUREG_LIGHTING_LIGHT_PERMUTATION]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_FRAG_LIGHT_SRC_EN_ID&lt;br /&gt;
|-&lt;br /&gt;
| 01DA&lt;br /&gt;
| [[#GPUREG_01DA|GPUREG_01DA]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01DB&lt;br /&gt;
| [[#GPUREG_01DB|GPUREG_01DB]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01DC&lt;br /&gt;
| [[#GPUREG_01DC|GPUREG_01DC]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01DD&lt;br /&gt;
| [[#GPUREG_01DD|GPUREG_01DD]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01DE&lt;br /&gt;
| [[#GPUREG_01DE|GPUREG_01DE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01DF&lt;br /&gt;
| [[#GPUREG_01DF|GPUREG_01DF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E0&lt;br /&gt;
| [[#GPUREG_01E0|GPUREG_01E0]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E1&lt;br /&gt;
| [[#GPUREG_01E1|GPUREG_01E1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E2&lt;br /&gt;
| [[#GPUREG_01E2|GPUREG_01E2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E3&lt;br /&gt;
| [[#GPUREG_01E3|GPUREG_01E3]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E4&lt;br /&gt;
| [[#GPUREG_01E4|GPUREG_01E4]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E5&lt;br /&gt;
| [[#GPUREG_01E5|GPUREG_01E5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E6&lt;br /&gt;
| [[#GPUREG_01E6|GPUREG_01E6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E7&lt;br /&gt;
| [[#GPUREG_01E7|GPUREG_01E7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E8&lt;br /&gt;
| [[#GPUREG_01E8|GPUREG_01E8]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01E9&lt;br /&gt;
| [[#GPUREG_01E9|GPUREG_01E9]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01EA&lt;br /&gt;
| [[#GPUREG_01EA|GPUREG_01EA]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01EB&lt;br /&gt;
| [[#GPUREG_01EB|GPUREG_01EB]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01EC&lt;br /&gt;
| [[#GPUREG_01EC|GPUREG_01EC]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01ED&lt;br /&gt;
| [[#GPUREG_01ED|GPUREG_01ED]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01EE&lt;br /&gt;
| [[#GPUREG_01EE|GPUREG_01EE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01EF&lt;br /&gt;
| [[#GPUREG_01EF|GPUREG_01EF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F0&lt;br /&gt;
| [[#GPUREG_01F0|GPUREG_01F0]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F1&lt;br /&gt;
| [[#GPUREG_01F1|GPUREG_01F1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F2&lt;br /&gt;
| [[#GPUREG_01F2|GPUREG_01F2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F3&lt;br /&gt;
| [[#GPUREG_01F3|GPUREG_01F3]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F4&lt;br /&gt;
| [[#GPUREG_01F4|GPUREG_01F4]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F5&lt;br /&gt;
| [[#GPUREG_01F5|GPUREG_01F5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F6&lt;br /&gt;
| [[#GPUREG_01F6|GPUREG_01F6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F7&lt;br /&gt;
| [[#GPUREG_01F7|GPUREG_01F7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F8&lt;br /&gt;
| [[#GPUREG_01F8|GPUREG_01F8]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01F9&lt;br /&gt;
| [[#GPUREG_01F9|GPUREG_01F9]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01FA&lt;br /&gt;
| [[#GPUREG_01FA|GPUREG_01FA]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01FB&lt;br /&gt;
| [[#GPUREG_01FB|GPUREG_01FB]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01FC&lt;br /&gt;
| [[#GPUREG_01FC|GPUREG_01FC]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01FD&lt;br /&gt;
| [[#GPUREG_01FD|GPUREG_01FD]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01FE&lt;br /&gt;
| [[#GPUREG_01FE|GPUREG_01FE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 01FF&lt;br /&gt;
| [[#GPUREG_01FF|GPUREG_01FF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Geometry pipeline registers (0x200-0x27F) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Register ID&lt;br /&gt;
! Register name&lt;br /&gt;
! Notes&lt;br /&gt;
! Official Name&lt;br /&gt;
|-&lt;br /&gt;
| 0200&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERS_LOC|GPUREG_ATTRIBBUFFERS_LOC]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VTX_ATTR_ARRAYS_BASE_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 0201&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERS_FORMAT_LOW|GPUREG_ATTRIBBUFFERS_FORMAT_LOW]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VTX_ATTR_ARRAYS0&lt;br /&gt;
|-&lt;br /&gt;
| 0202&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERS_FORMAT_HIGH|GPUREG_ATTRIBBUFFERS_FORMAT_HIGH]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VTX_ATTR_ARRAYS1&lt;br /&gt;
|-&lt;br /&gt;
| 0203&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER0_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_LOAD_ARRAY0_ATTR_OFFSET&lt;br /&gt;
|-&lt;br /&gt;
| 0204&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER0_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_LOAD_ARRAY0_ELEMENT0&lt;br /&gt;
|-&lt;br /&gt;
| 0205&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER0_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_LOAD_ARRAY0_ELEMENT1&lt;br /&gt;
|-&lt;br /&gt;
| 0206&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER1_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0207&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER1_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0208&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER1_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0209&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER2_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 020A&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER2_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 020B&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER2_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 020C&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER3_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 020D&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER3_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 020E&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER3_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 020F&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER4_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0210&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER4_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0211&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER4_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0212&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER5_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0213&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER5_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0214&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER5_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0215&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER6_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0216&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER6_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0217&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER6_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0218&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER7_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0219&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER7_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 021A&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER7_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 021B&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER8_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 021C&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER8_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 021D&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER8_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 021E&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER9_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 021F&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER9_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0220&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER9_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0221&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER10_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0222&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER10_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0223&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER10_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0224&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_OFFSET|GPUREG_ATTRIBBUFFER11_OFFSET]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0225&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG1|GPUREG_ATTRIBBUFFER11_CONFIG1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0226&lt;br /&gt;
| [[#GPUREG_ATTRIBBUFFERi_CONFIG2|GPUREG_ATTRIBBUFFER11_CONFIG2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0227&lt;br /&gt;
| [[#GPUREG_INDEXBUFFER_CONFIG|GPUREG_INDEXBUFFER_CONFIG]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_INDEX_ARRAY_ADDR_OFFSET&lt;br /&gt;
|-&lt;br /&gt;
| 0228&lt;br /&gt;
| [[#GPUREG_NUMVERTICES|GPUREG_NUMVERTICES]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_DRAW_VERTEX_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 0229&lt;br /&gt;
| [[#GPUREG_GEOSTAGE_CONFIG|GPUREG_GEOSTAGE_CONFIG]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_DRAW_MODE0&lt;br /&gt;
|-&lt;br /&gt;
| 022A&lt;br /&gt;
| [[#GPUREG_VERTEX_OFFSET|GPUREG_VERTEX_OFFSET]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_DRAW_VERTEX_OFFSET&lt;br /&gt;
|-&lt;br /&gt;
| 022B&lt;br /&gt;
| [[#GPUREG_022B|GPUREG_022B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 022C&lt;br /&gt;
| [[#GPUREG_022C|GPUREG_022C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 022D&lt;br /&gt;
| [[#GPUREG_POST_VERTEX_CACHE_NUM|GPUREG_POST_VERTEX_CACHE_NUM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_POST_VERTEX_CACHE_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 022E&lt;br /&gt;
| [[#GPUREG_DRAWARRAYS|GPUREG_DRAWARRAYS]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_START_DRAW_ARRAY&lt;br /&gt;
|-&lt;br /&gt;
| 022F&lt;br /&gt;
| [[#GPUREG_DRAWELEMENTS|GPUREG_DRAWELEMENTS]]&lt;br /&gt;
|&lt;br /&gt;
|PICA_REG_START_DRAW_ELEMENT&lt;br /&gt;
|-&lt;br /&gt;
| 0230&lt;br /&gt;
| [[#GPUREG_0230|GPUREG_0230]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0231&lt;br /&gt;
| [[#GPUREG_VTX_FUNC|GPUREG_VTX_FUNC]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_VTX_FUNC&lt;br /&gt;
|-&lt;br /&gt;
| 0232&lt;br /&gt;
| [[#GPUREG_FIXEDATTRIB_INDEX|GPUREG_FIXEDATTRIB_INDEX]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_VS_FIXED_ATTR&lt;br /&gt;
|-&lt;br /&gt;
| 0233&lt;br /&gt;
| [[#GPUREG_FIXEDATTRIB_DATAi|GPUREG_FIXEDATTRIB_DATA0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_VS_FIXED_ATTR_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 0234&lt;br /&gt;
| [[#GPUREG_FIXEDATTRIB_DATAi|GPUREG_FIXEDATTRIB_DATA1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_VS_FIXED_ATTR_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 0235&lt;br /&gt;
| [[#GPUREG_FIXEDATTRIB_DATAi|GPUREG_FIXEDATTRIB_DATA2]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_VS_FIXED_ATTR_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 0236&lt;br /&gt;
| [[#GPUREG_0236|GPUREG_0236]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0237&lt;br /&gt;
| [[#GPUREG_0237|GPUREG_0237]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0238&lt;br /&gt;
| [[#GPUREG_CMDBUF_SIZE0|GPUREG_CMDBUF_SIZE0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_COMMAND_BUF_SIZE_CH0&lt;br /&gt;
|-&lt;br /&gt;
| 0239&lt;br /&gt;
| [[#GPUREG_CMDBUF_SIZE1|GPUREG_CMDBUF_SIZE1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_COMMAND_BUF_SIZE_CH1&lt;br /&gt;
|-&lt;br /&gt;
| 023A&lt;br /&gt;
| [[#GPUREG_CMDBUF_ADDR0|GPUREG_CMDBUF_ADDR0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_COMMAND_BUF_ADDR_CH0&lt;br /&gt;
|-&lt;br /&gt;
| 023B&lt;br /&gt;
| [[#GPUREG_CMDBUF_ADDR1|GPUREG_CMDBUF_ADDR1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_COMMAND_BUF_ADDR_CH1&lt;br /&gt;
|-&lt;br /&gt;
| 023C&lt;br /&gt;
| [[#GPUREG_CMDBUF_JUMP0|GPUREG_CMDBUF_JUMP0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_COMMAND_BUF_KICK_CH0&lt;br /&gt;
|-&lt;br /&gt;
| 023D&lt;br /&gt;
| [[#GPUREG_CMDBUF_JUMP1|GPUREG_CMDBUF_JUMP1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_COMMAND_BUF_KICK_CH1&lt;br /&gt;
|-&lt;br /&gt;
| 023E&lt;br /&gt;
| [[#GPUREG_023E|GPUREG_023E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 023F&lt;br /&gt;
| [[#GPUREG_023F|GPUREG_023F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0240&lt;br /&gt;
| [[#GPUREG_0240|GPUREG_0240]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0241&lt;br /&gt;
| [[#GPUREG_0241|GPUREG_0241]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0242&lt;br /&gt;
| [[#GPUREG_VSH_NUM_ATTR|GPUREG_VSH_NUM_ATTR]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_VS_ATTR_NUM1&lt;br /&gt;
|-&lt;br /&gt;
| 0243&lt;br /&gt;
| [[#GPUREG_0243|GPUREG_0243]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0244&lt;br /&gt;
| [[#GPUREG_VSH_COM_MODE|GPUREG_VSH_COM_MODE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_VS_COM_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 0245&lt;br /&gt;
| [[#GPUREG_START_DRAW_FUNC0|GPUREG_START_DRAW_FUNC0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_START_DRAW_FUNC0&lt;br /&gt;
|-&lt;br /&gt;
| 0246&lt;br /&gt;
| [[#GPUREG_0246|GPUREG_0246]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0247&lt;br /&gt;
| [[#GPUREG_0247|GPUREG_0247]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0248&lt;br /&gt;
| [[#GPUREG_0248|GPUREG_0248]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0249&lt;br /&gt;
| [[#GPUREG_0249|GPUREG_0249]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 024A&lt;br /&gt;
| [[#GPUREG_VSH_OUTMAP_TOTAL1|GPUREG_VSH_OUTMAP_TOTAL1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_VS_OUT_REG_NUM1&lt;br /&gt;
|-&lt;br /&gt;
| 024B&lt;br /&gt;
| [[#GPUREG_024B|GPUREG_024B]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 024C&lt;br /&gt;
| [[#GPUREG_024C|GPUREG_024C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 024D&lt;br /&gt;
| [[#GPUREG_024D|GPUREG_024D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 024E&lt;br /&gt;
| [[#GPUREG_024E|GPUREG_024E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 024F&lt;br /&gt;
| [[#GPUREG_024F|GPUREG_024F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0250&lt;br /&gt;
| [[#GPUREG_0250|GPUREG_0250]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0251&lt;br /&gt;
| [[#GPUREG_VSH_OUTMAP_TOTAL2|GPUREG_VSH_OUTMAP_TOTAL2]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_VS_OUT_REG_NUM2&lt;br /&gt;
|-&lt;br /&gt;
| 0252&lt;br /&gt;
| [[#GPUREG_GSH_MISC0|GPUREG_GSH_MISC0]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GS_MISC_REG0&lt;br /&gt;
|-&lt;br /&gt;
| 0253&lt;br /&gt;
| [[#GPUREG_GEOSTAGE_CONFIG2|GPUREG_GEOSTAGE_CONFIG2]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_DRAW_MODE1&lt;br /&gt;
|-&lt;br /&gt;
| 0254&lt;br /&gt;
| [[#GPUREG_GSH_MISC1|GPUREG_GSH_MISC1]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_GS_MISC_REG1&lt;br /&gt;
|-&lt;br /&gt;
| 0255&lt;br /&gt;
| [[#GPUREG_0255|GPUREG_0255]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0256&lt;br /&gt;
| [[#GPUREG_0256|GPUREG_0256]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0257&lt;br /&gt;
| [[#GPUREG_0257|GPUREG_0257]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0258&lt;br /&gt;
| [[#GPUREG_0258|GPUREG_0258]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0259&lt;br /&gt;
| [[#GPUREG_0259|GPUREG_0259]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 025A&lt;br /&gt;
| [[#GPUREG_025A|GPUREG_025A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 025B&lt;br /&gt;
| [[#GPUREG_025B|GPUREG_025B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 025C&lt;br /&gt;
| [[#GPUREG_025C|GPUREG_025C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 025D&lt;br /&gt;
| [[#GPUREG_025D|GPUREG_025D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 025E&lt;br /&gt;
| [[#GPUREG_PRIMITIVE_CONFIG|GPUREG_PRIMITIVE_CONFIG]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_GS_OUT_REG_NUM3 / PICA_REG_DRAW_MODE2 / PICA_REG_VS_OUT_REG_NUM3&lt;br /&gt;
|-&lt;br /&gt;
| 025F&lt;br /&gt;
| [[#GPUREG_RESTART_PRIMITIVE|GPUREG_RESTART_PRIMITIVE]]&lt;br /&gt;
|?&lt;br /&gt;
|PICA_REG_START_DRAW_FUNC1&lt;br /&gt;
|-&lt;br /&gt;
| 0260&lt;br /&gt;
| [[#GPUREG_0260|GPUREG_0260]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0261&lt;br /&gt;
| [[#GPUREG_0261|GPUREG_0261]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0262&lt;br /&gt;
| [[#GPUREG_0262|GPUREG_0262]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0263&lt;br /&gt;
| [[#GPUREG_0263|GPUREG_0263]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0264&lt;br /&gt;
| [[#GPUREG_0264|GPUREG_0264]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0265&lt;br /&gt;
| [[#GPUREG_0265|GPUREG_0265]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0266&lt;br /&gt;
| [[#GPUREG_0266|GPUREG_0266]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0267&lt;br /&gt;
| [[#GPUREG_0267|GPUREG_0267]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0268&lt;br /&gt;
| [[#GPUREG_0268|GPUREG_0268]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0269&lt;br /&gt;
| [[#GPUREG_0269|GPUREG_0269]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 026A&lt;br /&gt;
| [[#GPUREG_026A|GPUREG_026A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 026B&lt;br /&gt;
| [[#GPUREG_026B|GPUREG_026B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 026C&lt;br /&gt;
| [[#GPUREG_026C|GPUREG_026C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 026D&lt;br /&gt;
| [[#GPUREG_026D|GPUREG_026D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 026E&lt;br /&gt;
| [[#GPUREG_026E|GPUREG_026E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 026F&lt;br /&gt;
| [[#GPUREG_026F|GPUREG_026F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0270&lt;br /&gt;
| [[#GPUREG_0270|GPUREG_0270]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0271&lt;br /&gt;
| [[#GPUREG_0271|GPUREG_0271]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0272&lt;br /&gt;
| [[#GPUREG_0272|GPUREG_0272]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0273&lt;br /&gt;
| [[#GPUREG_0273|GPUREG_0273]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0274&lt;br /&gt;
| [[#GPUREG_0274|GPUREG_0274]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0275&lt;br /&gt;
| [[#GPUREG_0275|GPUREG_0275]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0276&lt;br /&gt;
| [[#GPUREG_0276|GPUREG_0276]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0277&lt;br /&gt;
| [[#GPUREG_0277|GPUREG_0277]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0278&lt;br /&gt;
| [[#GPUREG_0278|GPUREG_0278]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0279&lt;br /&gt;
| [[#GPUREG_0279|GPUREG_0279]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 027A&lt;br /&gt;
| [[#GPUREG_027A|GPUREG_027A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 027B&lt;br /&gt;
| [[#GPUREG_027B|GPUREG_027B]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 027C&lt;br /&gt;
| [[#GPUREG_027C|GPUREG_027C]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 027D&lt;br /&gt;
| [[#GPUREG_027D|GPUREG_027D]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 027E&lt;br /&gt;
| [[#GPUREG_027E|GPUREG_027E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 027F&lt;br /&gt;
| [[#GPUREG_027F|GPUREG_027F]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Shader registers (0x280-0x2DF) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Register ID&lt;br /&gt;
! Register name&lt;br /&gt;
! Notes&lt;br /&gt;
! Official Name&lt;br /&gt;
|-&lt;br /&gt;
! colspan=4 | Geometry shader&lt;br /&gt;
|-&lt;br /&gt;
| 0280&lt;br /&gt;
| [[#GPUREG_SH_BOOLUNIFORM|GPUREG_GSH_BOOLUNIFORM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_BOOL&lt;br /&gt;
|-&lt;br /&gt;
| 0281&lt;br /&gt;
| [[#GPUREG_SH_INTUNIFORM_Ii|GPUREG_GSH_INTUNIFORM_I0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_INT0&lt;br /&gt;
|-&lt;br /&gt;
| 0282&lt;br /&gt;
| [[#GPUREG_SH_INTUNIFORM_Ii|GPUREG_GSH_INTUNIFORM_I1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_INT1&lt;br /&gt;
|-&lt;br /&gt;
| 0283&lt;br /&gt;
| [[#GPUREG_SH_INTUNIFORM_Ii|GPUREG_GSH_INTUNIFORM_I2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_INT2&lt;br /&gt;
|-&lt;br /&gt;
| 0284&lt;br /&gt;
| [[#GPUREG_SH_INTUNIFORM_Ii|GPUREG_GSH_INTUNIFORM_I3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_INT3&lt;br /&gt;
|-&lt;br /&gt;
| 0285&lt;br /&gt;
| [[#GPUREG_0285|GPUREG_0285]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0286&lt;br /&gt;
| [[#GPUREG_0286|GPUREG_0286]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0287&lt;br /&gt;
| [[#GPUREG_0287|GPUREG_0287]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0288&lt;br /&gt;
| [[#GPUREG_0288|GPUREG_0288]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0289&lt;br /&gt;
| [[#GPUREG_SH_INPUTBUFFER_CONFIG|GPUREG_GSH_INPUTBUFFER_CONFIG]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_ATTR_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 028A&lt;br /&gt;
| [[#GPUREG_SH_ENTRYPOINT|GPUREG_GSH_ENTRYPOINT]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_START_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 028B&lt;br /&gt;
| [[#GPUREG_SH_ATTRIBUTES_PERMUTATION_LOW|GPUREG_GSH_ATTRIBUTES_PERMUTATION_LOW]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_ATTR_IN_REG_MAP0&lt;br /&gt;
|-&lt;br /&gt;
| 028C&lt;br /&gt;
| [[#GPUREG_SH_ATTRIBUTES_PERMUTATION_HIGH|GPUREG_GSH_ATTRIBUTES_PERMUTATION_HIGH]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_ATTR_IN_REG_MAP1&lt;br /&gt;
|-&lt;br /&gt;
| 028D&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_MASK|GPUREG_GSH_OUTMAP_MASK]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_OUT_REG_MASK&lt;br /&gt;
|-&lt;br /&gt;
| 028E&lt;br /&gt;
| [[#GPUREG_028E|GPUREG_028E]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 028F&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_END|GPUREG_GSH_CODETRANSFER_END]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_RENEWAL_END&lt;br /&gt;
|-&lt;br /&gt;
| 0290&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_INDEX|GPUREG_GSH_FLOATUNIFORM_INDEX]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_FLOAT_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 0291&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_GSH_FLOATUNIFORM_DATA0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_FLOAT_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 0292&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_GSH_FLOATUNIFORM_DATA1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_FLOAT_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 0293&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_GSH_FLOATUNIFORM_DATA2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_FLOAT_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 0294&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_GSH_FLOATUNIFORM_DATA3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_FLOAT_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 0295&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_GSH_FLOATUNIFORM_DATA4]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_FLOAT_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 0296&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_GSH_FLOATUNIFORM_DATA5]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_FLOAT_DATA5&lt;br /&gt;
|-&lt;br /&gt;
| 0297&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_GSH_FLOATUNIFORM_DATA6]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_FLOAT_DATA6&lt;br /&gt;
|-&lt;br /&gt;
| 0298&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_GSH_FLOATUNIFORM_DATA7]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_FLOAT_DATA7&lt;br /&gt;
|-&lt;br /&gt;
| 0299&lt;br /&gt;
| [[#GPUREG_0299|GPUREG_0299]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 029A&lt;br /&gt;
| [[#GPUREG_029A|GPUREG_029A]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 029B&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_INDEX|GPUREG_GSH_CODETRANSFER_INDEX]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_GS_PROG_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 029C&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_GSH_CODETRANSFER_DATA0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 029D&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_GSH_CODETRANSFER_DATA1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 029E&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_GSH_CODETRANSFER_DATA2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 029F&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_GSH_CODETRANSFER_DATA3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 02A0&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_GSH_CODETRANSFER_DATA4]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 02A1&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_GSH_CODETRANSFER_DATA5]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_DATA5&lt;br /&gt;
|-&lt;br /&gt;
| 02A2&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_GSH_CODETRANSFER_DATA6]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_DATA6&lt;br /&gt;
|-&lt;br /&gt;
| 02A3&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_GSH_CODETRANSFER_DATA7]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_DATA7&lt;br /&gt;
|-&lt;br /&gt;
| 02A4&lt;br /&gt;
| [[#GPUREG_02A4|GPUREG_02A4]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02A5&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_INDEX|GPUREG_GSH_OPDESCS_INDEX]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_SWIZZLE_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 02A6&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_GSH_OPDESCS_DATA0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_SWIZZLE_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 02A7&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_GSH_OPDESCS_DATA1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_SWIZZLE_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 02A8&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_GSH_OPDESCS_DATA2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_SWIZZLE_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 02A9&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_GSH_OPDESCS_DATA3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_SWIZZLE_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 02AA&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_GSH_OPDESCS_DATA4]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_SWIZZLE_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 02AB&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_GSH_OPDESCS_DATA5]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_SWIZZLE_DATA5&lt;br /&gt;
|-&lt;br /&gt;
| 02AC&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_GSH_OPDESCS_DATA6]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_SWIZZLE_DATA6&lt;br /&gt;
|-&lt;br /&gt;
| 02AD&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_GSH_OPDESCS_DATA7]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_GS_PROG_SWIZZLE_DATA7&lt;br /&gt;
|-&lt;br /&gt;
| 02AE&lt;br /&gt;
| [[#GPUREG_02AE|GPUREG_02AE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02AF&lt;br /&gt;
| [[#GPUREG_02AF|GPUREG_02AF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=4 | Vertex shader&lt;br /&gt;
|-&lt;br /&gt;
| 02B0&lt;br /&gt;
| [[#GPUREG_SH_BOOLUNIFORM|GPUREG_VSH_BOOLUNIFORM]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_BOOL&lt;br /&gt;
|-&lt;br /&gt;
| 02B1&lt;br /&gt;
| [[#GPUREG_SH_INTUNIFORM_Ii|GPUREG_VSH_INTUNIFORM_I0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_INT0&lt;br /&gt;
|-&lt;br /&gt;
| 02B2&lt;br /&gt;
| [[#GPUREG_SH_INTUNIFORM_Ii|GPUREG_VSH_INTUNIFORM_I1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_INT1&lt;br /&gt;
|-&lt;br /&gt;
| 02B3&lt;br /&gt;
| [[#GPUREG_SH_INTUNIFORM_Ii|GPUREG_VSH_INTUNIFORM_I2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_INT2&lt;br /&gt;
|-&lt;br /&gt;
| 02B4&lt;br /&gt;
| [[#GPUREG_SH_INTUNIFORM_Ii|GPUREG_VSH_INTUNIFORM_I3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_INT3&lt;br /&gt;
|-&lt;br /&gt;
| 02B5&lt;br /&gt;
| [[#GPUREG_02B5|GPUREG_02B5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02B6&lt;br /&gt;
| [[#GPUREG_02B6|GPUREG_02B6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02B7&lt;br /&gt;
| [[#GPUREG_02B7|GPUREG_02B7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02B8&lt;br /&gt;
| [[#GPUREG_02B8|GPUREG_02B8]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02B9&lt;br /&gt;
| [[#GPUREG_SH_INPUTBUFFER_CONFIG|GPUREG_VSH_INPUTBUFFER_CONFIG]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_ATTR_NUM0&lt;br /&gt;
|-&lt;br /&gt;
| 02BA&lt;br /&gt;
| [[#GPUREG_SH_ENTRYPOINT|GPUREG_VSH_ENTRYPOINT]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_START_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 02BB&lt;br /&gt;
| [[#GPUREG_SH_ATTRIBUTES_PERMUTATION_LOW|GPUREG_VSH_ATTRIBUTES_PERMUTATION_LOW]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_ATTR_IN_REG_MAP0&lt;br /&gt;
|-&lt;br /&gt;
| 02BC&lt;br /&gt;
| [[#GPUREG_SH_ATTRIBUTES_PERMUTATION_HIGH|GPUREG_VSH_ATTRIBUTES_PERMUTATION_HIGH]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_ATTR_IN_REG_MAP1&lt;br /&gt;
|-&lt;br /&gt;
| 02BD&lt;br /&gt;
| [[#GPUREG_SH_OUTMAP_MASK|GPUREG_VSH_OUTMAP_MASK]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_OUT_REG_MASK&lt;br /&gt;
|-&lt;br /&gt;
| 02BE&lt;br /&gt;
| [[#GPUREG_02BE|GPUREG_02BE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02BF&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_END|GPUREG_VSH_CODETRANSFER_END]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_RENEWAL_END&lt;br /&gt;
|-&lt;br /&gt;
| 02C0&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_INDEX|GPUREG_VSH_FLOATUNIFORM_INDEX]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_FLOAT_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 02C1&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_FLOAT_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 02C2&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_FLOAT_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 02C3&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_FLOAT_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 02C4&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_FLOAT_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 02C5&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA4]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_FLOAT_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 02C6&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA5]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_FLOAT_DATA5&lt;br /&gt;
|-&lt;br /&gt;
| 02C7&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA6]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_FLOAT_DATA6&lt;br /&gt;
|-&lt;br /&gt;
| 02C8&lt;br /&gt;
| [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_VSH_FLOATUNIFORM_DATA7]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_FLOAT_DATA7&lt;br /&gt;
|-&lt;br /&gt;
| 02C9&lt;br /&gt;
| [[#GPUREG_02C9|GPUREG_02C9]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02CA&lt;br /&gt;
| [[#GPUREG_02CA|GPUREG_02CA]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02CB&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_INDEX|GPUREG_VSH_CODETRANSFER_INDEX]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_VS_PROG_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 02CC&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_VSH_CODETRANSFER_DATA0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 02CD&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_VSH_CODETRANSFER_DATA1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 02CE&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_VSH_CODETRANSFER_DATA2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 02CF&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_VSH_CODETRANSFER_DATA3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 02D0&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_VSH_CODETRANSFER_DATA4]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 02D1&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_VSH_CODETRANSFER_DATA5]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_DATA5&lt;br /&gt;
|-&lt;br /&gt;
| 02D2&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_VSH_CODETRANSFER_DATA6]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_DATA6&lt;br /&gt;
|-&lt;br /&gt;
| 02D3&lt;br /&gt;
| [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_VSH_CODETRANSFER_DATA7]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_DATA7&lt;br /&gt;
|-&lt;br /&gt;
| 02D4&lt;br /&gt;
| [[#GPUREG_02D4|GPUREG_02D4]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02D5&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_INDEX|GPUREG_VSH_OPDESCS_INDEX]]&lt;br /&gt;
| ?&lt;br /&gt;
|PICA_REG_VS_PROG_SWIZZLE_ADDR&lt;br /&gt;
|-&lt;br /&gt;
| 02D6&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_VSH_OPDESCS_DATA0]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_SWIZZLE_DATA0&lt;br /&gt;
|-&lt;br /&gt;
| 02D7&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_VSH_OPDESCS_DATA1]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_SWIZZLE_DATA1&lt;br /&gt;
|-&lt;br /&gt;
| 02D8&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_VSH_OPDESCS_DATA2]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_SWIZZLE_DATA2&lt;br /&gt;
|-&lt;br /&gt;
| 02D9&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_VSH_OPDESCS_DATA3]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_SWIZZLE_DATA3&lt;br /&gt;
|-&lt;br /&gt;
| 02DA&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_VSH_OPDESCS_DATA4]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_SWIZZLE_DATA4&lt;br /&gt;
|-&lt;br /&gt;
| 02DB&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_VSH_OPDESCS_DATA5]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_SWIZZLE_DATA5&lt;br /&gt;
|-&lt;br /&gt;
| 02DC&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_VSH_OPDESCS_DATA6]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_SWIZZLE_DATA6&lt;br /&gt;
|-&lt;br /&gt;
| 02DD&lt;br /&gt;
| [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_VSH_OPDESCS_DATA7]]&lt;br /&gt;
| &lt;br /&gt;
|PICA_REG_VS_PROG_SWIZZLE_DATA7&lt;br /&gt;
|-&lt;br /&gt;
| 02DE&lt;br /&gt;
| [[#GPUREG_02DE|GPUREG_02DE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02DF&lt;br /&gt;
| [[#GPUREG_02DF|GPUREG_02DF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown registers (0x2E0-0x2FF) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Register ID&lt;br /&gt;
! Register name&lt;br /&gt;
! Notes&lt;br /&gt;
! Official Name&lt;br /&gt;
|-&lt;br /&gt;
| 02E0&lt;br /&gt;
| [[#GPUREG_02E0|GPUREG_02E0]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02E1&lt;br /&gt;
| [[#GPUREG_02E1|GPUREG_02E1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02E2&lt;br /&gt;
| [[#GPUREG_02E2|GPUREG_02E2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02E3&lt;br /&gt;
| [[#GPUREG_02E3|GPUREG_02E3]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02E4&lt;br /&gt;
| [[#GPUREG_02E4|GPUREG_02E4]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02E5&lt;br /&gt;
| [[#GPUREG_02E5|GPUREG_02E5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02E6&lt;br /&gt;
| [[#GPUREG_02E6|GPUREG_02E6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02E7&lt;br /&gt;
| [[#GPUREG_02E7|GPUREG_02E7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02E8&lt;br /&gt;
| [[#GPUREG_02E8|GPUREG_02E8]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02E9&lt;br /&gt;
| [[#GPUREG_02E9|GPUREG_02E9]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02EA&lt;br /&gt;
| [[#GPUREG_02EA|GPUREG_02EA]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02EB&lt;br /&gt;
| [[#GPUREG_02EB|GPUREG_02EB]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02EC&lt;br /&gt;
| [[#GPUREG_02EC|GPUREG_02EC]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02ED&lt;br /&gt;
| [[#GPUREG_02ED|GPUREG_02ED]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02EE&lt;br /&gt;
| [[#GPUREG_02EE|GPUREG_02EE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02EF&lt;br /&gt;
| [[#GPUREG_02EF|GPUREG_02EF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F0&lt;br /&gt;
| [[#GPUREG_02F0|GPUREG_02F0]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F1&lt;br /&gt;
| [[#GPUREG_02F1|GPUREG_02F1]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F2&lt;br /&gt;
| [[#GPUREG_02F2|GPUREG_02F2]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F3&lt;br /&gt;
| [[#GPUREG_02F3|GPUREG_02F3]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F4&lt;br /&gt;
| [[#GPUREG_02F4|GPUREG_02F4]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F5&lt;br /&gt;
| [[#GPUREG_02F5|GPUREG_02F5]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F6&lt;br /&gt;
| [[#GPUREG_02F6|GPUREG_02F6]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F7&lt;br /&gt;
| [[#GPUREG_02F7|GPUREG_02F7]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F8&lt;br /&gt;
| [[#GPUREG_02F8|GPUREG_02F8]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02F9&lt;br /&gt;
| [[#GPUREG_02F9|GPUREG_02F9]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02FA&lt;br /&gt;
| [[#GPUREG_02FA|GPUREG_02FA]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02FB&lt;br /&gt;
| [[#GPUREG_02FB|GPUREG_02FB]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02FC&lt;br /&gt;
| [[#GPUREG_02FC|GPUREG_02FC]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02FD&lt;br /&gt;
| [[#GPUREG_02FD|GPUREG_02FD]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02FE&lt;br /&gt;
| [[#GPUREG_02FE|GPUREG_02FE]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 02FF&lt;br /&gt;
| [[#GPUREG_02FF|GPUREG_02FF]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous registers ==&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FINALIZE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Trigger P3D Interrupt (0 = idle, non-zero = trigger)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Writing to this register seems to signal the GPU to stop processing GPU commands from the current buffer; any command following a write to this register will be ignored. The value written to this register does not appear to matter, although 0x12345678 is the value typically written by commercial software.&lt;br /&gt;
Failure to write to this register in any command buffer will result in the GPU hanging.&lt;br /&gt;
&lt;br /&gt;
== Rasterizer registers ==&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FACECULLING_CONFIG ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, Culling mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the face culling mode.&lt;br /&gt;
&lt;br /&gt;
Culling mode values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Front Face (Counter Clockwise)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Back Face (Counter Clockwise)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_VIEWPORT_WIDTH ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| float1.7.16, width / 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the viewport width, along with GPUREG_VIEWPORT_INVW.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_VIEWPORT_INVW ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1-31&lt;br /&gt;
| float1.7.23, 2 / width&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the viewport width, along with GPUREG_VIEWPORT_WIDTH.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_VIEWPORT_HEIGHT ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| float1.7.16, height / 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the viewport height, along with GPUREG_VIEWPORT_INVH.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_VIEWPORT_INVH ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1-31&lt;br /&gt;
| float1.7.23, 2 / height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the viewport height, along with GPUREG_VIEWPORT_HEIGHT.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FRAGOP_CLIP ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to enable clipping planes.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FRAGOP_CLIP_DATA&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| float1.7.16, Clipping plane coefficient &#039;&#039;i&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure clipping plane coefficients.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_DEPTHMAP_SCALE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| float1.7.16, Near - Far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the depth range scale.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_DEPTHMAP_OFFSET ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| float1.7.16, Near + Polygon Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the depth range bias.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_SH_OUTMAP_TOTAL ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, Number of following attributes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the total shader output map attributes.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_SH_OUTMAP_O&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| unsigned, Semantic for the x component of the register.&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| unsigned, Semantic for the y component of the register.&lt;br /&gt;
|-&lt;br /&gt;
| 16-20&lt;br /&gt;
| unsigned, Semantic for the z component of the register.&lt;br /&gt;
|-&lt;br /&gt;
| 24-28&lt;br /&gt;
| unsigned, Semantic for the w component of the register.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers map components of the corresponding vertex shader output register to specific fixed-function semantics.&lt;br /&gt;
&lt;br /&gt;
Semantic values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Semantic&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| position.x&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Vertex Position&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| position.y&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| position.z&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| position.w&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| normquat.x&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Quaternion specifying the normal/tangent frame (for fragment lighting)&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| normquat.y&lt;br /&gt;
|-&lt;br /&gt;
| 0x06&lt;br /&gt;
| normquat.z&lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| normquat.w&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| color.r&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Vertex color&lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| color.g&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A&lt;br /&gt;
| color.b&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B&lt;br /&gt;
| color.a&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| texcoord0.u&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Texture coordinates for texture 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D&lt;br /&gt;
| texcoord0.v&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| texcoord1.u&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Texture coordinates for texture 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F&lt;br /&gt;
| texcoord1.v&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| texcoord0.w&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| view.x&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | View vector (for fragment lighting)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| view.y&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| view.z&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| texcoord2.u&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Texture coordinates for texture 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| texcoord2.v&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| Unused component&lt;br /&gt;
| Should be set for unused components of the output register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_EARLYDEPTH_FUNC ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, Early depth function&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the early depth test function.&lt;br /&gt;
&lt;br /&gt;
Early depth function values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| &amp;gt;=&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;=&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;lt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_EARLYDEPTH_TEST1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets whether the early depth test is enabled.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_EARLYDEPTH_CLEAR ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Trigger (0 = idle, 1 = clear)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register triggers clearing the early depth data.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_SH_OUTATTR_MODE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Use texture coordinates (0 = don&#039;t use, 1 = use)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the shader output attribute mode.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_SCISSORTEST_MODE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, Enabled (0 = disabled, 3 = enabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to enable scissor testing.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_SCISSORTEST_POS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-9&lt;br /&gt;
| unsigned, X1&lt;br /&gt;
|-&lt;br /&gt;
| 16-25&lt;br /&gt;
| unsigned, Y1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the scissor test start position.&lt;br /&gt;
&lt;br /&gt;
===	GPUREG_SCISSORTEST_DIM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-9&lt;br /&gt;
| unsigned, X2&lt;br /&gt;
|-&lt;br /&gt;
| 16-25&lt;br /&gt;
| unsigned, Y2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the scissor test end position.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_VIEWPORT_XY ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-9&lt;br /&gt;
| signed, X&lt;br /&gt;
|-&lt;br /&gt;
| 16-25&lt;br /&gt;
| signed, Y&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the viewport position.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_EARLYDEPTH_DATA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| unsigned, Clear value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the early depth clear value.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_DEPTHMAP_ENABLE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to enable depth range.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_RENDERBUF_DIM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-10&lt;br /&gt;
| unsigned, Width&lt;br /&gt;
|-&lt;br /&gt;
| 12-21&lt;br /&gt;
| unsigned, Height - 1&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| 0x1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the output framebuffer dimensions.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_SH_OUTATTR_CLOCK ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, &#039;position.z&#039; present (0 = absent, 1 = present)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, &#039;color&#039; component present (0 = absent, 1 = present)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| unsigned, &#039;texcoord0&#039; component present (0 = absent, 1 = present)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| unsigned, &#039;texcoord1&#039; component present (0 = absent, 1 = present)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| unsigned, &#039;texcoord2&#039; component present (0 = absent, 1 = present)&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| unsigned, &#039;texcoord0.w&#039; present (0 = absent, 1 = present)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| unsigned, &#039;normquat&#039; or &#039;view&#039; component present (0 = absent, 1 = present)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register controls the clock supply to parts relating to certain attributes.&lt;br /&gt;
&lt;br /&gt;
== Texturing registers ==&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_TEXUNIT_CONFIG ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Texture 0 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, Texture 1 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| unsigned, Texture 2 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 8-9&lt;br /&gt;
| unsigned, Texture 3 coordinates&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| unsigned, Texture 3 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| unsigned, Texture 2 coordinates&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| unsigned, Clear texture cache (0 = don&#039;t clear, 1 = clear)&lt;br /&gt;
|-&lt;br /&gt;
| 17-31&lt;br /&gt;
| 0x0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to enable texture units.&lt;br /&gt;
&lt;br /&gt;
Texture 3 coordinates values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Texture 0&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Texture 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Texture 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Texture 2 coordinates values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Texture 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Texture 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_TEXUNIT&#039;&#039;i&#039;&#039;_BORDER_COLOR ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| unsigned, Alpha&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set a texture unit&#039;s border color.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_TEXUNIT&#039;&#039;i&#039;&#039;_DIM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-10&lt;br /&gt;
| unsigned, Height&lt;br /&gt;
|-&lt;br /&gt;
| 16-26&lt;br /&gt;
| unsigned, Width&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set a texture unit&#039;s dimensions.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_TEXUNIT&#039;&#039;i&#039;&#039;_PARAM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, Magnification filter&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| unsigned, Minification filter&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| unsigned, ETC1 (0 = not ETC1, 2 = ETC1) note: still 0 for ETC1A4&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| unsigned, Wrap T&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| unsigned, Wrap S&lt;br /&gt;
|-&lt;br /&gt;
| 16-17&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| unsigned, Shadow (Texture 0 only, 0 = not shadow, 1 = shadow)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| unsigned, Mipmap filter&lt;br /&gt;
|-&lt;br /&gt;
| 28-30&lt;br /&gt;
| unsigned, Type (Texture 0 only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set a texture unit&#039;s extra parameters.&lt;br /&gt;
&lt;br /&gt;
Filter values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Nearest&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Linear&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wrap values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Clamp to edge&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Clamp to border&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Repeat&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Mirrored repeat&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Type values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 2D&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Cube map&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Shadow 2D&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Projection&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Shadow cube&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_TEXUNIT&#039;&#039;i&#039;&#039;_LOD ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-12&lt;br /&gt;
| fixed1.4.8, Bias&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| unsigned, Max Level&lt;br /&gt;
|-&lt;br /&gt;
| 24-27&lt;br /&gt;
| unsigned, Min Level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure a texture unit&#039;s level of detail.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_TEXUNIT&#039;&#039;i&#039;&#039;_ADDR&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
First ADDR register:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-27&lt;br /&gt;
| unsigned, Texture physical address &amp;gt;&amp;gt; 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Subsequent ADDR registers:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-21&lt;br /&gt;
| unsigned, Texture physical address &amp;gt;&amp;gt; 3 (upper 6 bits reused from first ADDR register)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set a texture unit&#039;s physical address(es) in memory. Individual texels in a texture are laid out in memory as a [http://en.wikipedia.org/wiki/Z-order_curve Z-order curve]. Mipmap data is stored directly following the main texture data.&lt;br /&gt;
&lt;br /&gt;
If the texture is a cube:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Register&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ADDR1&lt;br /&gt;
| Positive X&lt;br /&gt;
|-&lt;br /&gt;
| ADDR2&lt;br /&gt;
| Negative X&lt;br /&gt;
|-&lt;br /&gt;
| ADDR3&lt;br /&gt;
| Positive Y&lt;br /&gt;
|-&lt;br /&gt;
| ADDR4&lt;br /&gt;
| Negative Y&lt;br /&gt;
|-&lt;br /&gt;
| ADDR5&lt;br /&gt;
| Positive Z&lt;br /&gt;
|-&lt;br /&gt;
| ADDR6&lt;br /&gt;
| Negative Z&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Otherwise, ADDR(1) points to a 2D texture, and the rest are empty.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_TEXUNIT&#039;&#039;i&#039;&#039;_SHADOW ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Perspective (0 = perspective, 1 = not perspective)&lt;br /&gt;
|-&lt;br /&gt;
| 1-23&lt;br /&gt;
| fixed0.0.24, Z bias (upper 23 bits)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set a texture unit&#039;s shadow texture properties.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_TEXUNIT&#039;&#039;i&#039;&#039;_TYPE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set a texture unit&#039;s data format.&lt;br /&gt;
&lt;br /&gt;
Format values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
!  GL Format&lt;br /&gt;
!  GL Data Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| RGBA8888&lt;br /&gt;
| GL_RGBA&lt;br /&gt;
| GL_UNSIGNED_BYTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| RGB888&lt;br /&gt;
| GL_RGB&lt;br /&gt;
| GL_UNSIGNED_BYTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| RGBA5551&lt;br /&gt;
| GL_RGBA&lt;br /&gt;
| GL_UNSIGNED_SHORT_5_5_5_1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| RGB565&lt;br /&gt;
| GL_RGB&lt;br /&gt;
| GL_UNSIGNED_SHORT_5_6_5&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA4444&lt;br /&gt;
| GL_RGBA&lt;br /&gt;
| GL_UNSIGNED_SHORT_4_4_4_4&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| IA8&lt;br /&gt;
| GL_LUMINANCE_ALPHA&lt;br /&gt;
| GL_UNSIGNED_BYTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| HILO8&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| I8&lt;br /&gt;
| GL_LUMINANCE&lt;br /&gt;
| GL_UNSIGNED_BYTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| A8&lt;br /&gt;
| GL_ALPHA&lt;br /&gt;
| GL_UNSIGNED_BYTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| IA44&lt;br /&gt;
| GL_LUMINANCE_ALPHA&lt;br /&gt;
| GL_UNSIGNED_BYTE_4_4_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| I4&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| A4&lt;br /&gt;
| GL_ALPHA&lt;br /&gt;
| GL_UNSIGNED_NIBBLE_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| ETC1&lt;br /&gt;
| GL_ETC1_RGB8_OES&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| ETC1A4&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_LIGHTING_ENABLE0 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to enable lighting.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXUNIT3_PROCTEX0 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, U-direction clamp&lt;br /&gt;
|-&lt;br /&gt;
| 3-5&lt;br /&gt;
| unsigned, V-direction clamp&lt;br /&gt;
|-&lt;br /&gt;
| 6-9&lt;br /&gt;
| unsigned, RGB mapping function&lt;br /&gt;
|-&lt;br /&gt;
| 10-13&lt;br /&gt;
| unsigned, Alpha mapping function&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| unsigned, Handle alpha separately (0 = don&#039;t separate, 1 = separate)&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| unsigned, Noise enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 16-17&lt;br /&gt;
| unsigned, U-direction shift&lt;br /&gt;
|-&lt;br /&gt;
| 18-19&lt;br /&gt;
| unsigned, V-direction shift&lt;br /&gt;
|-&lt;br /&gt;
| 20-27&lt;br /&gt;
| float1.5.10, Texture bias (lower 8 bits)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the procedural texture unit.&lt;br /&gt;
&lt;br /&gt;
Clamp values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Clamp to zero&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Clamp to edge&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Symmetrical repeat&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Mirrored repeat&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Pulse&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mapping function values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| U&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| U²&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| V&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| V²&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| (U + V) / 2&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| (U² + V²) / 2&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| sqrt(U² + V²)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Minimum&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Maximum&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Rmax&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shift values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Odd&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Even&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXUNIT3_PROCTEX1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| fixed1.3.12, U-direction noise amplitude&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| float1.5.10, U-direction noise phase&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the procedural texture unit&#039;s U-direction noise amplitude/phase.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXUNIT3_PROCTEX2 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| fixed1.3.12, V-direction noise amplitude&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| float1.5.10, V-direction noise phase&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the procedural texture unit&#039;s V-direction noise amplitude/phase.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXUNIT3_PROCTEX3 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| float1.5.10, U-direction noise frequency&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| float1.5.10, V-direction noise frequency&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the procedural texture unit&#039;s U-direction and V-direction noise frequency.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXUNIT3_PROCTEX4 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, Minification filter&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| Min LOD (usually 0)&lt;br /&gt;
|-&lt;br /&gt;
| 7-10&lt;br /&gt;
| Max LOD (usually 6)&lt;br /&gt;
|-&lt;br /&gt;
| 11-18&lt;br /&gt;
| unsigned, Texture width&lt;br /&gt;
|-&lt;br /&gt;
| 19-26&lt;br /&gt;
| float1.5.10, Texture bias (upper 8 bits)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the procedural texture unit.&lt;br /&gt;
&lt;br /&gt;
Minification filter values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Nearest&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Linear&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Nearest, Mipmap Nearest&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Linear, Mipmap Nearest&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Nearest, Mipmap Linear&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Linear, Mipmap Linear&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXUNIT3_PROCTEX5 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Texture offset (Mipmap level 0 / base level)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, mipmap level 1 offset (usually 0x80)&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, mipmap level 2 offset (usually 0xC0)&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| unsigned, mipmap level 3 offset (usually 0xE0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set the procedural texture unit&#039;s offset. Mipmap level 4-7 seems to be hardcoded at offset 0xF0, 0xF8, 0xFC and 0xFE .&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_PROCTEX_LUT ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Index&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| unsigned, Reference table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set which look-up table to write to, with GPUREG_PROCTEX_LUT_DATA&#039;&#039;i&#039;&#039;, at what index.&lt;br /&gt;
&lt;br /&gt;
Reference table values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Noise table&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| RGB mapping function table&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Alpha mapping function table&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Color table&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Color difference table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_PROCTEX_LUT_DATA&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| LUT data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers behave as a FIFO queue. Each write to these registers writes the provided value to the table selected with GPUREG_PROCTEX_LUT, starting at the selected index.&lt;br /&gt;
&lt;br /&gt;
==== Noise Table ====&lt;br /&gt;
&lt;br /&gt;
128 elements:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-11&lt;br /&gt;
| fixed0.0.12, Value&lt;br /&gt;
|-&lt;br /&gt;
| 12-23&lt;br /&gt;
| fixed0.0.12 with two&#039;s complement ( [0.5,1.0) mapped to [-1.0,0) ), Difference from next element&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RGB Mapping Function Table ====&lt;br /&gt;
&lt;br /&gt;
128 elements:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-11&lt;br /&gt;
| fixed0.0.12, Value&lt;br /&gt;
|-&lt;br /&gt;
| 12-23&lt;br /&gt;
| fixed0.0.12 with two&#039;s complement, Difference from next element&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Alpha Mapping Function Table ====&lt;br /&gt;
&lt;br /&gt;
128 elements:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-11&lt;br /&gt;
| fixed0.0.12, Value&lt;br /&gt;
|-&lt;br /&gt;
| 12-23&lt;br /&gt;
| fixed0.0.12 with two&#039;s complement, Difference from next element&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Color Table ====&lt;br /&gt;
&lt;br /&gt;
256 elements:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| unsigned, Alpha&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Color Difference Table ====&lt;br /&gt;
&lt;br /&gt;
256 elements:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| signed, Half of red difference between current and next color table elements&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| signed, Half of green difference between current and next color table elements&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| signed, Half of blue difference between current and next color table elements&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| signed, Half of alpha difference between current and next color table elements&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXENV&#039;&#039;i&#039;&#039;_SOURCE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, RGB source 0&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| unsigned, RGB source 1&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| unsigned, RGB source 2&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| unsigned, Alpha source 0&lt;br /&gt;
|-&lt;br /&gt;
| 20-23&lt;br /&gt;
| unsigned, Alpha source 1&lt;br /&gt;
|-&lt;br /&gt;
| 24-27&lt;br /&gt;
| unsigned, Alpha source 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures a texture combiner&#039;s sources.&lt;br /&gt;
&lt;br /&gt;
Source values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Primary color&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Fragment primary color&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Fragment secondary color&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Texture 0&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Texture 1&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Texture 2&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Texture 3&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Previous buffer&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Constant (from GPUREG_TEXENV&#039;&#039;i&#039;&#039;_COLOR)&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Previous&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXENV&#039;&#039;i&#039;&#039;_OPERAND ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, RGB operand 0&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| unsigned, RGB operand 1&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| unsigned, RGB operand 2&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| unsigned, Alpha operand 0&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| unsigned, Alpha operand 1&lt;br /&gt;
|-&lt;br /&gt;
| 20-22&lt;br /&gt;
| unsigned, Alpha operand 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures a texture combiner&#039;s operands.&lt;br /&gt;
&lt;br /&gt;
RGB operand values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Source color&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| One minus source color&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Source alpha&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| One minus source alpha&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Source red&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| One minus source red&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Source green&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| One minus source green&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Source blue&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| One minus source blue&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Alpha operand values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Source alpha&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| One minus source alpha&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Source red&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| One minus source red&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Source green&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| One minus source green&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Source blue&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| One minus source blue&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXENV&#039;&#039;i&#039;&#039;_COMBINER ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, RGB combine&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| unsigned, Alpha combine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures a texture combiner&#039;s combine mode.&lt;br /&gt;
&lt;br /&gt;
Combine values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Replace&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Modulate&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Add&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Add signed&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Interpolate&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Subtract&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Dot3 RGB&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Dot3 RGBA&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Multiply then add&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Add then multiply&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXENV&#039;&#039;i&#039;&#039;_COLOR ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| unsigned, Alpha&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures a texture combiner&#039;s constant color.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXENV&#039;&#039;i&#039;&#039;_SCALE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, RGB scale&lt;br /&gt;
|-&lt;br /&gt;
| 16-17&lt;br /&gt;
| unsigned, Alpha scale&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures a texture combiner&#039;s scale value.&lt;br /&gt;
&lt;br /&gt;
Scale values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1x&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2x&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 4x&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_TEXENV_UPDATE_BUFFER ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, Fog mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| unsigned, Shading density source&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| unsigned, TexEnv 1 RGB buffer input&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| unsigned, TexEnv 2 RGB buffer input&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| unsigned, TexEnv 3 RGB buffer input&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| unsigned, TexEnv 4 RGB buffer input&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| unsigned, TexEnv 1 alpha buffer input&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| unsigned, TexEnv 2 alpha buffer input&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| unsigned, TexEnv 3 alpha buffer input&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| unsigned, TexEnv 4 alpha buffer input&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| unsigned, Z flip (0 = don&#039;t flip, 1 = flip)&lt;br /&gt;
|-&lt;br /&gt;
| 24-25&lt;br /&gt;
| 0x0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is shared between the gas/fog mode configuration and texture combiner buffer inputs. Texture combiner buffer inputs are typically written with a mask of 0x2, and the gas/fog mode configuration is typically written with a mask of 0x5.&lt;br /&gt;
&lt;br /&gt;
Fog mode values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Disabled&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Fog&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Gas&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Shading density source values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Plain density&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Depth density&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Buffer input values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Previous buffer&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Previous&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_FOG_COLOR ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the color of fog.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_GAS_ATTENUATION ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| float1.5.10, Gas density attenuation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the gas density attenuation.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_GAS_ACCMAX ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| float1.5.10, Gas maximum density accumulation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the gas maximum density accumulation.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FOG_LUT_INDEX ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| unsigned, Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set what index to write to with GPUREG_FOG_LUT_DATA&#039;&#039;i&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_FOG_LUT_DATA&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| LUT data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers behave as a FIFO queue. Each write to these registers writes the provided value to the fog look-up table, starting at the index selected with GPUREG_FOG_LUT_INDEX.&lt;br /&gt;
&lt;br /&gt;
==== Fog Look-Up Table ====&lt;br /&gt;
&lt;br /&gt;
128 elements:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-12&lt;br /&gt;
| fixed1.1.11, Difference from next element &lt;br /&gt;
|-&lt;br /&gt;
| 13-23&lt;br /&gt;
| fixed0.0.11, Value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_TEXENV_BUFFER_COLOR ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| unsigned, Alpha&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the texture combiner buffer color.&lt;br /&gt;
&lt;br /&gt;
== Framebuffer registers ==&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_COLOR_OPERATION ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, Fragment operation mode&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| unsigned, Blend mode&lt;br /&gt;
|-&lt;br /&gt;
| 16-25&lt;br /&gt;
| 0x0E4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the fragment operation mode and whether to use logic ops or blending.&lt;br /&gt;
&lt;br /&gt;
Fragment operation mode values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Default&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Gas&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Shadow&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Blend mode values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Logic op&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Blend&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_BLEND_FUNC ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, RGB equation&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| unsigned, Alpha equation&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| unsigned, RGB source function&lt;br /&gt;
|-&lt;br /&gt;
| 20-23&lt;br /&gt;
| unsigned, RGB destination function&lt;br /&gt;
|-&lt;br /&gt;
| 24-27&lt;br /&gt;
| unsigned, Alpha source function&lt;br /&gt;
|-&lt;br /&gt;
| 28-31&lt;br /&gt;
| unsigned, Alpha destination function&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the blending function.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Equation values:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Add&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Subtract&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Reverse subtract&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Minimum&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Maximum&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Blend equations 5, 6, 7 appear to behave the same as blend equation 0 (Add)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Function values:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Zero&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| One&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Source color&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| One minus source color&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Destination color&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| One minus destination color&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Source alpha&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| One minus source alpha&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Destination alpha&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| One minus destination alpha&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Constant color&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| One minus constant color&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Constant alpha&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| One minus constant alpha&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Source alpha saturate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LOGIC_OP ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Logic op&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the logic op.&lt;br /&gt;
&lt;br /&gt;
Logic op values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Clear&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| AND&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Reverse AND&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Copy&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Set&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Inverted copy&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Noop&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Invert&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NAND&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| OR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NOR&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| XOR&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Equivalent&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Inverted AND&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Reverse OR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Inverted OR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_BLEND_COLOR ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| unsigned, Alpha&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the blending color.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_FRAGOP_ALPHA_TEST ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| unsigned, Function&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Reference value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure alpha testing.&lt;br /&gt;
&lt;br /&gt;
Function values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Never&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Always&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Equal&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Not equal&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Less than&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Less than or equal&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Greater than&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Greater than or equal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_STENCIL_TEST ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| unsigned, Function&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Buffer mask&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| signed, Reference value&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| unsigned, Mask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure stencil testing.&lt;br /&gt;
&lt;br /&gt;
Function values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Never&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Always&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Equal&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Not equal&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Less than&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Less than or equal&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Greater than&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Greater than or equal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_STENCIL_OP ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, Fail operation&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| unsigned, Z-fail operation&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| unsigned, Z-pass operation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure stencil result operations.&lt;br /&gt;
&lt;br /&gt;
Operation values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Keep&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Zero&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Replace&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Increment&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Decrement&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Invert&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Increment and wrap&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Decrement and wrap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_DEPTH_COLOR_MASK ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Depth test enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| unsigned, Depth function&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| unsigned, Red write enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| unsigned, Green write enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| unsigned, Blue write enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| unsigned, Alpha write enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| unsigned, Depth write enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to depth testing and framebuffer write masking.&lt;br /&gt;
&lt;br /&gt;
Note that setting the &amp;quot;Depth test enabled&amp;quot; bit to 0 will &#039;&#039;not&#039;&#039; also disable depth writes. It will instead behave as if the depth function were set to &amp;quot;Always&amp;quot;. To completely disable depth-related operations both the depth test and depth write bits must be disabled.&lt;br /&gt;
&lt;br /&gt;
Depth function values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Never&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Always&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Equal&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Not equal&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Less than&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Less than or equal&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Greater than&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Greater than or equal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FRAMEBUFFER_INVALIDATE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Trigger (0 = idle, 1 = invalidate)&lt;br /&gt;
|-&lt;br /&gt;
| 1-31&lt;br /&gt;
| 0x0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Writing 1 to this register invalidates the framebuffer cache. This should be done when changing the framebuffer or when it is cleared before rendering. Note that it does &#039;&#039;&#039;not&#039;&#039;&#039; flush the cache, so it should always be preceded by a write to GPUREG_FRAMEBUFFER_FLUSH.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FRAMEBUFFER_FLUSH ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Trigger (0 = idle, 1 = flush)&lt;br /&gt;
|-&lt;br /&gt;
| 1-31&lt;br /&gt;
| 0x0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Writing 1 to this register flushes the framebuffer cache to memory. This should be done after rendering before changing the framebuffer or using rendering results.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_COLORBUFFER_READ ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Allow read (0 = disable, 0xF = enable)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures read access from the color buffer.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_COLORBUFFER_WRITE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Allow write (0 = disable, 0xF = enable)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures write access to the color buffer.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_DEPTHBUFFER_READ ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Allow stencil read (0 = disable, 1 = enable)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, Allow depth read (0 = disable, 1 = enable)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures read access from the depth and stencil buffers.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_DEPTHBUFFER_WRITE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Allow stencil write (0 = disable, 1 = enable)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, Allow depth write (0 = disable, 1 = enable)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures write access to the depth and stencil buffers.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_DEPTHBUFFER_FORMAT ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, Format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the depth buffer data format.&lt;br /&gt;
&lt;br /&gt;
Format values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 16-bit depth&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 24-bit depth&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 24-bit depth + 8-bit stencil&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_COLORBUFFER_FORMAT ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, Pixel size&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| unsigned, Format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the color buffer data format. Color components are laid out in reverse byte order in memory, with the most significant bits used first.&lt;br /&gt;
&lt;br /&gt;
Pixel size values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 16-bit color&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 32-bit color&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| RGBA8/Gas&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| RGB5A1&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| RGB565&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| RGBA4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_EARLYDEPTH_TEST2 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register enables the early depth test.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FRAMEBUFFER_BLOCK32 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Render block mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the framebuffer block mode. To untile the color buffer when using the 32x32 block format, use bit 16 of the [[GPU/External_Registers#Transfer_Engine|display transfer flags]]. It is unknown if there are any advantages to using the 32x32 format.&lt;br /&gt;
&lt;br /&gt;
Render block mode values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 8x8 blocks&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 32x32 blocks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_DEPTHBUFFER_LOC ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-27&lt;br /&gt;
| unsigned, Depth buffer physical address &amp;gt;&amp;gt; 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the depth buffer physical address.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_COLORBUFFER_LOC ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-27&lt;br /&gt;
| unsigned, Color buffer physical address &amp;gt;&amp;gt; 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the color buffer physical address.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FRAMEBUFFER_DIM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-10&lt;br /&gt;
| unsigned, Width&lt;br /&gt;
|-&lt;br /&gt;
| 12-21&lt;br /&gt;
| unsigned, Height - 1&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| 0x1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the framebuffer dimensions.&lt;br /&gt;
&lt;br /&gt;
===	GPUREG_GAS_LIGHT_XY ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Planar shading minimum intensity&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Planar shading maximum intensity&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Planar shading density attenuation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures gas light planar shading.&lt;br /&gt;
&lt;br /&gt;
===	GPUREG_GAS_LIGHT_Z ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, View shading minimum intensity&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, View shading maximum intensity&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, View shading density attenuation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures gas light view shading.&lt;br /&gt;
&lt;br /&gt;
===	GPUREG_GAS_LIGHT_Z_COLOR ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, View shading effect in line-of-sight direction&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Gas color LUT input&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures gas light shading in the line-of-sight direction, and the input to the gas color LUT.&lt;br /&gt;
&lt;br /&gt;
Color LUT input values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Gas density&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Light factor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_GAS_LUT_INDEX ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| unsigned, Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set what index to write to with GPUREG_GAS_LUT_DATA&#039;&#039;i&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_GAS_LUT_DATA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| LUT data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers behave as a FIFO queue. Each write to these registers writes the provided value to the gas look-up table, starting at the index selected with GPUREG_GAS_LUT_INDEX.&lt;br /&gt;
&lt;br /&gt;
==== Gas Look-Up Table ====&lt;br /&gt;
&lt;br /&gt;
16 elements:&lt;br /&gt;
&lt;br /&gt;
First 8 elements:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| signed, Red&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| signed, Green&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| signed, Blue&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Last 8 elements:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===	GPUREG_GAS_DELTAZ_DEPTH ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| fixed0.16.8, Depth direction attenuation proportion&lt;br /&gt;
|-&lt;br /&gt;
| 24-25&lt;br /&gt;
| unsigned, Depth function&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure the gas depth direction attenuation proportion, as well as the gas depth function.&lt;br /&gt;
&lt;br /&gt;
Gas depth function values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Never&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Always&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Greater than/Greater than or equal&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Less than/Less than or equal/Equal/Not equal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===	GPUREG_FRAGOP_SHADOW ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| float1.5.10, Sum of penumbra scale and penumbra bias&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| float1.5.10, Penumbra scale with reversed sign&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure shadow properties.&lt;br /&gt;
&lt;br /&gt;
== Fragment lighting registers ==&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_SPECULAR0 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 10-17&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 20-27&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers contain the specular0 color of the corresponding light. Usually set to material_specular0*lightX_specular0.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_SPECULAR1 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 10-17&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 20-27&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers contain the specular1 color of the corresponding light. Usually set to material_specular1*lightX_specular1.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_DIFFUSE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 10-17&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 20-27&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers contain the diffuse color of the corresponding light. Usually set to material_diffuse*lightX_diffuse.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_AMBIENT ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 10-17&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 20-27&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers contain the ambient color of the corresponding light. Usually set to material_ambient*lightX_ambient.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_XY ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| float1.5.10, X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| float1.5.10, Y coordinate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers (along with GPUREG_LIGHT&#039;&#039;i&#039;&#039;_Z) represent the light position (for a positional light) or the light direction vector (for a directional light) of the corresponding light.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_Z ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| float1.5.10, Z coordinate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers (along with GPUREG_LIGHT&#039;&#039;i&#039;&#039;_XY) represent the light position (for a positional light) or the light direction vector (for a directional light) of the corresponding light.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_SPOTDIR_XY ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-12&lt;br /&gt;
| fixed1.1.11, X coordinate (negated)&lt;br /&gt;
|-&lt;br /&gt;
| 16-28&lt;br /&gt;
| fixed1.1.11, Y coordinate (negated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers (along with GPUREG_LIGHT&#039;&#039;i&#039;&#039;_SPOTDIR_Z) represent the spot direction (unitary) vector of the corresponding light.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_SPOTDIR_Z ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-12&lt;br /&gt;
| fixed1.1.11, Z coordinate (negated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers (along with GPUREG_LIGHT&#039;&#039;i&#039;&#039;_SPOTDIR_XY) represent the spot direction (unitary) vector of the corresponding light.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_CONFIG ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Light type (0 = positional light, 1 = directional light)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, Two side diffuse (0 = one side, 1 = both sides)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| unsigned, Use geometric factor 0 (0 = don&#039;t use, 1 = use)&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| unsigned, Use geometric factor 1 (0 = don&#039;t use, 1 = use)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures a light&#039;s properties.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_ATTENUATION_BIAS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-19&lt;br /&gt;
| float1.7.12, Distance attenuation bias&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers contain the distance attenuation bias value of the corresponding light. The attenuation factor is DA(clip(bias + scale*distance, 0.0, 1.0)).&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHT&#039;&#039;i&#039;&#039;_ATTENUATION_SCALE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-19&lt;br /&gt;
| float1.7.12, Distance attenuation scale&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers contain the distance attenuation scale value of the corresponding light. The attenuation factor is DA(clip(bias + scale*distance, 0.0, 1.0)).&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_AMBIENT ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Blue&lt;br /&gt;
|-&lt;br /&gt;
| 10-17&lt;br /&gt;
| unsigned, Green&lt;br /&gt;
|-&lt;br /&gt;
| 20-27&lt;br /&gt;
| unsigned, Red&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register contains the initial value of the fragment primary color before the partial colors that correspond to each enabled light are added. Usually set to material_emission + material_ambient*scene_ambient.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_NUM_LIGHTS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, Number of active lights - 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the number of active lights.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_CONFIG0 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Shadow factor enabled (0 = disabled, 1 = enabled) (usually accompanied by bit 16, 17, or 18)&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| unsigned, Fresnel selector&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| unsigned, Light environment configuration&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| 0x4&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| unsigned, Apply shadow attenuation to primary color (0 = don&#039;t apply, 1 = apply)&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| unsigned, Apply shadow attenuation to secondary color (0 = don&#039;t apply, 1 = apply)&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| unsigned, Invert shadow attenuation (0 = don&#039;t invert, 1 = invert)&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| unsigned, Apply shadow attenuation to alpha component (0 = don&#039;t apply, 1 = apply)&lt;br /&gt;
|-&lt;br /&gt;
| 22-23&lt;br /&gt;
| unsigned, Bump map texture unit&lt;br /&gt;
|-&lt;br /&gt;
| 24-25&lt;br /&gt;
| unsigned, Shadow map texture unit&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| unsigned, Clamp highlights (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 28-29&lt;br /&gt;
| unsigned, Bump mode&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| unsigned, Recalculate bump vectors (0 = enabled, 1 = disabled) (usually set to 1 when bump mode is not 0)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| 0x1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the light environment.&lt;br /&gt;
&lt;br /&gt;
Fresnel selector values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Primary alpha&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Secondary alpha&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Primary and secondary alpha&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The light environment configuration controls which LUTs are available for use. If a LUT is not available in the selected configuration, its value will always read a constant 1.0 regardless of the enable state in GPUREG_LIGHTING_CONFIG1. If RR is enabled but not RG or RB, the output of RR is used for the three components; Red, Green and Blue.&lt;br /&gt;
&lt;br /&gt;
Light environment configuration values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
! Available LUTs&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Configuration 0&lt;br /&gt;
| D0, RR, SP, DA&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Configuration 1&lt;br /&gt;
| FR, RR, SP, DA&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Configuration 2&lt;br /&gt;
| D0, D1, RR, DA&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Configuration 3&lt;br /&gt;
| D0, D1, FR, DA&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Configuration 4&lt;br /&gt;
| All except for FR&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Configuration 5&lt;br /&gt;
| All except for D1&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Configuration 6&lt;br /&gt;
| All except for RB and RG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Configuration 7&lt;br /&gt;
| All&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bump mode values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Not used&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Use as bump map&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Use as tangent map&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_CONFIG1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Fragment light source 0 shadows disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, Fragment light source 1 shadows disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| unsigned, Fragment light source 2 shadows disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| unsigned, Fragment light source 3 shadows disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| unsigned, Fragment light source 4 shadows disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| unsigned, Fragment light source 5 shadows disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| unsigned, Fragment light source 6 shadows disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| unsigned, Fragment light source 7 shadows disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| unsigned, Fragment light source 0 spot light disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| unsigned, Fragment light source 1 spot light disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| unsigned, Fragment light source 2 spot light disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| unsigned, Fragment light source 3 spot light disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| unsigned, Fragment light source 4 spot light disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| unsigned, Fragment light source 5 spot light disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| unsigned, Fragment light source 6 spot light disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| unsigned, Fragment light source 7 spot light disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| unsigned, Term 0 distribution component D0 LUT disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| unsigned, Term 1 distribution component D1 LUT disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| unsigned, Fresnel FR LUT disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| unsigned, Term 1 reflection component RB LUT disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| unsigned, Term 1 reflection component RG LUT disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| unsigned, Term 1 reflection component RR LUT disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| unsigned, Fragment light source 0 distance attenuation disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| unsigned, Fragment light source 1 distance attenuation disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| unsigned, Fragment light source 2 distance attenuation disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| unsigned, Fragment light source 3 distance attenuation disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| unsigned, Fragment light source 4 distance attenuation disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| unsigned, Fragment light source 5 distance attenuation disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| unsigned, Fragment light source 6 distance attenuation disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| unsigned, Fragment light source 7 distance attenuation disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to disable various aspects of the light environment.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_LUT_INDEX ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Starting index&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| unsigned, Look-up table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register controls which LUT and what offset into it the GPUREG_LIGHTING_LUT_DATA&#039;&#039;i&#039;&#039; register writes to.&lt;br /&gt;
&lt;br /&gt;
Lookup table values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| D0&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| D1&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FR&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| RG&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| RR&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| SP0-7&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| DA0-7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_ENABLE1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Disabled (0 = enabled, 1 = disabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is set to 1 when fragment lighting is disabled, and to 0 when it is enabled.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_LUT_DATA&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| LUT data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Lighting LUT data is written here.&lt;br /&gt;
&lt;br /&gt;
A LUT contains data for the input domain [-1.0, 1.0], which is indexed using a signed 8-bit number [-128, 127]. Therefore a LUT contains 256 entries. The index of a value is (int)(x/127.0f) &amp;amp; 0xFF.&lt;br /&gt;
&lt;br /&gt;
DA: The input domain is [0.0, 1.0], and the index is an unsigned 8-bit number [0, 255] instead.&lt;br /&gt;
&lt;br /&gt;
Format of an entry:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-11&lt;br /&gt;
| fixed0.0.12, Entry value&lt;br /&gt;
|-&lt;br /&gt;
| 12-23&lt;br /&gt;
| fixed1.0.11, Absolute value of the difference between the next entry and this entry, used to implement linear interpolation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_LUTINPUT_ABS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, abs() flag for the input of D0 (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| unsigned, abs() flag for the input of D1 (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| unsigned, abs() flag for the input of SP (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| unsigned, abs() flag for the input of FR (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| unsigned, abs() flag for the input of RB (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| unsigned, abs() flag for the input of RG (0 = enabled, 1 = disabled)&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| unsigned, abs() flag for the input of RR (0 = enabled, 1 = disabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register controls whether the absolute value of the input is taken before using a LUT.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_LUTINPUT_SELECT ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, Input selector for D0&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| unsigned, Input selector for D1&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| unsigned, Input selector for SP&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| unsigned, Input selector for FR&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| unsigned, Input selector for RB&lt;br /&gt;
|-&lt;br /&gt;
| 20-22&lt;br /&gt;
| unsigned, Input selector for RG&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| unsigned, Input selector for RR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register selects the input from LUTs.&lt;br /&gt;
&lt;br /&gt;
Input selector values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| N·H&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| V·H&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| N·V&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| L·N&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| -L·P (aka Spotlight aka SP)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| cos φ (aka CP)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_LUTINPUT_SCALE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, Scaler selector for D0&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| unsigned, Scaler selector for D1&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| unsigned, Scaler selector for SP&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| unsigned, Scaler selector for FR&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| unsigned, Scaler selector for RB&lt;br /&gt;
|-&lt;br /&gt;
| 20-22&lt;br /&gt;
| unsigned, Scaler selector for RG&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| unsigned, Scaler selector for RR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register controls the scaling that is applied to the output of a LUT.&lt;br /&gt;
&lt;br /&gt;
Scaler selector values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1x&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2x&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 4x&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 8x&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 0.25x&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 0.5x&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_LIGHTING_LIGHT_PERMUTATION ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| unsigned, ID of the 1st enabled light&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| unsigned, ID of the 2nd enabled light&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| unsigned, ID of the 3rd enabled light&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| unsigned, ID of the 4th enabled light&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| unsigned, ID of the 5th enabled light&lt;br /&gt;
|-&lt;br /&gt;
| 20-22&lt;br /&gt;
| unsigned, ID of the 6th enabled light&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| unsigned, ID of the 7th enabled light&lt;br /&gt;
|-&lt;br /&gt;
| 28-30&lt;br /&gt;
| unsigned, ID of the 8th enabled light&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the IDs of enabled light sources.&lt;br /&gt;
&lt;br /&gt;
== Geometry pipeline registers ==&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_ATTRIBBUFFERS_LOC ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1-28&lt;br /&gt;
| unsigned, Vertex arrays base address&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the base address of all vertex arrays.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_ATTRIBBUFFERS_FORMAT_LOW ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, Vertex attribute 0 type&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| unsigned, Vertex attribute 0 size&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| unsigned, Vertex attribute 1 type&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| unsigned, Vertex attribute 1 size&lt;br /&gt;
|-&lt;br /&gt;
| 8-9&lt;br /&gt;
| unsigned, Vertex attribute 2 type&lt;br /&gt;
|-&lt;br /&gt;
| 10-11&lt;br /&gt;
| unsigned, Vertex attribute 2 size&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| unsigned, Vertex attribute 3 type&lt;br /&gt;
|-&lt;br /&gt;
| 14-15&lt;br /&gt;
| unsigned, Vertex attribute 3 size&lt;br /&gt;
|-&lt;br /&gt;
| 16-17&lt;br /&gt;
| unsigned, Vertex attribute 4 type&lt;br /&gt;
|-&lt;br /&gt;
| 18-19&lt;br /&gt;
| unsigned, Vertex attribute 4 size&lt;br /&gt;
|-&lt;br /&gt;
| 20-21&lt;br /&gt;
| unsigned, Vertex attribute 5 type&lt;br /&gt;
|-&lt;br /&gt;
| 22-23&lt;br /&gt;
| unsigned, Vertex attribute 5 size&lt;br /&gt;
|-&lt;br /&gt;
| 24-25&lt;br /&gt;
| unsigned, Vertex attribute 6 type&lt;br /&gt;
|-&lt;br /&gt;
| 26-27&lt;br /&gt;
| unsigned, Vertex attribute 6 size&lt;br /&gt;
|-&lt;br /&gt;
| 28-29&lt;br /&gt;
| unsigned, Vertex attribute 7 type&lt;br /&gt;
|-&lt;br /&gt;
| 30-31&lt;br /&gt;
| unsigned, Vertex attribute 7 size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the types and sizes of the first 8 vertex attributes.&lt;br /&gt;
&lt;br /&gt;
Vertex attribute type values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Byte&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Unsigned byte&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Short&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Float&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vertex attribute size values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 8 bits&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 16 bits&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 24 bits&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 32 bits&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_ATTRIBBUFFERS_FORMAT_HIGH ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, Vertex attribute 8 type&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| unsigned, Vertex attribute 8 size&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| unsigned, Vertex attribute 9 type&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| unsigned, Vertex attribute 9 size&lt;br /&gt;
|-&lt;br /&gt;
| 8-9&lt;br /&gt;
| unsigned, Vertex attribute 10 type&lt;br /&gt;
|-&lt;br /&gt;
| 10-11&lt;br /&gt;
| unsigned, Vertex attribute 10 size&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| unsigned, Vertex attribute 11 type&lt;br /&gt;
|-&lt;br /&gt;
| 14-15&lt;br /&gt;
| unsigned, Vertex attribute 11 size&lt;br /&gt;
|-&lt;br /&gt;
| 16-27&lt;br /&gt;
| unsigned, Fixed vertex attribute mask&lt;br /&gt;
|-&lt;br /&gt;
| 28-31&lt;br /&gt;
| unsigned, Total vertex attribute count - 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the types and sizes of the last 4 vertex attributes, along with the attribute mask and the total attribute count.&lt;br /&gt;
&lt;br /&gt;
See GPUREG_ATTRIBBUFFERS_FORMAT_LOW for vertex attribute type and size values.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_ATTRIBBUFFER&#039;&#039;i&#039;&#039;_OFFSET ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-27&lt;br /&gt;
| unsigned, Offset from base vertex arrays address&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the offset of a vertex array from the base vertex arrays address.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_ATTRIBBUFFER&#039;&#039;i&#039;&#039;_CONFIG1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Component 1&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| unsigned, Component 2&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| unsigned, Component 3&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| unsigned, Component 4&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| unsigned, Component 5&lt;br /&gt;
|-&lt;br /&gt;
| 20-23&lt;br /&gt;
| unsigned, Component 6&lt;br /&gt;
|-&lt;br /&gt;
| 24-27&lt;br /&gt;
| unsigned, Component 7&lt;br /&gt;
|-&lt;br /&gt;
| 28-31&lt;br /&gt;
| unsigned, Component 8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the first 8 component types of a vertex array.&lt;br /&gt;
&lt;br /&gt;
Component values:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Vertex attribute 0&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Vertex attribute 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Vertex attribute 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Vertex attribute 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Vertex attribute 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Vertex attribute 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Vertex attribute 6&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Vertex attribute 7&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Vertex attribute 8&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Vertex attribute 9&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Vertex attribute 10&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Vertex attribute 11&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 4-byte padding&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 8-byte padding&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 12-byte padding&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 16-byte padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_ATTRIBBUFFER&#039;&#039;i&#039;&#039;_CONFIG2 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Component 9&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| unsigned, Component 10&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| unsigned, Component 11&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| unsigned, Component 12&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Bytes per vertex&lt;br /&gt;
|-&lt;br /&gt;
| 28-31&lt;br /&gt;
| unsigned, Total number of components&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the last 4 component types of a vertex array, along with the bytes per vertex and the total number of components.&lt;br /&gt;
&lt;br /&gt;
See GPUREG_ATTRIBBUFFER&#039;&#039;i&#039;&#039;_CONFIG1 for component values.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_INDEXBUFFER_CONFIG ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-27&lt;br /&gt;
| unsigned, Offset from base vertex arrays address&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Index type (0 = unsigned byte, 1 = unsigned short or drawing arrays)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the index array used when drawing elements.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_NUMVERTICES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Number of vertices to render&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the number of vertices to render.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_GEOSTAGE_CONFIG ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| unsigned, Geometry shader in use (0 = not in use, 2 = in use)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| unsigned, Drawing triangle elements (0 = not, 1 = drawing triangle elements)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| unsigned, Use reserved geometry shader subdivision (0 = don&#039;t use, 1 = use)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the geometry stage of the GPU pipeline.&lt;br /&gt;
&lt;br /&gt;
When using vertex buffers and drawing elements in triangles mode, bit 8 is set to 1, else it is set to 0.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_VERTEX_OFFSET ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Starting vertex offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the offset of the first vertex in an array to render.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_POST_VERTEX_CACHE_NUM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Number of entries in the post-vertex cache (usually 0x4 or 0x84)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the post-vertex cache.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_DRAWARRAYS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Trigger (0 = idle, non-zero = draw arrays)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register triggers drawing vertex arrays.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_DRAWELEMENTS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Trigger (0 = idle, non-zero = draw elements)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register triggers drawing vertex array elements.&lt;br /&gt;
&lt;br /&gt;
=== 	GPUREG_VTX_FUNC ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Trigger (0 = idle, non-zero = clear post-vertex cache)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register triggers clearing the post-vertex cache.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FIXEDATTRIB_INDEX ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Fixed attribute index (0-11, 0xF = immediate-mode submission)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register selects the index of the fixed attribute to be input with GPUREG_FIXEDATTRIB_DATA&#039;&#039;i&#039;&#039;. See [[GPU/Fixed Vertex Attributes]] and [[GPU/Immediate-Mode Vertex Submission]] for usage info.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_FIXEDATTRIB_DATA&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;DATA0:&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| float1.7.16, Vertex attribute element 3 (Z) (bits 16-23)&lt;br /&gt;
|-&lt;br /&gt;
| 8-31&lt;br /&gt;
| float1.7.16, Vertex attribute element 4 (W)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;DATA1:&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| float1.7.16, Vertex attribute element 2 (Y) (bits 8-23)&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| float1.7.16, Vertex attribute element 3 (Z) (bits 0-15)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;DATA2:&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0-23&lt;br /&gt;
| float1.7.16, Vertex attribute element 1 (X)&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| float1.7.16, Vertex attribute element 2 (Y) (bits 0-7)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Accepts four 24-bit floating-point values that make up a vertex attribute. Stored in the fixed attribute currently specified with GPUREG_FIXEDATTRIB_INDEX. If immediate-mode vertex submission is enabled (by writing 0xF to the index register) then vertex data is input here directly.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_CMDBUF_SIZE0 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-20&lt;br /&gt;
| unsigned, Size of command buffer 0 &amp;gt;&amp;gt; 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the size of the first command buffer.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_CMDBUF_SIZE1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-20&lt;br /&gt;
| unsigned, Size of command buffer 1 &amp;gt;&amp;gt; 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the size of the second command buffer.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_CMDBUF_ADDR0 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-28&lt;br /&gt;
| unsigned, Physical address of command buffer 0 &amp;gt;&amp;gt; 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the physical address of the first command buffer.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_CMDBUF_ADDR1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-28&lt;br /&gt;
| unsigned, Physical address of command buffer 1 &amp;gt;&amp;gt; 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the physical address of the second command buffer.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_CMDBUF_JUMP0 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Trigger (0 = idle, non-zero = execute command buffer 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register triggers a jump to the first command buffer.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_CMDBUF_JUMP1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Trigger (0 = idle, non-zero = execute command buffer 1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register triggers a jump to the second command buffer.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_VSH_NUM_ATTR ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Number of vertex shader input attributes - 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the number of vertex shader input attributes.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_VSH_COM_MODE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Geometry shader configuration enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets whether to use the geometry shader configuration or reuse the vertex shader configuration for the geometry shader shading unit.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_START_DRAW_FUNC0 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Mode (0 = drawing, 1 = configuration)&lt;br /&gt;
|-&lt;br /&gt;
| 1-7&lt;br /&gt;
| 0x0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is related to drawing. When the mode value is set to 1, rendering is not performed properly. When set to 0, changes to the vertex shader configuration registers are not applied correctly. Because of this, it is usually initialized to 1, set to 0 immediately before triggering a draw, and set back to 1 immediately after triggering a draw.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_VSH_OUTMAP_TOTAL1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Number of vertex shader output map registers - 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the number of vertex shader output map registers.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_VSH_OUTMAP_TOTAL2 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Number of vertex shader output map registers - 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the number of vertex shader output map registers.&lt;br /&gt;
&lt;br /&gt;
===	GPUREG_GSH_MISC0 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Misc data (0x00000001 = Reserved geometry shader subdivision in use, 0x01004302 = Particle system in use, 0 otherwise)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures miscellaneous geometry shader properties.&lt;br /&gt;
&lt;br /&gt;
===	GPUREG_GEOSTAGE_CONFIG2 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Function indicator (with vertex buffers: 0 = draw elements, 1 = draw arrays, without: 0 = not inputting, 1 = inputting vertex attribute data)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| unsigned, Drawing triangle elements (0 = not, 1 = drawing triangle elements)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the geometry stage of the GPU pipeline.&lt;br /&gt;
&lt;br /&gt;
When using vertex buffers, bit 0 is set to 1 before drawing arrays, and cleared to 0 immediately after. When using immediate mode to directly input vertex attribute data, bit 0 is set to 1 before inputting vertex attribute data, and cleared to 0 immediately after. While bit 0 is set to 1, some register writes outside of the 0x200-0x254 and 0x280-0x2DF ranges may be processed incorrectly.&lt;br /&gt;
&lt;br /&gt;
When using vertex buffers and drawing elements in triangles mode, bit 8 is set to 1, else it is set to 0.&lt;br /&gt;
&lt;br /&gt;
===	GPUREG_GSH_MISC1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| unsigned, Reserved geometry shader subdivision type (2 = Loop, 3 = Catmull-Clark)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures the type of reserved geometry shader subdivision in use. The value is ignored when a subdivision is not in use.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_PRIMITIVE_CONFIG ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned,  Number of vertex shader output map registers - 1&lt;br /&gt;
|-&lt;br /&gt;
| 8-9&lt;br /&gt;
| unsigned, Primitive mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register configures primitive drawing.&lt;br /&gt;
&lt;br /&gt;
Primitive mode value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Triangles&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Triangle strip&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Triangle fan&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Geometry primitive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_RESTART_PRIMITIVE ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Trigger (0 = idle, 1 = reset primitive)&lt;br /&gt;
|-&lt;br /&gt;
| 1-31&lt;br /&gt;
| 0x0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register triggers resetting primitive drawing.&lt;br /&gt;
&lt;br /&gt;
== Shader registers ==&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_BOOLUNIFORM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Boolean register b0 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, Boolean register b1 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| unsigned, Boolean register b2 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| unsigned, Boolean register b3 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| unsigned, Boolean register b4 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| unsigned, Boolean register b5 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| unsigned, Boolean register b6 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| unsigned, Boolean register b7 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| unsigned, Boolean register b8 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| unsigned, Boolean register b9 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| unsigned, Boolean register b10 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| unsigned, Boolean register b11 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| unsigned, Boolean register b12 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| unsigned, Boolean register b13 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| unsigned, Boolean register b14 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| unsigned, Boolean register b15 value (0 = false, 1 = true)&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| 0x7FFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set a shader unit&#039;s boolean registers.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_INTUNIFORM_I&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Integer register i&#039;&#039;i&#039;&#039; X value&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Integer register i&#039;&#039;i&#039;&#039; Y value&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| unsigned, Integer register i&#039;&#039;i&#039;&#039; Z value&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| unsigned, Integer register i&#039;&#039;i&#039;&#039; W value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These registers are used to set a shader unit&#039;s integer registers.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_INPUTBUFFER_CONFIG ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Input vertex attributes - 1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| unsigned, Use reserved geometry shader subdivision (0 = don&#039;t use, 1 = use) (always 0 for vertex shaders)&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| unsigned, Use geometry shader (0x8 = use, 0xA0 = don&#039;t use) (always 0xA0 for vertex shaders)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to configure a shader unit&#039;s input buffer.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_ENTRYPOINT ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| unsigned, Code entry point offset, in 32-bit words&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| 0x7FFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets a shader unit&#039;s code entry point.&lt;br /&gt;
&lt;br /&gt;
For geometry shaders, this sets the entry point for the single shader unit which can be dedicated to running geometry shaders, regardless of the current geometry stage mode. This is means that while this register is normally used to set the geometry shader entry point, it can also be used to set this single shader unit to run from a different entry point than the other three, even when running a vertex shader.&lt;br /&gt;
&lt;br /&gt;
For vertex shaders, this sets the entry point for the shader units set to vertex shader mode. Depending on the current geometry stage mode this can include either all 4 shader units or just 3 of them. &lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_ATTRIBUTES_PERMUTATION_LOW ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Vertex attribute 0 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| unsigned, Vertex attribute 1 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| unsigned, Vertex attribute 2 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| unsigned, Vertex attribute 3 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| unsigned, Vertex attribute 4 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 20-23&lt;br /&gt;
| unsigned, Vertex attribute 5 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 24-27&lt;br /&gt;
| unsigned, Vertex attribute 6 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 28-31&lt;br /&gt;
| unsigned, Vertex attribute 7 input register index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the shader unit input register index which will correspond to each attribute contained by the input buffer (which in the case of geometry shaders is the vertex shader output buffer) for the first 8 attributes. For example, having bits 0-3 set to 5 means that, in the shader program, v5 will contain the input buffer&#039;s 1st attribute.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_ATTRIBUTES_PERMUTATION_HIGH ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| unsigned, Vertex attribute 8 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| unsigned, Vertex attribute 9 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| unsigned, Vertex attribute 10 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| unsigned, Vertex attribute 11 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| unsigned, Vertex attribute 12 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 20-23&lt;br /&gt;
| unsigned, Vertex attribute 13 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 24-27&lt;br /&gt;
| unsigned, Vertex attribute 14 input register index&lt;br /&gt;
|-&lt;br /&gt;
| 28-31&lt;br /&gt;
| unsigned, Vertex attribute 15 input register index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the shader unit input register index which will correspond to each attribute contained by the input buffer (which in the case of geometry shaders is the vertex shader output buffer) for attributes 8 through 15. For example, having bits 0-3 set to 5 means that, in the shader program, v5 will contain the input buffer&#039;s 9th attribute.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_OUTMAP_MASK ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| unsigned, Output register o0 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| unsigned, Output register o1 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| unsigned, Output register o2 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| unsigned, Output register o3 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| unsigned, Output register o4 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| unsigned, Output register o5 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| unsigned, Output register o6 enabled (0 = disabled, 1 = enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| unsigned, Output register o7 enabled (0 = disabled, 1 = enabled) (vertex shader only)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| unsigned, Output register o8 enabled (0 = disabled, 1 = enabled) (vertex shader only)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| unsigned, Output register o9 enabled (0 = disabled, 1 = enabled) (vertex shader only)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| unsigned, Output register o10 enabled (0 = disabled, 1 = enabled) (vertex shader only)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| unsigned, Output register o11 enabled (0 = disabled, 1 = enabled) (vertex shader only)&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| unsigned, Output register o12 enabled (0 = disabled, 1 = enabled) (vertex shader only)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| unsigned, Output register o13 enabled (0 = disabled, 1 = enabled) (vertex shader only)&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| unsigned, Output register o14 enabled (0 = disabled, 1 = enabled) (vertex shader only)&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| unsigned, Output register o15 enabled (0 = disabled, 1 = enabled) (vertex shader only)&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| 0x0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register toggles a shader unit&#039;s output registers.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_CODETRANSFER_END ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Signal transfer end (0 = idle, non-zero = signal)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register&#039;s value should be set to 1 in order to finalize the transfer of shader code.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_FLOATUNIFORM_INDEX ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| unsigned, Target floating-point register index (range 0-95, where 0 = c0 and 95 = c95)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| unsigned, Transfer mode (0 = float1.7.16, 1 = float1.8.23)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register sets the shader unit&#039;s target floating-point register and transfer mode for the data transfer system. As such it is typically used right before [[#GPUREG_SH_FLOATUNIFORM_DATAi|GPUREG_&#039;&#039;SH&#039;&#039;_FLOATUNIFORM_DATA&#039;&#039;i&#039;&#039;]], though writing to one register does not make writing to the other mandatory.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_FLOATUNIFORM_DATA&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| Floating-point register component data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set the components of a shader unit&#039;s floating-point registers, each having 4 components. The data format which should be written to it depends on the transfer mode set with [[#GPUREG_SH_FLOATUNIFORM_INDEX|GPUREG_&#039;&#039;SH&#039;&#039;_FLOATUNIFORM_INDEX]]. This register functions as a FIFO queue: after each time a 4-component uniform register is successfully set, the target register index is incremented, meaning that groups of uniforms with contiguous register IDs can be set with only one initial write to [[#GPUREG_SH_FLOATUNIFORM_INDEX|GPUREG_&#039;&#039;SH&#039;&#039;_FLOATUNIFORM_INDEX]].&lt;br /&gt;
&lt;br /&gt;
* In the case of float24 transfer mode, data should be sent by writing three words which are the concatenation of the float24 value of the uniform register&#039;s 4 components, in the reverse order. Assuming each letter corresponds to 4 bits, the format becomes:&lt;br /&gt;
** first word : ZZWWWWWW&lt;br /&gt;
** second word : YYYYZZZZ&lt;br /&gt;
** third word : XXXXXXYY&lt;br /&gt;
* In the case of float32 transfer mode, data should be sent by writing four words which are each the float32 value of the uniform register&#039;s 4 components, in the reverse order.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_CODETRANSFER_INDEX ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-11&lt;br /&gt;
| unsigned, Target shader code offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set the offset at which upcoming shader code data transferred through [[#GPUREG_SH_CODETRANSFER_DATAi|GPUREG_&#039;&#039;SH&#039;&#039;_CODETRANSFER_DATA&#039;&#039;i&#039;&#039;]] should be written.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_CODETRANSFER_DATA&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Shader instruction data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to transfer shader code data. This register behaves as a FIFO queue: each write to this register writes the provided value to the GPU shader code memory bank at the offset initially set by [[#GPUREG_SH_CODETRANSFER_INDEX|GPUREG_&#039;&#039;SH&#039;&#039;_CODETRANSFER_INDEX]]. The offset in question is incremented after each write to this register.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_OPDESCS_INDEX ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-11&lt;br /&gt;
| unsigned, Target shader operand descriptor offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to set the offset at which upcoming shader operand descriptor data transferred through [[#GPUREG_SH_OPDESCS_DATAi|GPUREG_&#039;&#039;SH&#039;&#039;_OPDESCS_DATA&#039;&#039;i&#039;&#039;]] should be written.&lt;br /&gt;
&lt;br /&gt;
=== GPUREG_&#039;&#039;SH&#039;&#039;_OPDESCS_DATA&#039;&#039;i&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-31&lt;br /&gt;
| unsigned, Shader operand descriptor data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This register is used to transfer shader operand descriptor data. This register behaves as a FIFO queue: each write to this register writes the provided value to the GPU shader operand descriptor memory bank at the offset initially set by [[#GPUREG_SH_OPDESCS_INDEX|GPUREG_&#039;&#039;SH&#039;&#039;_OPDESCS_INDEX]]. The offset in question is incremented after each write to this register.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:SendDspSleep&amp;diff=22290</id>
		<title>APT:SendDspSleep</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:SendDspSleep&amp;diff=22290"/>
		<updated>2023-07-24T02:47:07Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x003C0042]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Source [[NS_and_APT_Services#AppIDs|AppID]]&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Handle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:SendDspWakeUp&amp;diff=22289</id>
		<title>APT:SendDspWakeUp</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:SendDspWakeUp&amp;diff=22289"/>
		<updated>2023-07-24T02:47:04Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x003D0042]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Source [[NS_and_APT_Services#AppIDs|AppID]]&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Handle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:GetProgramInfo&amp;diff=22288</id>
		<title>APT:GetProgramInfo</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:GetProgramInfo&amp;diff=22288"/>
		<updated>2023-07-24T02:28:59Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Response */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00480100]&lt;br /&gt;
|-&lt;br /&gt;
| 1-4&lt;br /&gt;
| [[Filesystem_services#ProgramInfo|Program Info]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| u8, [[NCCH/Extended_Header#Flag0|System Mode]]&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FIRM Program ID Low&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This obtains info mainly used for [[APT:Reboot|launching]] [[FIRM]]. For TWL titles, the output Program ID Low is 0x102 for TWL_FIRM, however for CTR titles this is [[PMApp:GetTitleExheaderFlags|loaded]] from the first 4-bytes of the exheader_arm11systemlocalcaps.flags(&amp;quot;Core Version&amp;quot;). For non-TWL titles when a certain NS state flag is set, the output flag is the value from config-mem [[Configuration_Memory|APPMEMTYPE]].&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:WakeupApplication2&amp;diff=22287</id>
		<title>APT:WakeupApplication2</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:WakeupApplication2&amp;diff=22287"/>
		<updated>2023-07-23T22:47:18Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00570044]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Parameter Size (max is 0x1000)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Handle Parameter&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| (Parameter Size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| void*, Parameter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
This is the same as [[APT:WakeupApplication]], except parameters can be passed to the application in the wake up message.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22286</id>
		<title>NS and APT Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22286"/>
		<updated>2023-07-23T20:37:55Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* &amp;quot;APT:A&amp;quot; Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
The NS (&#039;&#039;&#039;N&#039;&#039;&#039;intendo User Interface &#039;&#039;&#039;S&#039;&#039;&#039;hell) system module is the first module launched from a CTR-NAND title after the [[FIRM]] processes are loaded (also see [[Bootloader]]). This module is launched by the pm process, with the titleID loaded from NS state(hard-coded TID initialized during applet TID-array initialization). NS first launches [[ErrDisp]], then the menu. On retail the menu TID is loaded from NS state, while on dev/debug the menu TID is loaded from [[Config_Savegame|config]]. On dev-units if the menu TID block doesn&#039;t exist in [[Config_Savegame|config]], NS will attempt to launch the alternate menu instead. The TID of the launched menu is then written to [[Configuration Memory|ACTIVEMENUTID]]. NS uses [[PMApp:LaunchTitle|pm:app]] to launch titles.&lt;br /&gt;
&lt;br /&gt;
NS will not trigger the [[ErrDisp|fatal-error]] screen when launching the regular/alternate menu fails.&lt;br /&gt;
&lt;br /&gt;
Like home menu NS is constantly running while the system is in 3DS-mode. When attempting to return to home-menu when the home-menu process isn&#039;t running(like when the process terminated/crashed), NS will trigger a [[ErrDisp|fatal]] error.&lt;br /&gt;
&lt;br /&gt;
= Alternate menu =&lt;br /&gt;
When launching the regular menu fails, NS will then attempt to launch the alternate menu. This title could be used as a recovery process, however it&#039;s normally not used after the factory.&lt;br /&gt;
&lt;br /&gt;
At the factory for all 3DS systems, [[3DS Development Unit GUI#Test Menu|Test Menu]] is installed with this TID. On retail this title is eventually deleted during [[Factory Setup]].&lt;br /&gt;
&lt;br /&gt;
= Auto-boot =&lt;br /&gt;
After [[PMApp:GetFIRMLaunchParams|loading]] [[FIRM]] params and prior to launching [[ErrDisp]]/Home Menu, NS handles auto-booting titles. The same code called by [[APT:Reboot]] is used for launching FIRM here. When the [[Configuration_Memory|UPDATEFLAG]] is set, NS will launch SAFE_MODE_FIRM with the application titleID set to the [[System_Settings#System_Updater|System Updater]] titleID for this region. When the UPDATEFLAG is not set, NS can auto-boot the following titles as well if [[Configuration_Memory|0x1FF80016]] bit0 is set.&lt;br /&gt;
&lt;br /&gt;
When bit1 and bit2 are value zero in [[Configuration_Memory|0x1FF80016]], NS will [[NSS:LaunchFIRM|launch]] the title specified by the [[FIRM]] parameters if the title-info is set. This FIRM launch is done after launching [[ErrDisp]] and Home Menu. Otherwise when [[Configuration_Memory|0x1FF80016]] is value 2 and the output u8 from [[PTM|PTMSYSM]] command 0x08140000 is value 0, NS will boot the title specified from the TWL TLNC block from FIRMparams+0x300. This is the same TLNC block which DSi titles wrote to RAM+0x300 for launching other titles via the launcher title. When handling the TLNC block, NS will boot the 3DS System Settings title when the TLNC titleID is the DSi System Settings titleID(the region field in the TLNC TID is not checked/used). When the TLNC titleID is not System Settings, NS will convert the input DSi titleID-high to the 3DS TWL titleID-high(tidhigh = (TLNCtidhigh &amp;amp; 0x7FFF) | 0x48000), then launch TWL_FIRM to run the title. NS does not support launching from gamecard via TLNC.&lt;br /&gt;
&lt;br /&gt;
= NS Workaround =&lt;br /&gt;
A &amp;quot;ns_workaround&amp;quot; was [[5.1.0-11|added]] in NS to workaround the flaw added with [[5.0.0-11]]. When NS is loading before launching any ARM11 processes and certain [[Configuration Memory]] fields are set, NS will launch [[Application_Manager_Services|AM]] then use command [[AM:InstallNATIVEFIRM]]. NS will then execute the code called by [[APT:StartNewestHomeMenu]], the code related to APT:PrepareToStartNewestHomeMenu is not executed here.&lt;br /&gt;
&lt;br /&gt;
NS will only execute this code-path when [[Configuration Memory|0x1FF80016]] is value zero, when KERNEL_VERSIONMAJOR is value 2, and when KERNEL_VERSIONMINOR is less than 35. Therefore, this code-path is only executed when the running NATIVE_FIRM version is prior to [[5.0.0-11]].&lt;br /&gt;
&lt;br /&gt;
= NS Service &amp;quot;ns:s&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchFIRM|LaunchFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000200C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchTitle|LaunchTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateApplication|TerminateApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateProcess|TerminateProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchApplicationFIRM|LaunchApplicationFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetWirelessRebootInfo|SetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateInitialize|CardUpdateInitialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateShutdown|CardUpdateShutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0140&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetTWLBannerHMAC|SetTWLBannerHMAC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| This calls [[APT:AppletUtility]] with fixed input params.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100180&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110100&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateTitle|TerminateTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140042&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:LaunchApplication|LaunchApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[NSS:RebootSystemClean|RebootSystemClean]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum sessions that can be used with this service is two, therefore only two processes can use this service at the same time.&lt;br /&gt;
&lt;br /&gt;
=NS Power Service &amp;quot;ns:p&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[NSP:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[3.0.0-5]]. The PTM sysmodule connects to this service, and syncs whenever [[PTM|ptm:s GetShellState()]] changes.&lt;br /&gt;
&lt;br /&gt;
=NS Service &amp;quot;ns:c&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010100&lt;br /&gt;
| [[NSC:LockSpecialContent|LockSpecialContent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020100&lt;br /&gt;
| [[NSC:UnlockSpecialContent|UnlockSpecialContent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0-11]]. It is used by the Instruction Manual applet, and is likely related to triggering SD/Game Card removal errors when ejecting the media the manual is stored on.&lt;br /&gt;
&lt;br /&gt;
=APT Services=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Accessible with APT:U&lt;br /&gt;
!  Accessible with APT:A&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLockHandle|GetLockHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| &lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| [[APT:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Enable|Enable]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Finalize|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletManInfo|GetAppletManInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| &lt;br /&gt;
| Yes (AppID != 0x300)&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletInfo|GetAppletInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLastSignaledAppletId|GetLastSignaledAppletId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CountRegisteredApplet|CountRegisteredApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsRegistered|IsRegistered]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAttribute|GetAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:InquireNotification|InquireNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendParameter|SendParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveParameter|ReceiveParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GlanceParameter|GlanceParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelParameter|CancelParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DebugFunc|DebugFunc]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:MapProgramIdForDebug|MapProgramIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetHomeMenuAppletIdForDebug|SetHomeMenuAppletIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetPreparationState|GetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetPreparationState|SetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:PrepareToStartApplication|PrepareToStartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadLibraryApplet|PreloadLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:FinishPreloadingLibraryApplet|FinishPreloadingLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartLibraryApplet|PrepareToStartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartSystemApplet|PrepareToStartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartNewestHomeMenu|PrepareToStartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B00C4&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartApplication|StartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication|WakeupApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelApplication|CancelApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartLibraryApplet|StartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartSystemApplet|StartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartNewestHomeMenu|StartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:OrderToCloseApplication|OrderToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseApplication|PrepareToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToApplication|PrepareToJumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToApplication|JumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002500C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseLibraryApplet|PrepareToCloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseSystemApplet|PrepareToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseApplication|CloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseLibraryApplet|CloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseSystemApplet|CloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:OrderToCloseSystemApplet|OrderToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToHomeMenu|PrepareToJumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToHomeMenu|JumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveHomeMenu|PrepareToLeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveHomeMenu|LeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveResidentApplet|PrepareToLeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveResidentApplet|LeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToDoApplicationJump|PrepareToDoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DoApplicationJump|DoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramIdOnApplicationJump|GetProgramIdOnApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDeliverArg|SendDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveDeliverArg|ReceiveDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00360040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LoadSysMenuArg|LoadSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00370042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StoreSysMenuArg|StoreSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00380040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadResidentApplet|PreloadResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00390040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartResidentApplet|PrepareToStartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003A0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartResidentApplet|StartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelLibraryApplet|CancelLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspSleep|SendDspSleep]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspWakeUp|SendDspWakeUp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepQuery|ReplySleepQuery]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepNotificationComplete|ReplySleepNotificationComplete]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendCaptureBufferInfo|SendCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00410040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveCaptureBufferInfo|ReceiveCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00420080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SleepSystem|SleepSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00430040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:NotifyToWait|NotifyToWait]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00440000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetSharedFont|GetSharedFont]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00450040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetWirelessRebootInfo|GetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00460104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap|Wrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00470104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap|Unwrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00480100&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:GetProgramInfo|GetProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00490180&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:Reboot|Reboot]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetCaptureInfo|GetCaptureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004B00C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:AppletUtility|AppletUtility]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetFatalErrDispMode|SetFatalErrDispMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletProgramInfo|GetAppletProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004E0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:HardwareResetAsync|HardwareResetAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004F0080&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00500040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationCpuTimeLimit|GetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00510080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetStartupArgument|GetStartupArgument]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00520104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap1|Wrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00530104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap1|Unwrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00540040&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Takes an unknown parameter, outputs a result code and media type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00550040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetScreenCapturePostPermission|SetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00560000&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetScreenCapturePostPermission|GetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00570044&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication2|WakeupApplication2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00580002&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramID|GetProgramID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetTargetPlatform|GetTargetPlatform]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01020000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CheckNew3DS|CheckNew3DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationRunningMode|GetApplicationRunningMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsStandardMemoryLayout|IsStandardMemoryLayout]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01050100&lt;br /&gt;
| [[10.4.0-29]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsTitleAllowed|IsTitleAllowed]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;APT:U&amp;quot; and &amp;quot;APT:S&amp;quot; NS services can handle launching titles/&amp;quot;applets&amp;quot;, these services handle signaling for home/power button as well. Only one session for either APT service can be open at a time, normally processes close the service handle immediately once finished using the service. The commands for APT:U and APT:S are exactly the same, however certain commands are only accessible with APT:S(NS module will call [[SVC|svcBreak]] when the command isn&#039;t accessible).&lt;br /&gt;
&lt;br /&gt;
Applets returning to home-menu first use commands APT:PrepareToJumpToHomeMenu and APT:JumpToHomeMenu, followed by these commands to launch home-menu: [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]]. [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]] are also used for launching the [[Internet Browser]], the camera applet, etc.&lt;br /&gt;
&lt;br /&gt;
Processes launch applications via home-menu, not directly with [[APT:PrepareToStartApplication]] and [[APT:StartApplication]]. Regular applications can&#039;t directly launch applications since [[APT:StartApplication]] launches the process without terminating the currently running application.&lt;br /&gt;
&lt;br /&gt;
APT:PrepareToDoApplicationJump and APT:DoApplicationJump are used by applications, for launching native/&amp;lt;non-NATIVE_FIRM&amp;gt; applications. These commands notify Home Menu that title launching needs done, Home Menu does the actual title launching via NS commands.&lt;br /&gt;
&lt;br /&gt;
== AppletAttr ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| [[NS_and_APT_Services#AppletPos|AppletPos]]&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Manually Acquire/Release GPU Rights&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Manually Acquire/Release DSP Rights&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DisplayBufferMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FORMAT_R8G8B8A8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FORMAT_R8G8B8&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FORMAT_R5G6B5&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FORMAT_R5G5B5A1&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FORMAT_R4G4B4A4&lt;br /&gt;
|-&lt;br /&gt;
| 0xFFFFFFFF&lt;br /&gt;
| FORMAT_UNIMPORTABLE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the same mapping as used for the [[GPU/External_Registers#Framebuffer_color_formats|GPU framebuffer color formats]].&lt;br /&gt;
&lt;br /&gt;
== AppletPos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| POS_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| POS_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| POS_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| POS_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| POS_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| POS_RESIDENT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== QueryReply ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| REPLY_REJECT&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| REPLY_ACCEPT&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| REPLY_LATER&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notification ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NOTIFICATION_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| NOTIFICATION_SLEEP_QUERY&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| NOTIFICATION_SLEEP_CANCELED_BY_OPEN&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| NOTIFICATION_SLEEP_ACCEPTED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| NOTIFICATION_SLEEP_AWAKE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| NOTIFICATION_SHUTDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLEAR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NOTIFICATION_TRY_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| NOTIFICATION_ORDER_TO_CLOSE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Command ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| COMMAND_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| COMMAND_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| COMMAND_REQUEST&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| COMMAND_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| COMMAND_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| COMMAND_MESSAGE&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| COMMAND_HOME_BUTTON_SINGLE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| COMMAND_HOME_BUTTON_DOUBLE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| COMMAND_DSP_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| COMMAND_DSP_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| COMMAND_WAKEUP_BY_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| COMMAND_WAKEUP_BY_PAUSE&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCEL&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCELALL&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| COMMAND_WAKEUP_BY_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| COMMAND_WAKEUP_TO_JUMP_HOME&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| COMMAND_REQUEST_FOR_SYS_APPLET&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| COMMAND_WAKEUP_TO_LAUNCH_APPLICATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| Unknown. [[APT:ReceiveParameter|Received]] by Home Menu during boot when the Home Menu process doesn&#039;t terminate properly(svcExitProcess/crash).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AppletPreparationState ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NO_PREPARATION&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| PREPARED_TO_LAUNCH_APP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PREPARED_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| PREPARED_TO_PRELOAD_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| PREPARED_TO_LAUNCH_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| PREPARED_TO_CLOSE_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| PREPARED_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| PREPARED_TO_PRELOAD_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| PREPARED_TO_CLOSE_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| PREPARED_TO_LAUNCH_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| PREPARED_TO_LEAVE_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| PREPARED_TO_DO_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| PREPARED_TO_LEAVE_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| PREPARED_TO_START_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| PREPARED_TO_DO_APP_JUMP&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| PREPARED_TO_LAUNCH_OTHER_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| PREPARED_TO_JUMP_TO_APP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartupArgumentType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_RESTART&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_MEDIA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CaptureBufferInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8, 3D (0 = not 3D, 1 = 3D)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WirelessRebootInfo==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x9&lt;br /&gt;
| WirelessRebootPassphrase&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Uninitialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is [[NSS:SetWirelessRebootInfo|setup]] by the dlplay system-application, before launching the DLP-child which can then use [[APT:GetWirelessRebootInfo]]. The MAC address and passphrase is used for connecting to the host by the DLP-child. See also [[DLP_Services|here]].&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;APT:A&amp;quot; Service=&lt;br /&gt;
This was added with [[7.0.0-13|7.0.0-X]]. Official apps built with the CTRSDK for system-version &amp;gt;=[[7.0.0-13|7.0.0-X]] normally use the &amp;quot;APT:A&amp;quot; service instead of &amp;quot;APT:U&amp;quot;. Those processes also have &amp;quot;APT:A&amp;quot; instead of &amp;quot;APT:U&amp;quot; in the service-access-control. Unlike APT:U, APT:A can call [[APT:GetAppletInfo]] with applet ID 0x300.&lt;br /&gt;
&lt;br /&gt;
=Applets=&lt;br /&gt;
NS module does not verify that the input appID for the APT service cmds are correct for that type of command. For example, a process-launch of a SystemApplet via LibraryApplet commands works fine(minus the launched-process side of APT probably).&lt;br /&gt;
&lt;br /&gt;
==System Applets==&lt;br /&gt;
On Old3DS there could only be one applet here(Home Menu, Internet Browser, Friend-List, etc) with programID-high 00040030 running at a time. On Old3DS when directly launching one of these 00040030 applets with Home Menu, the Home Menu process will terminate once the process is launched. On Old3DS when returning to Home Menu from that launched process, the Home Menu process is launched again.&lt;br /&gt;
&lt;br /&gt;
On New3DS the Home Menu process is still running/in-memory, while another system-applet is running. On New3DS it appears that the Home Menu process is terminated+relaunched, when another system-applet terminated without exiting with APT properly.&lt;br /&gt;
&lt;br /&gt;
==Library Applets==&lt;br /&gt;
Library applets can be launched by applications and regular applets. These library applets render to the screen(s) when running, etc. For example, this includes swkbd for text input. See the below appIDs in the 0x2XX range, the actual appID used is 0x4XX however.&lt;br /&gt;
&lt;br /&gt;
Input data can be sent to the library applet via the NS [[APT:SendParameter|parameter]] buffer, and/or with shared-memory with a shared-mem handle sent to the library applet. Output data from the library applet can be received by [[APT:ReceiveParameter]], the library applet can also use the specified shared-mem for output too.&lt;br /&gt;
&lt;br /&gt;
=AppIDs=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  AppID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| [[Home Menu]] (menu)&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Alternate Menu&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| Camera applet ([[Camera Applet|CtrApp]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x112&lt;br /&gt;
| Friends List applet ([[Friend List|friend]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x113&lt;br /&gt;
| Game Notes applet (Cherry)&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| [[Internet Browser]] (spider/SKATER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x115&lt;br /&gt;
| Instruction Manual applet&lt;br /&gt;
|-&lt;br /&gt;
| 0x116&lt;br /&gt;
| [[Notifications]] applet (newslist)&lt;br /&gt;
|-&lt;br /&gt;
| 0x117&lt;br /&gt;
| Miiverse applet (olv)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| [[Miiverse]] posting applet (solv3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x119&lt;br /&gt;
| Amiibo settings (cabinet)&lt;br /&gt;
|-&lt;br /&gt;
| 0x201&lt;br /&gt;
| Software Keyboard (swkbd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x202&lt;br /&gt;
| [[Mii Selector]] (appletEd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| Photo Selector (PNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| Sound Selector (SNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| Error Display ([[ErrDisp|error]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| eShop applet ([[EShop#NS_eShop_application_parameters|mint]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| Notepad (memolib) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 0x301&lt;br /&gt;
| eShop (tiger)&lt;br /&gt;
|-&lt;br /&gt;
| 0x401&lt;br /&gt;
| Software Keyboard (swkbd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x402&lt;br /&gt;
| Mii Selector (appletEd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x404&lt;br /&gt;
| Photo Selector (PNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x405&lt;br /&gt;
| Sound Selector (SNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x406&lt;br /&gt;
| Error Display (error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x407&lt;br /&gt;
| eShop applet (mint)&lt;br /&gt;
|-&lt;br /&gt;
| 0x408&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x409&lt;br /&gt;
| Notepad (memolib)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF10&lt;br /&gt;
| ProgramID: 0004003000008900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF11&lt;br /&gt;
| ProgramID: 000400000FFFFD00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF12&lt;br /&gt;
| ProgramID: 000400000FFFFC00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF13&lt;br /&gt;
| ProgramID: 000400000FFFFB00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF14&lt;br /&gt;
| ProgramID: 000400000FFFF900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF15&lt;br /&gt;
| ProgramID: 000400000FFFF800.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF16&lt;br /&gt;
| ProgramID: 000400000FFFF700.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF17&lt;br /&gt;
| ProgramID: 000400000FFFF600.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF18&lt;br /&gt;
| ProgramID: 000400000FFFF500.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These AppIDs are all for NAND titles, except for 0x300. AppIDs in the 0x1XX range are applets(programID-high 00040030), and the AppIDs in the 0x2XX range are &amp;quot;system libraries&amp;quot;(programID-high 00040030). The 0xFXX AppID range is for development NAND applications, these are not available for retail.&lt;br /&gt;
&lt;br /&gt;
Note that at some point the total AppID entry count was changed from 28 to 27.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22285</id>
		<title>NS and APT Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22285"/>
		<updated>2023-07-23T20:36:34Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* APT Services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
The NS (&#039;&#039;&#039;N&#039;&#039;&#039;intendo User Interface &#039;&#039;&#039;S&#039;&#039;&#039;hell) system module is the first module launched from a CTR-NAND title after the [[FIRM]] processes are loaded (also see [[Bootloader]]). This module is launched by the pm process, with the titleID loaded from NS state(hard-coded TID initialized during applet TID-array initialization). NS first launches [[ErrDisp]], then the menu. On retail the menu TID is loaded from NS state, while on dev/debug the menu TID is loaded from [[Config_Savegame|config]]. On dev-units if the menu TID block doesn&#039;t exist in [[Config_Savegame|config]], NS will attempt to launch the alternate menu instead. The TID of the launched menu is then written to [[Configuration Memory|ACTIVEMENUTID]]. NS uses [[PMApp:LaunchTitle|pm:app]] to launch titles.&lt;br /&gt;
&lt;br /&gt;
NS will not trigger the [[ErrDisp|fatal-error]] screen when launching the regular/alternate menu fails.&lt;br /&gt;
&lt;br /&gt;
Like home menu NS is constantly running while the system is in 3DS-mode. When attempting to return to home-menu when the home-menu process isn&#039;t running(like when the process terminated/crashed), NS will trigger a [[ErrDisp|fatal]] error.&lt;br /&gt;
&lt;br /&gt;
= Alternate menu =&lt;br /&gt;
When launching the regular menu fails, NS will then attempt to launch the alternate menu. This title could be used as a recovery process, however it&#039;s normally not used after the factory.&lt;br /&gt;
&lt;br /&gt;
At the factory for all 3DS systems, [[3DS Development Unit GUI#Test Menu|Test Menu]] is installed with this TID. On retail this title is eventually deleted during [[Factory Setup]].&lt;br /&gt;
&lt;br /&gt;
= Auto-boot =&lt;br /&gt;
After [[PMApp:GetFIRMLaunchParams|loading]] [[FIRM]] params and prior to launching [[ErrDisp]]/Home Menu, NS handles auto-booting titles. The same code called by [[APT:Reboot]] is used for launching FIRM here. When the [[Configuration_Memory|UPDATEFLAG]] is set, NS will launch SAFE_MODE_FIRM with the application titleID set to the [[System_Settings#System_Updater|System Updater]] titleID for this region. When the UPDATEFLAG is not set, NS can auto-boot the following titles as well if [[Configuration_Memory|0x1FF80016]] bit0 is set.&lt;br /&gt;
&lt;br /&gt;
When bit1 and bit2 are value zero in [[Configuration_Memory|0x1FF80016]], NS will [[NSS:LaunchFIRM|launch]] the title specified by the [[FIRM]] parameters if the title-info is set. This FIRM launch is done after launching [[ErrDisp]] and Home Menu. Otherwise when [[Configuration_Memory|0x1FF80016]] is value 2 and the output u8 from [[PTM|PTMSYSM]] command 0x08140000 is value 0, NS will boot the title specified from the TWL TLNC block from FIRMparams+0x300. This is the same TLNC block which DSi titles wrote to RAM+0x300 for launching other titles via the launcher title. When handling the TLNC block, NS will boot the 3DS System Settings title when the TLNC titleID is the DSi System Settings titleID(the region field in the TLNC TID is not checked/used). When the TLNC titleID is not System Settings, NS will convert the input DSi titleID-high to the 3DS TWL titleID-high(tidhigh = (TLNCtidhigh &amp;amp; 0x7FFF) | 0x48000), then launch TWL_FIRM to run the title. NS does not support launching from gamecard via TLNC.&lt;br /&gt;
&lt;br /&gt;
= NS Workaround =&lt;br /&gt;
A &amp;quot;ns_workaround&amp;quot; was [[5.1.0-11|added]] in NS to workaround the flaw added with [[5.0.0-11]]. When NS is loading before launching any ARM11 processes and certain [[Configuration Memory]] fields are set, NS will launch [[Application_Manager_Services|AM]] then use command [[AM:InstallNATIVEFIRM]]. NS will then execute the code called by [[APT:StartNewestHomeMenu]], the code related to APT:PrepareToStartNewestHomeMenu is not executed here.&lt;br /&gt;
&lt;br /&gt;
NS will only execute this code-path when [[Configuration Memory|0x1FF80016]] is value zero, when KERNEL_VERSIONMAJOR is value 2, and when KERNEL_VERSIONMINOR is less than 35. Therefore, this code-path is only executed when the running NATIVE_FIRM version is prior to [[5.0.0-11]].&lt;br /&gt;
&lt;br /&gt;
= NS Service &amp;quot;ns:s&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchFIRM|LaunchFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000200C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchTitle|LaunchTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateApplication|TerminateApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateProcess|TerminateProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchApplicationFIRM|LaunchApplicationFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetWirelessRebootInfo|SetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateInitialize|CardUpdateInitialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateShutdown|CardUpdateShutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0140&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetTWLBannerHMAC|SetTWLBannerHMAC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| This calls [[APT:AppletUtility]] with fixed input params.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100180&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110100&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateTitle|TerminateTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140042&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:LaunchApplication|LaunchApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[NSS:RebootSystemClean|RebootSystemClean]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum sessions that can be used with this service is two, therefore only two processes can use this service at the same time.&lt;br /&gt;
&lt;br /&gt;
=NS Power Service &amp;quot;ns:p&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[NSP:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[3.0.0-5]]. The PTM sysmodule connects to this service, and syncs whenever [[PTM|ptm:s GetShellState()]] changes.&lt;br /&gt;
&lt;br /&gt;
=NS Service &amp;quot;ns:c&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010100&lt;br /&gt;
| [[NSC:LockSpecialContent|LockSpecialContent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020100&lt;br /&gt;
| [[NSC:UnlockSpecialContent|UnlockSpecialContent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0-11]]. It is used by the Instruction Manual applet, and is likely related to triggering SD/Game Card removal errors when ejecting the media the manual is stored on.&lt;br /&gt;
&lt;br /&gt;
=APT Services=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Accessible with APT:U&lt;br /&gt;
!  Accessible with APT:A&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLockHandle|GetLockHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| &lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| [[APT:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Enable|Enable]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Finalize|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletManInfo|GetAppletManInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| &lt;br /&gt;
| Yes (AppID != 0x300)&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletInfo|GetAppletInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLastSignaledAppletId|GetLastSignaledAppletId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CountRegisteredApplet|CountRegisteredApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsRegistered|IsRegistered]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAttribute|GetAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:InquireNotification|InquireNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendParameter|SendParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveParameter|ReceiveParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GlanceParameter|GlanceParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelParameter|CancelParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DebugFunc|DebugFunc]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:MapProgramIdForDebug|MapProgramIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetHomeMenuAppletIdForDebug|SetHomeMenuAppletIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetPreparationState|GetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetPreparationState|SetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:PrepareToStartApplication|PrepareToStartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadLibraryApplet|PreloadLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:FinishPreloadingLibraryApplet|FinishPreloadingLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartLibraryApplet|PrepareToStartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartSystemApplet|PrepareToStartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartNewestHomeMenu|PrepareToStartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B00C4&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartApplication|StartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication|WakeupApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelApplication|CancelApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartLibraryApplet|StartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartSystemApplet|StartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartNewestHomeMenu|StartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:OrderToCloseApplication|OrderToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseApplication|PrepareToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToApplication|PrepareToJumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToApplication|JumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002500C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseLibraryApplet|PrepareToCloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseSystemApplet|PrepareToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseApplication|CloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseLibraryApplet|CloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseSystemApplet|CloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:OrderToCloseSystemApplet|OrderToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToHomeMenu|PrepareToJumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToHomeMenu|JumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveHomeMenu|PrepareToLeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveHomeMenu|LeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveResidentApplet|PrepareToLeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveResidentApplet|LeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToDoApplicationJump|PrepareToDoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DoApplicationJump|DoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramIdOnApplicationJump|GetProgramIdOnApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDeliverArg|SendDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveDeliverArg|ReceiveDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00360040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LoadSysMenuArg|LoadSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00370042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StoreSysMenuArg|StoreSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00380040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadResidentApplet|PreloadResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00390040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartResidentApplet|PrepareToStartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003A0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartResidentApplet|StartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelLibraryApplet|CancelLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspSleep|SendDspSleep]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspWakeUp|SendDspWakeUp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepQuery|ReplySleepQuery]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepNotificationComplete|ReplySleepNotificationComplete]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendCaptureBufferInfo|SendCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00410040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveCaptureBufferInfo|ReceiveCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00420080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SleepSystem|SleepSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00430040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:NotifyToWait|NotifyToWait]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00440000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetSharedFont|GetSharedFont]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00450040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetWirelessRebootInfo|GetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00460104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap|Wrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00470104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap|Unwrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00480100&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:GetProgramInfo|GetProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00490180&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:Reboot|Reboot]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetCaptureInfo|GetCaptureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004B00C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:AppletUtility|AppletUtility]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetFatalErrDispMode|SetFatalErrDispMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletProgramInfo|GetAppletProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004E0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:HardwareResetAsync|HardwareResetAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004F0080&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00500040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationCpuTimeLimit|GetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00510080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetStartupArgument|GetStartupArgument]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00520104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap1|Wrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00530104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap1|Unwrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00540040&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Takes an unknown parameter, outputs a result code and media type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00550040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetScreenCapturePostPermission|SetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00560000&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetScreenCapturePostPermission|GetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00570044&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication2|WakeupApplication2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00580002&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramID|GetProgramID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetTargetPlatform|GetTargetPlatform]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01020000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CheckNew3DS|CheckNew3DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationRunningMode|GetApplicationRunningMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsStandardMemoryLayout|IsStandardMemoryLayout]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01050100&lt;br /&gt;
| [[10.4.0-29]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsTitleAllowed|IsTitleAllowed]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;APT:U&amp;quot; and &amp;quot;APT:S&amp;quot; NS services can handle launching titles/&amp;quot;applets&amp;quot;, these services handle signaling for home/power button as well. Only one session for either APT service can be open at a time, normally processes close the service handle immediately once finished using the service. The commands for APT:U and APT:S are exactly the same, however certain commands are only accessible with APT:S(NS module will call [[SVC|svcBreak]] when the command isn&#039;t accessible).&lt;br /&gt;
&lt;br /&gt;
Applets returning to home-menu first use commands APT:PrepareToJumpToHomeMenu and APT:JumpToHomeMenu, followed by these commands to launch home-menu: [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]]. [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]] are also used for launching the [[Internet Browser]], the camera applet, etc.&lt;br /&gt;
&lt;br /&gt;
Processes launch applications via home-menu, not directly with [[APT:PrepareToStartApplication]] and [[APT:StartApplication]]. Regular applications can&#039;t directly launch applications since [[APT:StartApplication]] launches the process without terminating the currently running application.&lt;br /&gt;
&lt;br /&gt;
APT:PrepareToDoApplicationJump and APT:DoApplicationJump are used by applications, for launching native/&amp;lt;non-NATIVE_FIRM&amp;gt; applications. These commands notify Home Menu that title launching needs done, Home Menu does the actual title launching via NS commands.&lt;br /&gt;
&lt;br /&gt;
== AppletAttr ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| [[NS_and_APT_Services#AppletPos|AppletPos]]&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Manually Acquire/Release GPU Rights&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Manually Acquire/Release DSP Rights&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DisplayBufferMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FORMAT_R8G8B8A8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FORMAT_R8G8B8&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FORMAT_R5G6B5&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FORMAT_R5G5B5A1&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FORMAT_R4G4B4A4&lt;br /&gt;
|-&lt;br /&gt;
| 0xFFFFFFFF&lt;br /&gt;
| FORMAT_UNIMPORTABLE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the same mapping as used for the [[GPU/External_Registers#Framebuffer_color_formats|GPU framebuffer color formats]].&lt;br /&gt;
&lt;br /&gt;
== AppletPos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| POS_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| POS_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| POS_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| POS_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| POS_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| POS_RESIDENT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== QueryReply ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| REPLY_REJECT&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| REPLY_ACCEPT&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| REPLY_LATER&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notification ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NOTIFICATION_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| NOTIFICATION_SLEEP_QUERY&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| NOTIFICATION_SLEEP_CANCELED_BY_OPEN&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| NOTIFICATION_SLEEP_ACCEPTED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| NOTIFICATION_SLEEP_AWAKE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| NOTIFICATION_SHUTDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLEAR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NOTIFICATION_TRY_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| NOTIFICATION_ORDER_TO_CLOSE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Command ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| COMMAND_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| COMMAND_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| COMMAND_REQUEST&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| COMMAND_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| COMMAND_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| COMMAND_MESSAGE&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| COMMAND_HOME_BUTTON_SINGLE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| COMMAND_HOME_BUTTON_DOUBLE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| COMMAND_DSP_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| COMMAND_DSP_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| COMMAND_WAKEUP_BY_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| COMMAND_WAKEUP_BY_PAUSE&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCEL&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCELALL&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| COMMAND_WAKEUP_BY_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| COMMAND_WAKEUP_TO_JUMP_HOME&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| COMMAND_REQUEST_FOR_SYS_APPLET&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| COMMAND_WAKEUP_TO_LAUNCH_APPLICATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| Unknown. [[APT:ReceiveParameter|Received]] by Home Menu during boot when the Home Menu process doesn&#039;t terminate properly(svcExitProcess/crash).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AppletPreparationState ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NO_PREPARATION&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| PREPARED_TO_LAUNCH_APP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PREPARED_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| PREPARED_TO_PRELOAD_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| PREPARED_TO_LAUNCH_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| PREPARED_TO_CLOSE_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| PREPARED_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| PREPARED_TO_PRELOAD_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| PREPARED_TO_CLOSE_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| PREPARED_TO_LAUNCH_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| PREPARED_TO_LEAVE_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| PREPARED_TO_DO_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| PREPARED_TO_LEAVE_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| PREPARED_TO_START_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| PREPARED_TO_DO_APP_JUMP&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| PREPARED_TO_LAUNCH_OTHER_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| PREPARED_TO_JUMP_TO_APP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartupArgumentType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_RESTART&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_MEDIA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CaptureBufferInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8, 3D (0 = not 3D, 1 = 3D)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WirelessRebootInfo==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x9&lt;br /&gt;
| WirelessRebootPassphrase&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Uninitialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is [[NSS:SetWirelessRebootInfo|setup]] by the dlplay system-application, before launching the DLP-child which can then use [[APT:GetWirelessRebootInfo]]. The MAC address and passphrase is used for connecting to the host by the DLP-child. See also [[DLP_Services|here]].&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;APT:A&amp;quot; Service=&lt;br /&gt;
This was added with [[7.0.0-13|7.0.0-X]]. Official apps built with the CTRSDK for system-version &amp;gt;=[[7.0.0-13|7.0.0-X]] normally use the &amp;quot;APT:A&amp;quot; service instead of &amp;quot;APT:U&amp;quot;. Those processes also have &amp;quot;APT:A&amp;quot; instead of &amp;quot;APT:U&amp;quot; in the service-access-control. It&#039;s unknown whether there&#039;s anything which is only accessible via &amp;quot;APT:A&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Applets=&lt;br /&gt;
NS module does not verify that the input appID for the APT service cmds are correct for that type of command. For example, a process-launch of a SystemApplet via LibraryApplet commands works fine(minus the launched-process side of APT probably).&lt;br /&gt;
&lt;br /&gt;
==System Applets==&lt;br /&gt;
On Old3DS there could only be one applet here(Home Menu, Internet Browser, Friend-List, etc) with programID-high 00040030 running at a time. On Old3DS when directly launching one of these 00040030 applets with Home Menu, the Home Menu process will terminate once the process is launched. On Old3DS when returning to Home Menu from that launched process, the Home Menu process is launched again.&lt;br /&gt;
&lt;br /&gt;
On New3DS the Home Menu process is still running/in-memory, while another system-applet is running. On New3DS it appears that the Home Menu process is terminated+relaunched, when another system-applet terminated without exiting with APT properly.&lt;br /&gt;
&lt;br /&gt;
==Library Applets==&lt;br /&gt;
Library applets can be launched by applications and regular applets. These library applets render to the screen(s) when running, etc. For example, this includes swkbd for text input. See the below appIDs in the 0x2XX range, the actual appID used is 0x4XX however.&lt;br /&gt;
&lt;br /&gt;
Input data can be sent to the library applet via the NS [[APT:SendParameter|parameter]] buffer, and/or with shared-memory with a shared-mem handle sent to the library applet. Output data from the library applet can be received by [[APT:ReceiveParameter]], the library applet can also use the specified shared-mem for output too.&lt;br /&gt;
&lt;br /&gt;
=AppIDs=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  AppID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| [[Home Menu]] (menu)&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Alternate Menu&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| Camera applet ([[Camera Applet|CtrApp]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x112&lt;br /&gt;
| Friends List applet ([[Friend List|friend]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x113&lt;br /&gt;
| Game Notes applet (Cherry)&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| [[Internet Browser]] (spider/SKATER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x115&lt;br /&gt;
| Instruction Manual applet&lt;br /&gt;
|-&lt;br /&gt;
| 0x116&lt;br /&gt;
| [[Notifications]] applet (newslist)&lt;br /&gt;
|-&lt;br /&gt;
| 0x117&lt;br /&gt;
| Miiverse applet (olv)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| [[Miiverse]] posting applet (solv3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x119&lt;br /&gt;
| Amiibo settings (cabinet)&lt;br /&gt;
|-&lt;br /&gt;
| 0x201&lt;br /&gt;
| Software Keyboard (swkbd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x202&lt;br /&gt;
| [[Mii Selector]] (appletEd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| Photo Selector (PNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| Sound Selector (SNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| Error Display ([[ErrDisp|error]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| eShop applet ([[EShop#NS_eShop_application_parameters|mint]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| Notepad (memolib) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 0x301&lt;br /&gt;
| eShop (tiger)&lt;br /&gt;
|-&lt;br /&gt;
| 0x401&lt;br /&gt;
| Software Keyboard (swkbd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x402&lt;br /&gt;
| Mii Selector (appletEd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x404&lt;br /&gt;
| Photo Selector (PNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x405&lt;br /&gt;
| Sound Selector (SNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x406&lt;br /&gt;
| Error Display (error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x407&lt;br /&gt;
| eShop applet (mint)&lt;br /&gt;
|-&lt;br /&gt;
| 0x408&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x409&lt;br /&gt;
| Notepad (memolib)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF10&lt;br /&gt;
| ProgramID: 0004003000008900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF11&lt;br /&gt;
| ProgramID: 000400000FFFFD00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF12&lt;br /&gt;
| ProgramID: 000400000FFFFC00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF13&lt;br /&gt;
| ProgramID: 000400000FFFFB00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF14&lt;br /&gt;
| ProgramID: 000400000FFFF900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF15&lt;br /&gt;
| ProgramID: 000400000FFFF800.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF16&lt;br /&gt;
| ProgramID: 000400000FFFF700.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF17&lt;br /&gt;
| ProgramID: 000400000FFFF600.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF18&lt;br /&gt;
| ProgramID: 000400000FFFF500.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These AppIDs are all for NAND titles, except for 0x300. AppIDs in the 0x1XX range are applets(programID-high 00040030), and the AppIDs in the 0x2XX range are &amp;quot;system libraries&amp;quot;(programID-high 00040030). The 0xFXX AppID range is for development NAND applications, these are not available for retail.&lt;br /&gt;
&lt;br /&gt;
Note that at some point the total AppID entry count was changed from 28 to 27.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22284</id>
		<title>NS and APT Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22284"/>
		<updated>2023-07-23T20:30:58Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* APT Services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
The NS (&#039;&#039;&#039;N&#039;&#039;&#039;intendo User Interface &#039;&#039;&#039;S&#039;&#039;&#039;hell) system module is the first module launched from a CTR-NAND title after the [[FIRM]] processes are loaded (also see [[Bootloader]]). This module is launched by the pm process, with the titleID loaded from NS state(hard-coded TID initialized during applet TID-array initialization). NS first launches [[ErrDisp]], then the menu. On retail the menu TID is loaded from NS state, while on dev/debug the menu TID is loaded from [[Config_Savegame|config]]. On dev-units if the menu TID block doesn&#039;t exist in [[Config_Savegame|config]], NS will attempt to launch the alternate menu instead. The TID of the launched menu is then written to [[Configuration Memory|ACTIVEMENUTID]]. NS uses [[PMApp:LaunchTitle|pm:app]] to launch titles.&lt;br /&gt;
&lt;br /&gt;
NS will not trigger the [[ErrDisp|fatal-error]] screen when launching the regular/alternate menu fails.&lt;br /&gt;
&lt;br /&gt;
Like home menu NS is constantly running while the system is in 3DS-mode. When attempting to return to home-menu when the home-menu process isn&#039;t running(like when the process terminated/crashed), NS will trigger a [[ErrDisp|fatal]] error.&lt;br /&gt;
&lt;br /&gt;
= Alternate menu =&lt;br /&gt;
When launching the regular menu fails, NS will then attempt to launch the alternate menu. This title could be used as a recovery process, however it&#039;s normally not used after the factory.&lt;br /&gt;
&lt;br /&gt;
At the factory for all 3DS systems, [[3DS Development Unit GUI#Test Menu|Test Menu]] is installed with this TID. On retail this title is eventually deleted during [[Factory Setup]].&lt;br /&gt;
&lt;br /&gt;
= Auto-boot =&lt;br /&gt;
After [[PMApp:GetFIRMLaunchParams|loading]] [[FIRM]] params and prior to launching [[ErrDisp]]/Home Menu, NS handles auto-booting titles. The same code called by [[APT:Reboot]] is used for launching FIRM here. When the [[Configuration_Memory|UPDATEFLAG]] is set, NS will launch SAFE_MODE_FIRM with the application titleID set to the [[System_Settings#System_Updater|System Updater]] titleID for this region. When the UPDATEFLAG is not set, NS can auto-boot the following titles as well if [[Configuration_Memory|0x1FF80016]] bit0 is set.&lt;br /&gt;
&lt;br /&gt;
When bit1 and bit2 are value zero in [[Configuration_Memory|0x1FF80016]], NS will [[NSS:LaunchFIRM|launch]] the title specified by the [[FIRM]] parameters if the title-info is set. This FIRM launch is done after launching [[ErrDisp]] and Home Menu. Otherwise when [[Configuration_Memory|0x1FF80016]] is value 2 and the output u8 from [[PTM|PTMSYSM]] command 0x08140000 is value 0, NS will boot the title specified from the TWL TLNC block from FIRMparams+0x300. This is the same TLNC block which DSi titles wrote to RAM+0x300 for launching other titles via the launcher title. When handling the TLNC block, NS will boot the 3DS System Settings title when the TLNC titleID is the DSi System Settings titleID(the region field in the TLNC TID is not checked/used). When the TLNC titleID is not System Settings, NS will convert the input DSi titleID-high to the 3DS TWL titleID-high(tidhigh = (TLNCtidhigh &amp;amp; 0x7FFF) | 0x48000), then launch TWL_FIRM to run the title. NS does not support launching from gamecard via TLNC.&lt;br /&gt;
&lt;br /&gt;
= NS Workaround =&lt;br /&gt;
A &amp;quot;ns_workaround&amp;quot; was [[5.1.0-11|added]] in NS to workaround the flaw added with [[5.0.0-11]]. When NS is loading before launching any ARM11 processes and certain [[Configuration Memory]] fields are set, NS will launch [[Application_Manager_Services|AM]] then use command [[AM:InstallNATIVEFIRM]]. NS will then execute the code called by [[APT:StartNewestHomeMenu]], the code related to APT:PrepareToStartNewestHomeMenu is not executed here.&lt;br /&gt;
&lt;br /&gt;
NS will only execute this code-path when [[Configuration Memory|0x1FF80016]] is value zero, when KERNEL_VERSIONMAJOR is value 2, and when KERNEL_VERSIONMINOR is less than 35. Therefore, this code-path is only executed when the running NATIVE_FIRM version is prior to [[5.0.0-11]].&lt;br /&gt;
&lt;br /&gt;
= NS Service &amp;quot;ns:s&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchFIRM|LaunchFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000200C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchTitle|LaunchTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateApplication|TerminateApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateProcess|TerminateProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchApplicationFIRM|LaunchApplicationFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetWirelessRebootInfo|SetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateInitialize|CardUpdateInitialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateShutdown|CardUpdateShutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0140&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetTWLBannerHMAC|SetTWLBannerHMAC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| This calls [[APT:AppletUtility]] with fixed input params.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100180&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110100&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateTitle|TerminateTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140042&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:LaunchApplication|LaunchApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[NSS:RebootSystemClean|RebootSystemClean]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum sessions that can be used with this service is two, therefore only two processes can use this service at the same time.&lt;br /&gt;
&lt;br /&gt;
=NS Power Service &amp;quot;ns:p&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[NSP:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[3.0.0-5]]. The PTM sysmodule connects to this service, and syncs whenever [[PTM|ptm:s GetShellState()]] changes.&lt;br /&gt;
&lt;br /&gt;
=NS Service &amp;quot;ns:c&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010100&lt;br /&gt;
| [[NSC:LockSpecialContent|LockSpecialContent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020100&lt;br /&gt;
| [[NSC:UnlockSpecialContent|UnlockSpecialContent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0-11]]. It is used by the Instruction Manual applet, and is likely related to triggering SD/Game Card removal errors when ejecting the media the manual is stored on.&lt;br /&gt;
&lt;br /&gt;
=APT Services=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Accessible with APT:U&lt;br /&gt;
!  Accessible with APT:A&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLockHandle|GetLockHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| &lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| [[APT:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Enable|Enable]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Finalize|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletManInfo|GetAppletManInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| &lt;br /&gt;
| Yes (AppID != 0x300)&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletInfo|GetAppletInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLastSignaledAppletId|GetLastSignaledAppletId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CountRegisteredApplet|CountRegisteredApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsRegistered|IsRegistered]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAttribute|GetAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:InquireNotification|InquireNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendParameter|SendParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveParameter|ReceiveParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GlanceParameter|GlanceParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelParameter|CancelParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DebugFunc|DebugFunc]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:MapProgramIdForDebug|MapProgramIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetHomeMenuAppletIdForDebug|SetHomeMenuAppletIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetPreparationState|GetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetPreparationState|SetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:PrepareToStartApplication|PrepareToStartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadLibraryApplet|PreloadLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:FinishPreloadingLibraryApplet|FinishPreloadingLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartLibraryApplet|PrepareToStartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartSystemApplet|PrepareToStartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartNewestHomeMenu|PrepareToStartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B00C4&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartApplication|StartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication|WakeupApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelApplication|CancelApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartLibraryApplet|StartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartSystemApplet|StartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartNewestHomeMenu|StartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:OrderToCloseApplication|OrderToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseApplication|PrepareToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToApplication|PrepareToJumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToApplication|JumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002500C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseLibraryApplet|PrepareToCloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseSystemApplet|PrepareToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseApplication|CloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseLibraryApplet|CloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseSystemApplet|CloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:OrderToCloseSystemApplet|OrderToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToHomeMenu|PrepareToJumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToHomeMenu|JumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveHomeMenu|PrepareToLeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveHomeMenu|LeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveResidentApplet|PrepareToLeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveResidentApplet|LeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToDoApplicationJump|PrepareToDoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DoApplicationJump|DoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramIdOnApplicationJump|GetProgramIdOnApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDeliverArg|SendDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveDeliverArg|ReceiveDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00360040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LoadSysMenuArg|LoadSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00370042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StoreSysMenuArg|StoreSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00380040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadResidentApplet|PreloadResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00390040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartResidentApplet|PrepareToStartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003A0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartResidentApplet|StartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelLibraryApplet|CancelLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspSleep|SendDspSleep]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspWakeUp|SendDspWakeUp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepQuery|ReplySleepQuery]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepNotificationComplete|ReplySleepNotificationComplete]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendCaptureBufferInfo|SendCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00410040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveCaptureBufferInfo|ReceiveCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00420080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SleepSystem|SleepSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00430040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:NotifyToWait|NotifyToWait]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00440000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetSharedFont|GetSharedFont]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00450040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetWirelessRebootInfo|GetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00460104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap|Wrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00470104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap|Unwrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00480100&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:GetProgramInfo|GetProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00490180&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| [[APT:Reboot|Reboot]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetCaptureInfo|GetCaptureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004B00C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:AppletUtility|AppletUtility]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetFatalErrDispMode|SetFatalErrDispMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletProgramInfo|GetAppletProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004E0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:HardwareResetAsync|HardwareResetAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004F0080&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00500040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationCpuTimeLimit|GetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00510080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetStartupArgument|GetStartupArgument]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00520104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap1|Wrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00530104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap1|Unwrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00540040&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00550040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetScreenCapturePostPermission|SetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00560000&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetScreenCapturePostPermission|GetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00570044&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication2|WakeupApplication2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00580002&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramID|GetProgramID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetTargetPlatform|GetTargetPlatform]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01020000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CheckNew3DS|CheckNew3DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationRunningMode|GetApplicationRunningMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsStandardMemoryLayout|IsStandardMemoryLayout]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01050100&lt;br /&gt;
| [[10.4.0-29]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsTitleAllowed|IsTitleAllowed]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;APT:U&amp;quot; and &amp;quot;APT:S&amp;quot; NS services can handle launching titles/&amp;quot;applets&amp;quot;, these services handle signaling for home/power button as well. Only one session for either APT service can be open at a time, normally processes close the service handle immediately once finished using the service. The commands for APT:U and APT:S are exactly the same, however certain commands are only accessible with APT:S(NS module will call [[SVC|svcBreak]] when the command isn&#039;t accessible).&lt;br /&gt;
&lt;br /&gt;
Applets returning to home-menu first use commands APT:PrepareToJumpToHomeMenu and APT:JumpToHomeMenu, followed by these commands to launch home-menu: [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]]. [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]] are also used for launching the [[Internet Browser]], the camera applet, etc.&lt;br /&gt;
&lt;br /&gt;
Processes launch applications via home-menu, not directly with [[APT:PrepareToStartApplication]] and [[APT:StartApplication]]. Regular applications can&#039;t directly launch applications since [[APT:StartApplication]] launches the process without terminating the currently running application.&lt;br /&gt;
&lt;br /&gt;
APT:PrepareToDoApplicationJump and APT:DoApplicationJump are used by applications, for launching native/&amp;lt;non-NATIVE_FIRM&amp;gt; applications. These commands notify Home Menu that title launching needs done, Home Menu does the actual title launching via NS commands.&lt;br /&gt;
&lt;br /&gt;
== AppletAttr ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| [[NS_and_APT_Services#AppletPos|AppletPos]]&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Manually Acquire/Release GPU Rights&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Manually Acquire/Release DSP Rights&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DisplayBufferMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FORMAT_R8G8B8A8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FORMAT_R8G8B8&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FORMAT_R5G6B5&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FORMAT_R5G5B5A1&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FORMAT_R4G4B4A4&lt;br /&gt;
|-&lt;br /&gt;
| 0xFFFFFFFF&lt;br /&gt;
| FORMAT_UNIMPORTABLE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the same mapping as used for the [[GPU/External_Registers#Framebuffer_color_formats|GPU framebuffer color formats]].&lt;br /&gt;
&lt;br /&gt;
== AppletPos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| POS_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| POS_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| POS_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| POS_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| POS_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| POS_RESIDENT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== QueryReply ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| REPLY_REJECT&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| REPLY_ACCEPT&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| REPLY_LATER&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notification ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NOTIFICATION_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| NOTIFICATION_SLEEP_QUERY&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| NOTIFICATION_SLEEP_CANCELED_BY_OPEN&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| NOTIFICATION_SLEEP_ACCEPTED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| NOTIFICATION_SLEEP_AWAKE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| NOTIFICATION_SHUTDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLEAR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NOTIFICATION_TRY_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| NOTIFICATION_ORDER_TO_CLOSE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Command ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| COMMAND_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| COMMAND_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| COMMAND_REQUEST&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| COMMAND_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| COMMAND_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| COMMAND_MESSAGE&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| COMMAND_HOME_BUTTON_SINGLE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| COMMAND_HOME_BUTTON_DOUBLE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| COMMAND_DSP_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| COMMAND_DSP_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| COMMAND_WAKEUP_BY_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| COMMAND_WAKEUP_BY_PAUSE&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCEL&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCELALL&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| COMMAND_WAKEUP_BY_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| COMMAND_WAKEUP_TO_JUMP_HOME&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| COMMAND_REQUEST_FOR_SYS_APPLET&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| COMMAND_WAKEUP_TO_LAUNCH_APPLICATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| Unknown. [[APT:ReceiveParameter|Received]] by Home Menu during boot when the Home Menu process doesn&#039;t terminate properly(svcExitProcess/crash).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AppletPreparationState ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NO_PREPARATION&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| PREPARED_TO_LAUNCH_APP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PREPARED_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| PREPARED_TO_PRELOAD_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| PREPARED_TO_LAUNCH_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| PREPARED_TO_CLOSE_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| PREPARED_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| PREPARED_TO_PRELOAD_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| PREPARED_TO_CLOSE_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| PREPARED_TO_LAUNCH_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| PREPARED_TO_LEAVE_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| PREPARED_TO_DO_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| PREPARED_TO_LEAVE_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| PREPARED_TO_START_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| PREPARED_TO_DO_APP_JUMP&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| PREPARED_TO_LAUNCH_OTHER_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| PREPARED_TO_JUMP_TO_APP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartupArgumentType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_RESTART&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_MEDIA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CaptureBufferInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8, 3D (0 = not 3D, 1 = 3D)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WirelessRebootInfo==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x9&lt;br /&gt;
| WirelessRebootPassphrase&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Uninitialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is [[NSS:SetWirelessRebootInfo|setup]] by the dlplay system-application, before launching the DLP-child which can then use [[APT:GetWirelessRebootInfo]]. The MAC address and passphrase is used for connecting to the host by the DLP-child. See also [[DLP_Services|here]].&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;APT:A&amp;quot; Service=&lt;br /&gt;
This was added with [[7.0.0-13|7.0.0-X]]. Official apps built with the CTRSDK for system-version &amp;gt;=[[7.0.0-13|7.0.0-X]] normally use the &amp;quot;APT:A&amp;quot; service instead of &amp;quot;APT:U&amp;quot;. Those processes also have &amp;quot;APT:A&amp;quot; instead of &amp;quot;APT:U&amp;quot; in the service-access-control. It&#039;s unknown whether there&#039;s anything which is only accessible via &amp;quot;APT:A&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Applets=&lt;br /&gt;
NS module does not verify that the input appID for the APT service cmds are correct for that type of command. For example, a process-launch of a SystemApplet via LibraryApplet commands works fine(minus the launched-process side of APT probably).&lt;br /&gt;
&lt;br /&gt;
==System Applets==&lt;br /&gt;
On Old3DS there could only be one applet here(Home Menu, Internet Browser, Friend-List, etc) with programID-high 00040030 running at a time. On Old3DS when directly launching one of these 00040030 applets with Home Menu, the Home Menu process will terminate once the process is launched. On Old3DS when returning to Home Menu from that launched process, the Home Menu process is launched again.&lt;br /&gt;
&lt;br /&gt;
On New3DS the Home Menu process is still running/in-memory, while another system-applet is running. On New3DS it appears that the Home Menu process is terminated+relaunched, when another system-applet terminated without exiting with APT properly.&lt;br /&gt;
&lt;br /&gt;
==Library Applets==&lt;br /&gt;
Library applets can be launched by applications and regular applets. These library applets render to the screen(s) when running, etc. For example, this includes swkbd for text input. See the below appIDs in the 0x2XX range, the actual appID used is 0x4XX however.&lt;br /&gt;
&lt;br /&gt;
Input data can be sent to the library applet via the NS [[APT:SendParameter|parameter]] buffer, and/or with shared-memory with a shared-mem handle sent to the library applet. Output data from the library applet can be received by [[APT:ReceiveParameter]], the library applet can also use the specified shared-mem for output too.&lt;br /&gt;
&lt;br /&gt;
=AppIDs=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  AppID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| [[Home Menu]] (menu)&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Alternate Menu&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| Camera applet ([[Camera Applet|CtrApp]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x112&lt;br /&gt;
| Friends List applet ([[Friend List|friend]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x113&lt;br /&gt;
| Game Notes applet (Cherry)&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| [[Internet Browser]] (spider/SKATER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x115&lt;br /&gt;
| Instruction Manual applet&lt;br /&gt;
|-&lt;br /&gt;
| 0x116&lt;br /&gt;
| [[Notifications]] applet (newslist)&lt;br /&gt;
|-&lt;br /&gt;
| 0x117&lt;br /&gt;
| Miiverse applet (olv)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| [[Miiverse]] posting applet (solv3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x119&lt;br /&gt;
| Amiibo settings (cabinet)&lt;br /&gt;
|-&lt;br /&gt;
| 0x201&lt;br /&gt;
| Software Keyboard (swkbd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x202&lt;br /&gt;
| [[Mii Selector]] (appletEd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| Photo Selector (PNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| Sound Selector (SNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| Error Display ([[ErrDisp|error]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| eShop applet ([[EShop#NS_eShop_application_parameters|mint]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| Notepad (memolib) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 0x301&lt;br /&gt;
| eShop (tiger)&lt;br /&gt;
|-&lt;br /&gt;
| 0x401&lt;br /&gt;
| Software Keyboard (swkbd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x402&lt;br /&gt;
| Mii Selector (appletEd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x404&lt;br /&gt;
| Photo Selector (PNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x405&lt;br /&gt;
| Sound Selector (SNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x406&lt;br /&gt;
| Error Display (error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x407&lt;br /&gt;
| eShop applet (mint)&lt;br /&gt;
|-&lt;br /&gt;
| 0x408&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x409&lt;br /&gt;
| Notepad (memolib)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF10&lt;br /&gt;
| ProgramID: 0004003000008900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF11&lt;br /&gt;
| ProgramID: 000400000FFFFD00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF12&lt;br /&gt;
| ProgramID: 000400000FFFFC00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF13&lt;br /&gt;
| ProgramID: 000400000FFFFB00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF14&lt;br /&gt;
| ProgramID: 000400000FFFF900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF15&lt;br /&gt;
| ProgramID: 000400000FFFF800.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF16&lt;br /&gt;
| ProgramID: 000400000FFFF700.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF17&lt;br /&gt;
| ProgramID: 000400000FFFF600.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF18&lt;br /&gt;
| ProgramID: 000400000FFFF500.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These AppIDs are all for NAND titles, except for 0x300. AppIDs in the 0x1XX range are applets(programID-high 00040030), and the AppIDs in the 0x2XX range are &amp;quot;system libraries&amp;quot;(programID-high 00040030). The 0xFXX AppID range is for development NAND applications, these are not available for retail.&lt;br /&gt;
&lt;br /&gt;
Note that at some point the total AppID entry count was changed from 28 to 27.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22283</id>
		<title>NS and APT Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22283"/>
		<updated>2023-07-23T20:28:33Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* APT Services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
The NS (&#039;&#039;&#039;N&#039;&#039;&#039;intendo User Interface &#039;&#039;&#039;S&#039;&#039;&#039;hell) system module is the first module launched from a CTR-NAND title after the [[FIRM]] processes are loaded (also see [[Bootloader]]). This module is launched by the pm process, with the titleID loaded from NS state(hard-coded TID initialized during applet TID-array initialization). NS first launches [[ErrDisp]], then the menu. On retail the menu TID is loaded from NS state, while on dev/debug the menu TID is loaded from [[Config_Savegame|config]]. On dev-units if the menu TID block doesn&#039;t exist in [[Config_Savegame|config]], NS will attempt to launch the alternate menu instead. The TID of the launched menu is then written to [[Configuration Memory|ACTIVEMENUTID]]. NS uses [[PMApp:LaunchTitle|pm:app]] to launch titles.&lt;br /&gt;
&lt;br /&gt;
NS will not trigger the [[ErrDisp|fatal-error]] screen when launching the regular/alternate menu fails.&lt;br /&gt;
&lt;br /&gt;
Like home menu NS is constantly running while the system is in 3DS-mode. When attempting to return to home-menu when the home-menu process isn&#039;t running(like when the process terminated/crashed), NS will trigger a [[ErrDisp|fatal]] error.&lt;br /&gt;
&lt;br /&gt;
= Alternate menu =&lt;br /&gt;
When launching the regular menu fails, NS will then attempt to launch the alternate menu. This title could be used as a recovery process, however it&#039;s normally not used after the factory.&lt;br /&gt;
&lt;br /&gt;
At the factory for all 3DS systems, [[3DS Development Unit GUI#Test Menu|Test Menu]] is installed with this TID. On retail this title is eventually deleted during [[Factory Setup]].&lt;br /&gt;
&lt;br /&gt;
= Auto-boot =&lt;br /&gt;
After [[PMApp:GetFIRMLaunchParams|loading]] [[FIRM]] params and prior to launching [[ErrDisp]]/Home Menu, NS handles auto-booting titles. The same code called by [[APT:Reboot]] is used for launching FIRM here. When the [[Configuration_Memory|UPDATEFLAG]] is set, NS will launch SAFE_MODE_FIRM with the application titleID set to the [[System_Settings#System_Updater|System Updater]] titleID for this region. When the UPDATEFLAG is not set, NS can auto-boot the following titles as well if [[Configuration_Memory|0x1FF80016]] bit0 is set.&lt;br /&gt;
&lt;br /&gt;
When bit1 and bit2 are value zero in [[Configuration_Memory|0x1FF80016]], NS will [[NSS:LaunchFIRM|launch]] the title specified by the [[FIRM]] parameters if the title-info is set. This FIRM launch is done after launching [[ErrDisp]] and Home Menu. Otherwise when [[Configuration_Memory|0x1FF80016]] is value 2 and the output u8 from [[PTM|PTMSYSM]] command 0x08140000 is value 0, NS will boot the title specified from the TWL TLNC block from FIRMparams+0x300. This is the same TLNC block which DSi titles wrote to RAM+0x300 for launching other titles via the launcher title. When handling the TLNC block, NS will boot the 3DS System Settings title when the TLNC titleID is the DSi System Settings titleID(the region field in the TLNC TID is not checked/used). When the TLNC titleID is not System Settings, NS will convert the input DSi titleID-high to the 3DS TWL titleID-high(tidhigh = (TLNCtidhigh &amp;amp; 0x7FFF) | 0x48000), then launch TWL_FIRM to run the title. NS does not support launching from gamecard via TLNC.&lt;br /&gt;
&lt;br /&gt;
= NS Workaround =&lt;br /&gt;
A &amp;quot;ns_workaround&amp;quot; was [[5.1.0-11|added]] in NS to workaround the flaw added with [[5.0.0-11]]. When NS is loading before launching any ARM11 processes and certain [[Configuration Memory]] fields are set, NS will launch [[Application_Manager_Services|AM]] then use command [[AM:InstallNATIVEFIRM]]. NS will then execute the code called by [[APT:StartNewestHomeMenu]], the code related to APT:PrepareToStartNewestHomeMenu is not executed here.&lt;br /&gt;
&lt;br /&gt;
NS will only execute this code-path when [[Configuration Memory|0x1FF80016]] is value zero, when KERNEL_VERSIONMAJOR is value 2, and when KERNEL_VERSIONMINOR is less than 35. Therefore, this code-path is only executed when the running NATIVE_FIRM version is prior to [[5.0.0-11]].&lt;br /&gt;
&lt;br /&gt;
= NS Service &amp;quot;ns:s&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchFIRM|LaunchFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000200C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchTitle|LaunchTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateApplication|TerminateApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateProcess|TerminateProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchApplicationFIRM|LaunchApplicationFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetWirelessRebootInfo|SetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateInitialize|CardUpdateInitialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateShutdown|CardUpdateShutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0140&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetTWLBannerHMAC|SetTWLBannerHMAC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| This calls [[APT:AppletUtility]] with fixed input params.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100180&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110100&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateTitle|TerminateTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140042&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:LaunchApplication|LaunchApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[NSS:RebootSystemClean|RebootSystemClean]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum sessions that can be used with this service is two, therefore only two processes can use this service at the same time.&lt;br /&gt;
&lt;br /&gt;
=NS Power Service &amp;quot;ns:p&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[NSP:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[3.0.0-5]]. The PTM sysmodule connects to this service, and syncs whenever [[PTM|ptm:s GetShellState()]] changes.&lt;br /&gt;
&lt;br /&gt;
=NS Service &amp;quot;ns:c&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010100&lt;br /&gt;
| [[NSC:LockSpecialContent|LockSpecialContent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020100&lt;br /&gt;
| [[NSC:UnlockSpecialContent|UnlockSpecialContent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0-11]]. It is used by the Instruction Manual applet, and is likely related to triggering SD/Game Card removal errors when ejecting the media the manual is stored on.&lt;br /&gt;
&lt;br /&gt;
=APT Services=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Accessible with APT:U / APT:A&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLockHandle|GetLockHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| &lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| [[APT:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Enable|Enable]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Finalize|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletManInfo|GetAppletManInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| &lt;br /&gt;
| Yes, unless using APT:U and AppID == 0x300&lt;br /&gt;
| [[APT:GetAppletInfo|GetAppletInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLastSignaledAppletId|GetLastSignaledAppletId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CountRegisteredApplet|CountRegisteredApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsRegistered|IsRegistered]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAttribute|GetAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:InquireNotification|InquireNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendParameter|SendParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveParameter|ReceiveParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GlanceParameter|GlanceParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelParameter|CancelParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DebugFunc|DebugFunc]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:MapProgramIdForDebug|MapProgramIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetHomeMenuAppletIdForDebug|SetHomeMenuAppletIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetPreparationState|GetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetPreparationState|SetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:PrepareToStartApplication|PrepareToStartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadLibraryApplet|PreloadLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:FinishPreloadingLibraryApplet|FinishPreloadingLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartLibraryApplet|PrepareToStartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartSystemApplet|PrepareToStartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartNewestHomeMenu|PrepareToStartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B00C4&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartApplication|StartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication|WakeupApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelApplication|CancelApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartLibraryApplet|StartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartSystemApplet|StartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartNewestHomeMenu|StartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:OrderToCloseApplication|OrderToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseApplication|PrepareToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToApplication|PrepareToJumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToApplication|JumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002500C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseLibraryApplet|PrepareToCloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseSystemApplet|PrepareToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseApplication|CloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseLibraryApplet|CloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseSystemApplet|CloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:OrderToCloseSystemApplet|OrderToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToHomeMenu|PrepareToJumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToHomeMenu|JumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveHomeMenu|PrepareToLeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveHomeMenu|LeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveResidentApplet|PrepareToLeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveResidentApplet|LeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToDoApplicationJump|PrepareToDoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DoApplicationJump|DoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramIdOnApplicationJump|GetProgramIdOnApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDeliverArg|SendDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveDeliverArg|ReceiveDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00360040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LoadSysMenuArg|LoadSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00370042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StoreSysMenuArg|StoreSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00380040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadResidentApplet|PreloadResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00390040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartResidentApplet|PrepareToStartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003A0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartResidentApplet|StartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelLibraryApplet|CancelLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspSleep|SendDspSleep]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspWakeUp|SendDspWakeUp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepQuery|ReplySleepQuery]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepNotificationComplete|ReplySleepNotificationComplete]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendCaptureBufferInfo|SendCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00410040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveCaptureBufferInfo|ReceiveCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00420080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SleepSystem|SleepSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00430040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:NotifyToWait|NotifyToWait]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00440000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetSharedFont|GetSharedFont]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00450040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetWirelessRebootInfo|GetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00460104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap|Wrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00470104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap|Unwrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00480100&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:GetProgramInfo|GetProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00490180&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:Reboot|Reboot]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetCaptureInfo|GetCaptureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004B00C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:AppletUtility|AppletUtility]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetFatalErrDispMode|SetFatalErrDispMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletProgramInfo|GetAppletProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004E0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:HardwareResetAsync|HardwareResetAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004F0080&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00500040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationCpuTimeLimit|GetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00510080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetStartupArgument|GetStartupArgument]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00520104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap1|Wrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00530104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap1|Unwrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00540040&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00550040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetScreenCapturePostPermission|SetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00560000&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetScreenCapturePostPermission|GetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00570044&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:WakeupApplication2|WakeupApplication2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00580002&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramID|GetProgramID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetTargetPlatform|GetTargetPlatform]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01020000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CheckNew3DS|CheckNew3DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationRunningMode|GetApplicationRunningMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:IsStandardMemoryLayout|IsStandardMemoryLayout]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01050100&lt;br /&gt;
| [[10.4.0-29]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:IsTitleAllowed|IsTitleAllowed]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;APT:U&amp;quot; and &amp;quot;APT:S&amp;quot; NS services can handle launching titles/&amp;quot;applets&amp;quot;, these services handle signaling for home/power button as well. Only one session for either APT service can be open at a time, normally processes close the service handle immediately once finished using the service. The commands for APT:U and APT:S are exactly the same, however certain commands are only accessible with APT:S(NS module will call [[SVC|svcBreak]] when the command isn&#039;t accessible).&lt;br /&gt;
&lt;br /&gt;
Applets returning to home-menu first use commands APT:PrepareToJumpToHomeMenu and APT:JumpToHomeMenu, followed by these commands to launch home-menu: [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]]. [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]] are also used for launching the [[Internet Browser]], the camera applet, etc.&lt;br /&gt;
&lt;br /&gt;
Processes launch applications via home-menu, not directly with [[APT:PrepareToStartApplication]] and [[APT:StartApplication]]. Regular applications can&#039;t directly launch applications since [[APT:StartApplication]] launches the process without terminating the currently running application.&lt;br /&gt;
&lt;br /&gt;
APT:PrepareToDoApplicationJump and APT:DoApplicationJump are used by applications, for launching native/&amp;lt;non-NATIVE_FIRM&amp;gt; applications. These commands notify Home Menu that title launching needs done, Home Menu does the actual title launching via NS commands.&lt;br /&gt;
&lt;br /&gt;
== AppletAttr ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| [[NS_and_APT_Services#AppletPos|AppletPos]]&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Manually Acquire/Release GPU Rights&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Manually Acquire/Release DSP Rights&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DisplayBufferMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FORMAT_R8G8B8A8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FORMAT_R8G8B8&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FORMAT_R5G6B5&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FORMAT_R5G5B5A1&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FORMAT_R4G4B4A4&lt;br /&gt;
|-&lt;br /&gt;
| 0xFFFFFFFF&lt;br /&gt;
| FORMAT_UNIMPORTABLE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the same mapping as used for the [[GPU/External_Registers#Framebuffer_color_formats|GPU framebuffer color formats]].&lt;br /&gt;
&lt;br /&gt;
== AppletPos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| POS_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| POS_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| POS_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| POS_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| POS_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| POS_RESIDENT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== QueryReply ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| REPLY_REJECT&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| REPLY_ACCEPT&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| REPLY_LATER&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notification ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NOTIFICATION_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| NOTIFICATION_SLEEP_QUERY&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| NOTIFICATION_SLEEP_CANCELED_BY_OPEN&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| NOTIFICATION_SLEEP_ACCEPTED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| NOTIFICATION_SLEEP_AWAKE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| NOTIFICATION_SHUTDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLEAR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NOTIFICATION_TRY_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| NOTIFICATION_ORDER_TO_CLOSE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Command ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| COMMAND_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| COMMAND_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| COMMAND_REQUEST&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| COMMAND_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| COMMAND_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| COMMAND_MESSAGE&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| COMMAND_HOME_BUTTON_SINGLE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| COMMAND_HOME_BUTTON_DOUBLE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| COMMAND_DSP_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| COMMAND_DSP_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| COMMAND_WAKEUP_BY_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| COMMAND_WAKEUP_BY_PAUSE&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCEL&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCELALL&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| COMMAND_WAKEUP_BY_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| COMMAND_WAKEUP_TO_JUMP_HOME&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| COMMAND_REQUEST_FOR_SYS_APPLET&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| COMMAND_WAKEUP_TO_LAUNCH_APPLICATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| Unknown. [[APT:ReceiveParameter|Received]] by Home Menu during boot when the Home Menu process doesn&#039;t terminate properly(svcExitProcess/crash).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AppletPreparationState ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NO_PREPARATION&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| PREPARED_TO_LAUNCH_APP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PREPARED_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| PREPARED_TO_PRELOAD_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| PREPARED_TO_LAUNCH_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| PREPARED_TO_CLOSE_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| PREPARED_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| PREPARED_TO_PRELOAD_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| PREPARED_TO_CLOSE_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| PREPARED_TO_LAUNCH_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| PREPARED_TO_LEAVE_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| PREPARED_TO_DO_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| PREPARED_TO_LEAVE_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| PREPARED_TO_START_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| PREPARED_TO_DO_APP_JUMP&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| PREPARED_TO_LAUNCH_OTHER_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| PREPARED_TO_JUMP_TO_APP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartupArgumentType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_RESTART&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_MEDIA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CaptureBufferInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8, 3D (0 = not 3D, 1 = 3D)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WirelessRebootInfo==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x9&lt;br /&gt;
| WirelessRebootPassphrase&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Uninitialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is [[NSS:SetWirelessRebootInfo|setup]] by the dlplay system-application, before launching the DLP-child which can then use [[APT:GetWirelessRebootInfo]]. The MAC address and passphrase is used for connecting to the host by the DLP-child. See also [[DLP_Services|here]].&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;APT:A&amp;quot; Service=&lt;br /&gt;
This was added with [[7.0.0-13|7.0.0-X]]. Official apps built with the CTRSDK for system-version &amp;gt;=[[7.0.0-13|7.0.0-X]] normally use the &amp;quot;APT:A&amp;quot; service instead of &amp;quot;APT:U&amp;quot;. Those processes also have &amp;quot;APT:A&amp;quot; instead of &amp;quot;APT:U&amp;quot; in the service-access-control. It&#039;s unknown whether there&#039;s anything which is only accessible via &amp;quot;APT:A&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Applets=&lt;br /&gt;
NS module does not verify that the input appID for the APT service cmds are correct for that type of command. For example, a process-launch of a SystemApplet via LibraryApplet commands works fine(minus the launched-process side of APT probably).&lt;br /&gt;
&lt;br /&gt;
==System Applets==&lt;br /&gt;
On Old3DS there could only be one applet here(Home Menu, Internet Browser, Friend-List, etc) with programID-high 00040030 running at a time. On Old3DS when directly launching one of these 00040030 applets with Home Menu, the Home Menu process will terminate once the process is launched. On Old3DS when returning to Home Menu from that launched process, the Home Menu process is launched again.&lt;br /&gt;
&lt;br /&gt;
On New3DS the Home Menu process is still running/in-memory, while another system-applet is running. On New3DS it appears that the Home Menu process is terminated+relaunched, when another system-applet terminated without exiting with APT properly.&lt;br /&gt;
&lt;br /&gt;
==Library Applets==&lt;br /&gt;
Library applets can be launched by applications and regular applets. These library applets render to the screen(s) when running, etc. For example, this includes swkbd for text input. See the below appIDs in the 0x2XX range, the actual appID used is 0x4XX however.&lt;br /&gt;
&lt;br /&gt;
Input data can be sent to the library applet via the NS [[APT:SendParameter|parameter]] buffer, and/or with shared-memory with a shared-mem handle sent to the library applet. Output data from the library applet can be received by [[APT:ReceiveParameter]], the library applet can also use the specified shared-mem for output too.&lt;br /&gt;
&lt;br /&gt;
=AppIDs=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  AppID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| [[Home Menu]] (menu)&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Alternate Menu&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| Camera applet ([[Camera Applet|CtrApp]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x112&lt;br /&gt;
| Friends List applet ([[Friend List|friend]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x113&lt;br /&gt;
| Game Notes applet (Cherry)&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| [[Internet Browser]] (spider/SKATER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x115&lt;br /&gt;
| Instruction Manual applet&lt;br /&gt;
|-&lt;br /&gt;
| 0x116&lt;br /&gt;
| [[Notifications]] applet (newslist)&lt;br /&gt;
|-&lt;br /&gt;
| 0x117&lt;br /&gt;
| Miiverse applet (olv)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| [[Miiverse]] posting applet (solv3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x119&lt;br /&gt;
| Amiibo settings (cabinet)&lt;br /&gt;
|-&lt;br /&gt;
| 0x201&lt;br /&gt;
| Software Keyboard (swkbd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x202&lt;br /&gt;
| [[Mii Selector]] (appletEd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| Photo Selector (PNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| Sound Selector (SNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| Error Display ([[ErrDisp|error]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| eShop applet ([[EShop#NS_eShop_application_parameters|mint]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| Notepad (memolib) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 0x301&lt;br /&gt;
| eShop (tiger)&lt;br /&gt;
|-&lt;br /&gt;
| 0x401&lt;br /&gt;
| Software Keyboard (swkbd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x402&lt;br /&gt;
| Mii Selector (appletEd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x404&lt;br /&gt;
| Photo Selector (PNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x405&lt;br /&gt;
| Sound Selector (SNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x406&lt;br /&gt;
| Error Display (error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x407&lt;br /&gt;
| eShop applet (mint)&lt;br /&gt;
|-&lt;br /&gt;
| 0x408&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x409&lt;br /&gt;
| Notepad (memolib)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF10&lt;br /&gt;
| ProgramID: 0004003000008900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF11&lt;br /&gt;
| ProgramID: 000400000FFFFD00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF12&lt;br /&gt;
| ProgramID: 000400000FFFFC00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF13&lt;br /&gt;
| ProgramID: 000400000FFFFB00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF14&lt;br /&gt;
| ProgramID: 000400000FFFF900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF15&lt;br /&gt;
| ProgramID: 000400000FFFF800.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF16&lt;br /&gt;
| ProgramID: 000400000FFFF700.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF17&lt;br /&gt;
| ProgramID: 000400000FFFF600.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF18&lt;br /&gt;
| ProgramID: 000400000FFFF500.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These AppIDs are all for NAND titles, except for 0x300. AppIDs in the 0x1XX range are applets(programID-high 00040030), and the AppIDs in the 0x2XX range are &amp;quot;system libraries&amp;quot;(programID-high 00040030). The 0xFXX AppID range is for development NAND applications, these are not available for retail.&lt;br /&gt;
&lt;br /&gt;
Note that at some point the total AppID entry count was changed from 28 to 27.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Titles_With_Code_Symbols&amp;diff=22282</id>
		<title>Titles With Code Symbols</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Titles_With_Code_Symbols&amp;diff=22282"/>
		<updated>2023-07-23T09:18:28Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists titles containing any kind of useful symbol information.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title name&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| Brunswick Pro Bowling&lt;br /&gt;
| Contains an ELF binary with full symbol information in its RomFS root&lt;br /&gt;
|-&lt;br /&gt;
| Fire Emblem: If/Fates&lt;br /&gt;
| All released versions of the game contain &amp;quot;name.StackTrace&amp;quot; and &amp;quot;addr.StackTrace&amp;quot; files in the &amp;quot;debug&amp;quot; folder in the RomFS, which provide full function names/signatures for the game&#039;s code.bin&lt;br /&gt;
|-&lt;br /&gt;
| Inazuma Eleven 3 Lightning Bolt / Team Ogre Attacks / Bomb Blast&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Mario &amp;amp; Luigi: Bowser&#039;s Inside Story + Bowser Jr&#039;s Journey&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Mario Kart 7&lt;br /&gt;
| Only the DLP-child has symbols, not the main app/update-title&lt;br /&gt;
|-&lt;br /&gt;
| Megaman Legacy Collection&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Nintendogs&lt;br /&gt;
| Only the Korean and Taiwan localizations contain full symbol information in RomFS:/debug/memmap.txt&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon Sun and Moon (demo)&lt;br /&gt;
| CROs and ExeFS code binary contain symbols&lt;br /&gt;
|-&lt;br /&gt;
| Puzzle &amp;amp; Dragons Z + Puzzle &amp;amp; Dragons Super Mario Bros. Edition&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Rhythm Thief &amp;amp; the Emperor&#039;s Treasure&lt;br /&gt;
| Code binary contains debug strings (the calls to functions referring to them are replaced by nops, though)&lt;br /&gt;
|-&lt;br /&gt;
| Steel Diver: Sub Wars&lt;br /&gt;
| Newer versions of the update-title don&#039;t have the &amp;quot;map&amp;quot; file any more&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros.&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| The Amazing Spider-Man &lt;br /&gt;
| Contains an ELF binary with full symbol information in its RomFS root&lt;br /&gt;
|-&lt;br /&gt;
| Chibi-Robo! Photo Finder&lt;br /&gt;
| ExeFS code binary some result code symbols for boss, friends, and ac.&lt;br /&gt;
|-&lt;br /&gt;
| Tank Troopers&lt;br /&gt;
| RomFS contains file &#039;map_release&#039; which contains symbols for the code binary, similar to Steel Diver: Sub Wars. The addresses do not seem to line up correctly though(?)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Titles_With_Code_Symbols&amp;diff=22281</id>
		<title>Titles With Code Symbols</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Titles_With_Code_Symbols&amp;diff=22281"/>
		<updated>2023-07-23T09:04:38Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists titles containing any kind of useful symbol information.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title name&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| Brunswick Pro Bowling&lt;br /&gt;
| Contains an ELF binary with full symbol information in its RomFS root&lt;br /&gt;
|-&lt;br /&gt;
| Fire Emblem: If/Fates&lt;br /&gt;
| All released versions of the game contain &amp;quot;name.StackTrace&amp;quot; and &amp;quot;addr.StackTrace&amp;quot; files in the &amp;quot;debug&amp;quot; folder in the RomFS, which provide full function names/signatures for the game&#039;s code.bin&lt;br /&gt;
|-&lt;br /&gt;
| Inazuma Eleven 3 Lightning Bolt / Team Ogre Attacks / Bomb Blast&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Mario &amp;amp; Luigi: Bowser&#039;s Inside Story + Bowser Jr&#039;s Journey&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Mario Kart 7&lt;br /&gt;
| Only the DLP-child has symbols, not the main app/update-title&lt;br /&gt;
|-&lt;br /&gt;
| Megaman Legacy Collection&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Nintendogs&lt;br /&gt;
| Only the Korean and Taiwan localizations contain full symbol information in RomFS:/debug/memmap.txt&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon Sun and Moon (demo)&lt;br /&gt;
| CROs and ExeFS code binary contain symbols&lt;br /&gt;
|-&lt;br /&gt;
| Puzzle &amp;amp; Dragons Z + Puzzle &amp;amp; Dragons Super Mario Bros. Edition&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Rhythm Thief &amp;amp; the Emperor&#039;s Treasure&lt;br /&gt;
| Code binary contains debug strings (the calls to functions referring to them are replaced by nops, though)&lt;br /&gt;
|-&lt;br /&gt;
| Steel Diver: Sub Wars&lt;br /&gt;
| Newer versions of the update-title don&#039;t have the &amp;quot;map&amp;quot; file any more&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros.&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| The Amazing Spider-Man &lt;br /&gt;
| Contains an ELF binary with full symbol information in its RomFS root&lt;br /&gt;
|-&lt;br /&gt;
| Chibi-Robo! Photo Finder&lt;br /&gt;
| ExeFS code binary some result code symbols for boss, friends, and ac.&lt;br /&gt;
|-&lt;br /&gt;
| Tank Troopers&lt;br /&gt;
| RomFS contains file &#039;map_release&#039; which contains symbols for the code binary, similar to Steel Diver: Sub Wars.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Titles_With_Code_Symbols&amp;diff=22280</id>
		<title>Titles With Code Symbols</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Titles_With_Code_Symbols&amp;diff=22280"/>
		<updated>2023-07-23T07:49:56Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists titles containing any kind of useful symbol information.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title name&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| Brunswick Pro Bowling&lt;br /&gt;
| Contains an ELF binary with full symbol information in its RomFS root&lt;br /&gt;
|-&lt;br /&gt;
| Fire Emblem: If/Fates&lt;br /&gt;
| All released versions of the game contain &amp;quot;name.StackTrace&amp;quot; and &amp;quot;addr.StackTrace&amp;quot; files in the &amp;quot;debug&amp;quot; folder in the RomFS, which provide full function names/signatures for the game&#039;s code.bin&lt;br /&gt;
|-&lt;br /&gt;
| Inazuma Eleven 3 Lightning Bolt / Team Ogre Attacks / Bomb Blast&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Mario &amp;amp; Luigi: Bowser&#039;s Inside Story + Bowser Jr&#039;s Journey&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Mario Kart 7&lt;br /&gt;
| Only the DLP-child has symbols, not the main app/update-title&lt;br /&gt;
|-&lt;br /&gt;
| Megaman Legacy Collection&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Nintendogs&lt;br /&gt;
| Only the Korean and Taiwan localizations contain full symbol information in RomFS:/debug/memmap.txt&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon Sun and Moon (demo)&lt;br /&gt;
| CROs and ExeFS code binary contain symbols&lt;br /&gt;
|-&lt;br /&gt;
| Puzzle &amp;amp; Dragons Z + Puzzle &amp;amp; Dragons Super Mario Bros. Edition&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| Rhythm Thief &amp;amp; the Emperor&#039;s Treasure&lt;br /&gt;
| Code binary contains debug strings (the calls to functions referring to them are replaced by nops, though)&lt;br /&gt;
|-&lt;br /&gt;
| Steel Diver: Sub Wars&lt;br /&gt;
| Newer versions of the update-title don&#039;t have the &amp;quot;map&amp;quot; file any more&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros.&lt;br /&gt;
| CRO/CRS contains symbols&lt;br /&gt;
|-&lt;br /&gt;
| The Amazing Spider-Man &lt;br /&gt;
| Contains an ELF binary with full symbol information in its RomFS root&lt;br /&gt;
|-&lt;br /&gt;
| Chibi-Robo! Photo Finder&lt;br /&gt;
| ExeFS code binary some result code symbols for boss, friends, and ac.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22279</id>
		<title>NS and APT Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22279"/>
		<updated>2023-07-23T06:27:17Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* APT Services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
The NS (&#039;&#039;&#039;N&#039;&#039;&#039;intendo User Interface &#039;&#039;&#039;S&#039;&#039;&#039;hell) system module is the first module launched from a CTR-NAND title after the [[FIRM]] processes are loaded (also see [[Bootloader]]). This module is launched by the pm process, with the titleID loaded from NS state(hard-coded TID initialized during applet TID-array initialization). NS first launches [[ErrDisp]], then the menu. On retail the menu TID is loaded from NS state, while on dev/debug the menu TID is loaded from [[Config_Savegame|config]]. On dev-units if the menu TID block doesn&#039;t exist in [[Config_Savegame|config]], NS will attempt to launch the alternate menu instead. The TID of the launched menu is then written to [[Configuration Memory|ACTIVEMENUTID]]. NS uses [[PMApp:LaunchTitle|pm:app]] to launch titles.&lt;br /&gt;
&lt;br /&gt;
NS will not trigger the [[ErrDisp|fatal-error]] screen when launching the regular/alternate menu fails.&lt;br /&gt;
&lt;br /&gt;
Like home menu NS is constantly running while the system is in 3DS-mode. When attempting to return to home-menu when the home-menu process isn&#039;t running(like when the process terminated/crashed), NS will trigger a [[ErrDisp|fatal]] error.&lt;br /&gt;
&lt;br /&gt;
= Alternate menu =&lt;br /&gt;
When launching the regular menu fails, NS will then attempt to launch the alternate menu. This title could be used as a recovery process, however it&#039;s normally not used after the factory.&lt;br /&gt;
&lt;br /&gt;
At the factory for all 3DS systems, [[3DS Development Unit GUI#Test Menu|Test Menu]] is installed with this TID. On retail this title is eventually deleted during [[Factory Setup]].&lt;br /&gt;
&lt;br /&gt;
= Auto-boot =&lt;br /&gt;
After [[PMApp:GetFIRMLaunchParams|loading]] [[FIRM]] params and prior to launching [[ErrDisp]]/Home Menu, NS handles auto-booting titles. The same code called by [[APT:Reboot]] is used for launching FIRM here. When the [[Configuration_Memory|UPDATEFLAG]] is set, NS will launch SAFE_MODE_FIRM with the application titleID set to the [[System_Settings#System_Updater|System Updater]] titleID for this region. When the UPDATEFLAG is not set, NS can auto-boot the following titles as well if [[Configuration_Memory|0x1FF80016]] bit0 is set.&lt;br /&gt;
&lt;br /&gt;
When bit1 and bit2 are value zero in [[Configuration_Memory|0x1FF80016]], NS will [[NSS:LaunchFIRM|launch]] the title specified by the [[FIRM]] parameters if the title-info is set. This FIRM launch is done after launching [[ErrDisp]] and Home Menu. Otherwise when [[Configuration_Memory|0x1FF80016]] is value 2 and the output u8 from [[PTM|PTMSYSM]] command 0x08140000 is value 0, NS will boot the title specified from the TWL TLNC block from FIRMparams+0x300. This is the same TLNC block which DSi titles wrote to RAM+0x300 for launching other titles via the launcher title. When handling the TLNC block, NS will boot the 3DS System Settings title when the TLNC titleID is the DSi System Settings titleID(the region field in the TLNC TID is not checked/used). When the TLNC titleID is not System Settings, NS will convert the input DSi titleID-high to the 3DS TWL titleID-high(tidhigh = (TLNCtidhigh &amp;amp; 0x7FFF) | 0x48000), then launch TWL_FIRM to run the title. NS does not support launching from gamecard via TLNC.&lt;br /&gt;
&lt;br /&gt;
= NS Workaround =&lt;br /&gt;
A &amp;quot;ns_workaround&amp;quot; was [[5.1.0-11|added]] in NS to workaround the flaw added with [[5.0.0-11]]. When NS is loading before launching any ARM11 processes and certain [[Configuration Memory]] fields are set, NS will launch [[Application_Manager_Services|AM]] then use command [[AM:InstallNATIVEFIRM]]. NS will then execute the code called by [[APT:StartNewestHomeMenu]], the code related to APT:PrepareToStartNewestHomeMenu is not executed here.&lt;br /&gt;
&lt;br /&gt;
NS will only execute this code-path when [[Configuration Memory|0x1FF80016]] is value zero, when KERNEL_VERSIONMAJOR is value 2, and when KERNEL_VERSIONMINOR is less than 35. Therefore, this code-path is only executed when the running NATIVE_FIRM version is prior to [[5.0.0-11]].&lt;br /&gt;
&lt;br /&gt;
= NS Service &amp;quot;ns:s&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchFIRM|LaunchFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000200C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchTitle|LaunchTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateApplication|TerminateApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateProcess|TerminateProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchApplicationFIRM|LaunchApplicationFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetWirelessRebootInfo|SetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateInitialize|CardUpdateInitialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateShutdown|CardUpdateShutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0140&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetTWLBannerHMAC|SetTWLBannerHMAC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| This calls [[APT:AppletUtility]] with fixed input params.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100180&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110100&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateTitle|TerminateTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140042&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:LaunchApplication|LaunchApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[NSS:RebootSystemClean|RebootSystemClean]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum sessions that can be used with this service is two, therefore only two processes can use this service at the same time.&lt;br /&gt;
&lt;br /&gt;
=NS Power Service &amp;quot;ns:p&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[NSP:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[3.0.0-5]]. The PTM sysmodule connects to this service, and syncs whenever [[PTM|ptm:s GetShellState()]] changes.&lt;br /&gt;
&lt;br /&gt;
=NS Service &amp;quot;ns:c&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010100&lt;br /&gt;
| [[NSC:LockSpecialContent|LockSpecialContent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020100&lt;br /&gt;
| [[NSC:UnlockSpecialContent|UnlockSpecialContent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0-11]]. It is used by the Instruction Manual applet, and is likely related to triggering SD/Game Card removal errors when ejecting the media the manual is stored on.&lt;br /&gt;
&lt;br /&gt;
=APT Services=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Accessible with APT:U&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLockHandle|GetLockHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| &lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| [[APT:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Enable|Enable]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Finalize|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletManInfo|GetAppletManInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| &lt;br /&gt;
| Yes, for AppID != 0x300&lt;br /&gt;
| [[APT:GetAppletInfo|GetAppletInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLastSignaledAppletId|GetLastSignaledAppletId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CountRegisteredApplet|CountRegisteredApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsRegistered|IsRegistered]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAttribute|GetAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:InquireNotification|InquireNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendParameter|SendParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveParameter|ReceiveParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GlanceParameter|GlanceParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelParameter|CancelParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DebugFunc|DebugFunc]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:MapProgramIdForDebug|MapProgramIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetHomeMenuAppletIdForDebug|SetHomeMenuAppletIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetPreparationState|GetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetPreparationState|SetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:PrepareToStartApplication|PrepareToStartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadLibraryApplet|PreloadLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:FinishPreloadingLibraryApplet|FinishPreloadingLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartLibraryApplet|PrepareToStartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartSystemApplet|PrepareToStartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartNewestHomeMenu|PrepareToStartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B00C4&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartApplication|StartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication|WakeupApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelApplication|CancelApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartLibraryApplet|StartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartSystemApplet|StartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartNewestHomeMenu|StartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:OrderToCloseApplication|OrderToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseApplication|PrepareToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToApplication|PrepareToJumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToApplication|JumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002500C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseLibraryApplet|PrepareToCloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseSystemApplet|PrepareToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseApplication|CloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseLibraryApplet|CloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseSystemApplet|CloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:OrderToCloseSystemApplet|OrderToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToHomeMenu|PrepareToJumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToHomeMenu|JumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveHomeMenu|PrepareToLeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveHomeMenu|LeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveResidentApplet|PrepareToLeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveResidentApplet|LeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToDoApplicationJump|PrepareToDoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DoApplicationJump|DoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramIdOnApplicationJump|GetProgramIdOnApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDeliverArg|SendDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveDeliverArg|ReceiveDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00360040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LoadSysMenuArg|LoadSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00370042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StoreSysMenuArg|StoreSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00380040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadResidentApplet|PreloadResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00390040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartResidentApplet|PrepareToStartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003A0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartResidentApplet|StartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelLibraryApplet|CancelLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspSleep|SendDspSleep]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspWakeUp|SendDspWakeUp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepQuery|ReplySleepQuery]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepNotificationComplete|ReplySleepNotificationComplete]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendCaptureBufferInfo|SendCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00410040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveCaptureBufferInfo|ReceiveCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00420080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SleepSystem|SleepSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00430040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:NotifyToWait|NotifyToWait]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00440000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetSharedFont|GetSharedFont]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00450040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetWirelessRebootInfo|GetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00460104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap|Wrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00470104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap|Unwrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00480100&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:GetProgramInfo|GetProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00490180&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:Reboot|Reboot]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetCaptureInfo|GetCaptureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004B00C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:AppletUtility|AppletUtility]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetFatalErrDispMode|SetFatalErrDispMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletProgramInfo|GetAppletProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004E0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:HardwareResetAsync|HardwareResetAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004F0080&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00500040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationCpuTimeLimit|GetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00510080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetStartupArgument|GetStartupArgument]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00520104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap1|Wrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00530104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap1|Unwrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00540040&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00550040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetScreenCapturePostPermission|SetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00560000&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetScreenCapturePostPermission|GetScreenCapturePostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00570044&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:WakeupApplication2|WakeupApplication2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00580002&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramID|GetProgramID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetTargetPlatform|GetTargetPlatform]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01020000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CheckNew3DS|CheckNew3DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationRunningMode|GetApplicationRunningMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:IsStandardMemoryLayout|IsStandardMemoryLayout]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01050100&lt;br /&gt;
| [[10.4.0-29]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:IsTitleAllowed|IsTitleAllowed]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;APT:U&amp;quot; and &amp;quot;APT:S&amp;quot; NS services can handle launching titles/&amp;quot;applets&amp;quot;, these services handle signaling for home/power button as well. Only one session for either APT service can be open at a time, normally processes close the service handle immediately once finished using the service. The commands for APT:U and APT:S are exactly the same, however certain commands are only accessible with APT:S(NS module will call [[SVC|svcBreak]] when the command isn&#039;t accessible).&lt;br /&gt;
&lt;br /&gt;
Applets returning to home-menu first use commands APT:PrepareToJumpToHomeMenu and APT:JumpToHomeMenu, followed by these commands to launch home-menu: [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]]. [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]] are also used for launching the [[Internet Browser]], the camera applet, etc.&lt;br /&gt;
&lt;br /&gt;
Processes launch applications via home-menu, not directly with [[APT:PrepareToStartApplication]] and [[APT:StartApplication]]. Regular applications can&#039;t directly launch applications since [[APT:StartApplication]] launches the process without terminating the currently running application.&lt;br /&gt;
&lt;br /&gt;
APT:PrepareToDoApplicationJump and APT:DoApplicationJump are used by applications, for launching native/&amp;lt;non-NATIVE_FIRM&amp;gt; applications. These commands notify Home Menu that title launching needs done, Home Menu does the actual title launching via NS commands.&lt;br /&gt;
&lt;br /&gt;
== AppletAttr ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| [[NS_and_APT_Services#AppletPos|AppletPos]]&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Manually Acquire/Release GPU Rights&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Manually Acquire/Release DSP Rights&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DisplayBufferMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FORMAT_R8G8B8A8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FORMAT_R8G8B8&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FORMAT_R5G6B5&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FORMAT_R5G5B5A1&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FORMAT_R4G4B4A4&lt;br /&gt;
|-&lt;br /&gt;
| 0xFFFFFFFF&lt;br /&gt;
| FORMAT_UNIMPORTABLE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the same mapping as used for the [[GPU/External_Registers#Framebuffer_color_formats|GPU framebuffer color formats]].&lt;br /&gt;
&lt;br /&gt;
== AppletPos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| POS_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| POS_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| POS_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| POS_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| POS_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| POS_RESIDENT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== QueryReply ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| REPLY_REJECT&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| REPLY_ACCEPT&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| REPLY_LATER&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notification ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NOTIFICATION_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| NOTIFICATION_SLEEP_QUERY&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| NOTIFICATION_SLEEP_CANCELED_BY_OPEN&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| NOTIFICATION_SLEEP_ACCEPTED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| NOTIFICATION_SLEEP_AWAKE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| NOTIFICATION_SHUTDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLEAR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NOTIFICATION_TRY_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| NOTIFICATION_ORDER_TO_CLOSE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Command ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| COMMAND_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| COMMAND_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| COMMAND_REQUEST&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| COMMAND_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| COMMAND_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| COMMAND_MESSAGE&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| COMMAND_HOME_BUTTON_SINGLE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| COMMAND_HOME_BUTTON_DOUBLE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| COMMAND_DSP_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| COMMAND_DSP_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| COMMAND_WAKEUP_BY_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| COMMAND_WAKEUP_BY_PAUSE&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCEL&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCELALL&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| COMMAND_WAKEUP_BY_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| COMMAND_WAKEUP_TO_JUMP_HOME&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| COMMAND_REQUEST_FOR_SYS_APPLET&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| COMMAND_WAKEUP_TO_LAUNCH_APPLICATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| Unknown. [[APT:ReceiveParameter|Received]] by Home Menu during boot when the Home Menu process doesn&#039;t terminate properly(svcExitProcess/crash).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AppletPreparationState ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NO_PREPARATION&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| PREPARED_TO_LAUNCH_APP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PREPARED_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| PREPARED_TO_PRELOAD_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| PREPARED_TO_LAUNCH_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| PREPARED_TO_CLOSE_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| PREPARED_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| PREPARED_TO_PRELOAD_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| PREPARED_TO_CLOSE_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| PREPARED_TO_LAUNCH_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| PREPARED_TO_LEAVE_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| PREPARED_TO_DO_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| PREPARED_TO_LEAVE_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| PREPARED_TO_START_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| PREPARED_TO_DO_APP_JUMP&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| PREPARED_TO_LAUNCH_OTHER_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| PREPARED_TO_JUMP_TO_APP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartupArgumentType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_RESTART&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_MEDIA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CaptureBufferInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8, 3D (0 = not 3D, 1 = 3D)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WirelessRebootInfo==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x9&lt;br /&gt;
| WirelessRebootPassphrase&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Uninitialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is [[NSS:SetWirelessRebootInfo|setup]] by the dlplay system-application, before launching the DLP-child which can then use [[APT:GetWirelessRebootInfo]]. The MAC address and passphrase is used for connecting to the host by the DLP-child. See also [[DLP_Services|here]].&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;APT:A&amp;quot; Service=&lt;br /&gt;
This was added with [[7.0.0-13|7.0.0-X]]. Official apps built with the CTRSDK for system-version &amp;gt;=[[7.0.0-13|7.0.0-X]] normally use the &amp;quot;APT:A&amp;quot; service instead of &amp;quot;APT:U&amp;quot;. Those processes also have &amp;quot;APT:A&amp;quot; instead of &amp;quot;APT:U&amp;quot; in the service-access-control. It&#039;s unknown whether there&#039;s anything which is only accessible via &amp;quot;APT:A&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Applets=&lt;br /&gt;
NS module does not verify that the input appID for the APT service cmds are correct for that type of command. For example, a process-launch of a SystemApplet via LibraryApplet commands works fine(minus the launched-process side of APT probably).&lt;br /&gt;
&lt;br /&gt;
==System Applets==&lt;br /&gt;
On Old3DS there could only be one applet here(Home Menu, Internet Browser, Friend-List, etc) with programID-high 00040030 running at a time. On Old3DS when directly launching one of these 00040030 applets with Home Menu, the Home Menu process will terminate once the process is launched. On Old3DS when returning to Home Menu from that launched process, the Home Menu process is launched again.&lt;br /&gt;
&lt;br /&gt;
On New3DS the Home Menu process is still running/in-memory, while another system-applet is running. On New3DS it appears that the Home Menu process is terminated+relaunched, when another system-applet terminated without exiting with APT properly.&lt;br /&gt;
&lt;br /&gt;
==Library Applets==&lt;br /&gt;
Library applets can be launched by applications and regular applets. These library applets render to the screen(s) when running, etc. For example, this includes swkbd for text input. See the below appIDs in the 0x2XX range, the actual appID used is 0x4XX however.&lt;br /&gt;
&lt;br /&gt;
Input data can be sent to the library applet via the NS [[APT:SendParameter|parameter]] buffer, and/or with shared-memory with a shared-mem handle sent to the library applet. Output data from the library applet can be received by [[APT:ReceiveParameter]], the library applet can also use the specified shared-mem for output too.&lt;br /&gt;
&lt;br /&gt;
=AppIDs=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  AppID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| [[Home Menu]] (menu)&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Alternate Menu&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| Camera applet ([[Camera Applet|CtrApp]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x112&lt;br /&gt;
| Friends List applet ([[Friend List|friend]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x113&lt;br /&gt;
| Game Notes applet (Cherry)&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| [[Internet Browser]] (spider/SKATER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x115&lt;br /&gt;
| Instruction Manual applet&lt;br /&gt;
|-&lt;br /&gt;
| 0x116&lt;br /&gt;
| [[Notifications]] applet (newslist)&lt;br /&gt;
|-&lt;br /&gt;
| 0x117&lt;br /&gt;
| Miiverse applet (olv)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| [[Miiverse]] posting applet (solv3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x119&lt;br /&gt;
| Amiibo settings (cabinet)&lt;br /&gt;
|-&lt;br /&gt;
| 0x201&lt;br /&gt;
| Software Keyboard (swkbd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x202&lt;br /&gt;
| [[Mii Selector]] (appletEd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| Photo Selector (PNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| Sound Selector (SNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| Error Display ([[ErrDisp|error]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| eShop applet ([[EShop#NS_eShop_application_parameters|mint]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| Notepad (memolib) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 0x301&lt;br /&gt;
| eShop (tiger)&lt;br /&gt;
|-&lt;br /&gt;
| 0x401&lt;br /&gt;
| Software Keyboard (swkbd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x402&lt;br /&gt;
| Mii Selector (appletEd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x404&lt;br /&gt;
| Photo Selector (PNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x405&lt;br /&gt;
| Sound Selector (SNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x406&lt;br /&gt;
| Error Display (error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x407&lt;br /&gt;
| eShop applet (mint)&lt;br /&gt;
|-&lt;br /&gt;
| 0x408&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x409&lt;br /&gt;
| Notepad (memolib)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF10&lt;br /&gt;
| ProgramID: 0004003000008900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF11&lt;br /&gt;
| ProgramID: 000400000FFFFD00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF12&lt;br /&gt;
| ProgramID: 000400000FFFFC00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF13&lt;br /&gt;
| ProgramID: 000400000FFFFB00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF14&lt;br /&gt;
| ProgramID: 000400000FFFF900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF15&lt;br /&gt;
| ProgramID: 000400000FFFF800.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF16&lt;br /&gt;
| ProgramID: 000400000FFFF700.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF17&lt;br /&gt;
| ProgramID: 000400000FFFF600.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF18&lt;br /&gt;
| ProgramID: 000400000FFFF500.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These AppIDs are all for NAND titles, except for 0x300. AppIDs in the 0x1XX range are applets(programID-high 00040030), and the AppIDs in the 0x2XX range are &amp;quot;system libraries&amp;quot;(programID-high 00040030). The 0xFXX AppID range is for development NAND applications, these are not available for retail.&lt;br /&gt;
&lt;br /&gt;
Note that at some point the total AppID entry count was changed from 28 to 27.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:SetScreencapPostPermission&amp;diff=22278</id>
		<title>APT:SetScreencapPostPermission</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:SetScreencapPostPermission&amp;diff=22278"/>
		<updated>2023-07-23T06:27:00Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page APT:SetScreencapPostPermission to APT:SetScreenCapturePostPermission&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[APT:SetScreenCapturePostPermission]]&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:SetScreenCapturePostPermission&amp;diff=22277</id>
		<title>APT:SetScreenCapturePostPermission</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:SetScreenCapturePostPermission&amp;diff=22277"/>
		<updated>2023-07-23T06:27:00Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page APT:SetScreencapPostPermission to APT:SetScreenCapturePostPermission&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00550040]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Permission to post screenshots to Miiverse&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This sets whether or not screenshots may be posted on Miiverse.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Value&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| the user has no explicit setting&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| screenshot posting to Miiverse is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| screenshot posting to Miiverse is disabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:GetScreencapPostPermission&amp;diff=22276</id>
		<title>APT:GetScreencapPostPermission</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:GetScreencapPostPermission&amp;diff=22276"/>
		<updated>2023-07-23T06:26:58Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page APT:GetScreencapPostPermission to APT:GetScreenCapturePostPermission&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[APT:GetScreenCapturePostPermission]]&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:GetScreenCapturePostPermission&amp;diff=22275</id>
		<title>APT:GetScreenCapturePostPermission</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:GetScreenCapturePostPermission&amp;diff=22275"/>
		<updated>2023-07-23T06:26:58Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page APT:GetScreencapPostPermission to APT:GetScreenCapturePostPermission&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00560000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| The screenshot posting permission&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This returns whether or not screenshots may be posted on Miiverse.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Value&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| the user has no explicit setting&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| screenshot posting to Miiverse is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| screenshot posting to Miiverse is disabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:GetApplicationRunningMode&amp;diff=22274</id>
		<title>APT:GetApplicationRunningMode</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:GetApplicationRunningMode&amp;diff=22274"/>
		<updated>2023-07-23T06:21:01Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x01030000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| u8, Application Running Mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This outputs a value based on whether the system is running using New 3DS CPU speed and whether the application is registered with APT (see [[APT:Enable]]).&lt;br /&gt;
&lt;br /&gt;
Using New 3DS CPU speed (i.e. modes 2 and 4) seems to be known as running as an &amp;quot;ext application&amp;quot; (probably for &amp;quot;extended application&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==Application Running Mode==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| No application is running&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Old 3DS CPU speed, registered with APT&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| New 3DS CPU speed, registered with APT&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Old 3DS CPU speed, not registered with APT&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| New 3DS CPU speed, not registered with APT&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:GetApplicationRunningMode&amp;diff=22273</id>
		<title>APT:GetApplicationRunningMode</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:GetApplicationRunningMode&amp;diff=22273"/>
		<updated>2023-07-23T05:24:05Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x01030000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| u8, Application Running Mode (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This writes an output u8 to cmdreply[2], the value is determined by checking various NS internal state + whether this is a New3DS.&lt;br /&gt;
&lt;br /&gt;
The normal output seems to be value 0x2. Forcing this value to 0x1 causes New3DS HID usage(via ir:USER) in Smash Bros to be disabled. &lt;br /&gt;
&lt;br /&gt;
Values 0x2 or 0x4 seem to indicate that it&#039;s running as an &amp;quot;ext application&amp;quot;(?)&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:GetApplicationRunningMode&amp;diff=22272</id>
		<title>APT:GetApplicationRunningMode</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:GetApplicationRunningMode&amp;diff=22272"/>
		<updated>2023-07-23T05:23:52Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Created page with &amp;quot;=Request= {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; |- !  Index Word !  Description |- | 0 | Header code [0x01030000] |}  =Response= {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; |- !  Index Word !...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x01030000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| u8, Application Running Mode ()&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This writes an output u8 to cmdreply[2], the value is determined by checking various NS internal state + whether this is a New3DS.&lt;br /&gt;
&lt;br /&gt;
The normal output seems to be value 0x2. Forcing this value to 0x1 causes New3DS HID usage(via ir:USER) in Smash Bros to be disabled. &lt;br /&gt;
&lt;br /&gt;
Values 0x2 or 0x4 seem to indicate that it&#039;s running as an &amp;quot;ext application&amp;quot;(?)&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:GetTargetPlatform&amp;diff=22271</id>
		<title>APT:GetTargetPlatform</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:GetTargetPlatform&amp;diff=22271"/>
		<updated>2023-07-23T05:20:16Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x01010000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| u8, Target Platform (0 = Old 3DS, 1 = New 3DS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This writes an output u8 to cmdreply indexword[2]. This uses [[PTMSYSM:CheckNew3DS]]. When a certain NS state field is non-zero, the output value is zero, otherwise the output is from [[PTMSYSM:CheckNew3DS]]. Normally this NS state field is zero, however this state field is set to 1 when [[APT:PrepareToStartApplication]] is used with flags bit8 is set.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:CheckNew3DSApp&amp;diff=22270</id>
		<title>APT:CheckNew3DSApp</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:CheckNew3DSApp&amp;diff=22270"/>
		<updated>2023-07-23T05:19:55Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page APT:CheckNew3DSApp to APT:GetTargetPlatform&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[APT:GetTargetPlatform]]&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=APT:GetTargetPlatform&amp;diff=22269</id>
		<title>APT:GetTargetPlatform</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=APT:GetTargetPlatform&amp;diff=22269"/>
		<updated>2023-07-23T05:19:55Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page APT:CheckNew3DSApp to APT:GetTargetPlatform&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x01010000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| u8, Status (0 = Old 3DS, 1 = New 3DS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This writes an output u8 to cmdreply indexword[2]. This uses [[PTMSYSM:CheckNew3DS]]. When a certain NS state field is non-zero, the output value is zero, otherwise the output is from [[PTMSYSM:CheckNew3DS]]. Normally this NS state field is zero, however this state field is set to 1 when [[APT:PrepareToStartApplication]] is used with flags bit8 is set.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22268</id>
		<title>NS and APT Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22268"/>
		<updated>2023-07-23T05:19:38Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Two commands from FE Fates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
The NS (&#039;&#039;&#039;N&#039;&#039;&#039;intendo User Interface &#039;&#039;&#039;S&#039;&#039;&#039;hell) system module is the first module launched from a CTR-NAND title after the [[FIRM]] processes are loaded (also see [[Bootloader]]). This module is launched by the pm process, with the titleID loaded from NS state(hard-coded TID initialized during applet TID-array initialization). NS first launches [[ErrDisp]], then the menu. On retail the menu TID is loaded from NS state, while on dev/debug the menu TID is loaded from [[Config_Savegame|config]]. On dev-units if the menu TID block doesn&#039;t exist in [[Config_Savegame|config]], NS will attempt to launch the alternate menu instead. The TID of the launched menu is then written to [[Configuration Memory|ACTIVEMENUTID]]. NS uses [[PMApp:LaunchTitle|pm:app]] to launch titles.&lt;br /&gt;
&lt;br /&gt;
NS will not trigger the [[ErrDisp|fatal-error]] screen when launching the regular/alternate menu fails.&lt;br /&gt;
&lt;br /&gt;
Like home menu NS is constantly running while the system is in 3DS-mode. When attempting to return to home-menu when the home-menu process isn&#039;t running(like when the process terminated/crashed), NS will trigger a [[ErrDisp|fatal]] error.&lt;br /&gt;
&lt;br /&gt;
= Alternate menu =&lt;br /&gt;
When launching the regular menu fails, NS will then attempt to launch the alternate menu. This title could be used as a recovery process, however it&#039;s normally not used after the factory.&lt;br /&gt;
&lt;br /&gt;
At the factory for all 3DS systems, [[3DS Development Unit GUI#Test Menu|Test Menu]] is installed with this TID. On retail this title is eventually deleted during [[Factory Setup]].&lt;br /&gt;
&lt;br /&gt;
= Auto-boot =&lt;br /&gt;
After [[PMApp:GetFIRMLaunchParams|loading]] [[FIRM]] params and prior to launching [[ErrDisp]]/Home Menu, NS handles auto-booting titles. The same code called by [[APT:Reboot]] is used for launching FIRM here. When the [[Configuration_Memory|UPDATEFLAG]] is set, NS will launch SAFE_MODE_FIRM with the application titleID set to the [[System_Settings#System_Updater|System Updater]] titleID for this region. When the UPDATEFLAG is not set, NS can auto-boot the following titles as well if [[Configuration_Memory|0x1FF80016]] bit0 is set.&lt;br /&gt;
&lt;br /&gt;
When bit1 and bit2 are value zero in [[Configuration_Memory|0x1FF80016]], NS will [[NSS:LaunchFIRM|launch]] the title specified by the [[FIRM]] parameters if the title-info is set. This FIRM launch is done after launching [[ErrDisp]] and Home Menu. Otherwise when [[Configuration_Memory|0x1FF80016]] is value 2 and the output u8 from [[PTM|PTMSYSM]] command 0x08140000 is value 0, NS will boot the title specified from the TWL TLNC block from FIRMparams+0x300. This is the same TLNC block which DSi titles wrote to RAM+0x300 for launching other titles via the launcher title. When handling the TLNC block, NS will boot the 3DS System Settings title when the TLNC titleID is the DSi System Settings titleID(the region field in the TLNC TID is not checked/used). When the TLNC titleID is not System Settings, NS will convert the input DSi titleID-high to the 3DS TWL titleID-high(tidhigh = (TLNCtidhigh &amp;amp; 0x7FFF) | 0x48000), then launch TWL_FIRM to run the title. NS does not support launching from gamecard via TLNC.&lt;br /&gt;
&lt;br /&gt;
= NS Workaround =&lt;br /&gt;
A &amp;quot;ns_workaround&amp;quot; was [[5.1.0-11|added]] in NS to workaround the flaw added with [[5.0.0-11]]. When NS is loading before launching any ARM11 processes and certain [[Configuration Memory]] fields are set, NS will launch [[Application_Manager_Services|AM]] then use command [[AM:InstallNATIVEFIRM]]. NS will then execute the code called by [[APT:StartNewestHomeMenu]], the code related to APT:PrepareToStartNewestHomeMenu is not executed here.&lt;br /&gt;
&lt;br /&gt;
NS will only execute this code-path when [[Configuration Memory|0x1FF80016]] is value zero, when KERNEL_VERSIONMAJOR is value 2, and when KERNEL_VERSIONMINOR is less than 35. Therefore, this code-path is only executed when the running NATIVE_FIRM version is prior to [[5.0.0-11]].&lt;br /&gt;
&lt;br /&gt;
= NS Service &amp;quot;ns:s&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchFIRM|LaunchFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000200C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchTitle|LaunchTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateApplication|TerminateApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateProcess|TerminateProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchApplicationFIRM|LaunchApplicationFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetWirelessRebootInfo|SetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateInitialize|CardUpdateInitialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateShutdown|CardUpdateShutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0140&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetTWLBannerHMAC|SetTWLBannerHMAC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| This calls [[APT:AppletUtility]] with fixed input params.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100180&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110100&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateTitle|TerminateTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140042&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:LaunchApplication|LaunchApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[NSS:RebootSystemClean|RebootSystemClean]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum sessions that can be used with this service is two, therefore only two processes can use this service at the same time.&lt;br /&gt;
&lt;br /&gt;
=NS Power Service &amp;quot;ns:p&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[NSP:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[3.0.0-5]]. The PTM sysmodule connects to this service, and syncs whenever [[PTM|ptm:s GetShellState()]] changes.&lt;br /&gt;
&lt;br /&gt;
=NS Service &amp;quot;ns:c&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010100&lt;br /&gt;
| [[NSC:LockSpecialContent|LockSpecialContent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020100&lt;br /&gt;
| [[NSC:UnlockSpecialContent|UnlockSpecialContent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0-11]]. It is used by the Instruction Manual applet, and is likely related to triggering SD/Game Card removal errors when ejecting the media the manual is stored on.&lt;br /&gt;
&lt;br /&gt;
=APT Services=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Accessible with APT:U&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLockHandle|GetLockHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| &lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| [[APT:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Enable|Enable]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Finalize|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletManInfo|GetAppletManInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| &lt;br /&gt;
| Yes, for AppID != 0x300&lt;br /&gt;
| [[APT:GetAppletInfo|GetAppletInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLastSignaledAppletId|GetLastSignaledAppletId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CountRegisteredApplet|CountRegisteredApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsRegistered|IsRegistered]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAttribute|GetAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:InquireNotification|InquireNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendParameter|SendParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveParameter|ReceiveParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GlanceParameter|GlanceParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelParameter|CancelParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DebugFunc|DebugFunc]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:MapProgramIdForDebug|MapProgramIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetHomeMenuAppletIdForDebug|SetHomeMenuAppletIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetPreparationState|GetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetPreparationState|SetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:PrepareToStartApplication|PrepareToStartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadLibraryApplet|PreloadLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:FinishPreloadingLibraryApplet|FinishPreloadingLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartLibraryApplet|PrepareToStartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartSystemApplet|PrepareToStartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartNewestHomeMenu|PrepareToStartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B00C4&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartApplication|StartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication|WakeupApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelApplication|CancelApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartLibraryApplet|StartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartSystemApplet|StartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartNewestHomeMenu|StartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:OrderToCloseApplication|OrderToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseApplication|PrepareToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToApplication|PrepareToJumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToApplication|JumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002500C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseLibraryApplet|PrepareToCloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseSystemApplet|PrepareToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseApplication|CloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseLibraryApplet|CloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseSystemApplet|CloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:OrderToCloseSystemApplet|OrderToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToHomeMenu|PrepareToJumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToHomeMenu|JumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveHomeMenu|PrepareToLeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveHomeMenu|LeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveResidentApplet|PrepareToLeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveResidentApplet|LeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToDoApplicationJump|PrepareToDoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DoApplicationJump|DoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramIdOnApplicationJump|GetProgramIdOnApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDeliverArg|SendDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveDeliverArg|ReceiveDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00360040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LoadSysMenuArg|LoadSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00370042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StoreSysMenuArg|StoreSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00380040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadResidentApplet|PreloadResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00390040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartResidentApplet|PrepareToStartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003A0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartResidentApplet|StartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelLibraryApplet|CancelLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspSleep|SendDspSleep]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspWakeUp|SendDspWakeUp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepQuery|ReplySleepQuery]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepNotificationComplete|ReplySleepNotificationComplete]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendCaptureBufferInfo|SendCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00410040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveCaptureBufferInfo|ReceiveCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00420080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SleepSystem|SleepSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00430040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:NotifyToWait|NotifyToWait]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00440000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetSharedFont|GetSharedFont]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00450040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetWirelessRebootInfo|GetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00460104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap|Wrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00470104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap|Unwrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00480100&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:GetProgramInfo|GetProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00490180&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:Reboot|Reboot]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetCaptureInfo|GetCaptureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004B00C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:AppletUtility|AppletUtility]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetFatalErrDispMode|SetFatalErrDispMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletProgramInfo|GetAppletProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004E0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:HardwareResetAsync|HardwareResetAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004F0080&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00500040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationCpuTimeLimit|GetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00510080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetStartupArgument|GetStartupArgument]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00520104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap1|Wrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00530104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap1|Unwrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00540040&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00550040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetScreencapPostPermission|SetScreencapPostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00560000&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetScreencapPostPermission|GetScreencapPostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00570044&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:WakeupApplication2|WakeupApplication2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00580002&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramID|GetProgramID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetTargetPlatform|GetTargetPlatform]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01020000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CheckNew3DS|CheckNew3DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationRunningMode|GetApplicationRunningMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:IsStandardMemoryLayout|IsStandardMemoryLayout]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01050100&lt;br /&gt;
| [[10.4.0-29]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:IsTitleAllowed|IsTitleAllowed]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;APT:U&amp;quot; and &amp;quot;APT:S&amp;quot; NS services can handle launching titles/&amp;quot;applets&amp;quot;, these services handle signaling for home/power button as well. Only one session for either APT service can be open at a time, normally processes close the service handle immediately once finished using the service. The commands for APT:U and APT:S are exactly the same, however certain commands are only accessible with APT:S(NS module will call [[SVC|svcBreak]] when the command isn&#039;t accessible).&lt;br /&gt;
&lt;br /&gt;
Applets returning to home-menu first use commands APT:PrepareToJumpToHomeMenu and APT:JumpToHomeMenu, followed by these commands to launch home-menu: [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]]. [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]] are also used for launching the [[Internet Browser]], the camera applet, etc.&lt;br /&gt;
&lt;br /&gt;
Processes launch applications via home-menu, not directly with [[APT:PrepareToStartApplication]] and [[APT:StartApplication]]. Regular applications can&#039;t directly launch applications since [[APT:StartApplication]] launches the process without terminating the currently running application.&lt;br /&gt;
&lt;br /&gt;
APT:PrepareToDoApplicationJump and APT:DoApplicationJump are used by applications, for launching native/&amp;lt;non-NATIVE_FIRM&amp;gt; applications. These commands notify Home Menu that title launching needs done, Home Menu does the actual title launching via NS commands.&lt;br /&gt;
&lt;br /&gt;
== AppletAttr ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| [[NS_and_APT_Services#AppletPos|AppletPos]]&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Manually Acquire/Release GPU Rights&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Manually Acquire/Release DSP Rights&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DisplayBufferMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FORMAT_R8G8B8A8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FORMAT_R8G8B8&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FORMAT_R5G6B5&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FORMAT_R5G5B5A1&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FORMAT_R4G4B4A4&lt;br /&gt;
|-&lt;br /&gt;
| 0xFFFFFFFF&lt;br /&gt;
| FORMAT_UNIMPORTABLE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the same mapping as used for the [[GPU/External_Registers#Framebuffer_color_formats|GPU framebuffer color formats]].&lt;br /&gt;
&lt;br /&gt;
== AppletPos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| POS_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| POS_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| POS_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| POS_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| POS_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| POS_RESIDENT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== QueryReply ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| REPLY_REJECT&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| REPLY_ACCEPT&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| REPLY_LATER&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notification ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NOTIFICATION_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| NOTIFICATION_SLEEP_QUERY&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| NOTIFICATION_SLEEP_CANCELED_BY_OPEN&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| NOTIFICATION_SLEEP_ACCEPTED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| NOTIFICATION_SLEEP_AWAKE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| NOTIFICATION_SHUTDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLEAR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NOTIFICATION_TRY_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| NOTIFICATION_ORDER_TO_CLOSE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Command ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| COMMAND_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| COMMAND_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| COMMAND_REQUEST&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| COMMAND_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| COMMAND_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| COMMAND_MESSAGE&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| COMMAND_HOME_BUTTON_SINGLE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| COMMAND_HOME_BUTTON_DOUBLE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| COMMAND_DSP_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| COMMAND_DSP_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| COMMAND_WAKEUP_BY_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| COMMAND_WAKEUP_BY_PAUSE&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCEL&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCELALL&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| COMMAND_WAKEUP_BY_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| COMMAND_WAKEUP_TO_JUMP_HOME&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| COMMAND_REQUEST_FOR_SYS_APPLET&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| COMMAND_WAKEUP_TO_LAUNCH_APPLICATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| Unknown. [[APT:ReceiveParameter|Received]] by Home Menu during boot when the Home Menu process doesn&#039;t terminate properly(svcExitProcess/crash).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AppletPreparationState ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NO_PREPARATION&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| PREPARED_TO_LAUNCH_APP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PREPARED_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| PREPARED_TO_PRELOAD_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| PREPARED_TO_LAUNCH_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| PREPARED_TO_CLOSE_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| PREPARED_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| PREPARED_TO_PRELOAD_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| PREPARED_TO_CLOSE_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| PREPARED_TO_LAUNCH_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| PREPARED_TO_LEAVE_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| PREPARED_TO_DO_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| PREPARED_TO_LEAVE_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| PREPARED_TO_START_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| PREPARED_TO_DO_APP_JUMP&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| PREPARED_TO_LAUNCH_OTHER_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| PREPARED_TO_JUMP_TO_APP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartupArgumentType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_RESTART&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_MEDIA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CaptureBufferInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8, 3D (0 = not 3D, 1 = 3D)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WirelessRebootInfo==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x9&lt;br /&gt;
| WirelessRebootPassphrase&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Uninitialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is [[NSS:SetWirelessRebootInfo|setup]] by the dlplay system-application, before launching the DLP-child which can then use [[APT:GetWirelessRebootInfo]]. The MAC address and passphrase is used for connecting to the host by the DLP-child. See also [[DLP_Services|here]].&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;APT:A&amp;quot; Service=&lt;br /&gt;
This was added with [[7.0.0-13|7.0.0-X]]. Official apps built with the CTRSDK for system-version &amp;gt;=[[7.0.0-13|7.0.0-X]] normally use the &amp;quot;APT:A&amp;quot; service instead of &amp;quot;APT:U&amp;quot;. Those processes also have &amp;quot;APT:A&amp;quot; instead of &amp;quot;APT:U&amp;quot; in the service-access-control. It&#039;s unknown whether there&#039;s anything which is only accessible via &amp;quot;APT:A&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Applets=&lt;br /&gt;
NS module does not verify that the input appID for the APT service cmds are correct for that type of command. For example, a process-launch of a SystemApplet via LibraryApplet commands works fine(minus the launched-process side of APT probably).&lt;br /&gt;
&lt;br /&gt;
==System Applets==&lt;br /&gt;
On Old3DS there could only be one applet here(Home Menu, Internet Browser, Friend-List, etc) with programID-high 00040030 running at a time. On Old3DS when directly launching one of these 00040030 applets with Home Menu, the Home Menu process will terminate once the process is launched. On Old3DS when returning to Home Menu from that launched process, the Home Menu process is launched again.&lt;br /&gt;
&lt;br /&gt;
On New3DS the Home Menu process is still running/in-memory, while another system-applet is running. On New3DS it appears that the Home Menu process is terminated+relaunched, when another system-applet terminated without exiting with APT properly.&lt;br /&gt;
&lt;br /&gt;
==Library Applets==&lt;br /&gt;
Library applets can be launched by applications and regular applets. These library applets render to the screen(s) when running, etc. For example, this includes swkbd for text input. See the below appIDs in the 0x2XX range, the actual appID used is 0x4XX however.&lt;br /&gt;
&lt;br /&gt;
Input data can be sent to the library applet via the NS [[APT:SendParameter|parameter]] buffer, and/or with shared-memory with a shared-mem handle sent to the library applet. Output data from the library applet can be received by [[APT:ReceiveParameter]], the library applet can also use the specified shared-mem for output too.&lt;br /&gt;
&lt;br /&gt;
=AppIDs=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  AppID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| [[Home Menu]] (menu)&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Alternate Menu&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| Camera applet ([[Camera Applet|CtrApp]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x112&lt;br /&gt;
| Friends List applet ([[Friend List|friend]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x113&lt;br /&gt;
| Game Notes applet (Cherry)&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| [[Internet Browser]] (spider/SKATER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x115&lt;br /&gt;
| Instruction Manual applet&lt;br /&gt;
|-&lt;br /&gt;
| 0x116&lt;br /&gt;
| [[Notifications]] applet (newslist)&lt;br /&gt;
|-&lt;br /&gt;
| 0x117&lt;br /&gt;
| Miiverse applet (olv)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| [[Miiverse]] posting applet (solv3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x119&lt;br /&gt;
| Amiibo settings (cabinet)&lt;br /&gt;
|-&lt;br /&gt;
| 0x201&lt;br /&gt;
| Software Keyboard (swkbd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x202&lt;br /&gt;
| [[Mii Selector]] (appletEd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| Photo Selector (PNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| Sound Selector (SNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| Error Display ([[ErrDisp|error]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| eShop applet ([[EShop#NS_eShop_application_parameters|mint]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| Notepad (memolib) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 0x301&lt;br /&gt;
| eShop (tiger)&lt;br /&gt;
|-&lt;br /&gt;
| 0x401&lt;br /&gt;
| Software Keyboard (swkbd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x402&lt;br /&gt;
| Mii Selector (appletEd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x404&lt;br /&gt;
| Photo Selector (PNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x405&lt;br /&gt;
| Sound Selector (SNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x406&lt;br /&gt;
| Error Display (error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x407&lt;br /&gt;
| eShop applet (mint)&lt;br /&gt;
|-&lt;br /&gt;
| 0x408&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x409&lt;br /&gt;
| Notepad (memolib)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF10&lt;br /&gt;
| ProgramID: 0004003000008900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF11&lt;br /&gt;
| ProgramID: 000400000FFFFD00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF12&lt;br /&gt;
| ProgramID: 000400000FFFFC00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF13&lt;br /&gt;
| ProgramID: 000400000FFFFB00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF14&lt;br /&gt;
| ProgramID: 000400000FFFF900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF15&lt;br /&gt;
| ProgramID: 000400000FFFF800.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF16&lt;br /&gt;
| ProgramID: 000400000FFFF700.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF17&lt;br /&gt;
| ProgramID: 000400000FFFF600.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF18&lt;br /&gt;
| ProgramID: 000400000FFFF500.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These AppIDs are all for NAND titles, except for 0x300. AppIDs in the 0x1XX range are applets(programID-high 00040030), and the AppIDs in the 0x2XX range are &amp;quot;system libraries&amp;quot;(programID-high 00040030). The 0xFXX AppID range is for development NAND applications, these are not available for retail.&lt;br /&gt;
&lt;br /&gt;
Note that at some point the total AppID entry count was changed from 28 to 27.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:ScanOnConnection&amp;diff=22267</id>
		<title>NWMUDS:ScanOnConnection</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:ScanOnConnection&amp;diff=22267"/>
		<updated>2023-07-23T04:41:33Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00220402]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Output buffer max size&lt;br /&gt;
|-&lt;br /&gt;
| 2-14&lt;br /&gt;
| Input [[NWM_Services|ScanInputStruct]].&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| [[NWM_Services|wlancommID]]&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| This is the ID also located at offset 0xE in the CTR-generation [[NWM_Services|structure]].&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| (Size&amp;lt;&amp;lt;4) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 12&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Output [[NWM_Services|BeaconDataReply]] buffer ptr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This is about the same as [[NWMUDS:StartScan]] except this only returns already received beacon data, and it can &#039;&#039;only&#039;&#039; be used when connected to a network.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:SetProbeResponseParam&amp;diff=22266</id>
		<title>NWMUDS:SetProbeResponseParam</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:SetProbeResponseParam&amp;diff=22266"/>
		<updated>2023-07-23T04:41:21Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00210080]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 3-byte OUI followed by the the u8 OUI type(type0 normally). Hence, this field is normally 0x00321F00.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| s8 data, can be zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
Used before using [[NWMUDS:CreateNetwork2]].&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=22265</id>
		<title>NWM Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=22265"/>
		<updated>2023-07-23T04:40:19Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* NWM local-WLAN service &amp;quot;nwm::UDS&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
These NWM services are used for local-WLAN communications, NWM module handles regular wifi APs as well. These services are used for creating/connecting to networks, and for sending/receiving data over the network etc. NWM module uses the wifi SDIO hardware via the IO registers for this.&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN service &amp;quot;nwm::UDS&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000102C2&lt;br /&gt;
| &lt;br /&gt;
| Initialize Deprecated. Appears to be handled about the same way as [[NWMUDS:InitializeWithVersion]], except this uses version=0x100 internally instead of loading it from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &lt;br /&gt;
| Scrap Not used by sub-wars. This sets a state value to 0x2 then signals an event. This is probably some sort of shutdown command since this state write will result in all UDS commands returning an error if used afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Finalize|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040402&lt;br /&gt;
| &lt;br /&gt;
| CreateNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
|&lt;br /&gt;
| [[NWMUDS:EjectClient|EjectClient]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:EjectSpectator|EjectSpectator]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:UpdateNetworkAttribute|UpdateNetworkAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DestroyNetwork|DestroyNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090442&lt;br /&gt;
| &lt;br /&gt;
| ConnectNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DisconnectNetwork|DisconnectNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetConnectionStatus|GetConnectionStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| &lt;br /&gt;
| This writes two output u8 values to cmdreply[2] +0/+1. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetNodeInformation|GetNodeInformation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0006&lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Identical&#039;&#039; to [[NWMUDS:GetNodeInformationList|GetNodeInformationList]]. Deprecated, only used by old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0404&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:StartScan|StartScan]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SetApplicationData|SetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetApplicationData|GetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120100&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Bind|Bind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Unbind|Unbind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C0&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:PullPacket|PullPacket]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150080&lt;br /&gt;
| &lt;br /&gt;
| SetMaxSendDelay(u64 unk) Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170182&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SendTo|SendTo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| (u16 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| (u32 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetChannel|GetChannel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0302&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:InitializeWithVersion|InitializeWithVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0044&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:CreateNetwork2|CreateNetwork2]] This is a replacement for the original network-creation command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ConnectNetwork2|ConnectNetwork2]] This is a replacement for the original network-connection command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0006&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:GetNodeInformationList|GetNodeInformationList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200040&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| Flush (u8 data_frame_index) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210080&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:SetProbeResponseParam|SetProbeResponseParam]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220402&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ScanOnConnection|ScanOnConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| This writes an output u16 value to cmdreply[2]. Unknown. Not used by sub-wars.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PullPacket is used for receiving data over the network and SendTo is for sending data over the network.&lt;br /&gt;
&lt;br /&gt;
=NWM infrastructure service &amp;quot;nwm::INF&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000603C4&lt;br /&gt;
| [[NWMINF:RecvBeaconBroadcastData|RecvBeaconBroadcastData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070742&lt;br /&gt;
| [[NWMINF:ConnectToEncryptedAP|ConnectToEncryptedAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080302&lt;br /&gt;
| [[NWMINF:ConnectToAP|ConnectToAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| ?, return event handle in cmdbuf[3]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM socket service &amp;quot;nwm::SOC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010042&lt;br /&gt;
| (u32 size, &amp;lt;static_buffer translate-hdr with static_buf_id=0&amp;gt;, addr) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| (u32 unk, u32 size) Unknown. Uses size=0x5F8 internally unless the input is &amp;lt;=0x5F8. Uses an ipc static_buffer(static_buf_id=0) for output with the specified size(also used when writing the translate-hdr). Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030042&lt;br /&gt;
| (u32 unk, u32 size, &amp;lt;static_buffer translate-hdr with static_buf_id=0&amp;gt;, addr) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040042&lt;br /&gt;
| (u32 size, u32 unk, &amp;lt;static_buffer translate-hdr with static_buf_id=1&amp;gt;, addr) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| (u32 unk) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| (u32 unk0, u16 unk1) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| (u16 unk) This writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080040&lt;br /&gt;
| [[NWMSOC:GetMACAddress|GetMACAddress]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| This just copies data from state to the cmdreply, this always returns 0. u32 cmdreply[2] = sharedmem_size, cmdreply[4] = [[NWM_Shared_Memory|sharedmem_handle]], cmdreply[5] = eventhandle.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| (u32 unk) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| (u32 unk) This writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| (u32 unk) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0002&lt;br /&gt;
| ([[IPC|kernel_processid_translatehdr]], u32 processid) ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The only sysmodule which uses this is [[Socket_Services|socket]]-sysmodule. The first command used by socket-module is cmd9.&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::SAP&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN [[StreetPass]] service &amp;quot;nwm::CEC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060002&lt;br /&gt;
| Unknown, called by CECD module, cmdbuf[2] takes an event handle.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| [[NWMCEC:SendProbeRequest|SendProbeRequest]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::EXT&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| This copies 0x1C-bytes from NWM-module state to the data starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080040&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| [[NWMEXT:ControlWirelessEnabled|ControlWirelessEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::TST&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=BeaconDataReply Structure=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Max output size, from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total amount of output data written relative to struct+0. 0xC when there&#039;s no entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total entries, 0 for none.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| &amp;lt;Rest of the structure&amp;gt;&lt;br /&gt;
| Beacon entries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beacon entry:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of this entire entry. The next entry starts at curentry_startoffset+curentry_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| AP wifi channel.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| AP MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of this entire entry, games use this value to traverse the beacons list.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Value 0x1C(size of this header and/or offset to the actual beacon data).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Entry_size - 0x1C&lt;br /&gt;
| The actual beacon data is located here, starting at the 802.11 management frame header.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the structure returned by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=ScanInputStruct=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| Host MAC address. The 6-bytes located here are normally all 0xFF, for all hosts. Otherwise when not set to broadcast-MAC, the command will only return info for the specified host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 4-12&lt;br /&gt;
| Uninitialized for UDS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the 0x34-byte input structure used by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=Local-WLAN=&lt;br /&gt;
UDS is used for 3DS&amp;lt;&amp;gt;3DS local-WLAN communications, and for 3DS&amp;lt;&amp;gt;Wii U communications. The latter is mainly only used for multi-player in games.&lt;br /&gt;
&lt;br /&gt;
All UDS local-WLAN communications have the CCMP key for data encryption generated via NWM module. The CCMP key passed to nwm::CEC commands(stored in a 0x44-byte input structure) for [[StreetPass]] is generated by the CECD module. The input data used with [[Process_Services|EncryptDecryptAes]] with [[PSPXI:EncryptDecryptAes|keytype1]] is a MD5 hash over the input passphrase. This input passphrase is fixed for [[Download Play]], it&#039;s unique per local-WLAN application. The CTR is a MD5 hash over the below 0x10-byte structure. The output from encrypting that data with AES-CTR is the final CCMP key. This passphrase is a raw input buffer: while the passphrase specified by user-processes is normally a string with the NUL-terminator included, it can be anything(like the [[DLP_Services|WirelessRebootPassphrase]] for example).&lt;br /&gt;
&lt;br /&gt;
The maximum number of nodes(including the host) which can be on an UDS network is 16.&lt;br /&gt;
&lt;br /&gt;
==NodeID==&lt;br /&gt;
There are two types of client connections: regular Client, and Spectator. The latter &#039;&#039;never&#039;&#039; sends &#039;&#039;any&#039;&#039; 802.11 frame at all to the host, hence &#039;&#039;nothing&#039;&#039; actually connected to the network(including the host) can know about any spectators. Once a spectator is &amp;quot;connected&amp;quot; to a network, it can only receive broadcasted data, no sending.&lt;br /&gt;
&lt;br /&gt;
DLP-client connects to the network as a spectator during DLP scanning to get various [[Download_Play|metadata]] including icon data.&lt;br /&gt;
&lt;br /&gt;
===NetworkNodeID===&lt;br /&gt;
This is the network u16 ID for each device on the UDS network. NodeID 0xFFFF is a broadcast alias. 0x1 is for the host, the 0x2 for the first client, 0x3 for the second client, and so on.&lt;br /&gt;
&lt;br /&gt;
The spectator doesn&#039;t have a NetworkNodeID, since it can&#039;t [[NWMUDS:SendTo|send]] any data.&lt;br /&gt;
&lt;br /&gt;
NetworkNodeIDs for clients do not change when any clients disconnect, likewise for the encrypted node-listing stored in the wifi beacons. When a client disconnects, the corresponding NetworkNodeID bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]] is cleared. When a client is connecting, the client is assigned the NetworkNodeID with the lowest corresponding clear-bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]], then that bit is set.&lt;br /&gt;
&lt;br /&gt;
===BindNodeID===&lt;br /&gt;
This u32 is an ID only used on the local device. How many devices are on the network or which device this system is does not affect this ID.&lt;br /&gt;
&lt;br /&gt;
The spectator uses BindNodeID 0x1. DLP uses BindNodeID 0x3 when connecting as an actual client. Hence, it seems BindNodeID bit0 is spectator-related. All normal nodes(host/client) start with BindNodeID 0x2. When connecting to a network again(and probably with network creation) without reinitializing NWMUDS, official user processes increase the used BindNodeID by 0x2.&lt;br /&gt;
&lt;br /&gt;
BindNodeID value 0x0 is invalid. The maximum number of BindNodeIDs which can be open at the same time is 16.&lt;br /&gt;
&lt;br /&gt;
==Application data transfer==&lt;br /&gt;
The protocol used for sending/receiving data over the network with UDS by official applications is [[PRUDP]](in some cases at least). Mario Kart 7 uses PRUDP here. Triforce Heroes uses plaintext for whatever protocol it uses for UDS.&lt;br /&gt;
&lt;br /&gt;
The UDS version of [[PRUDP]] is different from the normal UDP version it appears(no afa1/a1af data for example).&lt;br /&gt;
&lt;br /&gt;
==Communication protocol==&lt;br /&gt;
The process of connecting to a host and exchanging data follows the sequence:&lt;br /&gt;
&lt;br /&gt;
Client-&amp;gt;Server: Authentication frame SEQ1&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Client: Authentication frame SEQ2&lt;br /&gt;
&lt;br /&gt;
[There does not appear to be an association request frame sent by the client to the server, it is however possible that it was sent and just not captured by the test equipment]&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Client: Association Response frame with association id&lt;br /&gt;
&lt;br /&gt;
[From here on, the client is connected to the server]&lt;br /&gt;
&lt;br /&gt;
Client-&amp;gt;Server: Encrypted data packet containing an 8-byte 802.2 LLC header with ethertype = EAPoL (0x888E) and an u16 header of 0x201 ([[NWM_Services#EAPoL-Start frame|EAPoL-Start]])&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Broadcast: Encrypted data packet containing the updated node information after the client connected (Using ethertype = SecureData).&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Client: Encrypted data packet containing an 8-byte 802.2 LLC header with ethertype = EAPoL (0x888E) and an u16 header of 0x0202([[NWM_Services#EAPoL-Logoff frame|EAPoL-Logoff]])&lt;br /&gt;
&lt;br /&gt;
[From here on, data packets sent using SendTo are encapsulated with an LLC header with ethertype = 0x876D ([[NWM_Services#SecureData NWM header|SecureData]])]&lt;br /&gt;
&lt;br /&gt;
[The client also sends periodic SecureData data frames on its own, these are probably ping frames]&lt;br /&gt;
&lt;br /&gt;
==Data frames==&lt;br /&gt;
Data is transferred over the network using [[NWMUDS:PullPacket]]/[[NWMUDS:SendTo]]. That data is transferred using 802.11 data frames using CCMP encryption. The encrypted data contained in the frame starts with the 0x8-byte [https://en.wikipedia.org/wiki/Subnetwork_Access_Protocol#Use LLC header], then the 0xE-byte NWM header, followed by the actual application data from the previously mentioned commands. When [[NWMUDS:SendTo]] was used with dst_NodeID = broadcast, the data frame is sent to the 802.11 broadcast MAC address. Otherwise with a specific NodeID, the data frame is sent to the actual MAC address for that device.&lt;br /&gt;
&lt;br /&gt;
Official application data is normally stored here as big-endian.&lt;br /&gt;
&lt;br /&gt;
Application data packets are sent to the host using 802.11 unicast, which then acts as a router and forwards the packet to the right destination node id based on the SecureData header using either broadcast or unicast, it is not yet known how it chooses which to use.&lt;br /&gt;
&lt;br /&gt;
==Special data channels==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Channel&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| Used when broadcasting the updated node information after a new client connects.&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Used when sending what appears to be &amp;quot;ping&amp;quot; or &amp;quot;null&amp;quot; frames.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| Used to signal the ejection of all spectators in the network.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SecureData NWM header==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Size of the entire frame minus the 8 bytes from the LLC header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Size of the entire frame minus 12 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Data channel. Applications can only use the low 8 bits, channels greater than 255 are reserved for management functions.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x2&lt;br /&gt;
| Sequence number, incremented after each sent packet.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x2&lt;br /&gt;
| Destination network node id&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x2&lt;br /&gt;
| Source network node id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==EAPoL-Start frame==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Always 0x201 in big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Association id of the sending client in big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Always 0x1 in big-endian. The parser for this packet errors out if this is &amp;gt; 3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| NodeInfo structure with all fields in big-endian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==EAPoL-Logoff frame==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Always 0x202 in big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Always 0?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Assigned network node id.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x6&lt;br /&gt;
| Mac address of the newly connected client.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x1&lt;br /&gt;
| Number of connected nodes, including the new client.&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| 0x1&lt;br /&gt;
| Max number of nodes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x2&lt;br /&gt;
| Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x280&lt;br /&gt;
| List of 16 NodeInfo structures with all fields in big-endian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==Structure used for generating the CTR for CCMP key generation==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| id8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian.&lt;br /&gt;
&lt;br /&gt;
==CTR used for beacon tags crypto==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding, value zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian. All data here is all-zero except for the MAC address, when the u8 at offset 0x8 in the network-struct is 0.&lt;br /&gt;
&lt;br /&gt;
==Network structure==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| This is the MAC address of the host. This is used for when [[NWMUDS:ConnectToNetwork|connecting]] to the network.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| This is actually written as an u16 without byte-swapping. This is the network wifi channel. When connecting this is normally non-zero. When hosting, this can be 0 to automatically select a channel, otherwise the specified channel is used. When non-zero official user-processes require this value to be one of the following when hosting: 1, 6, or 11.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| Initialized flag. Must be non-zero otherwise NWM-module will use value 0x0 for most/all(?) fields in this structure when reading these fields.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x3&lt;br /&gt;
| This is the OUI value for use with the beacon tags. Normally this is 001F32.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (21/0x15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID. Local-WLAN communication ID, normally this is: (user_process [[Title_list|uniqueID]] &amp;lt;&amp;lt; 8) | val. Where val is 0x10 on retail([[Configuration_Memory#ENVINFO|ENVINFO]] bit0 set), 0x90 for devunit. Official software includes an input bool flag parameter for setting bit0 in this wlancommID, normally that flag isn&#039;t set. For [[Download Play]], this is always 0x2810 on retail(0x2890 on devunit).&lt;br /&gt;
&lt;br /&gt;
This wlancommID can have the side affect of region-locking when the title uses the uniqueID for the current title(hard-coded in .text normally), instead of using a fixed input uniqueID for each region of the title.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8. ID, for [[Download Play]] this is 0x55. 0x55/&#039;U&#039; seems to be used for networks where Wii U can host it(Download Play, Smash Bros, ...) - this value isn&#039;t known to be actually checked anywhere however.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x1&lt;br /&gt;
| Number of times the network structure hash was updated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x2&lt;br /&gt;
| This network attributes u16 bitmask can be written via [[NWMUDS:UpdateNetworkAttribute]].&lt;br /&gt;
Bitmasks:&lt;br /&gt;
* 0x1: When set, spectators are not allowed to connect(see [[NWMUDS:EjectSpectator|here]]). Checked by official user-processes before using [[NWMUDS:ConnectToNetwork]], when connecting as a Spectator. Must be clear otherwise that code returns error 0xE10113EA. If the initialized_flag at offset 0x8 is zero, this code handles it the same way as if this bit was set. The latest NWM-module handles checking this bit itself however.&lt;br /&gt;
* 0x2: When set, new regular-clients are not allowed to connect.&lt;br /&gt;
* 0x4: Unknown, has no affect on new clients/spectators connecting. Official software has an option for setting this bit via an input flag from the same code using bitmask 0x2. Official software always clears bitmask 0x6 when unblocking new connections.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 networkID, randomly-generated when creating the network. The network SSID used when a client connects to the network is sprintf(out, &amp;quot;%08X&amp;quot;, networkID).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x1&lt;br /&gt;
| Total number of currently connected nodes, including the host.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 0x1&lt;br /&gt;
| Maximum number of nodes, including the host. This also is the total number of entries stored under the array in the encrypted beacon data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0xD&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| 0x14&lt;br /&gt;
| SHA1 hash of the network structure, starting at the OUI field (offset 0xC) and spanning SizeOfAppData + 0x34. The unused space of the app data buffer is not hashed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0xC8&lt;br /&gt;
| Appdata(Application data), if any. Size of the appdata is specified via the u8 at offset 0x3F. This data is not used when the size-field is zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This 0x108-byte structure is used for [[NWMUDS:BeginHostingNetwork]], [[NWMUDS:ConnectToNetwork]], etc. This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==NodeInfo structure==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| u64 ID, this is the UDS version of the FriendCodeSeed. This is loaded from BlkID 0x00090000 in the [[Config_Savegame|system-config]] via [[CfgS:GetConfigInfoBlk2]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x14&lt;br /&gt;
| The first 0x18-bytes from BlkID 0x000A0000 in the [[Config_Savegame|system-config]] loaded via [[CfgS:GetConfigInfoBlk2]] is written here by user-processes. However, the data at +0x14(absolute offset 0x1C) is written by NWM-module later.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16, unknown. Set to 0x0 with the output from [[NWMUDS:DecryptBeaconData]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8 flag, unknown. Originates from the u16 bitmask in the beacon node-list header. This flag is normally 0 since that bitmask is normally 0?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Normally zero?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first 0x20-bytes are written by the user-process before using this structure with [[NWMUDS:InitializeWithVersion]]. The data starting at offset 0x8 is only initialized by NWM-module.&lt;br /&gt;
&lt;br /&gt;
== UDS Beacons ==&lt;br /&gt;
The UDS host broadcasts a beacon containing at least two Nintendo-vendor tags(tag number 0xDD, see above for the OUI), normally the data stored in these tags are static. The second tag contains the big-endian u32 networkID, used by the clients when connecting to the host and for the above CCMP key generation. The Nintendo-vendor tag(s) following the first two are unique to the process using UDS, these tags are used for broadcasting metadata regarding the host.&lt;br /&gt;
&lt;br /&gt;
A tool for these beacons is available here: [https://github.com/yellows8/ctr-wlanbeacontool]&lt;br /&gt;
&lt;br /&gt;
=== UDS Beacon Tags ===&lt;br /&gt;
The following is the structure of each tag, starting at the OUI. The order of the tags is the same as listed below. All data stored under these tags are stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 20 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (20/0x14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x3&lt;br /&gt;
| Sample data: 0a 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x07.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 21 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1F&lt;br /&gt;
| This is the network structure starting at offset 0xC, with the first 0x1F-bytes from there.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x14&lt;br /&gt;
| SHA1 hash. When doing the hashing, this hash is cleared to zero. The hash data starts at offset 0x0(OUI), and the size is 0x34 + &amp;lt;value of the u8 at offset 0x33&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata. Normally zero. When non-zero this appdata is located at offset 0x34.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x34, not including appdata.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 24 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (24/0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See below&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the tag0 used with [[NWMUDS:DecryptBeaconData]]. The size of data stored under this tag has a maximum size of 0xFA-bytes, however normally the size is smaller than that. Additional encrypted data, if any, is stored under the below tag1.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 25 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (25/0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See above&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When this exists in the beacon, this is the tag1 used with [[NWMUDS:DecryptBeaconData]]. The data stored here is the 0xFA-bytes following the previous encrypted data in tag0, for more space for storing the encrypted data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Encrypted beacon data ====&lt;br /&gt;
The following structure is for the plaintext version of the encrypted data, stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
This data is encrypted with AES-CTR, by NWM module in software. The AES key is stored in NWM module itself. See above for the CTR. The size of this encrypted data is 0x12 + (0x1E*val), where val is the u8 from networkstruct offset 0x1D.&lt;br /&gt;
&lt;br /&gt;
===== Structure =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| MD5 over the rest of the data following this(plaintext).&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 bitmask. Unknown, normally 0? Bit0 is for entry0, bit1 for entry1, and so on.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x1E * &amp;lt;total array entries&amp;gt;&lt;br /&gt;
| This is an array of entries for each of the devices on this network, the first entry is for the host and the rest is for the client(s).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Array entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1C&lt;br /&gt;
| This is the first 0x1C-bytes of the NodeInfo structure, stored as big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID, stored as big-endian.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry is for a node.&lt;br /&gt;
&lt;br /&gt;
= Mapped IO =&lt;br /&gt;
&#039;&#039;All&#039;&#039; of the [[IO_Registers|IO]] mapped under the NWM-module process is listed below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Userland address&lt;br /&gt;
!  Physical address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC22000&lt;br /&gt;
| 0x10122000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[WIFI_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC40000&lt;br /&gt;
| 0x10140000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[PDN_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EE22000&lt;br /&gt;
| 0x10322000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Errors=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A06C0D&lt;br /&gt;
| The operation being performed is already done (e.g., if you run NWMEXT_ControlWirelessEnabled to turn wifi on when it&#039;s on already, you can&#039;t turn it on again).&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A113EA&lt;br /&gt;
| Returned when the command isn&#039;t allowed to be used on this device.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC90113FA&lt;br /&gt;
| Node doesn&#039;t exist / invalid NetworkNodeID?&lt;br /&gt;
|-&lt;br /&gt;
| 0xC92113FB&lt;br /&gt;
| Returned when trying to connect to a host when the host has the specified connection-type blocked via the network attributes. There might be other causes too.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113E9&lt;br /&gt;
| Returned when the input size is invalid. Returned by [[NWMUDS:PullPacket]] when the input size is smaller than the frame_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113EA&lt;br /&gt;
| Invalid bind / data_channel is invalid(0x0).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:GetNodeInformationList&amp;diff=22264</id>
		<title>NWMUDS:GetNodeInformationList</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:GetNodeInformationList&amp;diff=22264"/>
		<updated>2023-07-23T04:39:43Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x001F0006]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| (NetworkStructSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Input network struct buffer ptr&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| (Tag0BufSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Tag0 data buffer ptr&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| (Tag1BufSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0xC02&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Tag1 data buffer ptr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following is located 0x100-bytes after the beginning of the above command buffer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| (Size&amp;lt;&amp;lt;14)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Ptr to output buffer, size is hard-coded to 0x280.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
The sizes of the input/output buffers are hard-coded. The tag-data buffers begin at the OUI field in the tags(this data is from [[NWMUDS:StartScan]]). Normally tag1buf is unused(all-zero), tag1 is only used when the crypt-size is larger than 0xFA. The decrypted data is byte-swapped to little-endian when copying to the output buffer.&lt;br /&gt;
&lt;br /&gt;
While the input tag-data can be from arbitrary tags, the user-process normally uses OUI type 24/0x18 for tag0 and type 25/0x19 for tag1(when it exists).&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=22263</id>
		<title>NWM Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=22263"/>
		<updated>2023-07-23T04:39:05Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* NWM local-WLAN service &amp;quot;nwm::UDS&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
These NWM services are used for local-WLAN communications, NWM module handles regular wifi APs as well. These services are used for creating/connecting to networks, and for sending/receiving data over the network etc. NWM module uses the wifi SDIO hardware via the IO registers for this.&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN service &amp;quot;nwm::UDS&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000102C2&lt;br /&gt;
| &lt;br /&gt;
| Initialize Deprecated. Appears to be handled about the same way as [[NWMUDS:InitializeWithVersion]], except this uses version=0x100 internally instead of loading it from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &lt;br /&gt;
| Scrap Not used by sub-wars. This sets a state value to 0x2 then signals an event. This is probably some sort of shutdown command since this state write will result in all UDS commands returning an error if used afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Finalize|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040402&lt;br /&gt;
| &lt;br /&gt;
| CreateNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
|&lt;br /&gt;
| [[NWMUDS:EjectClient|EjectClient]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:EjectSpectator|EjectSpectator]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:UpdateNetworkAttribute|UpdateNetworkAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DestroyNetwork|DestroyNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090442&lt;br /&gt;
| &lt;br /&gt;
| ConnectNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DisconnectNetwork|DisconnectNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetConnectionStatus|GetConnectionStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| &lt;br /&gt;
| This writes two output u8 values to cmdreply[2] +0/+1. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetNodeInformation|GetNodeInformation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0006&lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Identical&#039;&#039; to [[NWMUDS:DecryptBeaconData|DecryptBeaconData]]. Deprecated, only used by old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0404&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:StartScan|StartScan]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SetApplicationData|SetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetApplicationData|GetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120100&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Bind|Bind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Unbind|Unbind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C0&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:PullPacket|PullPacket]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150080&lt;br /&gt;
| &lt;br /&gt;
| SetMaxSendDelay(u64 unk) Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170182&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SendTo|SendTo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| (u16 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| (u32 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetChannel|GetChannel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0302&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:InitializeWithVersion|InitializeWithVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0044&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:CreateNetwork2|CreateNetwork2]] This is a replacement for the original network-creation command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ConnectNetwork2|ConnectNetwork2]] This is a replacement for the original network-connection command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0006&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:GetNodeInformationList|GetNodeInformationList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200040&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| Flush (u8 data_frame_index) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210080&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:SetProbeResponseParam|SetProbeResponseParam]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220402&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ScanOnConnection|ScanOnConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| This writes an output u16 value to cmdreply[2]. Unknown. Not used by sub-wars.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PullPacket is used for receiving data over the network and SendTo is for sending data over the network.&lt;br /&gt;
&lt;br /&gt;
=NWM infrastructure service &amp;quot;nwm::INF&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000603C4&lt;br /&gt;
| [[NWMINF:RecvBeaconBroadcastData|RecvBeaconBroadcastData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070742&lt;br /&gt;
| [[NWMINF:ConnectToEncryptedAP|ConnectToEncryptedAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080302&lt;br /&gt;
| [[NWMINF:ConnectToAP|ConnectToAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| ?, return event handle in cmdbuf[3]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM socket service &amp;quot;nwm::SOC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010042&lt;br /&gt;
| (u32 size, &amp;lt;static_buffer translate-hdr with static_buf_id=0&amp;gt;, addr) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| (u32 unk, u32 size) Unknown. Uses size=0x5F8 internally unless the input is &amp;lt;=0x5F8. Uses an ipc static_buffer(static_buf_id=0) for output with the specified size(also used when writing the translate-hdr). Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030042&lt;br /&gt;
| (u32 unk, u32 size, &amp;lt;static_buffer translate-hdr with static_buf_id=0&amp;gt;, addr) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040042&lt;br /&gt;
| (u32 size, u32 unk, &amp;lt;static_buffer translate-hdr with static_buf_id=1&amp;gt;, addr) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| (u32 unk) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| (u32 unk0, u16 unk1) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| (u16 unk) This writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080040&lt;br /&gt;
| [[NWMSOC:GetMACAddress|GetMACAddress]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| This just copies data from state to the cmdreply, this always returns 0. u32 cmdreply[2] = sharedmem_size, cmdreply[4] = [[NWM_Shared_Memory|sharedmem_handle]], cmdreply[5] = eventhandle.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| (u32 unk) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| (u32 unk) This writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| (u32 unk) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0002&lt;br /&gt;
| ([[IPC|kernel_processid_translatehdr]], u32 processid) ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The only sysmodule which uses this is [[Socket_Services|socket]]-sysmodule. The first command used by socket-module is cmd9.&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::SAP&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN [[StreetPass]] service &amp;quot;nwm::CEC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060002&lt;br /&gt;
| Unknown, called by CECD module, cmdbuf[2] takes an event handle.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| [[NWMCEC:SendProbeRequest|SendProbeRequest]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::EXT&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| This copies 0x1C-bytes from NWM-module state to the data starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080040&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| [[NWMEXT:ControlWirelessEnabled|ControlWirelessEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::TST&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=BeaconDataReply Structure=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Max output size, from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total amount of output data written relative to struct+0. 0xC when there&#039;s no entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total entries, 0 for none.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| &amp;lt;Rest of the structure&amp;gt;&lt;br /&gt;
| Beacon entries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beacon entry:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of this entire entry. The next entry starts at curentry_startoffset+curentry_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| AP wifi channel.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| AP MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of this entire entry, games use this value to traverse the beacons list.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Value 0x1C(size of this header and/or offset to the actual beacon data).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Entry_size - 0x1C&lt;br /&gt;
| The actual beacon data is located here, starting at the 802.11 management frame header.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the structure returned by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=ScanInputStruct=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| Host MAC address. The 6-bytes located here are normally all 0xFF, for all hosts. Otherwise when not set to broadcast-MAC, the command will only return info for the specified host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 4-12&lt;br /&gt;
| Uninitialized for UDS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the 0x34-byte input structure used by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=Local-WLAN=&lt;br /&gt;
UDS is used for 3DS&amp;lt;&amp;gt;3DS local-WLAN communications, and for 3DS&amp;lt;&amp;gt;Wii U communications. The latter is mainly only used for multi-player in games.&lt;br /&gt;
&lt;br /&gt;
All UDS local-WLAN communications have the CCMP key for data encryption generated via NWM module. The CCMP key passed to nwm::CEC commands(stored in a 0x44-byte input structure) for [[StreetPass]] is generated by the CECD module. The input data used with [[Process_Services|EncryptDecryptAes]] with [[PSPXI:EncryptDecryptAes|keytype1]] is a MD5 hash over the input passphrase. This input passphrase is fixed for [[Download Play]], it&#039;s unique per local-WLAN application. The CTR is a MD5 hash over the below 0x10-byte structure. The output from encrypting that data with AES-CTR is the final CCMP key. This passphrase is a raw input buffer: while the passphrase specified by user-processes is normally a string with the NUL-terminator included, it can be anything(like the [[DLP_Services|WirelessRebootPassphrase]] for example).&lt;br /&gt;
&lt;br /&gt;
The maximum number of nodes(including the host) which can be on an UDS network is 16.&lt;br /&gt;
&lt;br /&gt;
==NodeID==&lt;br /&gt;
There are two types of client connections: regular Client, and Spectator. The latter &#039;&#039;never&#039;&#039; sends &#039;&#039;any&#039;&#039; 802.11 frame at all to the host, hence &#039;&#039;nothing&#039;&#039; actually connected to the network(including the host) can know about any spectators. Once a spectator is &amp;quot;connected&amp;quot; to a network, it can only receive broadcasted data, no sending.&lt;br /&gt;
&lt;br /&gt;
DLP-client connects to the network as a spectator during DLP scanning to get various [[Download_Play|metadata]] including icon data.&lt;br /&gt;
&lt;br /&gt;
===NetworkNodeID===&lt;br /&gt;
This is the network u16 ID for each device on the UDS network. NodeID 0xFFFF is a broadcast alias. 0x1 is for the host, the 0x2 for the first client, 0x3 for the second client, and so on.&lt;br /&gt;
&lt;br /&gt;
The spectator doesn&#039;t have a NetworkNodeID, since it can&#039;t [[NWMUDS:SendTo|send]] any data.&lt;br /&gt;
&lt;br /&gt;
NetworkNodeIDs for clients do not change when any clients disconnect, likewise for the encrypted node-listing stored in the wifi beacons. When a client disconnects, the corresponding NetworkNodeID bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]] is cleared. When a client is connecting, the client is assigned the NetworkNodeID with the lowest corresponding clear-bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]], then that bit is set.&lt;br /&gt;
&lt;br /&gt;
===BindNodeID===&lt;br /&gt;
This u32 is an ID only used on the local device. How many devices are on the network or which device this system is does not affect this ID.&lt;br /&gt;
&lt;br /&gt;
The spectator uses BindNodeID 0x1. DLP uses BindNodeID 0x3 when connecting as an actual client. Hence, it seems BindNodeID bit0 is spectator-related. All normal nodes(host/client) start with BindNodeID 0x2. When connecting to a network again(and probably with network creation) without reinitializing NWMUDS, official user processes increase the used BindNodeID by 0x2.&lt;br /&gt;
&lt;br /&gt;
BindNodeID value 0x0 is invalid. The maximum number of BindNodeIDs which can be open at the same time is 16.&lt;br /&gt;
&lt;br /&gt;
==Application data transfer==&lt;br /&gt;
The protocol used for sending/receiving data over the network with UDS by official applications is [[PRUDP]](in some cases at least). Mario Kart 7 uses PRUDP here. Triforce Heroes uses plaintext for whatever protocol it uses for UDS.&lt;br /&gt;
&lt;br /&gt;
The UDS version of [[PRUDP]] is different from the normal UDP version it appears(no afa1/a1af data for example).&lt;br /&gt;
&lt;br /&gt;
==Communication protocol==&lt;br /&gt;
The process of connecting to a host and exchanging data follows the sequence:&lt;br /&gt;
&lt;br /&gt;
Client-&amp;gt;Server: Authentication frame SEQ1&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Client: Authentication frame SEQ2&lt;br /&gt;
&lt;br /&gt;
[There does not appear to be an association request frame sent by the client to the server, it is however possible that it was sent and just not captured by the test equipment]&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Client: Association Response frame with association id&lt;br /&gt;
&lt;br /&gt;
[From here on, the client is connected to the server]&lt;br /&gt;
&lt;br /&gt;
Client-&amp;gt;Server: Encrypted data packet containing an 8-byte 802.2 LLC header with ethertype = EAPoL (0x888E) and an u16 header of 0x201 ([[NWM_Services#EAPoL-Start frame|EAPoL-Start]])&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Broadcast: Encrypted data packet containing the updated node information after the client connected (Using ethertype = SecureData).&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Client: Encrypted data packet containing an 8-byte 802.2 LLC header with ethertype = EAPoL (0x888E) and an u16 header of 0x0202([[NWM_Services#EAPoL-Logoff frame|EAPoL-Logoff]])&lt;br /&gt;
&lt;br /&gt;
[From here on, data packets sent using SendTo are encapsulated with an LLC header with ethertype = 0x876D ([[NWM_Services#SecureData NWM header|SecureData]])]&lt;br /&gt;
&lt;br /&gt;
[The client also sends periodic SecureData data frames on its own, these are probably ping frames]&lt;br /&gt;
&lt;br /&gt;
==Data frames==&lt;br /&gt;
Data is transferred over the network using [[NWMUDS:PullPacket]]/[[NWMUDS:SendTo]]. That data is transferred using 802.11 data frames using CCMP encryption. The encrypted data contained in the frame starts with the 0x8-byte [https://en.wikipedia.org/wiki/Subnetwork_Access_Protocol#Use LLC header], then the 0xE-byte NWM header, followed by the actual application data from the previously mentioned commands. When [[NWMUDS:SendTo]] was used with dst_NodeID = broadcast, the data frame is sent to the 802.11 broadcast MAC address. Otherwise with a specific NodeID, the data frame is sent to the actual MAC address for that device.&lt;br /&gt;
&lt;br /&gt;
Official application data is normally stored here as big-endian.&lt;br /&gt;
&lt;br /&gt;
Application data packets are sent to the host using 802.11 unicast, which then acts as a router and forwards the packet to the right destination node id based on the SecureData header using either broadcast or unicast, it is not yet known how it chooses which to use.&lt;br /&gt;
&lt;br /&gt;
==Special data channels==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Channel&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| Used when broadcasting the updated node information after a new client connects.&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Used when sending what appears to be &amp;quot;ping&amp;quot; or &amp;quot;null&amp;quot; frames.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| Used to signal the ejection of all spectators in the network.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SecureData NWM header==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Size of the entire frame minus the 8 bytes from the LLC header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Size of the entire frame minus 12 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Data channel. Applications can only use the low 8 bits, channels greater than 255 are reserved for management functions.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x2&lt;br /&gt;
| Sequence number, incremented after each sent packet.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x2&lt;br /&gt;
| Destination network node id&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x2&lt;br /&gt;
| Source network node id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==EAPoL-Start frame==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Always 0x201 in big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Association id of the sending client in big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Always 0x1 in big-endian. The parser for this packet errors out if this is &amp;gt; 3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| NodeInfo structure with all fields in big-endian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==EAPoL-Logoff frame==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Always 0x202 in big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Always 0?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Assigned network node id.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x6&lt;br /&gt;
| Mac address of the newly connected client.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x1&lt;br /&gt;
| Number of connected nodes, including the new client.&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| 0x1&lt;br /&gt;
| Max number of nodes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x2&lt;br /&gt;
| Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x280&lt;br /&gt;
| List of 16 NodeInfo structures with all fields in big-endian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==Structure used for generating the CTR for CCMP key generation==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| id8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian.&lt;br /&gt;
&lt;br /&gt;
==CTR used for beacon tags crypto==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding, value zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian. All data here is all-zero except for the MAC address, when the u8 at offset 0x8 in the network-struct is 0.&lt;br /&gt;
&lt;br /&gt;
==Network structure==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| This is the MAC address of the host. This is used for when [[NWMUDS:ConnectToNetwork|connecting]] to the network.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| This is actually written as an u16 without byte-swapping. This is the network wifi channel. When connecting this is normally non-zero. When hosting, this can be 0 to automatically select a channel, otherwise the specified channel is used. When non-zero official user-processes require this value to be one of the following when hosting: 1, 6, or 11.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| Initialized flag. Must be non-zero otherwise NWM-module will use value 0x0 for most/all(?) fields in this structure when reading these fields.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x3&lt;br /&gt;
| This is the OUI value for use with the beacon tags. Normally this is 001F32.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (21/0x15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID. Local-WLAN communication ID, normally this is: (user_process [[Title_list|uniqueID]] &amp;lt;&amp;lt; 8) | val. Where val is 0x10 on retail([[Configuration_Memory#ENVINFO|ENVINFO]] bit0 set), 0x90 for devunit. Official software includes an input bool flag parameter for setting bit0 in this wlancommID, normally that flag isn&#039;t set. For [[Download Play]], this is always 0x2810 on retail(0x2890 on devunit).&lt;br /&gt;
&lt;br /&gt;
This wlancommID can have the side affect of region-locking when the title uses the uniqueID for the current title(hard-coded in .text normally), instead of using a fixed input uniqueID for each region of the title.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8. ID, for [[Download Play]] this is 0x55. 0x55/&#039;U&#039; seems to be used for networks where Wii U can host it(Download Play, Smash Bros, ...) - this value isn&#039;t known to be actually checked anywhere however.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x1&lt;br /&gt;
| Number of times the network structure hash was updated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x2&lt;br /&gt;
| This network attributes u16 bitmask can be written via [[NWMUDS:UpdateNetworkAttribute]].&lt;br /&gt;
Bitmasks:&lt;br /&gt;
* 0x1: When set, spectators are not allowed to connect(see [[NWMUDS:EjectSpectator|here]]). Checked by official user-processes before using [[NWMUDS:ConnectToNetwork]], when connecting as a Spectator. Must be clear otherwise that code returns error 0xE10113EA. If the initialized_flag at offset 0x8 is zero, this code handles it the same way as if this bit was set. The latest NWM-module handles checking this bit itself however.&lt;br /&gt;
* 0x2: When set, new regular-clients are not allowed to connect.&lt;br /&gt;
* 0x4: Unknown, has no affect on new clients/spectators connecting. Official software has an option for setting this bit via an input flag from the same code using bitmask 0x2. Official software always clears bitmask 0x6 when unblocking new connections.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 networkID, randomly-generated when creating the network. The network SSID used when a client connects to the network is sprintf(out, &amp;quot;%08X&amp;quot;, networkID).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x1&lt;br /&gt;
| Total number of currently connected nodes, including the host.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 0x1&lt;br /&gt;
| Maximum number of nodes, including the host. This also is the total number of entries stored under the array in the encrypted beacon data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0xD&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| 0x14&lt;br /&gt;
| SHA1 hash of the network structure, starting at the OUI field (offset 0xC) and spanning SizeOfAppData + 0x34. The unused space of the app data buffer is not hashed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0xC8&lt;br /&gt;
| Appdata(Application data), if any. Size of the appdata is specified via the u8 at offset 0x3F. This data is not used when the size-field is zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This 0x108-byte structure is used for [[NWMUDS:BeginHostingNetwork]], [[NWMUDS:ConnectToNetwork]], etc. This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==NodeInfo structure==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| u64 ID, this is the UDS version of the FriendCodeSeed. This is loaded from BlkID 0x00090000 in the [[Config_Savegame|system-config]] via [[CfgS:GetConfigInfoBlk2]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x14&lt;br /&gt;
| The first 0x18-bytes from BlkID 0x000A0000 in the [[Config_Savegame|system-config]] loaded via [[CfgS:GetConfigInfoBlk2]] is written here by user-processes. However, the data at +0x14(absolute offset 0x1C) is written by NWM-module later.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16, unknown. Set to 0x0 with the output from [[NWMUDS:DecryptBeaconData]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8 flag, unknown. Originates from the u16 bitmask in the beacon node-list header. This flag is normally 0 since that bitmask is normally 0?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Normally zero?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first 0x20-bytes are written by the user-process before using this structure with [[NWMUDS:InitializeWithVersion]]. The data starting at offset 0x8 is only initialized by NWM-module.&lt;br /&gt;
&lt;br /&gt;
== UDS Beacons ==&lt;br /&gt;
The UDS host broadcasts a beacon containing at least two Nintendo-vendor tags(tag number 0xDD, see above for the OUI), normally the data stored in these tags are static. The second tag contains the big-endian u32 networkID, used by the clients when connecting to the host and for the above CCMP key generation. The Nintendo-vendor tag(s) following the first two are unique to the process using UDS, these tags are used for broadcasting metadata regarding the host.&lt;br /&gt;
&lt;br /&gt;
A tool for these beacons is available here: [https://github.com/yellows8/ctr-wlanbeacontool]&lt;br /&gt;
&lt;br /&gt;
=== UDS Beacon Tags ===&lt;br /&gt;
The following is the structure of each tag, starting at the OUI. The order of the tags is the same as listed below. All data stored under these tags are stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 20 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (20/0x14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x3&lt;br /&gt;
| Sample data: 0a 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x07.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 21 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1F&lt;br /&gt;
| This is the network structure starting at offset 0xC, with the first 0x1F-bytes from there.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x14&lt;br /&gt;
| SHA1 hash. When doing the hashing, this hash is cleared to zero. The hash data starts at offset 0x0(OUI), and the size is 0x34 + &amp;lt;value of the u8 at offset 0x33&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata. Normally zero. When non-zero this appdata is located at offset 0x34.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x34, not including appdata.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 24 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (24/0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See below&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the tag0 used with [[NWMUDS:DecryptBeaconData]]. The size of data stored under this tag has a maximum size of 0xFA-bytes, however normally the size is smaller than that. Additional encrypted data, if any, is stored under the below tag1.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 25 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (25/0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See above&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When this exists in the beacon, this is the tag1 used with [[NWMUDS:DecryptBeaconData]]. The data stored here is the 0xFA-bytes following the previous encrypted data in tag0, for more space for storing the encrypted data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Encrypted beacon data ====&lt;br /&gt;
The following structure is for the plaintext version of the encrypted data, stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
This data is encrypted with AES-CTR, by NWM module in software. The AES key is stored in NWM module itself. See above for the CTR. The size of this encrypted data is 0x12 + (0x1E*val), where val is the u8 from networkstruct offset 0x1D.&lt;br /&gt;
&lt;br /&gt;
===== Structure =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| MD5 over the rest of the data following this(plaintext).&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 bitmask. Unknown, normally 0? Bit0 is for entry0, bit1 for entry1, and so on.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x1E * &amp;lt;total array entries&amp;gt;&lt;br /&gt;
| This is an array of entries for each of the devices on this network, the first entry is for the host and the rest is for the client(s).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Array entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1C&lt;br /&gt;
| This is the first 0x1C-bytes of the NodeInfo structure, stored as big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID, stored as big-endian.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry is for a node.&lt;br /&gt;
&lt;br /&gt;
= Mapped IO =&lt;br /&gt;
&#039;&#039;All&#039;&#039; of the [[IO_Registers|IO]] mapped under the NWM-module process is listed below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Userland address&lt;br /&gt;
!  Physical address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC22000&lt;br /&gt;
| 0x10122000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[WIFI_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC40000&lt;br /&gt;
| 0x10140000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[PDN_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EE22000&lt;br /&gt;
| 0x10322000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Errors=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A06C0D&lt;br /&gt;
| The operation being performed is already done (e.g., if you run NWMEXT_ControlWirelessEnabled to turn wifi on when it&#039;s on already, you can&#039;t turn it on again).&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A113EA&lt;br /&gt;
| Returned when the command isn&#039;t allowed to be used on this device.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC90113FA&lt;br /&gt;
| Node doesn&#039;t exist / invalid NetworkNodeID?&lt;br /&gt;
|-&lt;br /&gt;
| 0xC92113FB&lt;br /&gt;
| Returned when trying to connect to a host when the host has the specified connection-type blocked via the network attributes. There might be other causes too.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113E9&lt;br /&gt;
| Returned when the input size is invalid. Returned by [[NWMUDS:PullPacket]] when the input size is smaller than the frame_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113EA&lt;br /&gt;
| Invalid bind / data_channel is invalid(0x0).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:DecryptBeaconData&amp;diff=22262</id>
		<title>NWMUDS:DecryptBeaconData</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:DecryptBeaconData&amp;diff=22262"/>
		<updated>2023-07-23T04:38:58Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:DecryptBeaconData to NWMUDS:GetNodeInformationList&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[NWMUDS:GetNodeInformationList]]&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:GetNodeInformationList&amp;diff=22261</id>
		<title>NWMUDS:GetNodeInformationList</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:GetNodeInformationList&amp;diff=22261"/>
		<updated>2023-07-23T04:38:58Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:DecryptBeaconData to NWMUDS:GetNodeInformationList&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x001F0006]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| (NetworkStructSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Input network struct buffer ptr&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| (Tag0BufSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Tag0 data buffer ptr&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| (Tag1BufSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0xC02&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Tag1 data buffer ptr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following is located 0x100-bytes after the beginning of the above command buffer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| (Size&amp;lt;&amp;lt;14)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Ptr to output buffer, size is hard-coded to 0x280.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
The sizes of the input/output buffers are hard-coded. The tag-data buffers begin at the OUI field in the tags(this data is from [[NWMUDS:RecvBeaconBroadcastData]]). Normally tag1buf is unused(all-zero), tag1 is only used when the crypt-size is larger than 0xFA. The decrypted data is byte-swapped to little-endian when copying to the output buffer.&lt;br /&gt;
&lt;br /&gt;
While the input tag-data can be from arbitrary tags, the user-process normally uses OUI type 24/0x18 for tag0 and type 25/0x19 for tag1(when it exists).&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:ConnectToNetwork&amp;diff=22260</id>
		<title>NWMUDS:ConnectToNetwork</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:ConnectToNetwork&amp;diff=22260"/>
		<updated>2023-07-23T04:38:56Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:ConnectToNetwork to NWMUDS:ConnectNetwork2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[NWMUDS:ConnectNetwork2]]&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:ConnectNetwork2&amp;diff=22259</id>
		<title>NWMUDS:ConnectNetwork2</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:ConnectNetwork2&amp;diff=22259"/>
		<updated>2023-07-23T04:38:56Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:ConnectToNetwork to NWMUDS:ConnectNetwork2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x001E0084]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| u8 Connection type: 0x1 = Client, 0x2 = Spectator.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [[NWM_Services|Passphrase]] buffer size&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| (NetworkStructSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Input network struct buffer ptr&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| (PassphraseSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Input passphrase buffer ptr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This connects to the specified network.&lt;br /&gt;
&lt;br /&gt;
Before using this command official user-processes verify that the passphrase_buf is not NULL, and that PassphraseSize is &amp;gt;=8 and &amp;lt;=0xFF. On fail that user-process code returns 0xE10113FD for that. That user-process code also checks the network attributes bitmask 0x1, see [[NWM_Services|here]].&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:BeginHostingNetwork&amp;diff=22258</id>
		<title>NWMUDS:BeginHostingNetwork</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:BeginHostingNetwork&amp;diff=22258"/>
		<updated>2023-07-23T04:38:54Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:BeginHostingNetwork to NWMUDS:CreateNetwork2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[NWMUDS:CreateNetwork2]]&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:CreateNetwork2&amp;diff=22257</id>
		<title>NWMUDS:CreateNetwork2</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:CreateNetwork2&amp;diff=22257"/>
		<updated>2023-07-23T04:38:54Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:BeginHostingNetwork to NWMUDS:CreateNetwork2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x001D0044]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [[NWM_Services|Passphrase]] buffer size&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| (NetworkStructSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Input network [[NWM_Services|struct]] buffer ptr&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| (PassphraseSize&amp;lt;&amp;lt;12)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Input passphrase buffer ptr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This begins hosting an UDS local-WLAN AP. NWM-module itself throws a fatal-error if the max_nodes field in the NetworkStruct is set to 0x1.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:RecvBeaconBroadcastData&amp;diff=22256</id>
		<title>NWMUDS:RecvBeaconBroadcastData</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:RecvBeaconBroadcastData&amp;diff=22256"/>
		<updated>2023-07-23T04:38:51Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:RecvBeaconBroadcastData to NWMUDS:StartScan&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[NWMUDS:StartScan]]&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:StartScan&amp;diff=22255</id>
		<title>NWMUDS:StartScan</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:StartScan&amp;diff=22255"/>
		<updated>2023-07-23T04:38:51Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:RecvBeaconBroadcastData to NWMUDS:StartScan&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x000F0404]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Output buffer max size&lt;br /&gt;
|-&lt;br /&gt;
| 2-14&lt;br /&gt;
| Input [[NWM_Services|ScanInputStruct]].&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| [[NWM_Services|wlancommID]]&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| This is the ID also located at offset 0xE in the CTR-generation [[NWM_Services|structure]].&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Value 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| Input event handle&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| (Size&amp;lt;&amp;lt;4) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 12&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Output [[NWM_Services|BeaconDataReply]] buffer ptr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This returns beacon data for all UDS wifi beacons received by this system, with the specified wlancommID+ID8. See also the scaninput struct.&lt;br /&gt;
&lt;br /&gt;
Official user processes create a new event handle which is then passed to this command. However, those user processes don&#039;t save that handle &#039;&#039;anywhere&#039;&#039; afterwards.&lt;br /&gt;
&lt;br /&gt;
This command can &#039;&#039;only&#039;&#039; be used when not connected to a network.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:Shutdown&amp;diff=22254</id>
		<title>NWMUDS:Shutdown</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:Shutdown&amp;diff=22254"/>
		<updated>2023-07-23T04:38:47Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:Shutdown to NWMUDS:Finalize&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[NWMUDS:Finalize]]&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWMUDS:Finalize&amp;diff=22253</id>
		<title>NWMUDS:Finalize</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWMUDS:Finalize&amp;diff=22253"/>
		<updated>2023-07-23T04:38:47Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Steveice10 moved page NWMUDS:Shutdown to NWMUDS:Finalize&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00030000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=22252</id>
		<title>NWM Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=22252"/>
		<updated>2023-07-23T04:36:59Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Function names from FE Fates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
These NWM services are used for local-WLAN communications, NWM module handles regular wifi APs as well. These services are used for creating/connecting to networks, and for sending/receiving data over the network etc. NWM module uses the wifi SDIO hardware via the IO registers for this.&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN service &amp;quot;nwm::UDS&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000102C2&lt;br /&gt;
| &lt;br /&gt;
| Initialize Deprecated. Appears to be handled about the same way as [[NWMUDS:InitializeWithVersion]], except this uses version=0x100 internally instead of loading it from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &lt;br /&gt;
| Scrap Not used by sub-wars. This sets a state value to 0x2 then signals an event. This is probably some sort of shutdown command since this state write will result in all UDS commands returning an error if used afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Shutdown|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040402&lt;br /&gt;
| &lt;br /&gt;
| CreateNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
|&lt;br /&gt;
| [[NWMUDS:EjectClient|EjectClient]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:EjectSpectator|EjectSpectator]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:UpdateNetworkAttribute|UpdateNetworkAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DestroyNetwork|DestroyNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090442&lt;br /&gt;
| &lt;br /&gt;
| ConnectNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DisconnectNetwork|DisconnectNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetConnectionStatus|GetConnectionStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| &lt;br /&gt;
| This writes two output u8 values to cmdreply[2] +0/+1. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetNodeInformation|GetNodeInformation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0006&lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Identical&#039;&#039; to [[NWMUDS:DecryptBeaconData|DecryptBeaconData]]. Deprecated, only used by old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0404&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:RecvBeaconBroadcastData|StartScan]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SetApplicationData|SetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetApplicationData|GetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120100&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Bind|Bind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Unbind|Unbind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C0&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:PullPacket|PullPacket]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150080&lt;br /&gt;
| &lt;br /&gt;
| SetMaxSendDelay(u64 unk) Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170182&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SendTo|SendTo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| (u16 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| (u32 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetChannel|GetChannel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0302&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:InitializeWithVersion|InitializeWithVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0044&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:BeginHostingNetwork|CreateNetwork2]] This is a replacement for the original network-creation command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ConnectToNetwork|ConnectNetwork2]] This is a replacement for the original network-connection command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0006&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:DecryptBeaconData|GetNodeInformationList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200040&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| Flush (u8 data_frame_index) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210080&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:SetProbeResponseParam|SetProbeResponseParam]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220402&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ScanOnConnection|ScanOnConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| This writes an output u16 value to cmdreply[2]. Unknown. Not used by sub-wars.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PullPacket is used for receiving data over the network and SendTo is for sending data over the network.&lt;br /&gt;
&lt;br /&gt;
=NWM infrastructure service &amp;quot;nwm::INF&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000603C4&lt;br /&gt;
| [[NWMINF:RecvBeaconBroadcastData|RecvBeaconBroadcastData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070742&lt;br /&gt;
| [[NWMINF:ConnectToEncryptedAP|ConnectToEncryptedAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080302&lt;br /&gt;
| [[NWMINF:ConnectToAP|ConnectToAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| ?, return event handle in cmdbuf[3]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM socket service &amp;quot;nwm::SOC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010042&lt;br /&gt;
| (u32 size, &amp;lt;static_buffer translate-hdr with static_buf_id=0&amp;gt;, addr) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| (u32 unk, u32 size) Unknown. Uses size=0x5F8 internally unless the input is &amp;lt;=0x5F8. Uses an ipc static_buffer(static_buf_id=0) for output with the specified size(also used when writing the translate-hdr). Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030042&lt;br /&gt;
| (u32 unk, u32 size, &amp;lt;static_buffer translate-hdr with static_buf_id=0&amp;gt;, addr) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040042&lt;br /&gt;
| (u32 size, u32 unk, &amp;lt;static_buffer translate-hdr with static_buf_id=1&amp;gt;, addr) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| (u32 unk) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| (u32 unk0, u16 unk1) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| (u16 unk) This writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080040&lt;br /&gt;
| [[NWMSOC:GetMACAddress|GetMACAddress]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| This just copies data from state to the cmdreply, this always returns 0. u32 cmdreply[2] = sharedmem_size, cmdreply[4] = [[NWM_Shared_Memory|sharedmem_handle]], cmdreply[5] = eventhandle.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| (u32 unk) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| (u32 unk) This writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| (u32 unk) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0002&lt;br /&gt;
| ([[IPC|kernel_processid_translatehdr]], u32 processid) ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The only sysmodule which uses this is [[Socket_Services|socket]]-sysmodule. The first command used by socket-module is cmd9.&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::SAP&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN [[StreetPass]] service &amp;quot;nwm::CEC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060002&lt;br /&gt;
| Unknown, called by CECD module, cmdbuf[2] takes an event handle.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| [[NWMCEC:SendProbeRequest|SendProbeRequest]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::EXT&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| This copies 0x1C-bytes from NWM-module state to the data starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080040&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| [[NWMEXT:ControlWirelessEnabled|ControlWirelessEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::TST&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=BeaconDataReply Structure=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Max output size, from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total amount of output data written relative to struct+0. 0xC when there&#039;s no entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total entries, 0 for none.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| &amp;lt;Rest of the structure&amp;gt;&lt;br /&gt;
| Beacon entries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beacon entry:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of this entire entry. The next entry starts at curentry_startoffset+curentry_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| AP wifi channel.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| AP MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of this entire entry, games use this value to traverse the beacons list.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Value 0x1C(size of this header and/or offset to the actual beacon data).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Entry_size - 0x1C&lt;br /&gt;
| The actual beacon data is located here, starting at the 802.11 management frame header.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the structure returned by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=ScanInputStruct=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| Host MAC address. The 6-bytes located here are normally all 0xFF, for all hosts. Otherwise when not set to broadcast-MAC, the command will only return info for the specified host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 4-12&lt;br /&gt;
| Uninitialized for UDS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the 0x34-byte input structure used by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=Local-WLAN=&lt;br /&gt;
UDS is used for 3DS&amp;lt;&amp;gt;3DS local-WLAN communications, and for 3DS&amp;lt;&amp;gt;Wii U communications. The latter is mainly only used for multi-player in games.&lt;br /&gt;
&lt;br /&gt;
All UDS local-WLAN communications have the CCMP key for data encryption generated via NWM module. The CCMP key passed to nwm::CEC commands(stored in a 0x44-byte input structure) for [[StreetPass]] is generated by the CECD module. The input data used with [[Process_Services|EncryptDecryptAes]] with [[PSPXI:EncryptDecryptAes|keytype1]] is a MD5 hash over the input passphrase. This input passphrase is fixed for [[Download Play]], it&#039;s unique per local-WLAN application. The CTR is a MD5 hash over the below 0x10-byte structure. The output from encrypting that data with AES-CTR is the final CCMP key. This passphrase is a raw input buffer: while the passphrase specified by user-processes is normally a string with the NUL-terminator included, it can be anything(like the [[DLP_Services|WirelessRebootPassphrase]] for example).&lt;br /&gt;
&lt;br /&gt;
The maximum number of nodes(including the host) which can be on an UDS network is 16.&lt;br /&gt;
&lt;br /&gt;
==NodeID==&lt;br /&gt;
There are two types of client connections: regular Client, and Spectator. The latter &#039;&#039;never&#039;&#039; sends &#039;&#039;any&#039;&#039; 802.11 frame at all to the host, hence &#039;&#039;nothing&#039;&#039; actually connected to the network(including the host) can know about any spectators. Once a spectator is &amp;quot;connected&amp;quot; to a network, it can only receive broadcasted data, no sending.&lt;br /&gt;
&lt;br /&gt;
DLP-client connects to the network as a spectator during DLP scanning to get various [[Download_Play|metadata]] including icon data.&lt;br /&gt;
&lt;br /&gt;
===NetworkNodeID===&lt;br /&gt;
This is the network u16 ID for each device on the UDS network. NodeID 0xFFFF is a broadcast alias. 0x1 is for the host, the 0x2 for the first client, 0x3 for the second client, and so on.&lt;br /&gt;
&lt;br /&gt;
The spectator doesn&#039;t have a NetworkNodeID, since it can&#039;t [[NWMUDS:SendTo|send]] any data.&lt;br /&gt;
&lt;br /&gt;
NetworkNodeIDs for clients do not change when any clients disconnect, likewise for the encrypted node-listing stored in the wifi beacons. When a client disconnects, the corresponding NetworkNodeID bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]] is cleared. When a client is connecting, the client is assigned the NetworkNodeID with the lowest corresponding clear-bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]], then that bit is set.&lt;br /&gt;
&lt;br /&gt;
===BindNodeID===&lt;br /&gt;
This u32 is an ID only used on the local device. How many devices are on the network or which device this system is does not affect this ID.&lt;br /&gt;
&lt;br /&gt;
The spectator uses BindNodeID 0x1. DLP uses BindNodeID 0x3 when connecting as an actual client. Hence, it seems BindNodeID bit0 is spectator-related. All normal nodes(host/client) start with BindNodeID 0x2. When connecting to a network again(and probably with network creation) without reinitializing NWMUDS, official user processes increase the used BindNodeID by 0x2.&lt;br /&gt;
&lt;br /&gt;
BindNodeID value 0x0 is invalid. The maximum number of BindNodeIDs which can be open at the same time is 16.&lt;br /&gt;
&lt;br /&gt;
==Application data transfer==&lt;br /&gt;
The protocol used for sending/receiving data over the network with UDS by official applications is [[PRUDP]](in some cases at least). Mario Kart 7 uses PRUDP here. Triforce Heroes uses plaintext for whatever protocol it uses for UDS.&lt;br /&gt;
&lt;br /&gt;
The UDS version of [[PRUDP]] is different from the normal UDP version it appears(no afa1/a1af data for example).&lt;br /&gt;
&lt;br /&gt;
==Communication protocol==&lt;br /&gt;
The process of connecting to a host and exchanging data follows the sequence:&lt;br /&gt;
&lt;br /&gt;
Client-&amp;gt;Server: Authentication frame SEQ1&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Client: Authentication frame SEQ2&lt;br /&gt;
&lt;br /&gt;
[There does not appear to be an association request frame sent by the client to the server, it is however possible that it was sent and just not captured by the test equipment]&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Client: Association Response frame with association id&lt;br /&gt;
&lt;br /&gt;
[From here on, the client is connected to the server]&lt;br /&gt;
&lt;br /&gt;
Client-&amp;gt;Server: Encrypted data packet containing an 8-byte 802.2 LLC header with ethertype = EAPoL (0x888E) and an u16 header of 0x201 ([[NWM_Services#EAPoL-Start frame|EAPoL-Start]])&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Broadcast: Encrypted data packet containing the updated node information after the client connected (Using ethertype = SecureData).&lt;br /&gt;
&lt;br /&gt;
Server-&amp;gt;Client: Encrypted data packet containing an 8-byte 802.2 LLC header with ethertype = EAPoL (0x888E) and an u16 header of 0x0202([[NWM_Services#EAPoL-Logoff frame|EAPoL-Logoff]])&lt;br /&gt;
&lt;br /&gt;
[From here on, data packets sent using SendTo are encapsulated with an LLC header with ethertype = 0x876D ([[NWM_Services#SecureData NWM header|SecureData]])]&lt;br /&gt;
&lt;br /&gt;
[The client also sends periodic SecureData data frames on its own, these are probably ping frames]&lt;br /&gt;
&lt;br /&gt;
==Data frames==&lt;br /&gt;
Data is transferred over the network using [[NWMUDS:PullPacket]]/[[NWMUDS:SendTo]]. That data is transferred using 802.11 data frames using CCMP encryption. The encrypted data contained in the frame starts with the 0x8-byte [https://en.wikipedia.org/wiki/Subnetwork_Access_Protocol#Use LLC header], then the 0xE-byte NWM header, followed by the actual application data from the previously mentioned commands. When [[NWMUDS:SendTo]] was used with dst_NodeID = broadcast, the data frame is sent to the 802.11 broadcast MAC address. Otherwise with a specific NodeID, the data frame is sent to the actual MAC address for that device.&lt;br /&gt;
&lt;br /&gt;
Official application data is normally stored here as big-endian.&lt;br /&gt;
&lt;br /&gt;
Application data packets are sent to the host using 802.11 unicast, which then acts as a router and forwards the packet to the right destination node id based on the SecureData header using either broadcast or unicast, it is not yet known how it chooses which to use.&lt;br /&gt;
&lt;br /&gt;
==Special data channels==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Channel&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| Used when broadcasting the updated node information after a new client connects.&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Used when sending what appears to be &amp;quot;ping&amp;quot; or &amp;quot;null&amp;quot; frames.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| Used to signal the ejection of all spectators in the network.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SecureData NWM header==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Size of the entire frame minus the 8 bytes from the LLC header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Size of the entire frame minus 12 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Data channel. Applications can only use the low 8 bits, channels greater than 255 are reserved for management functions.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x2&lt;br /&gt;
| Sequence number, incremented after each sent packet.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x2&lt;br /&gt;
| Destination network node id&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x2&lt;br /&gt;
| Source network node id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==EAPoL-Start frame==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Always 0x201 in big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Association id of the sending client in big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Always 0x1 in big-endian. The parser for this packet errors out if this is &amp;gt; 3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| NodeInfo structure with all fields in big-endian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==EAPoL-Logoff frame==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Always 0x202 in big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Always 0?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Assigned network node id.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x6&lt;br /&gt;
| Mac address of the newly connected client.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x1&lt;br /&gt;
| Number of connected nodes, including the new client.&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| 0x1&lt;br /&gt;
| Max number of nodes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x2&lt;br /&gt;
| Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x280&lt;br /&gt;
| List of 16 NodeInfo structures with all fields in big-endian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==Structure used for generating the CTR for CCMP key generation==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| id8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian.&lt;br /&gt;
&lt;br /&gt;
==CTR used for beacon tags crypto==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding, value zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian. All data here is all-zero except for the MAC address, when the u8 at offset 0x8 in the network-struct is 0.&lt;br /&gt;
&lt;br /&gt;
==Network structure==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| This is the MAC address of the host. This is used for when [[NWMUDS:ConnectToNetwork|connecting]] to the network.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| This is actually written as an u16 without byte-swapping. This is the network wifi channel. When connecting this is normally non-zero. When hosting, this can be 0 to automatically select a channel, otherwise the specified channel is used. When non-zero official user-processes require this value to be one of the following when hosting: 1, 6, or 11.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| Initialized flag. Must be non-zero otherwise NWM-module will use value 0x0 for most/all(?) fields in this structure when reading these fields.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x3&lt;br /&gt;
| This is the OUI value for use with the beacon tags. Normally this is 001F32.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (21/0x15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID. Local-WLAN communication ID, normally this is: (user_process [[Title_list|uniqueID]] &amp;lt;&amp;lt; 8) | val. Where val is 0x10 on retail([[Configuration_Memory#ENVINFO|ENVINFO]] bit0 set), 0x90 for devunit. Official software includes an input bool flag parameter for setting bit0 in this wlancommID, normally that flag isn&#039;t set. For [[Download Play]], this is always 0x2810 on retail(0x2890 on devunit).&lt;br /&gt;
&lt;br /&gt;
This wlancommID can have the side affect of region-locking when the title uses the uniqueID for the current title(hard-coded in .text normally), instead of using a fixed input uniqueID for each region of the title.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8. ID, for [[Download Play]] this is 0x55. 0x55/&#039;U&#039; seems to be used for networks where Wii U can host it(Download Play, Smash Bros, ...) - this value isn&#039;t known to be actually checked anywhere however.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x1&lt;br /&gt;
| Number of times the network structure hash was updated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x2&lt;br /&gt;
| This network attributes u16 bitmask can be written via [[NWMUDS:UpdateNetworkAttribute]].&lt;br /&gt;
Bitmasks:&lt;br /&gt;
* 0x1: When set, spectators are not allowed to connect(see [[NWMUDS:EjectSpectator|here]]). Checked by official user-processes before using [[NWMUDS:ConnectToNetwork]], when connecting as a Spectator. Must be clear otherwise that code returns error 0xE10113EA. If the initialized_flag at offset 0x8 is zero, this code handles it the same way as if this bit was set. The latest NWM-module handles checking this bit itself however.&lt;br /&gt;
* 0x2: When set, new regular-clients are not allowed to connect.&lt;br /&gt;
* 0x4: Unknown, has no affect on new clients/spectators connecting. Official software has an option for setting this bit via an input flag from the same code using bitmask 0x2. Official software always clears bitmask 0x6 when unblocking new connections.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 networkID, randomly-generated when creating the network. The network SSID used when a client connects to the network is sprintf(out, &amp;quot;%08X&amp;quot;, networkID).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x1&lt;br /&gt;
| Total number of currently connected nodes, including the host.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 0x1&lt;br /&gt;
| Maximum number of nodes, including the host. This also is the total number of entries stored under the array in the encrypted beacon data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0xD&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| 0x14&lt;br /&gt;
| SHA1 hash of the network structure, starting at the OUI field (offset 0xC) and spanning SizeOfAppData + 0x34. The unused space of the app data buffer is not hashed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0xC8&lt;br /&gt;
| Appdata(Application data), if any. Size of the appdata is specified via the u8 at offset 0x3F. This data is not used when the size-field is zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This 0x108-byte structure is used for [[NWMUDS:BeginHostingNetwork]], [[NWMUDS:ConnectToNetwork]], etc. This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==NodeInfo structure==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| u64 ID, this is the UDS version of the FriendCodeSeed. This is loaded from BlkID 0x00090000 in the [[Config_Savegame|system-config]] via [[CfgS:GetConfigInfoBlk2]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x14&lt;br /&gt;
| The first 0x18-bytes from BlkID 0x000A0000 in the [[Config_Savegame|system-config]] loaded via [[CfgS:GetConfigInfoBlk2]] is written here by user-processes. However, the data at +0x14(absolute offset 0x1C) is written by NWM-module later.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16, unknown. Set to 0x0 with the output from [[NWMUDS:DecryptBeaconData]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8 flag, unknown. Originates from the u16 bitmask in the beacon node-list header. This flag is normally 0 since that bitmask is normally 0?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Normally zero?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first 0x20-bytes are written by the user-process before using this structure with [[NWMUDS:InitializeWithVersion]]. The data starting at offset 0x8 is only initialized by NWM-module.&lt;br /&gt;
&lt;br /&gt;
== UDS Beacons ==&lt;br /&gt;
The UDS host broadcasts a beacon containing at least two Nintendo-vendor tags(tag number 0xDD, see above for the OUI), normally the data stored in these tags are static. The second tag contains the big-endian u32 networkID, used by the clients when connecting to the host and for the above CCMP key generation. The Nintendo-vendor tag(s) following the first two are unique to the process using UDS, these tags are used for broadcasting metadata regarding the host.&lt;br /&gt;
&lt;br /&gt;
A tool for these beacons is available here: [https://github.com/yellows8/ctr-wlanbeacontool]&lt;br /&gt;
&lt;br /&gt;
=== UDS Beacon Tags ===&lt;br /&gt;
The following is the structure of each tag, starting at the OUI. The order of the tags is the same as listed below. All data stored under these tags are stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 20 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (20/0x14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x3&lt;br /&gt;
| Sample data: 0a 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x07.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 21 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1F&lt;br /&gt;
| This is the network structure starting at offset 0xC, with the first 0x1F-bytes from there.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x14&lt;br /&gt;
| SHA1 hash. When doing the hashing, this hash is cleared to zero. The hash data starts at offset 0x0(OUI), and the size is 0x34 + &amp;lt;value of the u8 at offset 0x33&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata. Normally zero. When non-zero this appdata is located at offset 0x34.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x34, not including appdata.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 24 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (24/0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See below&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the tag0 used with [[NWMUDS:DecryptBeaconData]]. The size of data stored under this tag has a maximum size of 0xFA-bytes, however normally the size is smaller than that. Additional encrypted data, if any, is stored under the below tag1.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 25 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (25/0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See above&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When this exists in the beacon, this is the tag1 used with [[NWMUDS:DecryptBeaconData]]. The data stored here is the 0xFA-bytes following the previous encrypted data in tag0, for more space for storing the encrypted data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Encrypted beacon data ====&lt;br /&gt;
The following structure is for the plaintext version of the encrypted data, stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
This data is encrypted with AES-CTR, by NWM module in software. The AES key is stored in NWM module itself. See above for the CTR. The size of this encrypted data is 0x12 + (0x1E*val), where val is the u8 from networkstruct offset 0x1D.&lt;br /&gt;
&lt;br /&gt;
===== Structure =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| MD5 over the rest of the data following this(plaintext).&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 bitmask. Unknown, normally 0? Bit0 is for entry0, bit1 for entry1, and so on.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x1E * &amp;lt;total array entries&amp;gt;&lt;br /&gt;
| This is an array of entries for each of the devices on this network, the first entry is for the host and the rest is for the client(s).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Array entry =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1C&lt;br /&gt;
| This is the first 0x1C-bytes of the NodeInfo structure, stored as big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID, stored as big-endian.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry is for a node.&lt;br /&gt;
&lt;br /&gt;
= Mapped IO =&lt;br /&gt;
&#039;&#039;All&#039;&#039; of the [[IO_Registers|IO]] mapped under the NWM-module process is listed below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Userland address&lt;br /&gt;
!  Physical address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC22000&lt;br /&gt;
| 0x10122000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[WIFI_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC40000&lt;br /&gt;
| 0x10140000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[PDN_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EE22000&lt;br /&gt;
| 0x10322000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Errors=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A06C0D&lt;br /&gt;
| The operation being performed is already done (e.g., if you run NWMEXT_ControlWirelessEnabled to turn wifi on when it&#039;s on already, you can&#039;t turn it on again).&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A113EA&lt;br /&gt;
| Returned when the command isn&#039;t allowed to be used on this device.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC90113FA&lt;br /&gt;
| Node doesn&#039;t exist / invalid NetworkNodeID?&lt;br /&gt;
|-&lt;br /&gt;
| 0xC92113FB&lt;br /&gt;
| Returned when trying to connect to a host when the host has the specified connection-type blocked via the network attributes. There might be other causes too.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113E9&lt;br /&gt;
| Returned when the input size is invalid. Returned by [[NWMUDS:PullPacket]] when the input size is smaller than the frame_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113EA&lt;br /&gt;
| Invalid bind / data_channel is invalid(0x0).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Config_Savegame&amp;diff=22249</id>
		<title>Config Savegame</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Config_Savegame&amp;diff=22249"/>
		<updated>2023-07-19T19:50:42Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Configuration blocks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the format of the [[Config_Services|Cfg]] [[System_SaveData|NAND]] savegame. These blocks can be accessed with the Cfg service commands.&lt;br /&gt;
&lt;br /&gt;
==Structure of save-file &amp;quot;/config&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Total entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Data entries offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4558&lt;br /&gt;
| Block entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x455C&lt;br /&gt;
| &lt;br /&gt;
| Data for the entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The filesize for this /config file is 0x8000-bytes.&lt;br /&gt;
&lt;br /&gt;
==Configuration block entry ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| BlkID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Offset to the data for this block when size is &amp;gt;4, otherwise this word is the data for this block&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x2&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x2&lt;br /&gt;
| Access Flags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Access Flags===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit Mask&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| User Readable (cfg:u)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| System Writable (cfg:s / cfg:i)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| System Readable (cfg:s / cfg:i)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Config blocks will typically either use 0xC for system readable/writable or 0xE for all 3.&lt;br /&gt;
&lt;br /&gt;
==Configuration blocks==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  BlkID&lt;br /&gt;
!  Size&lt;br /&gt;
!  Access Flags&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| Config savegame version?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#RTC|RTC compensation value]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| 0x134&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#CDC|Codec]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| Leap Year Counter (read By PTM)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xE&lt;br /&gt;
| User time offset (read by CECD): displayed timestamp - rtc timestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030002&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| Settings time offset: newly set timestamp - rtc timestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#Touch|Touch calibration]] (read by HID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0xC&lt;br /&gt;
| Analog Stick Calibration Param?(read by HID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#Gyro|Gyroscope]] (read by HID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#Accel|Accelerometer]] (read by HID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#CStick|CStick calibration data]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#Screen_flicker|Screen flicker]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050001&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| Backlight controls (u8 ABL_powersave_enable, u8 brightness_level) (read by GSP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#BLPWM|Backlight PWM]] (read by GSP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050003&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#ABL|Power saving mode (ABL) calibration]] (read by GSP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050004&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#ABL|Power saving mode (ABL) calibration]] (for legacy FIRM)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050005&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xE&lt;br /&gt;
| Stereo display settings (HWCAL block 0x470)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050006&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#ULCD_delay|3D switching delay]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050007&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050008&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#ABL_extra|Power saving mode (ABL) extra config]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050009&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| new3DS only(?) backlight control (5th byte: auto-brightness enable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| 0x96&lt;br /&gt;
| 0xC&lt;br /&gt;
| ??? (HWCAL block 0x500)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| 0x214&lt;br /&gt;
| 0xE&lt;br /&gt;
| [[Hardware_calibration#3D_filters|3D filters]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070001&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xE&lt;br /&gt;
| Sound output mode (mono=0, stereo=1, surround=2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070002&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xE&lt;br /&gt;
| [[Hardware_calibration#Microphone_echo_cancel|Microphone echo cancellation params]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| 0xC00&lt;br /&gt;
| 0xC&lt;br /&gt;
| WiFi configuration slot 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| 0xC00&lt;br /&gt;
| 0xC&lt;br /&gt;
| WiFi configuration slot 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080002&lt;br /&gt;
| 0xC00&lt;br /&gt;
| 0xC&lt;br /&gt;
| WiFi configuration slot 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xE&lt;br /&gt;
| This contains a u64 ID, used by processes using [[NWMUDS:InitializeWithVersion]]. The first word is the same as [[CfgS:GetLocalFriendCodeSeed|LocalFriendCodeSeed]], while the latter is a separate word.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xE&lt;br /&gt;
| Same content as 0x0009000? This console-unique u64 is used by [[Cfg:GenHashConsoleUnique|GenHashConsoleUnique]]. It is generated by &amp;lt;code&amp;gt;((0x3FFFFFFFF) &amp;amp; LocalFriendCodeSeed) | (random16 &amp;lt;&amp;lt; 48))&amp;lt;/code&amp;gt;, where random16 is generated by [[PSPXI:GenerateRandomBytes|GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| The first two bytes are the same random16 used in 0x00090001. The second two bytes are zeros.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0xE&lt;br /&gt;
| Username in UTF16&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0001&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xE&lt;br /&gt;
| Birthday (u8 month, u8 day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0002&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xE&lt;br /&gt;
| Language&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| CountryInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0001&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0xE&lt;br /&gt;
| Country name in UTF-16, every 0x80-bytes is an entry for each language, in the order of the Language table below (not all entries are set)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0002&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0xE&lt;br /&gt;
| State name in UTF-16, every 0x80-bytes is an entry for each language&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0003&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| Coordinates. A pair of s16 represents latitude and longitude, respectively. One need to multiply both value by 180/32768 to get coordinates in degrees&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| 0xC0&lt;br /&gt;
| 0xE&lt;br /&gt;
| Restricted photo exchange data, and other info (includes a mirror of Parental Restrictions PIN/Secret Answer)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0001&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0xE&lt;br /&gt;
| COPPACS restriction data&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0002&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0xE&lt;br /&gt;
| ? Contains the email address set during Parental Restriction setup.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| u16 at offset 0x0: [[SMDH#EULA_Version|EULA Version]] which was agreed to. u16 @ 0x02: latest version&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xE&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xC&lt;br /&gt;
| Debug configuration, read by [[NS]] on dev-units: on startup, NS does &amp;lt;code&amp;gt;svcKernelSetState(6, 1, (u64)debug_flags &amp;amp; 1); &lt;br /&gt;
svcKernelSetState(6, 2, (u64)debug_flags &amp;amp; 2);&amp;lt;/code&amp;gt; (see [[SVC#KernelSetState|here]]) where &amp;lt;code&amp;gt;debug_flags&amp;lt;/code&amp;gt; is the u32 located at offset 0xC in this struct. Then it compares the u32 from +8 in this config-block with the [[Configuration_Memory#APPMEMTYPE|APPMEMTYPE]]. When those don&#039;t match NS starts a FIRM-launch (with the same FIRM titleID as the currently running one) to boot into a FIRM with the APPMEMTYPE value from this config-block. The byte at offset 0x0 is related to the memtype as well.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0003&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0004&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| The first u8 is the System-Model [[Cfg:GetSystemModel|value]], the last 3-bytes are unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0005&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| The first u8 indicates whether network updates are enabled (however, NIM only checks this flag with developer [[Configuration_Memory#ENVINFO|ENVINFO]]).&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0006&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0xC&lt;br /&gt;
| In NIM, taken as a (hopefully null terminated) string used for the &amp;quot;X-Device-Token&amp;quot; http header field for NPNS url.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| TWL EULA info ({bool agreed; u8 agreedVersion})&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100001&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0xC&lt;br /&gt;
| Stores Parental Restrictions PIN/Secret Answer and other info for TWL mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100002&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| TWL country code&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100003&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xC&lt;br /&gt;
| TWL movable unique ID, used for DSiWare exports&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| The low u16 indicates whether the system setup is required, such as when the system is booted for the first time or after doing a [[System Settings|System Format]]: 0 = setup required, non-zero = no setup required&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| TitleID of the menu to launch, used by [[NS]] on dev units (this block can be edited on dev units with [[3DS Development Unit Software#Config|Config]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| Volume Slider Bounds (Read by HID and PTM)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| If response is 0x100 then debug mode is enabled.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Clock Sequence (u16) used for generating UUIDs in [[ACT_Services|ACT]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150002&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| In NIM, taken as an u32, using the low u16, casted to a char, and turned lower case for the making of the url for NPNS.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| Unknown, first byte is used by config service-cmd [[Config_Services|0x00070040]]. (Unknown whether the last 3-bytes are used)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| Miiverse (OLV) access key&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| QTM Infrared LED related, can be 0 or 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#QTM|QTM calibration data]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| Unknown. NFC-module checks for value1/non-value1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The developer unit TID block only exists on developer units.&lt;br /&gt;
&lt;br /&gt;
===Stereo Display Settings===&lt;br /&gt;
All values are hard-coded in cfg module.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| 62.0f&lt;br /&gt;
|assumed pupillary distance in mm?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| 289.0f&lt;br /&gt;
|assumed distance in mm between player&#039;s eyes and upper screen?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| 76.80f&lt;br /&gt;
|width in mm of (old) 3DS upper screen (doesn&#039;t vary for different models?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| 46.08f&lt;br /&gt;
|height in mm of (old) 3DS upper screen (doesn&#039;t vary for different models?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 10.0f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| 5.0f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| 55.58f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| 21.57f&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Languages===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| JP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| EN&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FR&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| DE&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| IT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ES&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ZH&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| KO&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| PT&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| RU&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| TW&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CountryInfo===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Byte&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| State/Province code.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Country code, same as DSi/Wii country codes. Value 0xFF is invalid.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===0x000A0000 Block===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Byte&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0-0x13&lt;br /&gt;
| UTF-16 username, with no NULL-terminator.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14-17&lt;br /&gt;
| Usually zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18-0x1B&lt;br /&gt;
| u32 NGWord version the username was last checked with. If this value is less than the u32 stored in the NGWord CFA &amp;quot;romfs:/version.dat&amp;quot;, the system then checks the username string with the bad-word list CFA again, then updates this field with the value from the CFA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===WiFi Slot Structure===&lt;br /&gt;
&lt;br /&gt;
====Network structure====&lt;br /&gt;
This is used twice in the actual WiFi slot structure.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether the network was set or not?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to use this network strucutre to connect?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether this structure is the first (0) or the second (1) in the larger WiFi slot structure?&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x20&lt;br /&gt;
| SSID of the network, without a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x1&lt;br /&gt;
| Length of the SSID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[Nintendo_Zone#Beacon_payload_format|AP crypto key type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x40&lt;br /&gt;
| Plaintext of the passphrase of the network, without a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x20&lt;br /&gt;
| PBKDF2 of the passphrase and SSID (http://jorisvr.nl/wpapsk.html).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Actual structure====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| [https://github.com/lammertb/libcrc/blob/v2.0/src/crc16.c#L43-L76 CRC-16 checksum] of the next 0x410 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x88&lt;br /&gt;
| First network structure. Only set if the network was set &amp;quot;normally&amp;quot;, or was the last to be set using WPS during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x20&lt;br /&gt;
| Padding.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x88&lt;br /&gt;
| Second network structure. Only set if the network was set using WPS, otherwise 0-filled.&lt;br /&gt;
|-&lt;br /&gt;
| 0x134&lt;br /&gt;
| 0x20C&lt;br /&gt;
| Padding.&lt;br /&gt;
|-&lt;br /&gt;
| 0x340&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to automatically get the IP address (use DHCP) or not, defaults to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x341&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to automatically get the DNS or not, defaults to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x342&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x344&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address, to use if 0x340 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x348&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address of the gateway, to use if 0x340 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Subnetwork mask, to use if 0x340 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x350&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address of the primary DNS , to use if 0x341 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x354&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address of the secondary DNS, to use if 0x341 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x358&lt;br /&gt;
| 0x4&lt;br /&gt;
| Always 0x01050000 ? Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x35C&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address to use. Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x360&lt;br /&gt;
| 0x6&lt;br /&gt;
| MAC address of the AP. Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x366&lt;br /&gt;
| 0x1&lt;br /&gt;
| Channel. Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x367&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding ? Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x368&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to use a proxy or not, defaults to 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x369&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to use a basic authentication for the proxy, defaults to 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x36A&lt;br /&gt;
| 0x2&lt;br /&gt;
| Port to use for the proxy, defaults to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x36C&lt;br /&gt;
| 0x30&lt;br /&gt;
| URL/address of the proxy, including a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x39C&lt;br /&gt;
| 0x34&lt;br /&gt;
| Padding.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Username to use for basic authentication, including a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Password to use for basic authentication, including a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x410&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x412&lt;br /&gt;
| 0x2&lt;br /&gt;
| MTU value, defaults to 1400 and ranges between 576 and 1500, inclusive.&lt;br /&gt;
|-&lt;br /&gt;
| 0x414&lt;br /&gt;
| 0x7EC&lt;br /&gt;
| Padding.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LCD display config===&lt;br /&gt;
There seems to be some sort of LCD display configuration stored in this cfg. When using the cfg-save from an Old3DS on a New3DS without formatting the cfg first, the bottom-screen display is somewhat off(which is fixed by formatting the cfg-save).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parental control Block 0x00100001===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Byte&lt;br /&gt;
!  Size in bytes&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0xD&lt;br /&gt;
| Unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x4&lt;br /&gt;
| PIN&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| 0x20&lt;br /&gt;
| Secret answer in UTF-16&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Parental Control setting block 0xC0000===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 0x04&lt;br /&gt;
| [[#Parental Control restriction bitmask|Parental Control restriction bitmask]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x04&lt;br /&gt;
| Parental Controls PIN code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Parental Control restriction bitmask====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Restriction name&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Global Parental Controls enable&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Sharing Images/Audio/Video/Long Text Data&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Internet Browser&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| StreetPass&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Friend Registration&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| eShop&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Miiverse (view)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Miiverse (post)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| &amp;quot;Child Online Privacy Protection&amp;quot; (see [[Cfg:GetRegionCanadaUSA|CFG:IsCoppacsSupported]])&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Config_Savegame&amp;diff=22248</id>
		<title>Config Savegame</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Config_Savegame&amp;diff=22248"/>
		<updated>2023-07-19T19:49:53Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Configuration block entry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the format of the [[Config_Services|Cfg]] [[System_SaveData|NAND]] savegame. These blocks can be accessed with the Cfg service commands.&lt;br /&gt;
&lt;br /&gt;
==Structure of save-file &amp;quot;/config&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Total entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Data entries offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4558&lt;br /&gt;
| Block entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x455C&lt;br /&gt;
| &lt;br /&gt;
| Data for the entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The filesize for this /config file is 0x8000-bytes.&lt;br /&gt;
&lt;br /&gt;
==Configuration block entry ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| BlkID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Offset to the data for this block when size is &amp;gt;4, otherwise this word is the data for this block&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x2&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x2&lt;br /&gt;
| Access Flags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Access Flags===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit Mask&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| User Readable (cfg:u)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| System Writable (cfg:s / cfg:i)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| System Readable (cfg:s / cfg:i)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Config blocks will typically either use 0xC for system readable/writable or 0xE for all 3.&lt;br /&gt;
&lt;br /&gt;
==Configuration blocks==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  BlkID&lt;br /&gt;
!  Size&lt;br /&gt;
!  Flags&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| Config savegame version?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#RTC|RTC compensation value]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| 0x134&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#CDC|Codec]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| Leap Year Counter (read By PTM)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xE&lt;br /&gt;
| User time offset (read by CECD): displayed timestamp - rtc timestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030002&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| Settings time offset: newly set timestamp - rtc timestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#Touch|Touch calibration]] (read by HID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040001&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0xC&lt;br /&gt;
| Analog Stick Calibration Param?(read by HID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040002&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#Gyro|Gyroscope]] (read by HID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040003&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#Accel|Accelerometer]] (read by HID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040004&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#CStick|CStick calibration data]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#Screen_flicker|Screen flicker]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050001&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| Backlight controls (u8 ABL_powersave_enable, u8 brightness_level) (read by GSP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#BLPWM|Backlight PWM]] (read by GSP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050003&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#ABL|Power saving mode (ABL) calibration]] (read by GSP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050004&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#ABL|Power saving mode (ABL) calibration]] (for legacy FIRM)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050005&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xE&lt;br /&gt;
| Stereo display settings (HWCAL block 0x470)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050006&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#ULCD_delay|3D switching delay]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050007&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050008&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#ABL_extra|Power saving mode (ABL) extra config]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050009&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| new3DS only(?) backlight control (5th byte: auto-brightness enable)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| 0x96&lt;br /&gt;
| 0xC&lt;br /&gt;
| ??? (HWCAL block 0x500)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| 0x214&lt;br /&gt;
| 0xE&lt;br /&gt;
| [[Hardware_calibration#3D_filters|3D filters]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070001&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xE&lt;br /&gt;
| Sound output mode (mono=0, stereo=1, surround=2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070002&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xE&lt;br /&gt;
| [[Hardware_calibration#Microphone_echo_cancel|Microphone echo cancellation params]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| 0xC00&lt;br /&gt;
| 0xC&lt;br /&gt;
| WiFi configuration slot 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080001&lt;br /&gt;
| 0xC00&lt;br /&gt;
| 0xC&lt;br /&gt;
| WiFi configuration slot 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080002&lt;br /&gt;
| 0xC00&lt;br /&gt;
| 0xC&lt;br /&gt;
| WiFi configuration slot 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xE&lt;br /&gt;
| This contains a u64 ID, used by processes using [[NWMUDS:InitializeWithVersion]]. The first word is the same as [[CfgS:GetLocalFriendCodeSeed|LocalFriendCodeSeed]], while the latter is a separate word.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xE&lt;br /&gt;
| Same content as 0x0009000? This console-unique u64 is used by [[Cfg:GenHashConsoleUnique|GenHashConsoleUnique]]. It is generated by &amp;lt;code&amp;gt;((0x3FFFFFFFF) &amp;amp; LocalFriendCodeSeed) | (random16 &amp;lt;&amp;lt; 48))&amp;lt;/code&amp;gt;, where random16 is generated by [[PSPXI:GenerateRandomBytes|GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| The first two bytes are the same random16 used in 0x00090001. The second two bytes are zeros.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0xE&lt;br /&gt;
| Username in UTF16&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0001&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xE&lt;br /&gt;
| Birthday (u8 month, u8 day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0002&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xE&lt;br /&gt;
| Language&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| CountryInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0001&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0xE&lt;br /&gt;
| Country name in UTF-16, every 0x80-bytes is an entry for each language, in the order of the Language table below (not all entries are set)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0002&lt;br /&gt;
| 0x800&lt;br /&gt;
| 0xE&lt;br /&gt;
| State name in UTF-16, every 0x80-bytes is an entry for each language&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0003&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| Coordinates. A pair of s16 represents latitude and longitude, respectively. One need to multiply both value by 180/32768 to get coordinates in degrees&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| 0xC0&lt;br /&gt;
| 0xE&lt;br /&gt;
| Restricted photo exchange data, and other info (includes a mirror of Parental Restrictions PIN/Secret Answer)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0001&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0xE&lt;br /&gt;
| COPPACS restriction data&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0002&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0xE&lt;br /&gt;
| ? Contains the email address set during Parental Restriction setup.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| u16 at offset 0x0: [[SMDH#EULA_Version|EULA Version]] which was agreed to. u16 @ 0x02: latest version&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xE&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xC&lt;br /&gt;
| Debug configuration, read by [[NS]] on dev-units: on startup, NS does &amp;lt;code&amp;gt;svcKernelSetState(6, 1, (u64)debug_flags &amp;amp; 1); &lt;br /&gt;
svcKernelSetState(6, 2, (u64)debug_flags &amp;amp; 2);&amp;lt;/code&amp;gt; (see [[SVC#KernelSetState|here]]) where &amp;lt;code&amp;gt;debug_flags&amp;lt;/code&amp;gt; is the u32 located at offset 0xC in this struct. Then it compares the u32 from +8 in this config-block with the [[Configuration_Memory#APPMEMTYPE|APPMEMTYPE]]. When those don&#039;t match NS starts a FIRM-launch (with the same FIRM titleID as the currently running one) to boot into a FIRM with the APPMEMTYPE value from this config-block. The byte at offset 0x0 is related to the memtype as well.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0003&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0004&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| The first u8 is the System-Model [[Cfg:GetSystemModel|value]], the last 3-bytes are unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0005&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| The first u8 indicates whether network updates are enabled (however, NIM only checks this flag with developer [[Configuration_Memory#ENVINFO|ENVINFO]]).&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0006&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0xC&lt;br /&gt;
| In NIM, taken as a (hopefully null terminated) string used for the &amp;quot;X-Device-Token&amp;quot; http header field for NPNS url.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0xC&lt;br /&gt;
| TWL EULA info ({bool agreed; u8 agreedVersion})&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100001&lt;br /&gt;
| 0x94&lt;br /&gt;
| 0xC&lt;br /&gt;
| Stores Parental Restrictions PIN/Secret Answer and other info for TWL mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100002&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| TWL country code&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100003&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xC&lt;br /&gt;
| TWL movable unique ID, used for DSiWare exports&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| The low u16 indicates whether the system setup is required, such as when the system is booted for the first time or after doing a [[System Settings|System Format]]: 0 = setup required, non-zero = no setup required&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| TitleID of the menu to launch, used by [[NS]] on dev units (this block can be edited on dev units with [[3DS Development Unit Software#Config|Config]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| Volume Slider Bounds (Read by HID and PTM)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| If response is 0x100 then debug mode is enabled.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Clock Sequence (u16) used for generating UUIDs in [[ACT_Services|ACT]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150001&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150002&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| In NIM, taken as an u32, using the low u16, casted to a char, and turned lower case for the making of the url for NPNS.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| Unknown, first byte is used by config service-cmd [[Config_Services|0x00070040]]. (Unknown whether the last 3-bytes are used)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xE&lt;br /&gt;
| Miiverse (OLV) access key&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| QTM Infrared LED related, can be 0 or 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180001&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[Hardware_calibration#QTM|QTM calibration data]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0xC&lt;br /&gt;
| Unknown. NFC-module checks for value1/non-value1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The developer unit TID block only exists on developer units.&lt;br /&gt;
&lt;br /&gt;
===Stereo Display Settings===&lt;br /&gt;
All values are hard-coded in cfg module.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| 62.0f&lt;br /&gt;
|assumed pupillary distance in mm?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| 289.0f&lt;br /&gt;
|assumed distance in mm between player&#039;s eyes and upper screen?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| 76.80f&lt;br /&gt;
|width in mm of (old) 3DS upper screen (doesn&#039;t vary for different models?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| 46.08f&lt;br /&gt;
|height in mm of (old) 3DS upper screen (doesn&#039;t vary for different models?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| 10.0f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| 5.0f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| 55.58f&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| 21.57f&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Languages===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| JP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| EN&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FR&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| DE&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| IT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ES&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ZH&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| KO&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| PT&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| RU&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| TW&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CountryInfo===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Byte&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| State/Province code.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Country code, same as DSi/Wii country codes. Value 0xFF is invalid.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===0x000A0000 Block===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Byte&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0-0x13&lt;br /&gt;
| UTF-16 username, with no NULL-terminator.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14-17&lt;br /&gt;
| Usually zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18-0x1B&lt;br /&gt;
| u32 NGWord version the username was last checked with. If this value is less than the u32 stored in the NGWord CFA &amp;quot;romfs:/version.dat&amp;quot;, the system then checks the username string with the bad-word list CFA again, then updates this field with the value from the CFA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===WiFi Slot Structure===&lt;br /&gt;
&lt;br /&gt;
====Network structure====&lt;br /&gt;
This is used twice in the actual WiFi slot structure.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether the network was set or not?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to use this network strucutre to connect?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether this structure is the first (0) or the second (1) in the larger WiFi slot structure?&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x20&lt;br /&gt;
| SSID of the network, without a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x1&lt;br /&gt;
| Length of the SSID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[Nintendo_Zone#Beacon_payload_format|AP crypto key type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x40&lt;br /&gt;
| Plaintext of the passphrase of the network, without a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x20&lt;br /&gt;
| PBKDF2 of the passphrase and SSID (http://jorisvr.nl/wpapsk.html).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Actual structure====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| [https://github.com/lammertb/libcrc/blob/v2.0/src/crc16.c#L43-L76 CRC-16 checksum] of the next 0x410 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x88&lt;br /&gt;
| First network structure. Only set if the network was set &amp;quot;normally&amp;quot;, or was the last to be set using WPS during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x20&lt;br /&gt;
| Padding.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC&lt;br /&gt;
| 0x88&lt;br /&gt;
| Second network structure. Only set if the network was set using WPS, otherwise 0-filled.&lt;br /&gt;
|-&lt;br /&gt;
| 0x134&lt;br /&gt;
| 0x20C&lt;br /&gt;
| Padding.&lt;br /&gt;
|-&lt;br /&gt;
| 0x340&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to automatically get the IP address (use DHCP) or not, defaults to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x341&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to automatically get the DNS or not, defaults to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x342&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x344&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address, to use if 0x340 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x348&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address of the gateway, to use if 0x340 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x34C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Subnetwork mask, to use if 0x340 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x350&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address of the primary DNS , to use if 0x341 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x354&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address of the secondary DNS, to use if 0x341 is false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x358&lt;br /&gt;
| 0x4&lt;br /&gt;
| Always 0x01050000 ? Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x35C&lt;br /&gt;
| 0x4&lt;br /&gt;
| IP address to use. Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x360&lt;br /&gt;
| 0x6&lt;br /&gt;
| MAC address of the AP. Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x366&lt;br /&gt;
| 0x1&lt;br /&gt;
| Channel. Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x367&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding ? Only set if the network was the last to be set during the session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x368&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to use a proxy or not, defaults to 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x369&lt;br /&gt;
| 0x1&lt;br /&gt;
| Whether to use a basic authentication for the proxy, defaults to 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x36A&lt;br /&gt;
| 0x2&lt;br /&gt;
| Port to use for the proxy, defaults to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x36C&lt;br /&gt;
| 0x30&lt;br /&gt;
| URL/address of the proxy, including a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x39C&lt;br /&gt;
| 0x34&lt;br /&gt;
| Padding.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Username to use for basic authentication, including a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Password to use for basic authentication, including a trailing nullbyte.&lt;br /&gt;
|-&lt;br /&gt;
| 0x410&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x412&lt;br /&gt;
| 0x2&lt;br /&gt;
| MTU value, defaults to 1400 and ranges between 576 and 1500, inclusive.&lt;br /&gt;
|-&lt;br /&gt;
| 0x414&lt;br /&gt;
| 0x7EC&lt;br /&gt;
| Padding.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LCD display config===&lt;br /&gt;
There seems to be some sort of LCD display configuration stored in this cfg. When using the cfg-save from an Old3DS on a New3DS without formatting the cfg first, the bottom-screen display is somewhat off(which is fixed by formatting the cfg-save).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Parental control Block 0x00100001===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Byte&lt;br /&gt;
!  Size in bytes&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0xD&lt;br /&gt;
| Unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x4&lt;br /&gt;
| PIN&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| 0x20&lt;br /&gt;
| Secret answer in UTF-16&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Parental Control setting block 0xC0000===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 0x04&lt;br /&gt;
| [[#Parental Control restriction bitmask|Parental Control restriction bitmask]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 0x04&lt;br /&gt;
| Parental Controls PIN code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Parental Control restriction bitmask====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Restriction name&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Global Parental Controls enable&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Sharing Images/Audio/Video/Long Text Data&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Internet Browser&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| StreetPass&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Friend Registration&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| eShop&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Miiverse (view)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Miiverse (post)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| &amp;quot;Child Online Privacy Protection&amp;quot; (see [[Cfg:GetRegionCanadaUSA|CFG:IsCoppacsSupported]])&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Config_Services&amp;diff=22247</id>
		<title>Config Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Config_Services&amp;diff=22247"/>
		<updated>2023-07-19T19:46:30Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Config service &amp;quot;cfg:s&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= Config service &amp;quot;cfg:u&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetConfigInfoBlk2|GetConfigInfoBlk2]]/GetConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:SecureInfoGetRegion|SecureInfoGetRegion]]/GetRegion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:GenHashConsoleUnique|GenHashConsoleUnique]]/GetTransferableId&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[Cfg:GetRegionCanadaUSA|GetRegionCanadaUSA]]/IsCoppacsSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| [[Cfg:GetSystemModel|GetSystemModel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[6.0.0-11]]&lt;br /&gt;
| [[Cfg:GetModelNintendo2DS|GetModelNintendo2DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| (u8 val) This writes the input u8 to the first byte in the config-block for blkID [[Config_Savegame|0x00160000]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080080&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[Cfg:TranslateCountryInfo|TranslateCountryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[Cfg:GetCountryCodeString|GetCountryCodeString]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[Cfg:GetCountryCodeID|GetCountryCodeID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| IsFangateSupported&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Config service &amp;quot;cfg:s&amp;quot; =&lt;br /&gt;
cfg:s contains all the commands in cfg:u, in addition to the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04010082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetConfigInfoBlk8|GetConfigInfoBlk8]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SetConfigInfoBlk4|SetConfigInfoBlk4]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:UpdateConfigNANDSavegame|UpdateConfigNANDSavegame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040042&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:GetLocalFriendCodeSeedData|GetLocalFriendCodeSeedData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04050000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetLocalFriendCodeSeed|GetLocalFriendCodeSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:SecureInfoGetRegion|SecureInfoGetRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetByte101|SecureInfoGetByte101]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetSerialNo|SecureInfoGetSerialNo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04090000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:UpdateConfigBlk00040003|UpdateConfigBlk00040003]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x040A0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040B0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0040&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F0000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:ClearParentalControls|ClearParentalControls]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
CfgS command 0x04060000(SecureInfoGetRegion) is used by NIM module to determine the SOAP RegionId, when sending SOAP requests. See [[Nandrw/sys/SecureInfo_A|here]].&lt;br /&gt;
&lt;br /&gt;
= Config service &amp;quot;cfg:i&amp;quot; =&lt;br /&gt;
cfg:i contains all the commands in cfg:u and cfg:s, in addition to the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08010082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetConfigInfoBlk8|GetConfigInfoBlk8]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08020082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SetConfigInfoBlk4|SetConfigInfoBlk4]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08030000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:UpdateConfigNANDSavegame|UpdateConfigNANDSavegame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080400C2&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:CreateConfigInfoBlk|CreateConfigInfoBlk]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08050000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:DeleteConfigNANDSavefile|DeleteConfigNANDSavefile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08060000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:FormatConfig|FormatConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08070000&lt;br /&gt;
| &lt;br /&gt;
| This basically just returns result-code value 0x0, due to code this eventually executes being NOPed out.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08080000&lt;br /&gt;
| &lt;br /&gt;
| This updates the config blocks for blkIDs 0x0 and 0x20000. In certain cases this may call the code for [[CfgI:FormatConfig|FormatConfig]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x08090000&lt;br /&gt;
| &lt;br /&gt;
| This updates the config block for blkID 0x60000.&lt;br /&gt;
|-&lt;br /&gt;
| 0x080A0000&lt;br /&gt;
| &lt;br /&gt;
| ResetAnalogStickCalibrationParam? This updates the config block for blkID 0x00040001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x080B0082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SetGetLocalFriendCodeSeedData|SetGetLocalFriendCodeSeedData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080C0042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SetLocalFriendCodeSeedSignature|SetLocalFriendCodeSeedSignature]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080D0000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:DeleteCreateNANDLocalFriendCodeSeed|DeleteCreateNANDLocalFriendCodeSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080E0000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:VerifySigLocalFriendCodeSeed|VerifySigLocalFriendCodeSeed]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x080F0042&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:GetLocalFriendCodeSeedData|GetLocalFriendCodeSeedData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08100000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetLocalFriendCodeSeed|GetLocalFriendCodeSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08110084&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SetSecureInfo|SetSecureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08120000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:DeleteCreateNANDSecureInfo|DeleteCreateNANDSecureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08130000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:VerifySigSecureInfo|VerifySigSecureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08140042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SecureInfoGetData|SecureInfoGetData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08150042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SecureInfoGetSignature|SecureInfoGetSignature]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08160000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:SecureInfoGetRegion|SecureInfoGetRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08170000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetByte101|SecureInfoGetByte101]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08180042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetSerialNo|SecureInfoGetSerialNo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0819....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081A....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081B....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081C....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081D....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081E....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081F....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0820....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Config NVRAM service &amp;quot;cfg:nor&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[CfgNor:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[CfgNor:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| (u8 flag) Writes the input flag to state. Uses SPI service command [[SPI_Services|EnableSpiBus]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Writes the u8 from the state written by 0x00030040 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050082&lt;br /&gt;
| [[CfgNor:ReadData|ReadData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060082&lt;br /&gt;
| [[CfgNor:WriteData|WriteData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| This just uses the WREN command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| This just uses the WRDI command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[CfgNor:ReadIdentification|ReadIdentification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| This waits for the WIP bit in the status register to clear(wait for writing to finish).&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| This waits for the WEL bit in the status register to become set(write enabled).&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| This writes the value of the WIP bit in the status register to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| This writes the value of the WIP bit in the status register to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[CfgNor:ReadStatusRegister|ReadStatusRegister]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0082&lt;br /&gt;
| [[CfgNor:ReadDataOther|ReadDataOther]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100082&lt;br /&gt;
| [[CfgNor:WriteDataOther|WriteDataOther]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 offset) Uses command WREN then waits for WEL to become enabled. Sends command 0xDB to SPI followed by the specified flash offset.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 offset) Identical to 0x00110040 except this uses SPI-command 0xD8 instead(&amp;quot;block erase&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| This uses SPI command 0xB9 for &amp;quot;Deep power down&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This uses SPI command 0xAB for &amp;quot;Release from deep power down&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
This is an interface for the &amp;quot;SPI::NOR&amp;quot; service, for accessing the Wifi NVRAM/SPI Flash.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Config_Services&amp;diff=22246</id>
		<title>Config Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Config_Services&amp;diff=22246"/>
		<updated>2023-07-19T19:46:00Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Config service &amp;quot;cfg:u&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= Config service &amp;quot;cfg:u&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetConfigInfoBlk2|GetConfigInfoBlk2]]/GetConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:SecureInfoGetRegion|SecureInfoGetRegion]]/GetRegion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:GenHashConsoleUnique|GenHashConsoleUnique]]/GetTransferableId&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[Cfg:GetRegionCanadaUSA|GetRegionCanadaUSA]]/IsCoppacsSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| [[Cfg:GetSystemModel|GetSystemModel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[6.0.0-11]]&lt;br /&gt;
| [[Cfg:GetModelNintendo2DS|GetModelNintendo2DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| (u8 val) This writes the input u8 to the first byte in the config-block for blkID [[Config_Savegame|0x00160000]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080080&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[Cfg:TranslateCountryInfo|TranslateCountryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[Cfg:GetCountryCodeString|GetCountryCodeString]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[Cfg:GetCountryCodeID|GetCountryCodeID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| IsFangateSupported&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Config service &amp;quot;cfg:s&amp;quot; =&lt;br /&gt;
cfg:s contains all the commands in cfg:u, in addition to the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| &lt;br /&gt;
| Same as cfg:u 0x00050000 cmd?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04010082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetConfigInfoBlk8|GetConfigInfoBlk8]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SetConfigInfoBlk4|SetConfigInfoBlk4]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:UpdateConfigNANDSavegame|UpdateConfigNANDSavegame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040042&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:GetLocalFriendCodeSeedData|GetLocalFriendCodeSeedData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04050000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetLocalFriendCodeSeed|GetLocalFriendCodeSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:SecureInfoGetRegion|SecureInfoGetRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetByte101|SecureInfoGetByte101]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetSerialNo|SecureInfoGetSerialNo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04090000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:UpdateConfigBlk00040003|UpdateConfigBlk00040003]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x040A0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040B0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0040&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F0000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:ClearParentalControls|ClearParentalControls]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
CfgS command 0x04060000(SecureInfoGetRegion) is used by NIM module to determine the SOAP RegionId, when sending SOAP requests. See [[Nandrw/sys/SecureInfo_A|here]].&lt;br /&gt;
&lt;br /&gt;
= Config service &amp;quot;cfg:i&amp;quot; =&lt;br /&gt;
cfg:i contains all the commands in cfg:u and cfg:s, in addition to the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08010082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetConfigInfoBlk8|GetConfigInfoBlk8]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08020082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SetConfigInfoBlk4|SetConfigInfoBlk4]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08030000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:UpdateConfigNANDSavegame|UpdateConfigNANDSavegame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080400C2&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:CreateConfigInfoBlk|CreateConfigInfoBlk]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08050000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:DeleteConfigNANDSavefile|DeleteConfigNANDSavefile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08060000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:FormatConfig|FormatConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08070000&lt;br /&gt;
| &lt;br /&gt;
| This basically just returns result-code value 0x0, due to code this eventually executes being NOPed out.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08080000&lt;br /&gt;
| &lt;br /&gt;
| This updates the config blocks for blkIDs 0x0 and 0x20000. In certain cases this may call the code for [[CfgI:FormatConfig|FormatConfig]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x08090000&lt;br /&gt;
| &lt;br /&gt;
| This updates the config block for blkID 0x60000.&lt;br /&gt;
|-&lt;br /&gt;
| 0x080A0000&lt;br /&gt;
| &lt;br /&gt;
| ResetAnalogStickCalibrationParam? This updates the config block for blkID 0x00040001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x080B0082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SetGetLocalFriendCodeSeedData|SetGetLocalFriendCodeSeedData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080C0042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SetLocalFriendCodeSeedSignature|SetLocalFriendCodeSeedSignature]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080D0000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:DeleteCreateNANDLocalFriendCodeSeed|DeleteCreateNANDLocalFriendCodeSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080E0000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:VerifySigLocalFriendCodeSeed|VerifySigLocalFriendCodeSeed]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x080F0042&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:GetLocalFriendCodeSeedData|GetLocalFriendCodeSeedData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08100000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetLocalFriendCodeSeed|GetLocalFriendCodeSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08110084&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SetSecureInfo|SetSecureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08120000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:DeleteCreateNANDSecureInfo|DeleteCreateNANDSecureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08130000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:VerifySigSecureInfo|VerifySigSecureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08140042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SecureInfoGetData|SecureInfoGetData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08150042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SecureInfoGetSignature|SecureInfoGetSignature]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08160000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:SecureInfoGetRegion|SecureInfoGetRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08170000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetByte101|SecureInfoGetByte101]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08180042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetSerialNo|SecureInfoGetSerialNo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0819....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081A....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081B....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081C....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081D....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081E....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081F....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0820....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Config NVRAM service &amp;quot;cfg:nor&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[CfgNor:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[CfgNor:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| (u8 flag) Writes the input flag to state. Uses SPI service command [[SPI_Services|EnableSpiBus]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Writes the u8 from the state written by 0x00030040 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050082&lt;br /&gt;
| [[CfgNor:ReadData|ReadData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060082&lt;br /&gt;
| [[CfgNor:WriteData|WriteData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| This just uses the WREN command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| This just uses the WRDI command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[CfgNor:ReadIdentification|ReadIdentification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| This waits for the WIP bit in the status register to clear(wait for writing to finish).&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| This waits for the WEL bit in the status register to become set(write enabled).&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| This writes the value of the WIP bit in the status register to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| This writes the value of the WIP bit in the status register to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[CfgNor:ReadStatusRegister|ReadStatusRegister]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0082&lt;br /&gt;
| [[CfgNor:ReadDataOther|ReadDataOther]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100082&lt;br /&gt;
| [[CfgNor:WriteDataOther|WriteDataOther]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 offset) Uses command WREN then waits for WEL to become enabled. Sends command 0xDB to SPI followed by the specified flash offset.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 offset) Identical to 0x00110040 except this uses SPI-command 0xD8 instead(&amp;quot;block erase&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| This uses SPI command 0xB9 for &amp;quot;Deep power down&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This uses SPI command 0xAB for &amp;quot;Release from deep power down&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
This is an interface for the &amp;quot;SPI::NOR&amp;quot; service, for accessing the Wifi NVRAM/SPI Flash.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Config_Services&amp;diff=22208</id>
		<title>Config Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Config_Services&amp;diff=22208"/>
		<updated>2023-04-02T22:50:26Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Clarify and reduce duplication of shared commands&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= Config service &amp;quot;cfg:u&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetConfigInfoBlk2|GetConfigInfoBlk2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:SecureInfoGetRegion|SecureInfoGetRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:GenHashConsoleUnique|GenHashConsoleUnique]]/GetTransferableId&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[Cfg:GetRegionCanadaUSA|GetRegionCanadaUSA]]/IsCoppacsSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| [[Cfg:GetSystemModel|GetSystemModel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[6.0.0-11]]&lt;br /&gt;
| [[Cfg:GetModelNintendo2DS|GetModelNintendo2DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| (u8 val) This writes the input u8 to the first byte in the config-block for blkID [[Config_Savegame|0x00160000]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080080&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[Cfg:TranslateCountryInfo|TranslateCountryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[Cfg:GetCountryCodeString|GetCountryCodeString]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| [[Cfg:GetCountryCodeID|GetCountryCodeID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| IsFangateSupported&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Config service &amp;quot;cfg:s&amp;quot; =&lt;br /&gt;
cfg:s contains all the commands in cfg:u, in addition to the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| &lt;br /&gt;
| Same as cfg:u 0x00050000 cmd?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04010082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetConfigInfoBlk8|GetConfigInfoBlk8]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SetConfigInfoBlk4|SetConfigInfoBlk4]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:UpdateConfigNANDSavegame|UpdateConfigNANDSavegame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040042&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:GetLocalFriendCodeSeedData|GetLocalFriendCodeSeedData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04050000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetLocalFriendCodeSeed|GetLocalFriendCodeSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:SecureInfoGetRegion|SecureInfoGetRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetByte101|SecureInfoGetByte101]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetSerialNo|SecureInfoGetSerialNo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04090000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:UpdateConfigBlk00040003|UpdateConfigBlk00040003]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x040A0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040B0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0040&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E0000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F0000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:ClearParentalControls|ClearParentalControls]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
CfgS command 0x04060000(SecureInfoGetRegion) is used by NIM module to determine the SOAP RegionId, when sending SOAP requests. See [[Nandrw/sys/SecureInfo_A|here]].&lt;br /&gt;
&lt;br /&gt;
= Config service &amp;quot;cfg:i&amp;quot; =&lt;br /&gt;
cfg:i contains all the commands in cfg:u and cfg:s, in addition to the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08010082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetConfigInfoBlk8|GetConfigInfoBlk8]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08020082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SetConfigInfoBlk4|SetConfigInfoBlk4]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08030000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:UpdateConfigNANDSavegame|UpdateConfigNANDSavegame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080400C2&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:CreateConfigInfoBlk|CreateConfigInfoBlk]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08050000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:DeleteConfigNANDSavefile|DeleteConfigNANDSavefile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08060000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:FormatConfig|FormatConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08070000&lt;br /&gt;
| &lt;br /&gt;
| This basically just returns result-code value 0x0, due to code this eventually executes being NOPed out.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08080000&lt;br /&gt;
| &lt;br /&gt;
| This updates the config blocks for blkIDs 0x0 and 0x20000. In certain cases this may call the code for [[CfgI:FormatConfig|FormatConfig]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x08090000&lt;br /&gt;
| &lt;br /&gt;
| This updates the config block for blkID 0x60000.&lt;br /&gt;
|-&lt;br /&gt;
| 0x080A0000&lt;br /&gt;
| &lt;br /&gt;
| ResetAnalogStickCalibrationParam? This updates the config block for blkID 0x00040001.&lt;br /&gt;
|-&lt;br /&gt;
| 0x080B0082&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SetGetLocalFriendCodeSeedData|SetGetLocalFriendCodeSeedData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080C0042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SetLocalFriendCodeSeedSignature|SetLocalFriendCodeSeedSignature]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080D0000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:DeleteCreateNANDLocalFriendCodeSeed|DeleteCreateNANDLocalFriendCodeSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080E0000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:VerifySigLocalFriendCodeSeed|VerifySigLocalFriendCodeSeed]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x080F0042&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:GetLocalFriendCodeSeedData|GetLocalFriendCodeSeedData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08100000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:GetLocalFriendCodeSeed|GetLocalFriendCodeSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08110084&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SetSecureInfo|SetSecureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08120000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:DeleteCreateNANDSecureInfo|DeleteCreateNANDSecureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08130000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:VerifySigSecureInfo|VerifySigSecureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08140042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SecureInfoGetData|SecureInfoGetData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08150042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgI:SecureInfoGetSignature|SecureInfoGetSignature]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08160000&lt;br /&gt;
| &lt;br /&gt;
| [[Cfg:SecureInfoGetRegion|SecureInfoGetRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08170000&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetByte101|SecureInfoGetByte101]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08180042&lt;br /&gt;
| &lt;br /&gt;
| [[CfgS:SecureInfoGetSerialNo|SecureInfoGetSerialNo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0819....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081A....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081B....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081C....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081D....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081E....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x081F....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0820....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Config NVRAM service &amp;quot;cfg:nor&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[CfgNor:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[CfgNor:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| (u8 flag) Writes the input flag to state. Uses SPI service command [[SPI_Services|EnableSpiBus]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| Writes the u8 from the state written by 0x00030040 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050082&lt;br /&gt;
| [[CfgNor:ReadData|ReadData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060082&lt;br /&gt;
| [[CfgNor:WriteData|WriteData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| This just uses the WREN command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| This just uses the WRDI command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[CfgNor:ReadIdentification|ReadIdentification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| This waits for the WIP bit in the status register to clear(wait for writing to finish).&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| This waits for the WEL bit in the status register to become set(write enabled).&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| This writes the value of the WIP bit in the status register to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| This writes the value of the WIP bit in the status register to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[CfgNor:ReadStatusRegister|ReadStatusRegister]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0082&lt;br /&gt;
| [[CfgNor:ReadDataOther|ReadDataOther]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100082&lt;br /&gt;
| [[CfgNor:WriteDataOther|WriteDataOther]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 offset) Uses command WREN then waits for WEL to become enabled. Sends command 0xDB to SPI followed by the specified flash offset.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 offset) Identical to 0x00110040 except this uses SPI-command 0xD8 instead(&amp;quot;block erase&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| This uses SPI command 0xB9 for &amp;quot;Deep power down&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This uses SPI command 0xAB for &amp;quot;Release from deep power down&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
This is an interface for the &amp;quot;SPI::NOR&amp;quot; service, for accessing the Wifi NVRAM/SPI Flash.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NSC:LockSpecialContent&amp;diff=22206</id>
		<title>NSC:LockSpecialContent</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NSC:LockSpecialContent&amp;diff=22206"/>
		<updated>2023-04-02T17:00:33Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00010100]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [[Filesystem_services#MediaType|MediaType]]&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [[Filesystem_services#SpecialContentType|SpecialContentType]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00010040]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
If a content is not already locked, this stores the provided parameters in the service&#039;s data structure and increments global counters for locked SD card and game card titles based on the media type. If an update title is available for the provided application, the appropriate counter will be incremented as well based on its media type. This also calls into some FS service functions in the range 0x870-0x878 with currently unknown purpose.&lt;br /&gt;
&lt;br /&gt;
If a content is already locked, error C8A12406 will be returned.&lt;br /&gt;
&lt;br /&gt;
If the ns:c session is closed, [[NSC:UnlockSpecialContent|UnlockSpecialContent]] will be called internally to clean up the locked content.&lt;br /&gt;
&lt;br /&gt;
This is used by the Instruction Manual applet, and is likely related to triggering SD/Game Card removal errors when ejecting the media the manual is stored on.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22205</id>
		<title>NS and APT Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=22205"/>
		<updated>2023-04-02T16:33:02Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: /* NS Service &amp;quot;ns:c&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
The NS (&#039;&#039;&#039;N&#039;&#039;&#039;intendo User Interface &#039;&#039;&#039;S&#039;&#039;&#039;hell) system module is the first module launched from a CTR-NAND title after the [[FIRM]] processes are loaded (also see [[Bootloader]]). This module is launched by the pm process, with the titleID loaded from NS state(hard-coded TID initialized during applet TID-array initialization). NS first launches [[ErrDisp]], then the menu. On retail the menu TID is loaded from NS state, while on dev/debug the menu TID is loaded from [[Config_Savegame|config]]. On dev-units if the menu TID block doesn&#039;t exist in [[Config_Savegame|config]], NS will attempt to launch the alternate menu instead. The TID of the launched menu is then written to [[Configuration Memory|ACTIVEMENUTID]]. NS uses [[PMApp:LaunchTitle|pm:app]] to launch titles.&lt;br /&gt;
&lt;br /&gt;
NS will not trigger the [[ErrDisp|fatal-error]] screen when launching the regular/alternate menu fails.&lt;br /&gt;
&lt;br /&gt;
Like home menu NS is constantly running while the system is in 3DS-mode. When attempting to return to home-menu when the home-menu process isn&#039;t running(like when the process terminated/crashed), NS will trigger a [[ErrDisp|fatal]] error.&lt;br /&gt;
&lt;br /&gt;
= Alternate menu =&lt;br /&gt;
When launching the regular menu fails, NS will then attempt to launch the alternate menu. This title could be used as a recovery process, however it&#039;s normally not used after the factory.&lt;br /&gt;
&lt;br /&gt;
At the factory for all 3DS systems, [[3DS Development Unit GUI#Test Menu|Test Menu]] is installed with this TID. On retail this title is eventually deleted during [[Factory Setup]].&lt;br /&gt;
&lt;br /&gt;
= Auto-boot =&lt;br /&gt;
After [[PMApp:GetFIRMLaunchParams|loading]] [[FIRM]] params and prior to launching [[ErrDisp]]/Home Menu, NS handles auto-booting titles. The same code called by [[APT:Reboot]] is used for launching FIRM here. When the [[Configuration_Memory|UPDATEFLAG]] is set, NS will launch SAFE_MODE_FIRM with the application titleID set to the [[System_Settings#System_Updater|System Updater]] titleID for this region. When the UPDATEFLAG is not set, NS can auto-boot the following titles as well if [[Configuration_Memory|0x1FF80016]] bit0 is set.&lt;br /&gt;
&lt;br /&gt;
When bit1 and bit2 are value zero in [[Configuration_Memory|0x1FF80016]], NS will [[NSS:LaunchFIRM|launch]] the title specified by the [[FIRM]] parameters if the title-info is set. This FIRM launch is done after launching [[ErrDisp]] and Home Menu. Otherwise when [[Configuration_Memory|0x1FF80016]] is value 2 and the output u8 from [[PTM|PTMSYSM]] command 0x08140000 is value 0, NS will boot the title specified from the TWL TLNC block from FIRMparams+0x300. This is the same TLNC block which DSi titles wrote to RAM+0x300 for launching other titles via the launcher title. When handling the TLNC block, NS will boot the 3DS System Settings title when the TLNC titleID is the DSi System Settings titleID(the region field in the TLNC TID is not checked/used). When the TLNC titleID is not System Settings, NS will convert the input DSi titleID-high to the 3DS TWL titleID-high(tidhigh = (TLNCtidhigh &amp;amp; 0x7FFF) | 0x48000), then launch TWL_FIRM to run the title. NS does not support launching from gamecard via TLNC.&lt;br /&gt;
&lt;br /&gt;
= NS Workaround =&lt;br /&gt;
A &amp;quot;ns_workaround&amp;quot; was [[5.1.0-11|added]] in NS to workaround the flaw added with [[5.0.0-11]]. When NS is loading before launching any ARM11 processes and certain [[Configuration Memory]] fields are set, NS will launch [[Application_Manager_Services|AM]] then use command [[AM:InstallNATIVEFIRM]]. NS will then execute the code called by [[APT:StartNewestHomeMenu]], the code related to APT:PrepareToStartNewestHomeMenu is not executed here.&lt;br /&gt;
&lt;br /&gt;
NS will only execute this code-path when [[Configuration Memory|0x1FF80016]] is value zero, when KERNEL_VERSIONMAJOR is value 2, and when KERNEL_VERSIONMINOR is less than 35. Therefore, this code-path is only executed when the running NATIVE_FIRM version is prior to [[5.0.0-11]].&lt;br /&gt;
&lt;br /&gt;
= NS Service &amp;quot;ns:s&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchFIRM|LaunchFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000200C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchTitle|LaunchTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateApplication|TerminateApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateProcess|TerminateProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchApplicationFIRM|LaunchApplicationFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetWirelessRebootInfo|SetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateInitialize|CardUpdateInitialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateShutdown|CardUpdateShutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0140&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetTWLBannerHMAC|SetTWLBannerHMAC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| This calls [[APT:AppletUtility]] with fixed input params.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100180&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110100&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateTitle|TerminateTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C0&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140042&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| ?&lt;br /&gt;
| [[NSS:LaunchApplication|LaunchApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[NSS:RebootSystemClean|RebootSystemClean]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum sessions that can be used with this service is two, therefore only two processes can use this service at the same time.&lt;br /&gt;
&lt;br /&gt;
=NS Power Service &amp;quot;ns:p&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| [[NSP:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[NSS:ShutdownAsync|ShutdownAsync]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[3.0.0-5]]. The PTM sysmodule connects to this service, and syncs whenever [[PTM|ptm:s GetShellState()]] changes.&lt;br /&gt;
&lt;br /&gt;
=NS Service &amp;quot;ns:c&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010100&lt;br /&gt;
| [[NSC:LockSpecialContent|LockSpecialContent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020100&lt;br /&gt;
| [[NSC:UnlockSpecialContent|UnlockSpecialContent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0-11]]. It is used by the Instruction Manual applet, and is likely related to triggering SD/Game Card removal errors when ejecting the media the manual is stored on.&lt;br /&gt;
&lt;br /&gt;
=APT Services=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Accessible with APT:U&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLockHandle|GetLockHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| &lt;br /&gt;
| See [[APT:Initialize|here]].&lt;br /&gt;
| [[APT:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Enable|Enable]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Finalize|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletManInfo|GetAppletManInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| &lt;br /&gt;
| Yes, for AppID != 0x300&lt;br /&gt;
| [[APT:GetAppletInfo|GetAppletInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetLastSignaledAppletId|GetLastSignaledAppletId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CountRegisteredApplet|CountRegisteredApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsRegistered|IsRegistered]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAttribute|GetAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:InquireNotification|InquireNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendParameter|SendParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveParameter|ReceiveParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GlanceParameter|GlanceParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelParameter|CancelParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DebugFunc|DebugFunc]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:MapProgramIdForDebug|MapProgramIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetHomeMenuAppletIdForDebug|SetHomeMenuAppletIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetPreparationState|GetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetPreparationState|SetPreparationState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:PrepareToStartApplication|PrepareToStartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadLibraryApplet|PreloadLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:FinishPreloadingLibraryApplet|FinishPreloadingLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartLibraryApplet|PrepareToStartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartSystemApplet|PrepareToStartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartNewestHomeMenu|PrepareToStartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B00C4&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartApplication|StartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:WakeupApplication|WakeupApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelApplication|CancelApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartLibraryApplet|StartLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartSystemApplet|StartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartNewestHomeMenu|StartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:OrderToCloseApplication|OrderToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseApplication|PrepareToCloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToApplication|PrepareToJumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToApplication|JumpToApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002500C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseLibraryApplet|PrepareToCloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToCloseSystemApplet|PrepareToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseApplication|CloseApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseLibraryApplet|CloseLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CloseSystemApplet|CloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:OrderToCloseSystemApplet|OrderToCloseSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToJumpToHomeMenu|PrepareToJumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:JumpToHomeMenu|JumpToHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveHomeMenu|PrepareToLeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveHomeMenu|LeaveHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToLeaveResidentApplet|PrepareToLeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LeaveResidentApplet|LeaveResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToDoApplicationJump|PrepareToDoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DoApplicationJump|DoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramIdOnApplicationJump|GetProgramIdOnApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDeliverArg|SendDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveDeliverArg|ReceiveDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00360040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LoadSysMenuArg|LoadSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00370042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StoreSysMenuArg|StoreSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00380040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PreloadResidentApplet|PreloadResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00390040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartResidentApplet|PrepareToStartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003A0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartResidentApplet|StartResidentApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelLibraryApplet|CancelLibraryApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspSleep|SendDspSleep]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDspWakeUp|SendDspWakeUp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepQuery|ReplySleepQuery]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReplySleepNotificationComplete|ReplySleepNotificationComplete]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendCaptureBufferInfo|SendCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00410040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveCaptureBufferInfo|ReceiveCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00420080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SleepSystem|SleepSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00430040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:NotifyToWait|NotifyToWait]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00440000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetSharedFont|GetSharedFont]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00450040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetWirelessRebootInfo|GetWirelessRebootInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00460104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap|Wrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00470104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap|Unwrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00480100&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:GetProgramInfo|GetProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00490180&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:Reboot|Reboot]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetCaptureInfo|GetCaptureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004B00C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:AppletUtility|AppletUtility]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetFatalErrDispMode|SetFatalErrDispMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletProgramInfo|GetAppletProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004E0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:HardwareResetAsync|HardwareResetAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004F0080&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00500040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationCpuTimeLimit|GetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00510080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetStartupArgument|GetStartupArgument]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00520104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap1|Wrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00530104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap1|Unwrap1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00540040&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00550040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetScreencapPostPermission|SetScreencapPostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00560000&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetScreencapPostPermission|GetScreencapPostPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00570044&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:WakeupApplication2|WakeupApplication2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00580002&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramID|GetProgramID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CheckNew3DSApp|CheckNew3DSApp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01020000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CheckNew3DS|CheckNew3DS]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| This writes an output u8 to cmdreply[2], the value is determined by checking various NS internal state + whether this is a New3DS.&lt;br /&gt;
The normal output seems to be value 0x2. Forcing this value to 0x1 causes New3DS HID usage(via ir:USER) in Smash Bros to be disabled.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:IsStandardMemoryLayout|IsStandardMemoryLayout]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01050100&lt;br /&gt;
| [[10.4.0-29]]&lt;br /&gt;
| ?&lt;br /&gt;
| [[APT:IsTitleAllowed|IsTitleAllowed]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;APT:U&amp;quot; and &amp;quot;APT:S&amp;quot; NS services can handle launching titles/&amp;quot;applets&amp;quot;, these services handle signaling for home/power button as well. Only one session for either APT service can be open at a time, normally processes close the service handle immediately once finished using the service. The commands for APT:U and APT:S are exactly the same, however certain commands are only accessible with APT:S(NS module will call [[SVC|svcBreak]] when the command isn&#039;t accessible).&lt;br /&gt;
&lt;br /&gt;
Applets returning to home-menu first use commands APT:PrepareToJumpToHomeMenu and APT:JumpToHomeMenu, followed by these commands to launch home-menu: [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]]. [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]] are also used for launching the [[Internet Browser]], the camera applet, etc.&lt;br /&gt;
&lt;br /&gt;
Processes launch applications via home-menu, not directly with [[APT:PrepareToStartApplication]] and [[APT:StartApplication]]. Regular applications can&#039;t directly launch applications since [[APT:StartApplication]] launches the process without terminating the currently running application.&lt;br /&gt;
&lt;br /&gt;
APT:PrepareToDoApplicationJump and APT:DoApplicationJump are used by applications, for launching native/&amp;lt;non-NATIVE_FIRM&amp;gt; applications. These commands notify Home Menu that title launching needs done, Home Menu does the actual title launching via NS commands.&lt;br /&gt;
&lt;br /&gt;
== AppletAttr ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| [[NS_and_APT_Services#AppletPos|AppletPos]]&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Manually Acquire/Release GPU Rights&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Manually Acquire/Release DSP Rights&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DisplayBufferMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FORMAT_R8G8B8A8&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FORMAT_R8G8B8&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FORMAT_R5G6B5&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FORMAT_R5G5B5A1&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FORMAT_R4G4B4A4&lt;br /&gt;
|-&lt;br /&gt;
| 0xFFFFFFFF&lt;br /&gt;
| FORMAT_UNIMPORTABLE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the same mapping as used for the [[GPU/External_Registers#Framebuffer_color_formats|GPU framebuffer color formats]].&lt;br /&gt;
&lt;br /&gt;
== AppletPos ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| POS_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| POS_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| POS_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| POS_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| POS_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| POS_RESIDENT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== QueryReply ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| REPLY_REJECT&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| REPLY_ACCEPT&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| REPLY_LATER&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notification ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NOTIFICATION_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| NOTIFICATION_HOME_BUTTON_2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| NOTIFICATION_SLEEP_QUERY&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| NOTIFICATION_SLEEP_CANCELED_BY_OPEN&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| NOTIFICATION_SLEEP_ACCEPTED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| NOTIFICATION_SLEEP_AWAKE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| NOTIFICATION_SHUTDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| NOTIFICATION_POWER_BUTTON_CLEAR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NOTIFICATION_TRY_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| NOTIFICATION_ORDER_TO_CLOSE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Command ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| COMMAND_NONE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| COMMAND_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| COMMAND_REQUEST&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| COMMAND_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| COMMAND_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| COMMAND_MESSAGE&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| COMMAND_HOME_BUTTON_SINGLE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| COMMAND_HOME_BUTTON_DOUBLE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| COMMAND_DSP_SLEEP&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| COMMAND_DSP_WAKEUP&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| COMMAND_WAKEUP_BY_EXIT&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| COMMAND_WAKEUP_BY_PAUSE&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCEL&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| COMMAND_WAKEUP_BY_CANCELALL&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| COMMAND_WAKEUP_BY_POWER_BUTTON_CLICK&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| COMMAND_WAKEUP_TO_JUMP_HOME&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| COMMAND_REQUEST_FOR_SYS_APPLET&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| COMMAND_WAKEUP_TO_LAUNCH_APPLICATION&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| Unknown. [[APT:ReceiveParameter|Received]] by Home Menu during boot when the Home Menu process doesn&#039;t terminate properly(svcExitProcess/crash).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AppletPreparationState ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NO_PREPARATION&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| PREPARED_TO_LAUNCH_APP&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PREPARED_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_APP&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| PREPARED_TO_PRELOAD_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| PREPARED_TO_LAUNCH_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| PREPARED_TO_CLOSE_APPLIB&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| PREPARED_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| PREPARED_TO_PRELOAD_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| PREPARED_TO_LAUNCH_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| PREPARED_TO_CLOSE_SYSLIB&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| PREPARED_TO_LAUNCH_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| PREPARED_TO_LEAVE_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| PREPARED_TO_DO_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| PREPARED_TO_LEAVE_HOMEMENU&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| PREPARED_TO_START_RESIDENT&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| PREPARED_TO_DO_APP_JUMP&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| PREPARED_TO_FORCE_TO_CLOSE_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| PREPARED_TO_LAUNCH_OTHER_SYS&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| PREPARED_TO_JUMP_TO_APP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartupArgumentType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_APP&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_RESTART&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| STARTUP_ARGUMENT_TYPE_OTHER_MEDIA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CaptureBufferInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8, 3D (0 = not 3D, 1 = 3D)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Left Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen Right Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub Screen [[NS_and_APT_Services#DisplayBufferMode|DisplayBufferMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WirelessRebootInfo==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x9&lt;br /&gt;
| WirelessRebootPassphrase&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Uninitialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is [[NSS:SetWirelessRebootInfo|setup]] by the dlplay system-application, before launching the DLP-child which can then use [[APT:GetWirelessRebootInfo]]. The MAC address and passphrase is used for connecting to the host by the DLP-child. See also [[DLP_Services|here]].&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;APT:A&amp;quot; Service=&lt;br /&gt;
This was added with [[7.0.0-13|7.0.0-X]]. Official apps built with the CTRSDK for system-version &amp;gt;=[[7.0.0-13|7.0.0-X]] normally use the &amp;quot;APT:A&amp;quot; service instead of &amp;quot;APT:U&amp;quot;. Those processes also have &amp;quot;APT:A&amp;quot; instead of &amp;quot;APT:U&amp;quot; in the service-access-control. It&#039;s unknown whether there&#039;s anything which is only accessible via &amp;quot;APT:A&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Applets=&lt;br /&gt;
NS module does not verify that the input appID for the APT service cmds are correct for that type of command. For example, a process-launch of a SystemApplet via LibraryApplet commands works fine(minus the launched-process side of APT probably).&lt;br /&gt;
&lt;br /&gt;
==System Applets==&lt;br /&gt;
On Old3DS there could only be one applet here(Home Menu, Internet Browser, Friend-List, etc) with programID-high 00040030 running at a time. On Old3DS when directly launching one of these 00040030 applets with Home Menu, the Home Menu process will terminate once the process is launched. On Old3DS when returning to Home Menu from that launched process, the Home Menu process is launched again.&lt;br /&gt;
&lt;br /&gt;
On New3DS the Home Menu process is still running/in-memory, while another system-applet is running. On New3DS it appears that the Home Menu process is terminated+relaunched, when another system-applet terminated without exiting with APT properly.&lt;br /&gt;
&lt;br /&gt;
==Library Applets==&lt;br /&gt;
Library applets can be launched by applications and regular applets. These library applets render to the screen(s) when running, etc. For example, this includes swkbd for text input. See the below appIDs in the 0x2XX range, the actual appID used is 0x4XX however.&lt;br /&gt;
&lt;br /&gt;
Input data can be sent to the library applet via the NS [[APT:SendParameter|parameter]] buffer, and/or with shared-memory with a shared-mem handle sent to the library applet. Output data from the library applet can be received by [[APT:ReceiveParameter]], the library applet can also use the specified shared-mem for output too.&lt;br /&gt;
&lt;br /&gt;
=AppIDs=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  AppID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| [[Home Menu]] (menu)&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Alternate Menu&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| Camera applet ([[Camera Applet|CtrApp]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x112&lt;br /&gt;
| Friends List applet ([[Friend List|friend]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x113&lt;br /&gt;
| Game Notes applet (Cherry)&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| [[Internet Browser]] (spider/SKATER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x115&lt;br /&gt;
| Instruction Manual applet&lt;br /&gt;
|-&lt;br /&gt;
| 0x116&lt;br /&gt;
| [[Notifications]] applet (newslist)&lt;br /&gt;
|-&lt;br /&gt;
| 0x117&lt;br /&gt;
| Miiverse applet (olv)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| [[Miiverse]] posting applet (solv3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x119&lt;br /&gt;
| Amiibo settings (cabinet)&lt;br /&gt;
|-&lt;br /&gt;
| 0x201&lt;br /&gt;
| Software Keyboard (swkbd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x202&lt;br /&gt;
| [[Mii Selector]] (appletEd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| Photo Selector (PNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| Sound Selector (SNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| Error Display ([[ErrDisp|error]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| eShop applet ([[EShop#NS_eShop_application_parameters|mint]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| Notepad (memolib) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 0x301&lt;br /&gt;
| eShop (tiger)&lt;br /&gt;
|-&lt;br /&gt;
| 0x401&lt;br /&gt;
| Software Keyboard (swkbd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x402&lt;br /&gt;
| Mii Selector (appletEd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x404&lt;br /&gt;
| Photo Selector (PNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x405&lt;br /&gt;
| Sound Selector (SNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x406&lt;br /&gt;
| Error Display (error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x407&lt;br /&gt;
| eShop applet (mint)&lt;br /&gt;
|-&lt;br /&gt;
| 0x408&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x409&lt;br /&gt;
| Notepad (memolib)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF10&lt;br /&gt;
| ProgramID: 0004003000008900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF11&lt;br /&gt;
| ProgramID: 000400000FFFFD00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF12&lt;br /&gt;
| ProgramID: 000400000FFFFC00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF13&lt;br /&gt;
| ProgramID: 000400000FFFFB00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF14&lt;br /&gt;
| ProgramID: 000400000FFFF900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF15&lt;br /&gt;
| ProgramID: 000400000FFFF800.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF16&lt;br /&gt;
| ProgramID: 000400000FFFF700.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF17&lt;br /&gt;
| ProgramID: 000400000FFFF600.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF18&lt;br /&gt;
| ProgramID: 000400000FFFF500.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These AppIDs are all for NAND titles, except for 0x300. AppIDs in the 0x1XX range are applets(programID-high 00040030), and the AppIDs in the 0x2XX range are &amp;quot;system libraries&amp;quot;(programID-high 00040030). The 0xFXX AppID range is for development NAND applications, these are not available for retail.&lt;br /&gt;
&lt;br /&gt;
Note that at some point the total AppID entry count was changed from 28 to 27.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NSC:UnlockSpecialContent&amp;diff=22204</id>
		<title>NSC:UnlockSpecialContent</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NSC:UnlockSpecialContent&amp;diff=22204"/>
		<updated>2023-04-02T16:32:47Z</updated>

		<summary type="html">&lt;p&gt;Steveice10: Created page with &amp;quot;=Request= {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; |- !  Index Word !  Description |- | 0 | Header code [0x00020100] |- | 1 | MediaType |- | 2-3 | Tit...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00020100]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [[Filesystem_services#MediaType|MediaType]]&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [[Filesystem_services#SpecialContentType|SpecialContentType]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00020040]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
If a content is currently locked and the inputs match the locked content parameters, this decrements global counters for locked SD card and game card titles based on the media type. If an update title is available for the provided application, the appropriate counter will be decremented as well based on its media type. This also calls into some FS service functions in the range 0x870-0x878 with currently unknown purpose.&lt;br /&gt;
&lt;br /&gt;
If a content is not locked or the provided parameters do not match, error C8A12405 will be returned.&lt;br /&gt;
&lt;br /&gt;
This is used by the Instruction Manual applet, and is likely related to triggering SD/Game Card removal errors when ejecting the media the manual is stored on.&lt;/div&gt;</summary>
		<author><name>Steveice10</name></author>
	</entry>
</feed>