57#define TEX4_VRAM_BASE_X (TEX4_TX * 64)
58#define TEX4_VRAM_BASE_Y (TEX4_TY * 256)
62#define TEX8_VRAM_BASE_X (TEX8_TX * 64)
63#define TEX8_VRAM_BASE_Y (TEX8_TY * 256)
67#define TEX15_VRAM_BASE_X (TEX15_TX * 64)
68#define TEX15_VRAM_BASE_Y (TEX15_TY * 256)
72#define CLUT4_VRAM_X 512u
73#define CLUT4_VRAM_Y 256u
74#define CLUT8_VRAM_X 512u
75#define CLUT8_VRAM_Y 257u
79static inline uint16_t clutField(uint16_t cx, uint16_t cy) {
80 return (uint16_t)(((cx & 0x3f0) >> 4) | ((cy & 0x1ff) << 6));
83#define CLUT4_FIELD clutField(CLUT4_VRAM_X, CLUT4_VRAM_Y)
84#define CLUT8_FIELD clutField(CLUT8_VRAM_X, CLUT8_VRAM_Y)
85#define CLUT15_FIELD 0u
96static inline uint16_t texpageField(uint16_t tx, uint16_t ty,
97 uint16_t abr, uint16_t depth) {
98 return (uint16_t)((tx & 0xf) | ((ty & 1) << 4) |
99 ((abr & 3) << 5) | ((depth & 3) << 7));
102#define TEX4_TPAGE texpageField(TEX4_TX, TEX4_TY, 0, 0)
103#define TEX8_TPAGE texpageField(TEX8_TX, TEX8_TY, 0, 1)
104#define TEX15_TPAGE texpageField(TEX15_TX, TEX15_TY, 0, 2)
108static inline void setTexpage(uint16_t tx, uint16_t ty, uint16_t depth) {
123static inline void setTexpageAbr(uint16_t tx, uint16_t ty, uint16_t depth,
137static inline void setTextureWindow(uint8_t mask_x, uint8_t mask_y,
138 uint8_t off_x, uint8_t off_y) {
155static inline void uploadClut4(
void) {
157 for (
int i = 0;
i < 16;
i++) {
158 clut[
i] = rasterVram555((uint8_t)
i, (uint8_t)(31 -
i), 0);
166 for (
int i = 0;
i < 8;
i++) {
174static inline void uploadClut8(
void) {
176 for (
int i = 0;
i < 256;
i++) {
177 clut[
i] = rasterVram555((uint8_t)(
i & 0x1f),
178 (uint8_t)((255 -
i) & 0x1f),
179 (uint8_t)((
i >> 5) & 0x1f));
186 for (
int i = 0;
i < 128;
i++) {
203static inline void uploadTex4(
void) {
215 for (
int v = 0; v < 16; v++) {
229static inline void uploadTex8(
void) {
235 for (
int v = 0; v < 16; v++) {
236 for (
int px = 0; px < 32; px += 2) {
240 (((
uint32_t)(px * 2 + 1) & 0xff) << 8);
242 (((
uint32_t)(px * 2 + 3) & 0xff) << 8);
243 GPU_DATA = (lo_pix & 0xffff) | ((hi_pix & 0xffff) << 16);
251static inline void uploadTex15(
void) {
257 for (
int v = 0; v < 16; v++) {
258 for (
int u = 0; u < 64; u += 2) {
259 uint16_t t0 = rasterVram555((uint8_t)(u & 0x1f),
261 (uint8_t)((u + v) & 0x1f));
262 uint16_t t1 = rasterVram555((uint8_t)((u + 1) & 0x1f),
264 (uint8_t)((u + 1 + v) & 0x1f));
271static inline void uploadAllTextureFixtures(
void) {
282static inline uint16_t expectedClut4Color(uint8_t u) {
283 return rasterVram555((uint8_t)(u & 0xf),
284 (uint8_t)(31 - (u & 0xf)), 0);
287static inline uint16_t expectedClut8Color(uint8_t u) {
288 return rasterVram555((uint8_t)(u & 0x1f),
289 (uint8_t)((255 - u) & 0x1f),
290 (uint8_t)((u >> 5) & 0x1f));
293static inline uint16_t expectedTex15Color(uint8_t u, uint8_t v) {
294 return rasterVram555((uint8_t)(u & 0x1f),
296 (uint8_t)((u + v) & 0x1f));
308static inline void rasterTexTri(
uint32_t cmdColor,
309 int16_t x0, int16_t y0, uint8_t u0, uint8_t v0,
310 int16_t x1, int16_t y1, uint8_t u1, uint8_t
v1,
311 int16_t x2, int16_t y2, uint8_t u2, uint8_t
v2,
312 uint16_t clut_field, uint16_t tpage_field) {
314 GPU_DATA = 0x24000000u | (cmdColor & 0x00ffffffu);
328#define TEX_MOD_NEUTRAL 0x808080u
345static inline void rasterFlatTexQuad(
uint32_t cmdColor,
346 int16_t x0, int16_t y0, uint8_t u0, uint8_t v0,
347 int16_t x1, int16_t y1, uint8_t u1, uint8_t
v1,
348 int16_t x2, int16_t y2, uint8_t u2, uint8_t
v2,
349 int16_t x3, int16_t y3, uint8_t u3, uint8_t v3,
350 uint16_t clut_field, uint16_t tpage_field) {
352 GPU_DATA = 0x2c000000u | (cmdColor & 0x00ffffffu);
372static inline void rasterTexRect(
uint32_t cmdColor,
373 int16_t x, int16_t y,
374 uint8_t u, uint8_t v,
375 int16_t w, int16_t h,
376 uint16_t clut_field) {
378 GPU_DATA = 0x64000000u | (cmdColor & 0x00ffffffu);
387static inline void rasterTexRectSemi(
uint32_t cmdColor,
388 int16_t x, int16_t y,
389 uint8_t u, uint8_t v,
390 int16_t w, int16_t h,
391 uint16_t clut_field) {
393 GPU_DATA = 0x66000000u | (cmdColor & 0x00ffffffu);
403static inline void rasterFlatTexQuadSemi(
uint32_t cmdColor,
404 int16_t x0, int16_t y0, uint8_t u0, uint8_t v0,
405 int16_t x1, int16_t y1, uint8_t u1, uint8_t
v1,
406 int16_t x2, int16_t y2, uint8_t u2, uint8_t
v2,
407 int16_t x3, int16_t y3, uint8_t u3, uint8_t v3,
408 uint16_t clut_field, uint16_t tpage_field) {
410 GPU_DATA = 0x2e000000u | (cmdColor & 0x00ffffffu);
uint32_t cmd
Definition dma.c:108
int i
Definition gte-regio.c:287
#define GPU_DATA
Definition hwregs.h:52
void uint32_t(classId, spec)
#define CLUT8_VRAM_Y
Definition texture-fixtures.h:75
#define TEX4_VRAM_BASE_Y
Definition texture-fixtures.h:58
#define TEX15_VRAM_BASE_X
Definition texture-fixtures.h:67
#define CLUT8_VRAM_X
Definition texture-fixtures.h:74
#define TEX4_VRAM_BASE_X
Definition texture-fixtures.h:57
#define TEX8_VRAM_BASE_X
Definition texture-fixtures.h:62
#define TEX8_VRAM_BASE_Y
Definition texture-fixtures.h:63
#define CLUT4_VRAM_Y
Definition texture-fixtures.h:73
#define TEX15_VRAM_BASE_Y
Definition texture-fixtures.h:68
#define CLUT4_VRAM_X
Definition texture-fixtures.h:72
uint16_t v2
Definition timers.c:262
uint16_t v1
Definition timers.c:260