4 #define REG_BASE 0x1f800000
5 #define REGPTR32(x) (*(volatile unsigned long*)(REG_BASE | (x)))
6 #define REGPTR16(x) (*(volatile unsigned short*)(REG_BASE | (x)))
9 #define REGN_GP0 0x1810
10 #define REGN_GP1 0x1814
11 #define REGN_GPUREAD REGN_GP0
12 #define REGN_GPUSTAT REGN_GP1
14 #define REG_GP0 REGPTR32(REGN_GP0)
15 #define REG_GP1 REGPTR32(REGN_GP1)
16 #define REG_GPUREAD REGPTR32(REGN_GPUREAD)
17 #define REG_GPUSTAT REGPTR32(REGN_GPUSTAT)
19 /* --- interrupts --- */
20 #define REGN_ISTAT 1070h
21 #define REGN_IMASK 1074h
23 #define REG_ISTAT REGPTR32(REGN_ISTAT)
24 #define REG_IMASK REGPTR32(REGN_IMASK)
40 #define GPCMD(cmd) ((cmd) << 24)
44 GP1_RESET_CMDBUF = 0x01,
46 GP1_DISPEN = 0x03, /* 0:on, 1:off */
47 GP1_DMADIR = 0x04, /* 0:off, 1:fifo, 2:cpu->gpu, 3:gpu->cpu */
48 GP1_START = 0x05, /* bits [0,9]: X, [10,18]: Y */
49 GP1_HDISP = 0x06, /* (pix*8) bits [0,11]: left, [12,23]: right */
50 GP1_VDISP = 0x07, /* bits [0,9]: top, [10,19]: bottom */
51 GP1_DISPMODE = 0x08, /* see DISP_* flags */
55 #define DISP_H320 0x01
56 #define DISP_H512 0x02
57 #define DISP_H640 0x03
59 #define DISP_V480 0x04
63 #define DISP_24BPP 0x10
64 #define DISP_ILACE 0x20
65 #define DISP_H368 0x40
68 /* primitive bits for GP0 drawing commands */
75 PRIM_POINT = 0x6a, /* rect 1x1 */
79 PRIM_NOMOD = 0x01, /* no-modulate tex/color bit */
80 PRIM_ST = 0x02, /* semi-transparent bit */
81 PRIM_TEX = 0x04, /* textured bit */
82 PRIM_GOURAUD = 0x10 /* gouraud bit */
87 GP0_FILLRECT = 0x02, /* color24+cmd/topleft/size */
88 GP0_BLT_VIDVID = 0x80, /* cmd/src/dst/size */
89 GP0_BLT_CPUVID = 0xa0, /* cmd/dst/size/data(dma?) */
90 GP0_BLT_VIDCPU = 0xc0, /* cmd/src/size/data(GPUREAD|dma) */
97 /* flat tri/quad: cmd+color/v0/.../vN (16+16 YYYYXXXX) */
99 GP0_TRI_ST = PRIM_TRI | PRIM_ST,
100 GP0_QUAD = PRIM_QUAD,
101 GP0_QUAD_ST = PRIM_QUAD | PRIM_ST,
102 /* textured tri/quad: cmd+color/v0/uv0+pal/v1/uv1+texpage/v2/uv2/.. */
103 GP0_TRI_TEXMOD = PRIM_TRI | PRIM_TEX,
104 GP0_TRI_TEX = PRIM_TRI | PRIM_TEX | PRIM_NOMOD,
105 GP0_TRI_ST_TEXMOD = PRIM_TRI | PRIM_ST | PRIM_TEX,
106 GP0_TRI_ST_TEX = PRIM_TRI | PRIM_ST | PRIM_TEX | PRIM_NOMOD,
107 GP0_QUAD_TEXMOD = PRIM_QUAD | PRIM_TEX,
108 GP0_QUAD_TEX = PRIM_QUAD | PRIM_TEX | PRIM_NOMOD,
109 GP0_QUAD_ST_TEXMOD = PRIM_QUAD | PRIM_ST | PRIM_TEX,
110 GP0_QUAD_ST_TEX = PRIM_QUAD | PRIM_ST | PRIM_TEX | PRIM_NOMOD,
111 /* gouraud tri/quad: cmd+color0/v0/c1/v1/.../cN/vN */
112 GP0_GTRI = PRIM_TRI | PRIM_GOURAUD,
113 GP0_GTRI_ST = PRIM_TRI | PRIM_GOURAUD | PRIM_ST,
114 GP0_GQUAD = PRIM_QUAD | PRIM_GOURAUD,
115 GP0_GQUAD_ST = PRIM_QUAD | PRIM_GOURAUD | PRIM_ST,
116 /* gouraud tex tri/quad: cmd+color0/v0/uv0+pal/c1/v1/uv1+texpage/c2/v2/uv2/... */
117 GP0_GTRI_TEXMOD = PRIM_TRI | PRIM_GOURAUD | PRIM_TEX,
118 GP0_GTRI_ST_TEXMOD = PRIM_TRI | PRIM_GOURAUD | PRIM_ST | PRIM_TEX,
119 GP0_GQUAD_TEXMOD = PRIM_QUAD | PRIM_GOURAUD | PRIM_TEX,
120 GP0_GQUAD_ST_TEXMOD = PRIM_QUAD | PRIM_GOURAUD | PRIM_ST | PRIM_TEX,
122 /* line/poly-line: cmd+color/v0/.../vN/PLINE_END(55555555h) */
123 GP0_LINE = PRIM_LINE,
124 GP0_LINE_ST = PRIM_LINE | PRIM_ST,
125 GP0_PLINE = PRIM_PLINE,
126 GP0_PLINE_ST = PRIM_PLINE | PRIM_ST,
127 /* line/poly-line: cmd+color0/v0/c1/v1/.../cN/vN/PLINE_END */
128 GP0_GLINE = PRIM_LINE | PRIM_GOURAUD,
129 GP0_GLINE_ST = PRIM_LINE | PRIM_GOURAUD | PRIM_ST,
130 GP0_GPLINE = PRIM_PLINE | PRIM_GOURAUD,
131 GP0_GPLINE_ST = PRIM_PLINE | PRIM_GOURAUD | PRIM_ST,
133 /* rect: cmd+col/pos/size(for variable rect) */
134 GP0_RECT = PRIM_RECT,
135 GP0_RECT_ST = PRIM_RECT | PRIM_ST,
136 GP0_POINT = PRIM_POINT,
137 GP0_POINT_ST = PRIM_POINT | PRIM_ST,
138 GP0_RECT8 = PRIM_RECT8,
139 GP0_RECT8_ST = PRIM_RECT8 | PRIM_ST,
140 GP0_RECT16 = PRIM_RECT16,
141 GP0_RECT16_ST = PRIM_RECT16 | PRIM_ST,
142 /* rect: cmd+col/pos/uv0+pal/size(for var rect), texpage in GP0(e1h) */
143 GP0_RECT_TEXMOD = PRIM_RECT | PRIM_TEX,
144 GP0_RECT_TEX = PRIM_RECT | PRIM_TEX | PRIM_NOMOD,
145 GP0_RECT_ST_TEXMOD = PRIM_RECT | PRIM_ST | PRIM_TEX,
146 GP0_RECT_ST_TEX = PRIM_RECT | PRIM_ST | PRIM_TEX | PRIM_NOMOD,
147 /* ... TODO and the rest ... */
152 TEXPG_BLEND_HALF = 0,
153 TEXPG_BLEND_ADD = 0x0020,
154 TEXPG_BLEND_SUB = 0x0040,
155 TEXPG_BLEND_QUART = 0x0060,
157 TEXPG_15BPP = 0x0100,
158 TEXPG_DRAWDISP = 0x0200,
159 TEXPG_DITHER = 0x0400,
160 TEXPG_NOTEX = 0x0800,
161 TEXPG_XFLIP = 0x1000,
165 #endif /* PSXREGS_H_ */