diff options
-rw-r--r-- | src/main.c | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -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. |
81 | static void | 97 | static void |
82 | put_char(int x, int y, Color clr, u8 chr) { | 98 | put_char(int x, int y, Color clr, u8 chr) { |
@@ -354,6 +370,28 @@ key_hold(u32 key) { | |||
354 | int main(void) { | 370 | int 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; |