--- /dev/null
+/*
+Copyright (C) 2003 Rice1964
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+
+#ifndef __RICE_RDP_GFX_H__
+#define __RICE_RDP_GFX_H__
+
+#define RSP_SPNOOP 0 // handle 0 gracefully
+#define RSP_MTX 1
+#define RSP_RESERVED0 2 // unknown
+#define RSP_MOVEMEM 3 // move a block of memory (up to 4 words) to dmem
+#define RSP_VTX 4
+#define RSP_RESERVED1 5 // unknown
+#define RSP_DL 6
+#define RSP_RESERVED2 7 // unknown
+#define RSP_RESERVED3 8 // unknown
+#define RSP_SPRITE2D 9 // sprite command
+#define RSP_SPRITE2D_BASE 9 // sprite command
+
+
+#define RSP_1ST 0xBF
+#define RSP_TRI1 (RSP_1ST-0)
+#define RSP_CULLDL (RSP_1ST-1)
+#define RSP_POPMTX (RSP_1ST-2)
+#define RSP_MOVEWORD (RSP_1ST-3)
+#define RSP_TEXTURE (RSP_1ST-4)
+#define RSP_SETOTHERMODE_H (RSP_1ST-5)
+#define RSP_SETOTHERMODE_L (RSP_1ST-6)
+#define RSP_ENDDL (RSP_1ST-7)
+#define RSP_SETGEOMETRYMODE (RSP_1ST-8)
+#define RSP_CLEARGEOMETRYMODE (RSP_1ST-9)
+#define RSP_LINE3D (RSP_1ST-10)
+#define RSP_RDPHALF_1 (RSP_1ST-11)
+#define RSP_RDPHALF_2 (RSP_1ST-12)
+#define RSP_RDPHALF_CONT (RSP_1ST-13)
+
+#define RSP_MODIFYVTX (RSP_1ST-13)
+#define RSP_TRI2 (RSP_1ST-14)
+#define RSP_BRANCH_Z (RSP_1ST-15)
+#define RSP_LOAD_UCODE (RSP_1ST-16)
+
+#define RSP_SPRITE2D_SCALEFLIP (RSP_1ST-1)
+#define RSP_SPRITE2D_DRAW (RSP_1ST-2)
+
+#define RSP_ZELDAVTX 1
+#define RSP_ZELDAMODIFYVTX 2
+#define RSP_ZELDACULLDL 3
+#define RSP_ZELDABRANCHZ 4
+#define RSP_ZELDATRI1 5
+#define RSP_ZELDATRI2 6
+#define RSP_ZELDALINE3D 7
+#define RSP_ZELDARDPHALF_2 0xf1
+#define RSP_ZELDASETOTHERMODE_H 0xe3
+#define RSP_ZELDASETOTHERMODE_L 0xe2
+#define RSP_ZELDARDPHALF_1 0xe1
+#define RSP_ZELDASPNOOP 0xe0
+#define RSP_ZELDAENDDL 0xdf
+#define RSP_ZELDADL 0xde
+#define RSP_ZELDALOAD_UCODE 0xdd
+#define RSP_ZELDAMOVEMEM 0xdc
+#define RSP_ZELDAMOVEWORD 0xdb
+#define RSP_ZELDAMTX 0xda
+#define RSP_ZELDAGEOMETRYMODE 0xd9
+#define RSP_ZELDAPOPMTX 0xd8
+#define RSP_ZELDATEXTURE 0xd7
+#define RSP_ZELDASUBMODULE 0xd6
+
+// 4 is something like a conditional DL
+#define RSP_DMATRI 0x05
+#define G_DLINMEM 0x07
+
+// RDP commands:
+#define RDP_NOOP 0xc0
+#define RDP_SETCIMG 0xff
+#define RDP_SETZIMG 0xfe
+#define RDP_SETTIMG 0xfd
+#define RDP_SETCOMBINE 0xfc
+#define RDP_SETENVCOLOR 0xfb
+#define RDP_SETPRIMCOLOR 0xfa
+#define RDP_SETBLENDCOLOR 0xf9
+#define RDP_SETFOGCOLOR 0xf8
+#define RDP_SETFILLCOLOR 0xf7
+#define RDP_FILLRECT 0xf6
+#define RDP_SETTILE 0xf5
+#define RDP_LOADTILE 0xf4
+#define RDP_LOADBLOCK 0xf3
+#define RDP_SETTILESIZE 0xf2
+#define RDP_LOADTLUT 0xf0
+#define RDP_RDPSETOTHERMODE 0xef
+#define RDP_SETPRIMDEPTH 0xee
+#define RDP_SETSCISSOR 0xed
+#define RDP_SETCONVERT 0xec
+#define RDP_SETKEYR 0xeb
+#define RDP_SETKEYGB 0xea
+#define RDP_FULLSYNC 0xe9
+#define RDP_TILESYNC 0xe8
+#define RDP_PIPESYNC 0xe7
+#define RDP_LOADSYNC 0xe6
+#define RDP_TEXRECT_FLIP 0xe5
+#define RDP_TEXRECT 0xe4
+
+
+
+
+#define RSP_ZELDA_MTX_MODELVIEW 0x00
+#define RSP_ZELDA_MTX_PROJECTION 0x04
+#define RSP_ZELDA_MTX_MUL 0x00
+#define RSP_ZELDA_MTX_LOAD 0x02
+#define RSP_ZELDA_MTX_PUSH 0x00
+#define RSP_ZELDA_MTX_NOPUSH 0x01
+
+
+
+//
+// RSP_SETOTHERMODE_L sft: shift count
+
+#define RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE 0
+#define RSP_SETOTHERMODE_SHIFT_ZSRCSEL 2
+#define RSP_SETOTHERMODE_SHIFT_RENDERMODE 3
+#define RSP_SETOTHERMODE_SHIFT_BLENDER 16
+
+//
+// RSP_SETOTHERMODE_H sft: shift count
+
+#define RSP_SETOTHERMODE_SHIFT_BLENDMASK 0 // unsupported
+#define RSP_SETOTHERMODE_SHIFT_ALPHADITHER 4
+#define RSP_SETOTHERMODE_SHIFT_RGBDITHER 6
+
+#define RSP_SETOTHERMODE_SHIFT_COMBKEY 8
+#define RSP_SETOTHERMODE_SHIFT_TEXTCONV 9
+#define RSP_SETOTHERMODE_SHIFT_TEXTFILT 12
+#define RSP_SETOTHERMODE_SHIFT_TEXTLUT 14
+#define RSP_SETOTHERMODE_SHIFT_TEXTLOD 16
+#define RSP_SETOTHERMODE_SHIFT_TEXTDETAIL 17
+#define RSP_SETOTHERMODE_SHIFT_TEXTPERSP 19
+#define RSP_SETOTHERMODE_SHIFT_CYCLETYPE 20
+#define RSP_SETOTHERMODE_SHIFT_COLORDITHER 22 // unsupported in HW 2.0
+#define RSP_SETOTHERMODE_SHIFT_PIPELINE 23
+
+// RSP_SETOTHERMODE_H gPipelineMode
+#define RSP_PIPELINE_MODE_1PRIMITIVE (1 << RSP_SETOTHERMODE_SHIFT_PIPELINE)
+#define RSP_PIPELINE_MODE_NPRIMITIVE (0 << RSP_SETOTHERMODE_SHIFT_PIPELINE)
+
+// RSP_SETOTHERMODE_H gSetCycleType
+#define CYCLE_TYPE_1 0
+#define CYCLE_TYPE_2 1
+#define CYCLE_TYPE_COPY 2
+#define CYCLE_TYPE_FILL 3
+
+// RSP_SETOTHERMODE_H gSetTextureLUT
+#define TLUT_FMT_NONE (0 << RSP_SETOTHERMODE_SHIFT_TEXTLUT)
+#define TLUT_FMT_UNKNOWN (1 << RSP_SETOTHERMODE_SHIFT_TEXTLUT)
+#define TLUT_FMT_RGBA16 (2 << RSP_SETOTHERMODE_SHIFT_TEXTLUT)
+#define TLUT_FMT_IA16 (3 << RSP_SETOTHERMODE_SHIFT_TEXTLUT)
+
+// RSP_SETOTHERMODE_H gSetTextureFilter
+#define RDP_TFILTER_POINT (0 << RSP_SETOTHERMODE_SHIFT_TEXTFILT)
+#define RDP_TFILTER_AVERAGE (3 << RSP_SETOTHERMODE_SHIFT_TEXTFILT)
+#define RDP_TFILTER_BILERP (2 << RSP_SETOTHERMODE_SHIFT_TEXTFILT)
+
+// RSP_SETOTHERMODE_L gSetAlphaCompare
+#define RDP_ALPHA_COMPARE_NONE (0 << RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE)
+#define RDP_ALPHA_COMPARE_THRESHOLD (1 << RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE)
+#define RDP_ALPHA_COMPARE_DITHER (3 << RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE)
+
+// RSP_SETOTHERMODE_L gSetRenderMode
+#define Z_COMPARE 0x0010
+#define Z_UPDATE 0x0020
+#define ZMODE_DEC 0x0c00
+
+
+//
+// flags for RSP_SETGEOMETRYMODE
+//
+#define G_ZBUFFER 0x00000001
+#define G_TEXTURE_ENABLE 0x00000002 // Microcode use only
+#define G_SHADE 0x00000004 // enable Gouraud interp
+//
+#define G_SHADING_SMOOTH 0x00000200 // flat or smooth shaded
+#define G_CULL_FRONT 0x00001000
+#define G_CULL_BACK 0x00002000
+#define G_CULL_BOTH 0x00003000 // To make code cleaner
+#define G_FOG 0x00010000
+#define G_LIGHTING 0x00020000
+#define G_TEXTURE_GEN 0x00040000
+#define G_TEXTURE_GEN_LINEAR 0x00080000
+#define G_LOD 0x00100000 // NOT IMPLEMENTED
+
+//
+// G_SETIMG fmt: set image formats
+//
+#define TXT_FMT_RGBA 0
+#define TXT_FMT_YUV 1
+#define TXT_FMT_CI 2
+#define TXT_FMT_IA 3
+#define TXT_FMT_I 4
+
+//
+// G_SETIMG siz: set image pixel size
+//
+#define TXT_SIZE_4b 0
+#define TXT_SIZE_8b 1
+#define TXT_SIZE_16b 2
+#define TXT_SIZE_32b 3
+
+//
+// Texturing macros
+//
+
+#define RDP_TXT_LOADTILE 7
+#define RDP_TXT_RENDERTILE 0
+
+#define RDP_TXT_NOMIRROR 0
+#define RDP_TXT_WRAP 0
+#define RDP_TXT_MIRROR 0x1
+#define RDP_TXT_CLAMP 0x2
+#define RDP_TXT_NOMASK 0
+#define RDP_TXT_NOLOD 0
+
+
+
+//
+// MOVEMEM indices
+//
+// Each of these indexes an entry in a dmem table
+// which points to a 1-4 word block of dmem in
+// which to store a 1-4 word DMA.
+//
+//
+#define RSP_GBI1_MV_MEM_VIEWPORT 0x80
+#define RSP_GBI1_MV_MEM_LOOKATY 0x82
+#define RSP_GBI1_MV_MEM_LOOKATX 0x84
+#define RSP_GBI1_MV_MEM_L0 0x86
+#define RSP_GBI1_MV_MEM_L1 0x88
+#define RSP_GBI1_MV_MEM_L2 0x8a
+#define RSP_GBI1_MV_MEM_L3 0x8c
+#define RSP_GBI1_MV_MEM_L4 0x8e
+#define RSP_GBI1_MV_MEM_L5 0x90
+#define RSP_GBI1_MV_MEM_L6 0x92
+#define RSP_GBI1_MV_MEM_L7 0x94
+#define RSP_GBI1_MV_MEM_TXTATT 0x96
+#define RSP_GBI1_MV_MEM_MATRIX_1 0x9e // NOTE: this is in moveword table
+#define RSP_GBI1_MV_MEM_MATRIX_2 0x98
+#define RSP_GBI1_MV_MEM_MATRIX_3 0x9a
+#define RSP_GBI1_MV_MEM_MATRIX_4 0x9c
+
+# define RSP_GBI2_MV_MEM__VIEWPORT 8
+# define RSP_GBI2_MV_MEM__LIGHT 10
+# define RSP_GBI2_MV_MEM__POINT 12
+# define RSP_GBI2_MV_MEM__MATRIX 14 /* NOTE: this is in moveword table */
+# define RSP_GBI2_MV_MEM_O_LOOKATX (0*24)
+# define RSP_GBI2_MV_MEM_O_LOOKATY (1*24)
+# define RSP_GBI2_MV_MEM_O_L0 (2*24)
+# define RSP_GBI2_MV_MEM_O_L1 (3*24)
+# define RSP_GBI2_MV_MEM_O_L2 (4*24)
+# define RSP_GBI2_MV_MEM_O_L3 (5*24)
+# define RSP_GBI2_MV_MEM_O_L4 (6*24)
+# define RSP_GBI2_MV_MEM_O_L5 (7*24)
+# define RSP_GBI2_MV_MEM_O_L6 (8*24)
+# define RSP_GBI2_MV_MEM_O_L7 (9*24)
+
+
+//
+// MOVEWORD indices
+//
+// Each of these indexes an entry in a dmem table
+// which points to a word in dmem in dmem where
+// an immediate word will be stored.
+//
+//
+#define RSP_MOVE_WORD_MATRIX 0x00 // NOTE: also used by movemem
+#define RSP_MOVE_WORD_NUMLIGHT 0x02
+#define RSP_MOVE_WORD_CLIP 0x04
+#define RSP_MOVE_WORD_SEGMENT 0x06
+#define RSP_MOVE_WORD_FOG 0x08
+#define RSP_MOVE_WORD_LIGHTCOL 0x0a
+#define RSP_MOVE_WORD_POINTS 0x0c
+#define RSP_MOVE_WORD_PERSPNORM 0x0e
+
+//
+// These are offsets from the address in the dmem table
+//
+#define RSP_MV_WORD_OFFSET_NUMLIGHT 0x00
+#define RSP_MV_WORD_OFFSET_CLIP_RNX 0x04
+#define RSP_MV_WORD_OFFSET_CLIP_RNY 0x0c
+#define RSP_MV_WORD_OFFSET_CLIP_RPX 0x14
+#define RSP_MV_WORD_OFFSET_CLIP_RPY 0x1c
+#define RSP_MV_WORD_OFFSET_FOG 0x00
+#define RSP_MV_WORD_OFFSET_POINT_RGBA 0x10
+#define RSP_MV_WORD_OFFSET_POINT_ST 0x14
+#define RSP_MV_WORD_OFFSET_POINT_XYSCREEN 0x18
+#define RSP_MV_WORD_OFFSET_POINT_ZSCREEN 0x1c
+
+
+
+// flags to inhibit pushing of the display list (on branch)
+#define RSP_DLIST_PUSH 0x00
+#define RSP_DLIST_NOPUSH 0x01
+
+
+//
+// RSP_MTX: parameter flags
+//
+#define RSP_MATRIX_MODELVIEW 0x00
+#define RSP_MATRIX_PROJECTION 0x01
+
+#define RSP_MATRIX_MUL 0x00
+#define RSP_MATRIX_LOAD 0x02
+
+#define RSP_MATRIX_NOPUSH 0x00
+#define RSP_MATRIX_PUSH 0x04
+
+
+
+typedef struct
+{
+ uint32 type;
+ uint32 flags;
+
+ uint32 ucode_boot;
+ uint32 ucode_boot_size;
+
+ uint32 ucode;
+ uint32 ucode_size;
+
+ uint32 ucode_data;
+ uint32 ucode_data_size;
+
+ uint32 dram_stack;
+ uint32 dram_stack_size;
+
+ uint32 output_buff;
+ uint32 output_buff_size;
+
+ uint32 data_ptr;
+ uint32 data_size;
+
+ uint32 yield_data_ptr;
+ uint32 yield_data_size;
+} OSTask_t;
+
+typedef union {
+ OSTask_t t;
+ uint64 force_structure_alignment;
+} OSTask;
+
+#define MAX_DL_STACK_SIZE 32
+#define MAX_DL_COUNT 1000000
+
+typedef struct {
+ bool used;
+ uint32 crc_size;
+ uint32 crc_800;
+ uint32 ucode;
+ uint32 minor_ver;
+ uint32 variant;
+ char rspstr[200];
+
+ uint32 ucStart;
+ uint32 ucSize;
+ uint32 ucDStart;
+ uint32 ucDSize;
+ uint32 ucCRC;
+ uint32 ucDWORD1;
+ uint32 ucDWORD2;
+ uint32 ucDWORD3;
+ uint32 ucDWORD4;
+} UcodeInfo;
+
+
+typedef struct
+{
+ uint32 ucode;
+ uint32 crc_size;
+ uint32 crc_800;
+ const unsigned char * ucode_name;
+ bool non_nearclip;
+ bool reject;
+} UcodeData;
+
+struct TileDescriptor
+{
+ // Set by SetTile
+ unsigned int dwFormat :3; // e.g. RGBA, YUV etc
+ unsigned int dwSize :2; // e.g 4/8/16/32bpp
+ unsigned int dwLine :9; // Ummm...
+ unsigned int dwPalette :4; // 0..15 - a palette index?
+ uint32 dwTMem; // Texture memory location
+
+ unsigned int bClampS :1;
+ unsigned int bClampT :1;
+ unsigned int bMirrorS :1;
+ unsigned int bMirrorT :1;
+
+ unsigned int dwMaskS :4;
+ unsigned int dwMaskT :4;
+ unsigned int dwShiftS :4;
+ unsigned int dwShiftT :4;
+
+ // Set by SetTileSize
+ unsigned int sl :10; // Upper left S - 8:3
+ unsigned int tl :10; // Upper Left T - 8:3
+ unsigned int sh :10; // Lower Right S
+ unsigned int th :10; // Lower Right T
+};
+
+enum LoadType
+{
+ BY_NEVER_SET,
+ BY_LOAD_BLOCK,
+ BY_LOAD_TILE,
+ BY_LOAD_TLUT,
+};
+
+struct LoadCmdInfo
+{
+ LoadType loadtype;
+ unsigned int sl :10; // Upper left S - 8:3
+ unsigned int tl :10; // Upper Left T - 8:3
+ unsigned int sh :10; // Lower Right S
+ unsigned int th :10; // Lower Right T
+ unsigned int dxt :12;
+};
+
+typedef struct { // This is in Intel format
+ uint32 SourceImagePointer;
+ uint32 TlutPointer;
+
+ short SubImageWidth;
+ short Stride;
+
+ char SourceImageBitSize;
+ char SourceImageType;
+ short SubImageHeight;
+
+ short SourceImageOffsetT;
+ short SourceImageOffsetS;
+
+ char dummy[4];
+} SpriteStruct; //Converted Sprint struct in Intel format
+
+typedef struct{
+ short px;
+ short py;
+ float scaleX;
+ float scaleY;
+ uint8 flipX;
+ uint8 flipY;
+ SpriteStruct *spritePtr;
+} Sprite2DInfo;
+
+
+typedef struct
+{
+ unsigned int c2_m2b:2;
+ unsigned int c1_m2b:2;
+ unsigned int c2_m2a:2;
+ unsigned int c1_m2a:2;
+ unsigned int c2_m1b:2;
+ unsigned int c1_m1b:2;
+ unsigned int c2_m1a:2;
+ unsigned int c1_m1a:2;
+} RDP_BlenderSetting;
+
+typedef struct
+{
+ union
+ {
+ struct
+ {
+ // Low bits
+ unsigned int alpha_compare : 2; // 0..1
+ unsigned int depth_source : 1; // 2..2
+
+ // unsigned int render_mode : 13; // 3..15
+ unsigned int aa_en : 1; // 3
+ unsigned int z_cmp : 1; // 4
+ unsigned int z_upd : 1; // 5
+ unsigned int im_rd : 1; // 6
+ unsigned int clr_on_cvg : 1; // 7
+
+ unsigned int cvg_dst : 2; // 8..9
+ unsigned int zmode : 2; // 10..11
+
+ unsigned int cvg_x_alpha : 1; // 12
+ unsigned int alpha_cvg_sel : 1; // 13
+ unsigned int force_bl : 1; // 14
+ unsigned int tex_edge : 1; // 15 - Not used
+
+ unsigned int blender : 16; // 16..31
+
+ // High bits
+ unsigned int blend_mask : 4; // 0..3 - not supported
+ unsigned int alpha_dither : 2; // 4..5
+ unsigned int rgb_dither : 2; // 6..7
+
+ unsigned int key_en : 1; // 8..8
+ unsigned int text_conv : 3; // 9..11
+ unsigned int text_filt : 2; // 12..13
+ unsigned int text_tlut : 2; // 14..15
+
+ unsigned int text_lod : 1; // 16..16
+ unsigned int text_sharpen : 1; // 17..18
+ unsigned int text_detail : 1; // 17..18
+ unsigned int text_persp : 1; // 19..19
+ unsigned int cycle_type : 2; // 20..21
+ unsigned int reserved : 1; // 22..22 - not supported
+ unsigned int atomic_prim : 1; // 23..23
+
+ unsigned int pad : 8; // 24..31 - padding
+
+ };
+ uint64 _u64;
+ uint32 _u32[2];
+ };
+} RDP_OtherMode;
+
+
+typedef enum
+{
+ CMD_SETTILE,
+ CMD_SETTILE_SIZE,
+ CMD_LOADBLOCK,
+ CMD_LOADTILE,
+ CMD_LOADTLUT,
+ CMD_SET_TEXTURE,
+ CMD_LOAD_OBJ_TXTR,
+} SetTileCmdType;
+
+
+// The display list PC stack. Before this was an array of 10
+// items, but this way we can nest as deeply as necessary.
+
+typedef struct
+{
+ uint32 pc;
+ int countdown;
+} DListStack;
+
+typedef struct
+{
+ int x0, y0, x1, y1, mode;
+ int left, top, right, bottom;
+} ScissorType;
+
+// Mask down to 0x003FFFFF?
+#define RSPSegmentAddr(seg) ( gRSP.segments[((seg)>>24)&0x0F] + ((seg)&0x00FFFFFF) )
+#define RDRAM_UWORD(addr) (*(uint32 *)((addr)+g_pRDRAMu8))
+#define RDRAM_SWORD(addr) (*(s32 *)((addr)+g_pRDRAMu8))
+#define RDRAM_UHALF(addr) (*(uint16 *)(((addr)^2)+g_pRDRAMu8))
+#define RDRAM_SHALF(addr) (*(short *)(((addr)^2)+g_pRDRAMu8))
+#define RDRAM_UBYTE(addr) (*(uint8 *)(((addr)^3)+g_pRDRAMu8))
+#define RDRAM_SBYTE(addr) (*(s8 *)(((addr)^3)+g_pRDRAMu8))
+#define pRDRAM_UWORD(addr) ((uint32 *)((addr)+g_pRDRAMu8))
+#define pRDRAM_SWORD(addr) ((s32 *)((addr)+g_pRDRAMu8))
+#define pRDRAM_UHALF(addr) ((uint16 *)(((addr)^2)+g_pRDRAMu8))
+#define pRDRAM_SHALF(addr) ((short *)(((addr)^2)+g_pRDRAMu8))
+#define pRDRAM_UBYTE(addr) ((uint8 *)(((addr)^3)+g_pRDRAMu8))
+#define pRDRAM_SBYTE(addr) ((s8 *)(((addr)^3)+g_pRDRAMu8))
+
+extern uint16 g_wRDPTlut[];
+extern const char *textluttype[4];
+
+extern const char *pszImgFormat[8];
+extern const char *pszImgSize[4];
+extern uint8 pnImgSize[4];
+extern const char *textlutname[4];
+
+extern SetImgInfo g_CI;
+extern SetImgInfo g_ZI;
+extern SetImgInfo g_TI;
+extern TmemType g_Tmem;
+
+extern DListStack gDlistStack[MAX_DL_STACK_SIZE];
+
+extern int gDlistStackPointer;
+
+void DLParser_Init();
+void RDP_GFX_Reset();
+void RDP_Cleanup();
+void DLParser_Process(OSTask * pTask);
+void RDP_DLParser_Process(void);
+
+void PrepareTextures();
+void RDP_InitRenderState();
+void DisplayVertexInfo(uint32 dwAddr, uint32 dwV0, uint32 dwN);
+void RSP_MoveMemLight(uint32 dwLight, uint32 dwAddr);
+void RSP_MoveMemViewport(uint32 dwAddr);
+void RDP_NOIMPL_WARN(const char* op);
+void RSP_GFX_Force_Matrix(uint32 dwAddr);
+void RSP_GFX_InitGeometryMode();
+void RSP_SetUcode(int ucode, uint32 ucStart=0, uint32 ucDStart=0, uint32 cdSize=0);
+uint32 CalcalateCRC(uint32* srcPtr, uint32 srcSize);
+void RDP_GFX_PopDL();
+
+extern Matrix matToLoad;
+void LoadMatrix(uint32 addr);
+
+unsigned int ComputeCRC32(unsigned int crc, const uint8 *buf, unsigned int len);
+
+void TriggerDPInterrupt();
+void TriggerSPInterrupt();
+uint32 DLParser_CheckUcode(uint32 ucStart, uint32 ucDStart, uint32 ucSize, uint32 ucDSize);
+
+bool IsUsedAsDI(uint32 addr);
+
+#if defined(DEBUGGER)
+ void __cdecl LOG_UCODE(const char* szFormat, ...);
+#else
+ inline void LOG_UCODE(...) {}
+#endif
+
+#endif // __RICE_RDP_GFX_H__
+