1 #ifndef GSP_H
2 #define GSP_H
3 
4 #include <stdint.h>
5 #include <boolean.h>
6 #include "GBI.h"
7 #include "gDP.h"
8 
9 #include "../../Graphics/RSP/RSP_state.h"
10 #include "../../Graphics/RSP/gSP_funcs_C.h"
11 
12 #define CHANGED_VIEWPORT        0x01
13 #define CHANGED_MATRIX          0x02
14 #define CHANGED_COLORBUFFER     0x04
15 #define CHANGED_GEOMETRYMODE    0x08
16 #define CHANGED_TEXTURE         0x10
17 #define CHANGED_FOGPOSITION     0x20
18 #define CHANGED_LIGHT			  0x40
19 #define CHANGED_CPU_FB_WRITE	  0x80
20 
21 #define CLIP_X      0x03
22 #define CLIP_NEGX   0x01
23 #define CLIP_POSX   0x02
24 
25 #define CLIP_Y      0x0C
26 #define CLIP_NEGY   0x04
27 #define CLIP_POSY   0x08
28 
29 #define CLIP_Z      0x10
30 
31 #define CLIP_ALL    0x1F // CLIP_NEGX|CLIP_POSX|CLIP_NEGY|CLIP_POSY|CLIP_Z
32 
33 void gln64gSPLoadUcodeEx( uint32_t uc_start, uint32_t uc_dstart, uint16_t uc_dsize );
34 void gln64gSPNoOp();
35 void gln64gSPMatrix( uint32_t matrix, uint8_t param );
36 void gln64gSPDMAMatrix( uint32_t matrix, uint8_t index, uint8_t multiply );
37 void gln64gSPLight( uint32_t l, int32_t n );
38 void gln64gSPLightCBFD( uint32_t l, int32_t n );
39 void gln64gSPVertex( uint32_t v, uint32_t n, uint32_t v0 );
40 void gln64gSPCIVertex( uint32_t v, uint32_t n, uint32_t v0 );
41 void gln64gSPDMAVertex( uint32_t v, uint32_t n, uint32_t v0 );
42 void gln64gSPCBFDVertex( uint32_t v, uint32_t n, uint32_t v0 );
43 void gln64gSPDisplayList( uint32_t dl );
44 void gln64gSPDMADisplayList( uint32_t dl, uint32_t n );
45 void gln64gSPBranchList( uint32_t dl );
46 void gln64gSPBranchLessZ( uint32_t branchdl, uint32_t vtx, float zval );
47 void gln64gSPDlistCount(uint32_t count, uint32_t v);
48 void gln64gSPSprite2DBase( uint32_t base );
49 void gln64gSPDMATriangles( uint32_t tris, uint32_t n );
50 void gln64gSP1Quadrangle( int32_t v0, int32_t v1, int32_t v2, int32_t v3 );
51 void gln64gSPCullDisplayList( uint32_t v0, uint32_t vn );
52 void gln64gSPPopMatrix( uint32_t param );
53 void gln64gSPPopMatrixN( uint32_t param, uint32_t num );
54 void gln64gSPSegment( int32_t seg, int32_t base );
55 void gln64gSPClipRatio( uint32_t r );
56 void gln64gSPInsertMatrix( uint32_t where, uint32_t num );
57 void gln64gSPModifyVertex( uint32_t vtx, uint32_t where, uint32_t val );
58 void gln64gSPNumLights( int32_t n );
59 void gln64gSPFogFactor( int16_t fm, int16_t fo );
60 void gln64gSPPerspNormalize( uint16_t scale );
61 void gln64gSPTexture( float sc, float tc, int32_t level, int32_t tile, int32_t on );
62 void gln64gSPEndDisplayList();
63 void gln64gSPGeometryMode( uint32_t clear, uint32_t set );
64 void gln64gSPSetGeometryMode( uint32_t mode );
65 void gln64gSPClearGeometryMode( uint32_t mode );
66 void gln64gSPSetOtherMode_H(uint32_t _length, uint32_t _shift, uint32_t _data);
67 void gln64gSPSetOtherMode_L(uint32_t _length, uint32_t _shift, uint32_t _data);
68 void gln64gSPLine3D( int32_t v0, int32_t v1, int32_t flag );
69 void gln64gSPLineW3D( int32_t v0, int32_t v1, int32_t wd, int32_t flag );
70 void gln64gSPObjRectangle( uint32_t sp );
71 void gln64gSPObjRectangleR(uint32_t _sp);
72 void gln64gSPObjSprite( uint32_t sp );
73 void gln64gSPObjLoadTxtr( uint32_t tx );
74 void gln64gSPObjLoadTxSprite( uint32_t txsp );
75 void gln64gSPObjLoadTxRectR( uint32_t txsp );
76 void gln64gSPBgRect1Cyc( uint32_t bg );
77 void gln64gSPBgRectCopy( uint32_t bg );
78 void gln64gSPObjMatrix( uint32_t mtx );
79 void gln64gSPObjSubMatrix( uint32_t mtx );
80 void gln64gSPObjRendermode(uint32_t _mode);
81 void gln64gSPSetDMAOffsets( uint32_t mtxoffset, uint32_t vtxoffset );
82 void gln64gSPSetVertexColorBase( uint32_t base );
83 
84 void gln64gSPSetVertexNormaleBase( uint32_t base );
85 void gln64gSPProcessVertex(uint32_t v);
86 void gln64gSPCoordMod(uint32_t _w0, uint32_t _w1);
87 
88 void gln64gSPTriangleUnknown(void);
89 
90 void gln64gSPTriangle(int32_t v0, int32_t v1, int32_t v2);
91 void gln64gSP2Triangles(const int32_t v00, const int32_t v01, const int32_t v02, const int32_t flag0,
92                     const int32_t v10, const int32_t v11, const int32_t v12, const int32_t flag1 );
93 void gln64gSP4Triangles(const int32_t v00, const int32_t v01, const int32_t v02,
94                     const int32_t v10, const int32_t v11, const int32_t v12,
95                     const int32_t v20, const int32_t v21, const int32_t v22,
96                     const int32_t v30, const int32_t v31, const int32_t v32 );
97 
98 
99 extern void (*gln64gSPTransformVertex)(float vtx[4], float mtx[4][4]);
100 extern void (*gln64gSPPointLightVertex)(void *_vtx, float * _vPos);
101 extern void (*gln64gSPBillboardVertex)(uint32_t v, uint32_t i);
102 void gln64gSPSetupFunctions(void);
103 void gSPSetupFunctions(void);
104 void gln64gSPSetDMATexOffset(uint32_t _addr);
105 
106 #endif
107 
108