1 #ifndef GBI_H
2 #define GBI_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 // Microcode Types
9 #define F3D         0
10 #define F3DEX       1
11 #define F3DEX2      2
12 #define L3D         3
13 #define L3DEX       4
14 #define L3DEX2      5
15 #define S2DEX       6
16 #define S2DEX2      7
17 #define F3DPD       8
18 #define F3DDKR      9
19 #define F3DWRUS     10
20 #define F3DCBFD     11
21 #define NONE        12
22 
23 
24 #define F3DCBFD_MV_VIEWPORT     8
25 #define F3DCBFD_MV_LIGHT        10
26 #define F3DCBFD_MV_NORMAL       14
27 
28 // Fixed point conversion factors
29 #define FIXED2FLOATRECIP1   0.5f
30 #define FIXED2FLOATRECIP2   0.25f
31 #define FIXED2FLOATRECIP3   0.125f
32 #define FIXED2FLOATRECIP4   0.0625f
33 #define FIXED2FLOATRECIP5   0.03125f
34 #define FIXED2FLOATRECIP6   0.015625f
35 #define FIXED2FLOATRECIP7   0.0078125f
36 #define FIXED2FLOATRECIP8   0.00390625f
37 #define FIXED2FLOATRECIP9   0.001953125f
38 #define FIXED2FLOATRECIP10  0.0009765625f
39 #define FIXED2FLOATRECIP11  0.00048828125f
40 #define FIXED2FLOATRECIP12  0.00024414063f
41 #define FIXED2FLOATRECIP13  0.00012207031f
42 #define FIXED2FLOATRECIP14  6.1035156e-05f
43 #define FIXED2FLOATRECIP15  3.0517578e-05f
44 #define FIXED2FLOATRECIP16  1.5258789e-05f
45 
46 #define _FIXED2FLOAT( v, b ) ((float)v * FIXED2FLOATRECIP##b)
47 
48 /* Useful macros for decoding GBI command's parameters */
49 #define _SHIFTL( v, s, w )  (((uint32_t)v & ((0x01 << w) - 1)) << s)
50 #define _SHIFTR( v, s, w )  (((uint32_t)v >> s) & ((0x01 << w) - 1))
51 
52 /* BG flags */
53 #define G_BGLT_LOADBLOCK    0x0033
54 #define G_BGLT_LOADTILE     0xfff4
55 
56 #define G_BG_FLAG_FLIPS     0x01
57 #define G_BG_FLAG_FLIPT     0x10
58 
59 /* Sprite object render modes */
60 #define G_OBJRM_NOTXCLAMP       0x01
61 #define G_OBJRM_XLU             0x02    /* Ignored */
62 #define G_OBJRM_ANTIALIAS       0x04    /* Ignored */
63 #define G_OBJRM_BILERP          0x08
64 #define G_OBJRM_SHRINKSIZE_1    0x10
65 #define G_OBJRM_SHRINKSIZE_2    0x20
66 #define G_OBJRM_WIDEN           0x40
67 
68 /* Sprite texture loading types */
69 #define G_OBJLT_TXTRBLOCK   0x00001033
70 #define G_OBJLT_TXTRTILE    0x00fc1034
71 #define G_OBJLT_TLUT        0x00000030
72 
73 /* These are all the constant flags */
74 #define G_ZBUFFER               0x00000001  /* Enables Z buffer calculations.
75                                              *
76                                              * Other Z buffer-related parameters
77                                              * for the framebuffer must also be
78                                              * set. */
79 #define G_TEXTURE_ENABLE        0x00000002  /* Microcode use only  */
80 #define G_SHADE                 0x00000004  /* Calculate vertex color.
81                                              *
82                                              * Enables calculation of
83                                              * the vertex color for
84                                              * a triangle. */
85 
86 #define G_SHADING_SMOOTH        0x00000200  /* Enables Gouraud shading.
87                                              *
88                                              * When this is not enabled,
89                                              * flat shading is used for the
90                                              * triangle based on the color
91                                              * of one vertex (see gSP1Triangle).
92                                              * */
93 #define G_CULL_FRONT            0x00001000  /* Enables front-face culling.
94                                              *
95                                              * This does not support F3DLX.Rej
96                                              * but it does support F3DLX2.Rej.
97                                              */
98 #define G_CULL_BACK             0x00002000  /* Enables back-face culling. */
99 #define G_CULL_BOTH             0x00003000  /* Enables both back-face and
100                                              * front-face culling.
101                                              *
102                                              * This does not support F3DLX.Rej
103                                              * but it does support F3DLX2.Rej. */
104 #define G_FOG                   0x00010000  /* Enables generation of vertex
105                                              * alpha coordinate fog parameters. */
106 #define G_LIGHTING              0x00020000  /* Enables lighting calculations. */
107 #define G_TEXTURE_GEN           0x00040000  /* Enables automatic generation of
108                                              * the texture's S/T coordinates.
109                                              *
110                                              * Spherical mapping based on the
111                                              * normal vector is used.
112                                              */
113 #define G_TEXTURE_GEN_LINEAR    0x00080000  /* Enables automatic generation of
114                                              * the texture's S/T coordinates. */
115 #define G_LOD                   0x00100000
116 #define G_POINT_LIGHTING		  0x00400000
117 
118 #define G_MV_MMTX       2
119 #define G_MV_PMTX       6
120 #define G_MV_LIGHT      10
121 #define G_MV_POINT      12
122 #define G_MV_MATRIX     14
123 #define G_MV_NORMALES	14
124 
125 #define G_MVO_LOOKATX   0
126 #define G_MVO_LOOKATY   24
127 #define G_MVO_L0        48
128 #define G_MVO_L1        72
129 #define G_MVO_L2        96
130 #define G_MVO_L3        120
131 #define G_MVO_L4        144
132 #define G_MVO_L5        168
133 #define G_MVO_L6        192
134 #define G_MVO_L7        216
135 
136 /* MOVEMEM indices
137  *
138  * each of these indexes an entry
139  * in a DMEM table which points to
140  * a 1-4 word block of DMEM in which
141  * to store a 1-4 word DMA. */
142 #define F3D_MV_VIEWPORT 0x80
143 #define G_MV_LOOKATY    0x82
144 #define G_MV_LOOKATX    0x84
145 #define G_MV_L0         0x86
146 #define G_MV_L1         0x88
147 #define G_MV_L2         0x8a
148 #define G_MV_L3         0x8c
149 #define G_MV_L4         0x8e
150 #define G_MV_L5         0x90
151 #define G_MV_L6         0x92
152 #define G_MV_L7         0x94
153 #define G_MV_TXTATT     0x96
154 #define G_MV_MATRIX_1   0x9E /* NOTE: this is in moveword table */
155 #define G_MV_MATRIX_2   0x98
156 #define G_MV_MATRIX_3   0x9A
157 #define G_MV_MATRIX_4   0x9C
158 
159 /* MOVEWORD indices
160  *
161  * each of these indexes an entry
162  * in a DMEM table which points to
163  * a word in DMEM where an immediate
164  * word will be stored. */
165 #define G_MW_MATRIX         0x00
166 #define G_MW_NUMLIGHT       0x02
167 #define G_MW_CLIP           0x04
168 #define G_MW_SEGMENT        0x06
169 #define G_MW_FOG            0x08
170 #define G_MW_LIGHTCOL       0x0A
171 #define G_MW_FORCEMTX       0x0C
172 #define G_MW_POINTS         0x0C
173 #define G_MW_PERSPNORM      0x0E
174 #define G_MV_COORDMOD       0x10    /* Conker Bad Fur Day */
175 
176 /* These are offsets from the address in the DMEM table */
177 #define G_MWO_NUMLIGHT      0x00
178 #define G_MWO_CLIP_RNX      0x04
179 #define G_MWO_CLIP_RNY      0x0c
180 #define G_MWO_CLIP_RPX      0x14
181 #define G_MWO_CLIP_RPY      0x1c
182 #define G_MWO_SEGMENT_0     0x00
183 #define G_MWO_SEGMENT_1     0x01
184 #define G_MWO_SEGMENT_2     0x02
185 #define G_MWO_SEGMENT_3     0x03
186 #define G_MWO_SEGMENT_4     0x04
187 #define G_MWO_SEGMENT_5     0x05
188 #define G_MWO_SEGMENT_6     0x06
189 #define G_MWO_SEGMENT_7     0x07
190 #define G_MWO_SEGMENT_8     0x08
191 #define G_MWO_SEGMENT_9     0x09
192 #define G_MWO_SEGMENT_A     0x0a
193 #define G_MWO_SEGMENT_B     0x0b
194 #define G_MWO_SEGMENT_C     0x0c
195 #define G_MWO_SEGMENT_D     0x0d
196 #define G_MWO_SEGMENT_E     0x0e
197 #define G_MWO_SEGMENT_F     0x0f
198 #define G_MWO_FOG           0x00
199 
200 #define F3D_MWO_aLIGHT_1        0x00
201 #define F3D_MWO_bLIGHT_1        0x04
202 #define F3D_MWO_aLIGHT_2        0x20
203 #define F3D_MWO_bLIGHT_2        0x24
204 #define F3D_MWO_aLIGHT_3        0x40
205 #define F3D_MWO_bLIGHT_3        0x44
206 #define F3D_MWO_aLIGHT_4        0x60
207 #define F3D_MWO_bLIGHT_4        0x64
208 #define F3D_MWO_aLIGHT_5        0x80
209 #define F3D_MWO_bLIGHT_5        0x84
210 #define F3D_MWO_aLIGHT_6        0xa0
211 #define F3D_MWO_bLIGHT_6        0xa4
212 #define F3D_MWO_aLIGHT_7        0xc0
213 #define F3D_MWO_bLIGHT_7        0xc4
214 #define F3D_MWO_aLIGHT_8        0xe0
215 #define F3D_MWO_bLIGHT_8        0xe4
216 
217 
218 #define F3DEX2_MWO_aLIGHT_1     0x00
219 #define F3DEX2_MWO_bLIGHT_1     0x04
220 #define F3DEX2_MWO_aLIGHT_2     0x18
221 #define F3DEX2_MWO_bLIGHT_2     0x1c
222 #define F3DEX2_MWO_aLIGHT_3     0x30
223 #define F3DEX2_MWO_bLIGHT_3     0x34
224 #define F3DEX2_MWO_aLIGHT_4     0x48
225 #define F3DEX2_MWO_bLIGHT_4     0x4c
226 #define F3DEX2_MWO_aLIGHT_5     0x60
227 #define F3DEX2_MWO_bLIGHT_5     0x64
228 #define F3DEX2_MWO_aLIGHT_6     0x78
229 #define F3DEX2_MWO_bLIGHT_6     0x7c
230 #define F3DEX2_MWO_aLIGHT_7     0x90
231 #define F3DEX2_MWO_bLIGHT_7     0x94
232 #define F3DEX2_MWO_aLIGHT_8     0xa8
233 #define F3DEX2_MWO_bLIGHT_8     0xac
234 
235 #define F3DEX2_RDPHALF_2        0xF1
236 #define F3DEX2_SETOTHERMODE_H   0xE3
237 #define F3DEX2_SETOTHERMODE_L   0xE2
238 #define F3DEX2_RDPHALF_1        0xE1
239 #define F3DEX2_SPNOOP           0xE0
240 #define F3DEX2_ENDDL            0xDF
241 #define F3DEX2_DL               0xDE
242 #define F3DEX2_LOAD_UCODE       0xDD
243 #define F3DEX2_MOVEMEM          0xDC
244 #define F3DEX2_MOVEWORD         0xDB
245 #define F3DEX2_MTX              0xDA
246 #define F3DEX2_GEOMETRYMODE     0xD9
247 #define F3DEX2_POPMTX           0xD8
248 #define F3DEX2_TEXTURE          0xD7
249 #define F3DEX2_DMA_IO           0xD6
250 #define F3DEX2_SPECIAL_1        0xD5
251 #define F3DEX2_SPECIAL_2        0xD4
252 #define F3DEX2_SPECIAL_3        0xD3
253 
254 #define F3DEX2_VTX              0x01
255 #define F3DEX2_MODIFYVTX        0x02
256 #define F3DEX2_CULLDL           0x03
257 #define F3DEX2_BRANCH_Z         0x04
258 #define F3DEX2_TRI1             0x05
259 #define F3DEX2_TRI2             0x06
260 #define F3DEX2_QUAD             0x07
261 #define F3DEX2_LINE3D           0x08
262 
263 #define F3DEX2_MV_VIEWPORT      8
264 
265 #define G_MWO_MATRIX_XX_XY_I    0x00
266 #define G_MWO_MATRIX_XZ_XW_I    0x04
267 #define G_MWO_MATRIX_YX_YY_I    0x08
268 #define G_MWO_MATRIX_YZ_YW_I    0x0C
269 #define G_MWO_MATRIX_ZX_ZY_I    0x10
270 #define G_MWO_MATRIX_ZZ_ZW_I    0x14
271 #define G_MWO_MATRIX_WX_WY_I    0x18
272 #define G_MWO_MATRIX_WZ_WW_I    0x1C
273 #define G_MWO_MATRIX_XX_XY_F    0x20
274 #define G_MWO_MATRIX_XZ_XW_F    0x24
275 #define G_MWO_MATRIX_YX_YY_F    0x28
276 #define G_MWO_MATRIX_YZ_YW_F    0x2C
277 #define G_MWO_MATRIX_ZX_ZY_F    0x30
278 #define G_MWO_MATRIX_ZZ_ZW_F    0x34
279 #define G_MWO_MATRIX_WX_WY_F    0x38
280 #define G_MWO_MATRIX_WZ_WW_F    0x3C
281 #define G_MWO_POINT_RGBA        0x10
282 #define G_MWO_POINT_ST          0x14
283 #define G_MWO_POINT_XYSCREEN    0x18
284 #define G_MWO_POINT_ZSCREEN     0x1C
285 
286 /* Image formats */
287 #define G_IM_FMT_RGBA   0
288 #define G_IM_FMT_YUV    1
289 #define G_IM_FMT_CI     2
290 #define G_IM_FMT_IA     3
291 #define G_IM_FMT_I      4
292 #define G_IM_FMT_CI_IA  5   /* not real */
293 
294 /* Image sizes */
295 #define G_IM_SIZ_4b     0
296 #define G_IM_SIZ_8b     1
297 #define G_IM_SIZ_16b    2
298 #define G_IM_SIZ_32b    3
299 #define G_IM_SIZ_DD     5
300 
301 #define G_TX_MIRROR     0x1
302 #define G_TX_CLAMP      0x2
303 
304 #ifdef DEBUG
305 static const char *ImageFormatText[] =
306 {
307     "G_IM_FMT_RGBA",
308     "G_IM_FMT_YUV",
309     "G_IM_FMT_CI",
310     "G_IM_FMT_IA",
311     "G_IM_FMT_I",
312     "G_IM_FMT_INVALID",
313     "G_IM_FMT_INVALID",
314     "G_IM_FMT_INVALID"
315 };
316 
317 static const char *ImageSizeText[] =
318 {
319     "G_IM_SIZ_4b",
320     "G_IM_SIZ_8b",
321     "G_IM_SIZ_16b",
322     "G_IM_SIZ_32b"
323 };
324 
325 static const char *SegmentText[] =
326 {
327     "G_MWO_SEGMENT_0", "G_MWO_SEGMENT_1", "G_MWO_SEGMENT_2", "G_MWO_SEGMENT_3",
328     "G_MWO_SEGMENT_4", "G_MWO_SEGMENT_5", "G_MWO_SEGMENT_6", "G_MWO_SEGMENT_7",
329     "G_MWO_SEGMENT_8", "G_MWO_SEGMENT_9", "G_MWO_SEGMENT_A", "G_MWO_SEGMENT_B",
330     "G_MWO_SEGMENT_C", "G_MWO_SEGMENT_D", "G_MWO_SEGMENT_E", "G_MWO_SEGMENT_F"
331 };
332 #endif
333 
334 #define G_NOOP                  0x00
335 
336 #define G_IMMFIRST              -65
337 
338 /* RDP commands */
339 /* These GBI commands are common to all ucodes */
340 #define G_RDPNOOP               0xC0
341 #define G_SETCIMG               0xFF    /*  -1 */
342 #define G_SETZIMG               0xFE    /*  -2 */
343 #define G_SETTIMG               0xFD    /*  -3 */
344 #define G_SETCOMBINE            0xFC    /*  -4 */
345 #define G_SETENVCOLOR           0xFB    /*  -5 */
346 #define G_SETPRIMCOLOR          0xFA    /*  -6 */
347 #define G_SETBLENDCOLOR         0xF9    /*  -7 */
348 #define G_SETFOGCOLOR           0xF8    /*  -8 */
349 #define G_SETFILLCOLOR          0xF7    /*  -9 */
350 #define G_FILLRECT              0xF6    /* -10 */
351 #define G_SETTILE               0xF5    /* -11 */
352 #define G_LOADTILE              0xF4    /* -12 */
353 #define G_LOADBLOCK             0xF3    /* -13 */
354 #define G_SETTILESIZE           0xF2    /* -14 */
355 #define G_LOADTLUT              0xF0    /* -16 */
356 #define G_RDPSETOTHERMODE       0xEF    /* -17 */
357 #define G_SETPRIMDEPTH          0xEE    /* -18 */
358 #define G_SETSCISSOR            0xED    /* -19 */
359 #define G_SETCONVERT            0xEC    /* -20 */
360 #define G_SETKEYR               0xEB    /* -21 */
361 #define G_SETKEYGB              0xEA    /* -22 */
362 #define G_RDPFULLSYNC           0xE9    /* -23 */
363 #define G_RDPTILESYNC           0xE8    /* -24 */
364 #define G_RDPPIPESYNC           0xE7    /* -25 */
365 #define G_RDPLOADSYNC           0xE6    /* -26 */
366 #define G_TEXRECTFLIP           0xE5    /* -27 */
367 #define G_TEXRECT               0xE4    /* -28 */
368 
369 #define G_TRI_FILL              0xC8    /* fill triangle:            11001000 */
370 #define G_TRI_FILL_ZBUFF        0xC9    /* fill, zbuff triangle:     11001001 */
371 #define G_TRI_TXTR              0xCA    /* texture triangle:         11001010 */
372 #define G_TRI_TXTR_ZBUFF        0xCB    /* texture, zbuff triangle:  11001011 */
373 #define G_TRI_SHADE             0xCC    /* shade triangle:           11001100 */
374 #define G_TRI_SHADE_ZBUFF       0xCD    /* shade, zbuff triangle:    11001101 */
375 #define G_TRI_SHADE_TXTR        0xCE    /* shade, texture triangle:  11001110 */
376 #define G_TRI_SHADE_TXTR_ZBUFF  0xCF    /* shade, txtr, zbuff trngl: 11001111 */
377 
378 #define G_SETOTHERMODE_H	     0xe3
379 #define G_SETOTHERMODE_L	     0xe2
380 
381 /* G_SETOTHERMODE_L sft: shift count */
382 #define G_MDSFT_ALPHACOMPARE    0
383 #define G_MDSFT_ZSRCSEL         2
384 #define G_MDSFT_RENDERMODE      3
385 #define G_MDSFT_BLENDER         16
386 
387 /* G_SETOTHERMODE_H sft: shift count */
388 #define G_MDSFT_BLENDMASK       0   /* unsupported */
389 #define G_MDSFT_ALPHADITHER     4
390 #define G_MDSFT_RGBDITHER       6
391 
392 #define G_MDSFT_COMBKEY         8
393 #define G_MDSFT_TEXTCONV        9
394 #define G_MDSFT_TEXTFILT        12
395 #define G_MDSFT_TEXTLUT         14
396 #define G_MDSFT_TEXTLOD         16
397 #define G_MDSFT_TEXTDETAIL      17
398 #define G_MDSFT_TEXTPERSP       19
399 #define G_MDSFT_CYCLETYPE       20
400 #define G_MDSFT_COLORDITHER     22  /* unsupported in HW 2.0 */
401 #define G_MDSFT_PIPELINE        23
402 
403 /* G_SETOTHERMODE_H gPipelineMode */
404 #define G_PM_1PRIMITIVE         1
405 #define G_PM_NPRIMITIVE         0
406 
407 /* G_SETOTHERMODE_H gSetCycleType */
408 #define G_CYC_1CYCLE            0
409 #define G_CYC_2CYCLE            1
410 #define G_CYC_COPY              2
411 #define G_CYC_FILL              3
412 
413 /* G_SETOTHERMODE_H gSetTexturePersp */
414 #define G_TP_NONE               0
415 #define G_TP_PERSP              1
416 
417 /* G_SETOTHERMODE_H gSetTextureDetail */
418 #define G_TD_CLAMP              0
419 #define G_TD_SHARPEN            1
420 #define G_TD_DETAIL             2
421 
422 /* G_SETOTHERMODE_H gSetTextureLOD */
423 #define G_TL_TILE               0
424 #define G_TL_LOD                1
425 
426 /* G_SETOTHERMODE_H gSetTextureLUT */
427 #define G_TT_NONE               0
428 #define G_TT_RGBA16             2
429 #define G_TT_IA16               3
430 
431 /* G_SETOTHERMODE_H gSetTextureFilter */
432 #define G_TF_POINT              0
433 #define G_TF_AVERAGE            3
434 #define G_TF_BILERP             2
435 
436 /* G_SETOTHERMODE_H gSetTextureConvert */
437 #define G_TC_CONV               0
438 #define G_TC_FILTCONV           5
439 #define G_TC_FILT               6
440 
441 /* G_SETOTHERMODE_H gSetCombineKey */
442 #define G_CK_NONE               0
443 #define G_CK_KEY                1
444 
445 /* G_SETOTHERMODE_H gSetColorDither */
446 #define G_CD_MAGICSQ            0
447 #define G_CD_BAYER              1
448 #define G_CD_NOISE              2
449 
450 #define G_CD_DISABLE            3
451 #define G_CD_ENABLE             G_CD_NOISE  /* HW 1.0 compatibility mode */
452 
453 /* G_SETOTHERMODE_H gSetAlphaDither */
454 #define G_AD_PATTERN            0
455 #define G_AD_NOTPATTERN         1
456 #define G_AD_NOISE              2
457 #define G_AD_DISABLE            3
458 
459 /* G_SETOTHERMODE_L gSetAlphaCompare */
460 #define G_AC_NONE               0
461 #define G_AC_THRESHOLD          1
462 #define G_AC_DITHER             3
463 
464 /* G_SETOTHERMODE_L gSetDepthSource */
465 #define G_ZS_PIXEL              0
466 #define G_ZS_PRIM               1
467 
468 /* G_SETOTHERMODE_L gSetRenderMode */
469 #define AA_EN                   1
470 #define Z_CMP                   1
471 #define Z_UPD                   1
472 #define IM_RD                   1
473 #define CLR_ON_CVG              0x80
474 #define CVG_DST_CLAMP           0
475 #define CVG_DST_WRAP            1
476 #define CVG_DST_FULL            2
477 #define CVG_DST_SAVE            3
478 #define ZMODE_OPA               0
479 #define ZMODE_INTER             1
480 #define ZMODE_XLU               2
481 #define ZMODE_DEC               3
482 #define CVG_X_ALPHA             1
483 #define FORCE_BL                0x4000
484 #define ALPHA_CVG_SEL           0x2000
485 #define TEX_EDGE                0 // not used
486 
487 #define G_SC_NON_INTERLACE      0
488 #define G_SC_EVEN_INTERLACE     2
489 #define G_SC_ODD_INTERLACE      3
490 
491 #ifdef DEBUG
492 static const char *AAEnableText = "AA_EN";
493 static const char *DepthCompareText = "Z_CMP";
494 static const char *DepthUpdateText = "Z_UPD";
495 static const char *ClearOnCvgText = "CLR_ON_CVG";
496 static const char *CvgXAlphaText = "CVG_X_ALPHA";
497 static const char *AlphaCvgSelText = "ALPHA_CVG_SEL";
498 static const char *ForceBlenderText = "FORCE_BL";
499 
500 static const char *AlphaCompareText[] =
501 {
502     "G_AC_NONE", "G_AC_THRESHOLD", "G_AC_INVALID", "G_AC_DITHER"
503 };
504 
505 static const char *DepthSourceText[] =
506 {
507     "G_ZS_PIXEL", "G_ZS_PRIM"
508 };
509 
510 static const char *AlphaDitherText[] =
511 {
512     "G_AD_PATTERN", "G_AD_NOTPATTERN", "G_AD_NOISE", "G_AD_DISABLE"
513 };
514 
515 static const char *ColorDitherText[] =
516 {
517     "G_CD_MAGICSQ", "G_CD_BAYER", "G_CD_NOISE", "G_CD_DISABLE"
518 };
519 
520 static const char *CombineKeyText[] =
521 {
522     "G_CK_NONE", "G_CK_KEY"
523 };
524 
525 static const char *TextureConvertText[] =
526 {
527     "G_TC_CONV", "G_TC_INVALID", "G_TC_INVALID", "G_TC_INVALID", "G_TC_INVALID", "G_TC_FILTCONV", "G_TC_FILT", "G_TC_INVALID"
528 };
529 
530 static const char *TextureFilterText[] =
531 {
532     "G_TF_POINT", "G_TF_INVALID", "G_TF_BILERP", "G_TF_AVERAGE"
533 };
534 
535 static const char *TextureLUTText[] =
536 {
537     "G_TT_NONE", "G_TT_INVALID", "G_TT_RGBA16", "G_TT_IA16"
538 };
539 
540 static const char *TextureLODText[] =
541 {
542     "G_TL_TILE", "G_TL_LOD"
543 };
544 
545 static const char *TextureDetailText[] =
546 {
547     "G_TD_CLAMP", "G_TD_SHARPEN", "G_TD_DETAIL"
548 };
549 
550 static const char *TexturePerspText[] =
551 {
552     "G_TP_NONE", "G_TP_PERSP"
553 };
554 
555 static const char *CycleTypeText[] =
556 {
557     "G_CYC_1CYCLE", "G_CYC_2CYCLE", "G_CYC_COPY", "G_CYC_FILL"
558 };
559 
560 static const char *PipelineModeText[] =
561 {
562     "G_PM_NPRIMITIVE", "G_PM_1PRIMITIVE"
563 };
564 
565 static const char *CvgDestText[] =
566 {
567     "CVG_DST_CLAMP", "CVG_DST_WRAP", "CVG_DST_FULL", "CVG_DST_SAVE"
568 };
569 
570 static const char *DepthModeText[] =
571 {
572     "ZMODE_OPA", "ZMODE_INTER", "ZMODE_XLU", "ZMODE_DEC"
573 };
574 
575 static const char *ScissorModeText[] =
576 {
577     "G_SC_NON_INTERLACE", "G_SC_INVALID", "G_SC_EVEN_INTERLACE", "G_SC_ODD_INTERLACE"
578 };
579 #endif
580 
581 /* Color combiner constants: */
582 #define G_CCMUX_COMBINED        0
583 #define G_CCMUX_TEXEL0          1
584 #define G_CCMUX_TEXEL1          2
585 #define G_CCMUX_PRIMITIVE       3
586 #define G_CCMUX_SHADE           4
587 #define G_CCMUX_ENVIRONMENT     5
588 #define G_CCMUX_CENTER          6
589 #define G_CCMUX_SCALE           6
590 #define G_CCMUX_COMBINED_ALPHA  7
591 #define G_CCMUX_TEXEL0_ALPHA    8
592 #define G_CCMUX_TEXEL1_ALPHA    9
593 #define G_CCMUX_PRIMITIVE_ALPHA 10
594 #define G_CCMUX_SHADE_ALPHA     11
595 #define G_CCMUX_ENV_ALPHA       12
596 #define G_CCMUX_LOD_FRACTION    13
597 #define G_CCMUX_PRIM_LOD_FRAC   14
598 #define G_CCMUX_NOISE           7
599 #define G_CCMUX_K4              7
600 #define G_CCMUX_K5              15
601 #define G_CCMUX_1               6
602 #define G_CCMUX_0               31
603 
604 /* Alpha combiner constants: */
605 #define G_ACMUX_COMBINED        0
606 #define G_ACMUX_TEXEL0          1
607 #define G_ACMUX_TEXEL1          2
608 #define G_ACMUX_PRIMITIVE       3
609 #define G_ACMUX_SHADE           4
610 #define G_ACMUX_ENVIRONMENT     5
611 #define G_ACMUX_LOD_FRACTION    0
612 #define G_ACMUX_PRIM_LOD_FRAC   6
613 #define G_ACMUX_1               6
614 #define G_ACMUX_0               7
615 
616 #ifdef DEBUG
617 static const char *saRGBText[] =
618 {
619     "COMBINED",         "TEXEL0",           "TEXEL1",           "PRIMITIVE",
620     "SHADE",            "ENVIRONMENT",      "NOISE",            "1",
621     "0",                "0",                "0",                "0",
622     "0",                "0",                "0",                "0"
623 };
624 
625 static const char *sbRGBText[] =
626 {
627     "COMBINED",         "TEXEL0",           "TEXEL1",           "PRIMITIVE",
628     "SHADE",            "ENVIRONMENT",      "CENTER",           "K4",
629     "0",                "0",                "0",                "0",
630     "0",                "0",                "0",                "0"
631 };
632 
633 static const char *mRGBText[] =
634 {
635     "COMBINED",         "TEXEL0",           "TEXEL1",           "PRIMITIVE",
636     "SHADE",            "ENVIRONMENT",      "SCALE",            "COMBINED_ALPHA",
637     "TEXEL0_ALPHA",     "TEXEL1_ALPHA",     "PRIMITIVE_ALPHA",  "SHADE_ALPHA",
638     "ENV_ALPHA",        "LOD_FRACTION",     "PRIM_LOD_FRAC",    "K5",
639     "0",                "0",                "0",                "0",
640     "0",                "0",                "0",                "0",
641     "0",                "0",                "0",                "0",
642     "0",                "0",                "0",                "0"
643 };
644 
645 static const char *aRGBText[] =
646 {
647     "COMBINED",         "TEXEL0",           "TEXEL1",           "PRIMITIVE",
648     "SHADE",            "ENVIRONMENT",      "1",                "0",
649 };
650 
651 static const char *saAText[] =
652 {
653     "COMBINED",         "TEXEL0",           "TEXEL1",           "PRIMITIVE",
654     "SHADE",            "ENVIRONMENT",      "1",                "0",
655 };
656 
657 static const char *sbAText[] =
658 {
659     "COMBINED",         "TEXEL0",           "TEXEL1",           "PRIMITIVE",
660     "SHADE",            "ENVIRONMENT",      "1",                "0",
661 };
662 
663 static const char *mAText[] =
664 {
665     "LOD_FRACTION",     "TEXEL0",           "TEXEL1",           "PRIMITIVE",
666     "SHADE",            "ENVIRONMENT",      "PRIM_LOD_FRAC",    "0",
667 };
668 
669 static const char *aAText[] =
670 {
671     "COMBINED",         "TEXEL0",           "TEXEL1",           "PRIMITIVE",
672     "SHADE",            "ENVIRONMENT",      "1",                "0",
673 };
674 #endif
675 
676 #define LIGHT_1 1
677 #define LIGHT_2 2
678 #define LIGHT_3 3
679 #define LIGHT_4 4
680 #define LIGHT_5 5
681 #define LIGHT_6 6
682 #define LIGHT_7 7
683 #define LIGHT_8 8
684 
685 /* Flags to inhibit pushing of the display list (on branch) */
686 #define G_DL_PUSH          0x00
687 #define G_DL_NOPUSH        0x01
688 
689 /* Blender */
690 #define BLEND_FOG_ASHADE   0xc800
691 #define BLEND_FOG_APRIME   0xc400
692 #define BLEND_XLU          0x0040
693 
694 #define ZMODE_DECAL        0xc00
695 #define ZLUT_SIZE          0x40000
696 
697 #define X_CLIP_MAX  0x01
698 #define X_CLIP_MIN  0x02
699 #define Y_CLIP_MAX  0x04
700 #define Y_CLIP_MIN  0x08
701 #define Z_CLIP_MAX  0x10
702 #define Z_CLIP_MIN  0x20
703 
704 /* G_MTX: parameter flags */
705 # define G_MTX_MODELVIEW	0x00	/* matrix types */
706 # define G_MTX_PROJECTION	0x04
707 # define G_MTX_MUL		   0x00	/* concat or load */
708 # define G_MTX_LOAD		   0x02
709 # define G_MTX_NOPUSH		0x00	/* push or not */
710 # define G_MTX_PUSH		   0x01
711 
712 #define RDRAM_UWORD(addr)   (*(uint32_t *)((addr)+ (uint8_t*)gfx_info.RDRAM))
713 #define RDRAM_SWORD(addr)   (*(int32_t *)((addr)+ (uint8_t*)gfx_info.RDRAM))
714 #define RDRAM_UHALF(addr)   (*(uint16_t *)(((addr)^2) + (uint8_t*)gfx_info.RDRAM))
715 #define RDRAM_SHALF(addr)   (*(int16_t *)(((addr)^2)+ (uint8_t*)gfx_info.RDRAM))
716 #define RDRAM_UBYTE(addr)   (*(uint8_t *)(((addr)^3)+ (uint8_t*)gfx_info.RDRAM))
717 #define RDRAM_SBYTE(addr)   (*(int8_t *)(((addr)^3) + (uint8_t*)gfx_info.RDRAM))
718 #define pRDRAM_UWORD(addr)  ((uint32_t *)((addr) + (uint8_t*)gfx_info.RDRAM))
719 #define pRDRAM_SWORD(addr)  ((int32_t *)((addr)+ (uint8_t*)gfx_info.RDRAM))
720 #define pRDRAM_UHALF(addr)  ((uint16_t *)(((addr)^2) + (uint8_t*)gfx_info.RDRAM))
721 #define pRDRAM_SHALF(addr)  ((int16_t*)(((addr)^2)  + (uint8_t*)gfx_info.RDRAM))
722 #define pRDRAM_UBYTE(addr)  ((uint8_t *)(((addr)^3) + (uint8_t*)gfx_info.RDRAM))
723 #define pRDRAM_SBYTE(addr)  ((int8_t *)(((addr)^3)) + (uint8_t*)gfx_info.RDRAM)
724 
725 #ifdef __cplusplus
726 }
727 #endif
728 
729 #endif
730 
731