From 286f116d15b8535a9c085f64bfd95ab85d9a3232 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Thu, 5 Jan 2023 22:22:25 -0800 Subject: [PATCH] experiment with aliasing --- main.c | 3 +-- sh2.lds | 2 +- type.h | 11 +++++++++-- vdp2.h | 9 +++++++-- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/main.c b/main.c index 1187366..66605f1 100644 --- a/main.c +++ b/main.c @@ -6,8 +6,7 @@ void start(void) { vdp2.reg.BGON = 0; - vdp2.reg.BKTAU = BKTAU__BKCLMD_SINGLE_COLOR | 0; - vdp2.reg.BKTAL = 0x4000; + vdp2.reg.BKTA = REG32_VAL(BKTAU__BKCLMD_SINGLE_COLOR, 0x4000); *((reg16 *)&vdp2.vram[0x8000]) = 31; // red diff --git a/sh2.lds b/sh2.lds index 400cd18..553599a 100644 --- a/sh2.lds +++ b/sh2.lds @@ -7,7 +7,7 @@ MEMORY } SECTIONS { - . = 0x06000000; + . = 0x06003000; .text ALIGN(2) : SUBALIGN(2) { diff --git a/type.h b/type.h index 002e7c6..72ba498 100644 --- a/type.h +++ b/type.h @@ -1,5 +1,12 @@ +#define static_assert _Static_assert +#define offsetof __builtin_offsetof + typedef volatile unsigned char reg8; typedef volatile unsigned short reg16; typedef volatile unsigned long reg32; -#define static_assert _Static_assert -#define offsetof __builtin_offsetof + +static_assert((sizeof (reg8)) == 1); +static_assert((sizeof (reg16)) == 2); +static_assert((sizeof (reg32)) == 4); + +#define REG32_VAL(U, L) (((U) << 16) | (L)) diff --git a/vdp2.h b/vdp2.h index 8cd898f..a8d6176 100644 --- a/vdp2.h +++ b/vdp2.h @@ -94,8 +94,13 @@ typedef struct vdp2_reg { reg16 LSTA1L; /* LINE SCROLL TABLE ADDRESS (NBG1) */ reg16 LCTAU; /* LINE COLOR SCREEN TABLE ADDRESS */ reg16 LCTAL; /* LINE COLOR SCREEN TABLE ADDRESS */ - reg16 BKTAU; /* BACK SCREEN TABLE ADDRESS */ - reg16 BKTAL; /* BACK SCREEN TABLE ADDRESS */ + union { + struct { + reg16 BKTAU; /* BACK SCREEN TABLE ADDRESS */ + reg16 BKTAL; /* BACK SCREEN TABLE ADDRESS */ + }; + reg32 BKTA; + }; reg16 RPMD; /* ROTATION PARAMETER MODE */ reg16 RPRCTL; /* ROTATION PARAMETER READ CONTROL */ reg16 KTCTL; /* COEFFICIENT TABLE CONTROL */