The Fast3D display list commands are microcode that are passed to the RSP for rendering. The are all 8 bytes long.
No operation. This should only be used for debugging purposes.
00 00 00 00 00 00 00 00
Apply transformation matrix. Used in HUD text printing code to translate textures.
01 [PP] 00 00 [AA AA AA AA]
P | Parameters |
A | Segmented address of vectors |
Parameters (can be OR'd together):
0x01 | projection (default: model view) |
0x02 | load (default: multiply) |
0x04 | push (default: no push) |
Example: Push matrix and and multiply by matrix at 0x00213DF8; Multiply by matrix at 0x00213DB8
01 04 00 40 00 21 3D F8 01 00 00 40 00 21 3D B8
Used in Super Mario 64 to load vector lighting ambient/diffuse RGBA values.
03 [TT] 00 10 [AA AA AA AA]
T | If 0x86, loads diffuse(light) values. If 0x88, loads ambient(dark) values |
A | Segmented address of RGBA |
Example: Loads diffuse RGBA from 0x0 in RAM bank 0x0E; loads ambient RGBA from 0x08 in RAM Bank 0x0E
03 86 00 10 0E 00 00 00 03 88 00 10 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 [AA] 00 00 [BB BB BB BB]
AA | 00 = store return address, 01 = don't store (end DL after branch) |
B | 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 |
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 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 00 0A 14
Draws a textured 2D rectangle on the screen
E4 [xx x][y yy] 0[I] [XX X][Y YY]
B3 00 00 00 [SS SS] [TT TT]
B2 00 00 00 [DD DD] [EE EE]
xxx | Lower-right corner X coordinate |
yyy | Lower-right corner Y coordinate |
I | Tile descriptor to use for rectangle |
XXX | Upper-left corner X coordinate |
YYY | Upper-left corner Y coordinate |
SSSS | Texture S coordinate at upper-left corner |
TTTT | Texture T coordinate at upper-left corner |
DDDD | Change in S coordinate over change in X coordinate |
EEEE | Change in T coordinate over change in Y coordinate |
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 [SS S][T TT] 0[I] [XX X][D DD]
SSS | Upper-left corner of texture to load, S-axis |
TTT | Upper-left corner of texture to load, T-axis |
I | Tile descriptor to load into |
XXX | Number of texels to load to TMEM, minus one |
DDD | Change in T-axis per scanline |
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 [XX XX XX XX XX XX XX]
X | Bit-wise parameters |
Bit-wise parameters:
[fff] [ii] 0 [nnnnnnnnn] [mmmmmmmmm] 00000 [ttt] [pppp] [cc] [aaaa] [ssss] [dd] [bbbb] [uuuu]
fff | Sets color format |
ii | Sets bit size of pixel |
nnnnnnnnn | Number of 64-bit values per row |
mmmmmmmmm | Offset of texture in TMEM |
ttt | Tile descriptor being modified |
pppp | Which palette to use for colors (if relevant) |
cc | Clamp and Mirror flags for the T axis |
aaaa | Sets how much of T axis is shown before wrapping |
ssss | Sets the amount to shift T axis values after perspective division |
dd | Clamp and Mirror flags for the S axis |
bbbb | Sets how much of S axis is shown before wrapping |
uuuu | Sets the amount to shift S axis values after perspective division |
Color formats | ||
0 | RGBA | Color and alpha |
1 | YUV | |
2 | CI | Index and look-up pallet |
3 | IA | Grayscale and alpha |
4 | I | Grayscale |
Bit sizes | ||
0 | 4-bit | I, IA, and CI |
1 | 8-bit | I, IA, and CI |
2 | 16-bit | RGBA, IA, and YUV |
3 | 32-bit | RGBA |
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
Draws a colored rectangle on the screen. Use command 0xF7 to set the color of the rectangle.
F6 [VV V][W WW] 00 [XX X][Y YY]
VVV | Lower-right corner of rectangle, X-axis |
WWW | Lower-right corner of rectangle, Y-axis |
XXX | Upper-left corner of rectangle, X-axis |
YYY | Upper-left corner of rectangle, Y-axis |
Sets the fill color for use in fill mode.
F7 00 00 00 [CC CC CC CC]
CCCCCCCC | Fill value for use in fill mode |
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 X:
[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