diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 44 |
1 files changed, 38 insertions, 6 deletions
@@ -482,6 +482,16 @@ typedef struct ButtonSprite { | |||
482 | u32 pal_bank; | 482 | u32 pal_bank; |
483 | } ButtonSprite; | 483 | } ButtonSprite; |
484 | 484 | ||
485 | void | ||
486 | load_sprite_data(Tile *tile_ptr, u32 *sprite_data, size_t n_tiles) { | ||
487 | for (size_t i = 0; i < n_tiles; ++i) { | ||
488 | for (size_t j = 0; j < 8; ++j) { | ||
489 | tile_ptr->data[j] = *sprite_data++; | ||
490 | } | ||
491 | tile_ptr++; | ||
492 | } | ||
493 | } | ||
494 | |||
485 | int main(void) { | 495 | int main(void) { |
486 | // Configure the display in mode 0 to show OBJs, where tile memory is | 496 | // Configure the display in mode 0 to show OBJs, where tile memory is |
487 | // sequential. | 497 | // sequential. |
@@ -503,11 +513,33 @@ int main(void) { | |||
503 | Tile *tile_mem = &TILE_MEM[4][initial_tile]; | 513 | Tile *tile_mem = &TILE_MEM[4][initial_tile]; |
504 | 514 | ||
505 | // Test copying the exported tiles. | 515 | // Test copying the exported tiles. |
506 | for (size_t i = 0; i < 224; ++i) { | 516 | profile_start(); |
507 | for (size_t j = 0; j < 8; ++j) { | 517 | load_sprite_data(tile_mem, &gba_btn_b_data, 112); |
508 | (tile_mem + i)->data[j] = gba_buttons_tiles[i][j]; | 518 | tile_mem += 112; |
509 | } | 519 | load_sprite_data(tile_mem, &gba_btn_a_data, 112); |
510 | } | 520 | tile_mem += 112; |
521 | u32 perf_a_clk = profile_stop(); | ||
522 | // | ||
523 | profile_start(); | ||
524 | memcpy(tile_mem, &gba_btn_b_data, sizeof(gba_btn_b_data)); | ||
525 | tile_mem += 112; | ||
526 | memcpy(tile_mem, &gba_btn_a_data, sizeof(gba_btn_a_data)); | ||
527 | tile_mem += 112; | ||
528 | u32 perf_b_clk = profile_stop(); | ||
529 | |||
530 | char perf_a[240] = {0}; | ||
531 | char perf_b[240] = {0}; | ||
532 | sprintf(perf_a, "A: %d", perf_a_clk); | ||
533 | sprintf(perf_b, "B: %d", perf_b_clk); | ||
534 | |||
535 | put_text(0, 0, COLOR_WHITE, perf_a); | ||
536 | put_text(0, 16, COLOR_WHITE, perf_b); | ||
537 | |||
538 | char msg[240] = {0}; | ||
539 | sprintf(msg, "size[a]: %d", sizeof(gba_btn_a_data) / 8 / sizeof(u32)); | ||
540 | put_text(0, 32, COLOR_RED, msg); | ||
541 | sprintf(msg, "size[b]: %d", sizeof(gba_btn_b_data) / 8 / sizeof(u32)); | ||
542 | put_text(0, 32 + 16, COLOR_RED, msg); | ||
511 | 543 | ||
512 | // Initialize the A/B button sprites. | 544 | // Initialize the A/B button sprites. |
513 | int buttons_x = SCREEN_WIDTH - 64 - 10; | 545 | int buttons_x = SCREEN_WIDTH - 64 - 10; |
@@ -528,7 +560,7 @@ int main(void) { | |||
528 | .y = buttons_y - 16, | 560 | .y = buttons_y - 16, |
529 | .frame = 0, | 561 | .frame = 0, |
530 | .n_frames = 6, | 562 | .n_frames = 6, |
531 | .tile_index = initial_tile + 16 * 7, | 563 | .tile_index = initial_tile + 112, |
532 | .pal_bank = 0, | 564 | .pal_bank = 0, |
533 | }; | 565 | }; |
534 | OBJ_ATTR_0(1) = btn_a.y; | 566 | OBJ_ATTR_0(1) = btn_a.y; |