This is an old revision of the document!
The Fast3D display list commands are microcode that are passed to the RSP for rendering. The are all 8 bytes long.
Used in Super Mario 64 to load vector normals (shading) RGB values.
03 [TT] 00 00 [AA AA AA AA]
T | If 86, loads light values. If 88, loads dark values |
A | Segmented address of vectors |
Example: Loads light RGB from 0x0 in RAM bank 0x0E; loads dark RGB from 0x08 in RAM Bank 0x0E
03 86 00 00 0E 00 00 00 03 88 00 00 0E 00 00 08
Fills the vertex buffer with vertex information (ex. coordinates, color values). Max amount of bytes to load in F3D is 0x100 (16 vertices).
04 [N][I] [LL LL] [SS SS SS SS]
N | Number of vertices - 1 |
I | Where to start writing vertices inside the vertex buffer |
L | Length of vertex data to write ((N+1)*0x10) |
S | Segmented address where vertices are stored |
Example: Load 15 (0xF0 / 0x10) vertices from 0x0E000780 (current map data) - and put them into the vertex buffer, starting at position 0.
04 E0 00 F0 0E 00 07 80
Signifies the start of a Display List. May be used to link data and branch the current DL.
06 00 00 00 [AA AA AA AA]
A | Segmented Address to branch to |
Example: Loads a display list from 0xA50 in bank 0x07.
06 00 00 00 07 00 0A 50
Renders one quad according to the vertices inside the vertex buffer
B5 [AA] [BB] [CC] 00 [DD] [EE] [FF]
A | First vertex to use for the quad (* 0x0A) |
B | Second vertex to use for the quad (* 0x0A) |
C | Third vertex to use for the quad (* 0x0A) |
D | Fourth vertex to use for the quad (* 0x0A) |
E | Fifth vertex to use for the quad (* 0x0A) |
F | Sixth vertex to use for the quad (* 0x0A) |
Example: Render a quad using the vertex data specified at the vertex buffer positions 0, 1 (0x0A / 0x0A), 2 (0x14 / 0x0A), 0, 2 (0x14 / 0x0A) and 3 (0x1E / 0x0A).
B5 00 0A 14 00 00 14 1E
Enables or disables certain geometry parameters (ex. lighting, front-/backface culling, Z-buffer). Used at start of Display List.
B6 00 00 00 [AA AA AA AA]
A | Various parameters |
Parameters (can be OR'd together):
0x00000001 | Use Z-buffering |
0x00000004 | Use shading |
0x00000200 | Enable smooth shading (otherwise flat shading) |
0x00001000 | cull front facing triangles |
0x00002000 | cull back facing triangles |
0x00004000 | Crystal effect? |
0x00010000 | Fog |
0x00020000 | Enable lighting? Vertex colors? |
0x00040000 | generate texture coords using the normal |
0x00080000 | generate texture coords (not sure how this works) |
Examples:
B6 00 00 00 00 02 20 00 : Vertex RGB, no culling B6 00 00 00 00 02 00 00 : Vertex RGB, culling B6 00 00 00 00 00 00 00 : No vertex RGB, culling B6 00 00 00 00 00 22 00 : No vertex RGB, no culling
Enables or disables certain geometry parameters (ex. lighting, front-/backface culling, Z-buffer). Used at end of Display List.
B7 00 00 00 [AA AA AA AA]
A | Various parameters |
See B6: F3D_CLEARGEOMETRYMODE for list of parameters.
Examples:
B7 00 00 00 00 02 20 00 : Vertex RGB, no culling B7 00 00 00 00 02 00 00 : Vertex RGB, culling B7 00 00 00 00 00 00 00 : No vertex RGB, culling B7 00 00 00 00 00 22 00 : No vertex RGB, no culling
Terminates the current Display List
B8 00 000 000 00 00 00
Sets the texture scaling factor.
BB 00 00 ?? ?? ?? ?? ??
Examples:
BB 00 00 01 FF FF FF FF : Standard - at start for 1 scaling. BB 00 00 01 0F 80 07 C0 : Special case - at start for environment mapping. BB 00 00 00 FF FF FF FF : Always reset to at end of the DL to reset scale to 0.
Renders one triangle according to the vertices inside the vertex buffer
BF 00 00 00 [AA] [BB] [CC]
A | First vertex to use for the triangle (* 0x0A) |
B | Second vertex to use for the triangle (* 0x0A) |
C | Third vertex to use for the triangle (* 0x0A) |
Example: Render a triangle using the vertex data specified at the vertex buffer positions 0, 1 (0x0A / 0x0A) and 2 (0x14 / 0x0A).
BF 00 00 00 00 0A 14
Sets the texture coordinates and size
F2 00 00 00 00 [WW W][H HH]
W | (width - 1) « 2 |
H | (hieght - 1) « 2 |
Examples:
F2 00 00 00 00 07 C0 7C : 32x32 textures F2 00 00 00 00 0F C0 7C : 64x32 F2 00 00 00 00 07 C0 FC : 32x64
Determines how much data to load after SETTIMG
F3 00 00 00 ?? ?? ?? ??
Examples:
F3 00 00 00 07 7F F1 00 : 32x64 or 64x32 RGBA Textures F3 00 00 00 07 3F F1 00 : 32x32 RGBA Textures
Sets the texture properties (ex. mirroring)
F5 ?? ?? ?? ?? ?? ?? ??
Examples:
F5 10 00 00 07 00 00 00 : Always loaded first for normal RGBA, followed by another F5 command F5 70 00 00 07 00 00 00 : Always loaded first for Grayscale, followed by another F5 command F5 10 10 00 07 01 40 50 : Normal for 32x32 textures after G_SETTILESIZE F5 10 20 00 07 01 40 60 : Normal for 64x32 textures after G_SETTILESIZE F5 70 10 00 07 01 40 50 : Grayscale for 32x32 textures after G_SETTILESIZE
Sets the fog color
F8 00 00 00 [RR] [GG] [BB] [AA]
R | red value |
G | green value |
B | blue value |
A | typically set to FF |
Example: set the fog for the following polygons to pure green
F8 00 00 00 00 FF 00 FF
Sets the environment color for combiner
FB 00 00 00 [RR] [GG] [BB] [AA]
R | red value |
G | green value |
B | blue value |
A | alpha value |
Example: make everything loaded underneath the command red, and semi-transparent
FB 00 00 00 FF 00 00 8C
Performs combining operations (ex. multi-texturing). The N64's Color Combiner calculates the output color by combining the various source colors and source alphas using the following equation: outputcolor = ( A - B ) * C + D.
FC [XX XX XX XX XX XX XX]
X | Equation for blending. Mask is bitwise. |
Bitwise mask for e:
[aaaa] [ccccc] [eee] [ggg] [iiii] [kkkkk] [bbbb] [jjjj] [mmm] [ooo] [ddd] [fff] [hhh] [lll] [nnn] [ppp]
a | variable 'a' for mode 1 (color) |
b | variable 'b' for mode 1 (color) |
c | variable 'c' for mode 1 (color) |
d | variable 'd' for mode 1 (color) |
e | variable 'e' for mode 1 (alpha) |
f | variable 'f' for mode 1 (alpha) |
g | variable 'g' for mode 1 (alpha) |
h | variable 'h' for mode 1 (alpha) |
i | variable 'a' for mode 2 (color) |
j | variable 'b' for mode 2 (color) |
k | variable 'c' for mode 2 (color) |
l | variable 'd' for mode 2 (color) |
m | variable 'e' for mode 2 (alpha) |
n | variable 'f' for mode 2 (alpha) |
o | variable 'g' for mode 2 (alpha) |
p | variable 'h' for mode 2 (alpha) |
More information here:
Examples:
FC 12 7F FF FF FF F8 38 : Standard usage for solid RGBA textures FC 12 18 24 FF 33 FF FF : Standard usage for alpha RGBA textures
Sets the texture image offset
FD 10 00 00 [AA AA AA AA]
A | Segmented address of texture |
Example: Load texture position from 0x90 in RAM bank 0x04
FD 10 00 00 04 00 00 90