summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-04-17 19:33:42 +0200
committerBad Diode <bd@badd10de.dev>2021-04-17 19:33:42 +0200
commit0f875e403e58d542c1a4207b7465ac6c0520bb91 (patch)
treee00427d21859bab7fad99f157a49cddb3a1c891a
parentc9d5551c24b742b9704da409ce349ae93ded802e (diff)
downloadgba-experiments-0f875e403e58d542c1a4207b7465ac6c0520bb91.tar.gz
gba-experiments-0f875e403e58d542c1a4207b7465ac6c0520bb91.zip
Add access to OEM attributes with macros
-rw-r--r--src/main.c38
1 files changed, 38 insertions, 0 deletions
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 ) {
77#define COLOR_BLACK rgb15(0, 0, 0) 77#define COLOR_BLACK rgb15(0, 0, 0)
78#define COLOR_WHITE rgb15(28, 28, 28) 78#define COLOR_WHITE rgb15(28, 28, 28)
79 79
80//
81// Sprites.
82//
83
84// Using macros instead of aligned structs for setting up OAM attributes and
85// affine parameters.
86// TODO: Benchmark if this would be slower or the same that TONC's
87// implementation.
88#define OAM_ATTR_0(N) *((vu16*)(MEM_OAM + 0 + 8 * (N)))
89#define OAM_ATTR_1(N) *((vu16*)(MEM_OAM + 2 + 8 * (N)))
90#define OAM_ATTR_2(N) *((vu16*)(MEM_OAM + 4 + 8 * (N)))
91#define OAM_AFFINE_PA(N) *((vs16*)(MEM_OAM + 6 + 8 * 0 + 8 * 4 * (N)))
92#define OAM_AFFINE_PB(N) *((vs16*)(MEM_OAM + 6 + 8 * 1 + 8 * 4 * (N)))
93#define OAM_AFFINE_PC(N) *((vs16*)(MEM_OAM + 6 + 8 * 2 + 8 * 4 * (N)))
94#define OAM_AFFINE_PD(N) *((vs16*)(MEM_OAM + 6 + 8 * 3 + 8 * 4 * (N)))
95
80// Using bd-font, an 8x8 bitmap font. 96// Using bd-font, an 8x8 bitmap font.
81static void 97static void
82put_char(int x, int y, Color clr, u8 chr) { 98put_char(int x, int y, Color clr, u8 chr) {
@@ -354,6 +370,28 @@ key_hold(u32 key) {
354int main(void) { 370int main(void) {
355 DISP_CTRL = DISP_MODE_3 | DISP_BG_2; 371 DISP_CTRL = DISP_MODE_3 | DISP_BG_2;
356 372
373 // Test setting OAM parameters for sprite N with my custom macros.
374 OAM_ATTR_0(0) = 0xBADD;
375 OAM_ATTR_1(0) = 0x10DE;
376 OAM_ATTR_2(0) = 0xAC1D;
377 OAM_ATTR_0(1) = 0xFA7E;
378 OAM_ATTR_1(1) = 0xD15E;
379 OAM_ATTR_2(1) = 0xA5ED;
380 OAM_ATTR_0(2) = 0xBADD;
381 OAM_ATTR_1(2) = 0x10DE;
382 OAM_ATTR_2(2) = 0xAC1D;
383 OAM_ATTR_0(3) = 0xFA7E;
384 OAM_ATTR_1(3) = 0xD15E;
385 OAM_ATTR_2(3) = 0xA5ED;
386 OAM_AFFINE_PA(0) = 0x0011;
387 OAM_AFFINE_PB(0) = 0x2233;
388 OAM_AFFINE_PC(0) = 0x4455;
389 OAM_AFFINE_PD(0) = 0x6677;
390 OAM_AFFINE_PA(1) = 0xAABB;
391 OAM_AFFINE_PB(1) = 0xCCDD;
392 OAM_AFFINE_PC(1) = 0xEEFF;
393 OAM_AFFINE_PD(1) = 0x0101;
394
357 draw_fill_rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, COLOR_GREY); 395 draw_fill_rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, COLOR_GREY);
358 396
359 int side = 60; 397 int side = 60;