From 912c67e2e6ad85bb67336c60853346dfb3e6e514 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sat, 1 Jul 2023 04:13:16 +0000 Subject: [PATCH] vdp1: improve point access This adds a new union to the vdp1 command list. --- scsp.h | 12 ++++++------ vdp1.h | 50 +++++++++++++++++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/scsp.h b/scsp.h index 632d84e..fef6f4c 100644 --- a/scsp.h +++ b/scsp.h @@ -297,10 +297,10 @@ enum dma_bits { // timer bits //enum tima_bits { -#define TIMA__TACTL(n) ((n & 0b111) << 8) -#define TIMB__TBCTL(n) ((n & 0b111) << 8) -#define TIMC__TCCTL(n) ((n & 0b111) << 8) -#define TIMA__TIMA(n) ((n & 0xff) << 0) -#define TIMB__TIMB(n) ((n & 0xff) << 0) -#define TIMC__TIMC(n) ((n & 0xff) << 0) +#define TIMA__TACTL(n) (((n) & 0b111) << 8) +#define TIMB__TBCTL(n) (((n) & 0b111) << 8) +#define TIMC__TCCTL(n) (((n) & 0b111) << 8) +#define TIMA__TIMA(n) (((n) & 0xff) << 0) +#define TIMB__TIMB(n) (((n) & 0xff) << 0) +#define TIMC__TIMC(n) (((n) & 0xff) << 0) //}; diff --git a/vdp1.h b/vdp1.h index 664cd38..5c90d58 100644 --- a/vdp1.h +++ b/vdp1.h @@ -4,6 +4,11 @@ /* command table */ +typedef struct cmd_point { + s16 X; + s16 Y; +} cmd_point; + typedef struct vdp1_cmd { u16 CTRL; u16 LINK; @@ -11,14 +16,25 @@ typedef struct vdp1_cmd { u16 COLR; u16 SRCA; u16 SIZE; - s16 XA; - s16 YA; - s16 XB; - s16 YB; - s16 XC; - s16 YC; - s16 XD; - s16 YD; + union { + struct { + s16 XA; + s16 YA; + s16 XB; + s16 YB; + s16 XC; + s16 YC; + s16 XD; + s16 YD; + }; + struct { + cmd_point A; + cmd_point B; + cmd_point C; + cmd_point D; + }; + cmd_point point[4]; + }; u16 GDRA; u16 _dummy; } vdp1_cmd; @@ -87,7 +103,7 @@ enum pmod_bit { enum colr_bit { COLR__RGB = (1 << 15) -#define COLR__ADDRESS(n) (n >> 3) +#define COLR__ADDRESS(n) ((n) >> 3) }; //enum srca_bit { @@ -102,23 +118,23 @@ enum colr_bit { /* memory offsets */ typedef union vdp1_vram { - unsigned char u8[0x080000 / 1]; - unsigned short u16[0x080000 / 2]; - unsigned long u32[0x080000 / 4]; - vdp1_cmd cmd[0x080000 / 0x20]; + uint8_t u8[0x080000 / 1]; + uint16_t u16[0x080000 / 2]; + uint32_t u32[0x080000 / 4]; + vdp1_cmd cmd[0x080000 / 0x20]; } vdp1_vram; static_assert((sizeof (union vdp1_vram)) == 0x080000); typedef union vdp1_framebuffer { - unsigned char u8[0x040000 / 1]; - unsigned short u16[0x040000 / 2]; - unsigned long u32[0x040000 / 4]; + uint8_t u8[0x040000 / 1]; + uint16_t u16[0x040000 / 2]; + uint32_t u32[0x040000 / 4]; } vdp1_framebuffer; static_assert((sizeof (union vdp1_framebuffer)) == 0x040000); -typedef unsigned char vdp1_res0[0x040000]; +typedef u8 vdp1_res0[0x040000]; typedef struct vdp1_reg { reg16 TVMR; /* TV MODE SELECTION */