X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=source%2Frice_gles%2Fsrc%2FRSP_Parser.h;fp=source%2Frice_gles%2Fsrc%2FRSP_Parser.h;h=2e4b6ae624f1c8ec2f7f5a7fd363725e9766bd0d;hb=d07c171fa694cae985ad7045f9ce2b2f1a5699b4;hp=0000000000000000000000000000000000000000;hpb=ca22e7b76883b946060a6b40bb8709c1981e1cf6;p=mupen64plus-pandora.git diff --git a/source/rice_gles/src/RSP_Parser.h b/source/rice_gles/src/RSP_Parser.h new file mode 100644 index 0000000..2e4b6ae --- /dev/null +++ b/source/rice_gles/src/RSP_Parser.h @@ -0,0 +1,630 @@ +/* +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__ +