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