From 0f875e403e58d542c1a4207b7465ac6c0520bb91 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sat, 17 Apr 2021 19:33:42 +0200 Subject: Add access to OEM attributes with macros --- src/main.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/main.c b/src/main.c index 2a445de..f3c07df 100644 --- a/src/main.c +++ b/src/main.c @@ -77,6 +77,22 @@ rgb15(u32 red, u32 green, u32 blue ) { #define COLOR_BLACK rgb15(0, 0, 0) #define COLOR_WHITE rgb15(28, 28, 28) +// +// Sprites. +// + +// Using macros instead of aligned structs for setting up OAM attributes and +// affine parameters. +// TODO: Benchmark if this would be slower or the same that TONC's +// implementation. +#define OAM_ATTR_0(N) *((vu16*)(MEM_OAM + 0 + 8 * (N))) +#define OAM_ATTR_1(N) *((vu16*)(MEM_OAM + 2 + 8 * (N))) +#define OAM_ATTR_2(N) *((vu16*)(MEM_OAM + 4 + 8 * (N))) +#define OAM_AFFINE_PA(N) *((vs16*)(MEM_OAM + 6 + 8 * 0 + 8 * 4 * (N))) +#define OAM_AFFINE_PB(N) *((vs16*)(MEM_OAM + 6 + 8 * 1 + 8 * 4 * (N))) +#define OAM_AFFINE_PC(N) *((vs16*)(MEM_OAM + 6 + 8 * 2 + 8 * 4 * (N))) +#define OAM_AFFINE_PD(N) *((vs16*)(MEM_OAM + 6 + 8 * 3 + 8 * 4 * (N))) + // Using bd-font, an 8x8 bitmap font. static void put_char(int x, int y, Color clr, u8 chr) { @@ -354,6 +370,28 @@ key_hold(u32 key) { int main(void) { DISP_CTRL = DISP_MODE_3 | DISP_BG_2; + // Test setting OAM parameters for sprite N with my custom macros. + OAM_ATTR_0(0) = 0xBADD; + OAM_ATTR_1(0) = 0x10DE; + OAM_ATTR_2(0) = 0xAC1D; + OAM_ATTR_0(1) = 0xFA7E; + OAM_ATTR_1(1) = 0xD15E; + OAM_ATTR_2(1) = 0xA5ED; + OAM_ATTR_0(2) = 0xBADD; + OAM_ATTR_1(2) = 0x10DE; + OAM_ATTR_2(2) = 0xAC1D; + OAM_ATTR_0(3) = 0xFA7E; + OAM_ATTR_1(3) = 0xD15E; + OAM_ATTR_2(3) = 0xA5ED; + OAM_AFFINE_PA(0) = 0x0011; + OAM_AFFINE_PB(0) = 0x2233; + OAM_AFFINE_PC(0) = 0x4455; + OAM_AFFINE_PD(0) = 0x6677; + OAM_AFFINE_PA(1) = 0xAABB; + OAM_AFFINE_PB(1) = 0xCCDD; + OAM_AFFINE_PC(1) = 0xEEFF; + OAM_AFFINE_PD(1) = 0x0101; + draw_fill_rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, COLOR_GREY); int side = 60; -- cgit v1.2.1