ref: 13322f03d5c6ffabdaecb52f0f1eb2e3faccc7c0
parent: a93b03f414764218fc7e424455eb413a01ea8f1d
author: allkern <lisandroaalarcon@gmail.com>
date: Wed Aug 23 15:48:00 EDT 2023
Implement a couple more GPU commands
--- a/psx/dev/gpu.c
+++ b/psx/dev/gpu.c
@@ -828,6 +828,41 @@
}
}
+void gpu_cmd_74(psx_gpu_t* gpu) {+ switch (gpu->state) {+ case GPU_STATE_RECV_CMD: {+ gpu->state = GPU_STATE_RECV_ARGS;
+ gpu->cmd_args_remaining = 2;
+ } break;
+
+ case GPU_STATE_RECV_ARGS: {+ if (!gpu->cmd_args_remaining) {+ gpu->state = GPU_STATE_RECV_DATA;
+
+ gpu->color = gpu->buf[0] & 0xffffff;
+ gpu->v0.x = gpu->buf[1] & 0xffff;
+ gpu->v0.y = gpu->buf[1] >> 16;
+ gpu->v0.tx = gpu->buf[2] & 0xff;
+ gpu->v0.ty = (gpu->buf[2] >> 8) & 0xff;
+ gpu->pal = gpu->buf[2] >> 16;
+
+ uint32_t w = 8;
+ uint32_t h = 8;
+
+ gpu->clut_x = (gpu->pal & 0x3f) << 4;
+ gpu->clut_y = (gpu->pal >> 6) & 0x1ff;
+
+ uint32_t tpx = gpu->texp_x;
+ uint32_t tpy = gpu->texp_y;
+
+ gpu_render_textured_rectangle(gpu, gpu->v0, w, h, tpx, tpy);
+
+ gpu->state = GPU_STATE_RECV_CMD;
+ }
+ } break;
+ }
+}
+
void gpu_cmd_60(psx_gpu_t* gpu) { switch (gpu->state) { case GPU_STATE_RECV_CMD: {@@ -1007,6 +1042,7 @@
case 0x26: gpu_cmd_24(gpu); break;
case 0x27: gpu_cmd_24(gpu); break;
case 0x28: gpu_cmd_28(gpu); break;
+ case 0x2a: gpu_cmd_28(gpu); break;
case 0x2c: gpu_cmd_2d(gpu); break;
case 0x2d: gpu_cmd_2d(gpu); break;
case 0x2e: gpu_cmd_2d(gpu); break;
@@ -1024,6 +1060,10 @@
case 0x66: gpu_cmd_64(gpu); break;
case 0x67: gpu_cmd_64(gpu); break;
case 0x68: gpu_cmd_68(gpu); break;
+ case 0x74: gpu_cmd_74(gpu); break;
+ case 0x75: gpu_cmd_74(gpu); break;
+ case 0x76: gpu_cmd_74(gpu); break;
+ case 0x77: gpu_cmd_74(gpu); break;
case 0x7c: gpu_cmd_7c(gpu); break;
case 0x7d: gpu_cmd_7c(gpu); break;
case 0x7e: gpu_cmd_7c(gpu); break;
--
⑨