diff options
author | Bad Diode <bd@badd10de.dev> | 2021-06-11 22:13:47 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-06-11 22:13:47 +0200 |
commit | 0391e4b7ac374bf210be79db66d188494ed2dd45 (patch) | |
tree | 54554b832518f9c80b624c77fc0e98c3d2b86c99 | |
parent | 52d77490dbcc70294b5d7cafb3ee0cbf607a5312 (diff) | |
download | stepper-0391e4b7ac374bf210be79db66d188494ed2dd45.tar.gz stepper-0391e4b7ac374bf210be79db66d188494ed2dd45.zip |
Load all assets on VRAM at init
-rw-r--r-- | src/sequencer.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/sequencer.c b/src/sequencer.c index efec779..6859ba5 100644 --- a/src/sequencer.c +++ b/src/sequencer.c | |||
@@ -14,9 +14,9 @@ | |||
14 | 14 | ||
15 | // Theme colors. | 15 | // Theme colors. |
16 | #define COL_CURSOR COL_BLUE | 16 | #define COL_CURSOR COL_BLUE |
17 | #define COL_NOTE_PRESSED COL_BLUE | 17 | #define COL_NOTE_PRESSED COL_GREY |
18 | #define COL_CURRENT_CHANNEL COL_FG | 18 | #define COL_CURRENT_CHANNEL COL_GREY |
19 | #define COL_CURRENT_TRIG COL_FG | 19 | #define COL_CURRENT_TRIG COL_GREY |
20 | #define COL_WAVE_A COL_RED | 20 | #define COL_WAVE_A COL_RED |
21 | #define COL_WAVE_B COL_CYAN | 21 | #define COL_WAVE_B COL_CYAN |
22 | 22 | ||
@@ -24,7 +24,13 @@ | |||
24 | // Assets. | 24 | // Assets. |
25 | // | 25 | // |
26 | 26 | ||
27 | #define ASSETS_DATA ((u32*)(MEM_VRAM + KB(32))) | 27 | #define N_TILES_NOTE_NAMES 73 * 2 |
28 | #define N_TILES_CHAN_BTSN 4 * 3 | ||
29 | #define N_TILES_WAVE_BTNS 4 * 2 | ||
30 | |||
31 | #define ASSETS_NOTE_NAMES ((u32*)(MEM_VRAM + KB(32))) | ||
32 | #define ASSETS_CHANNEL_BUTTONS (ASSETS_NOTE_NAMES + (N_TILES_NOTE_NAMES * 8)) | ||
33 | #define ASSETS_DEFAULT_WAVES (ASSETS_CHANNEL_BUTTONS + (N_TILES_CHAN_BTSN * 8)) | ||
28 | 34 | ||
29 | static const u32 note_names[] = { | 35 | static const u32 note_names[] = { |
30 | 0x000000e0, 0x202020e0, 0x0000000e, 0x080e020e, | 36 | 0x000000e0, 0x202020e0, 0x0000000e, 0x080e020e, |
@@ -341,7 +347,7 @@ draw_trigger(size_t chan, size_t i) { | |||
341 | size_t offset_y = i < 8 ? 0 : TRIG_OFFSET_Y; | 347 | size_t offset_y = i < 8 ? 0 : TRIG_OFFSET_Y; |
342 | size_t x = TRIG_START_X + offset_x; | 348 | size_t x = TRIG_START_X + offset_x; |
343 | size_t y = TRIG_START_Y + offset_y; | 349 | size_t y = TRIG_START_Y + offset_y; |
344 | Tile *tiles = ASSETS_DATA; | 350 | Tile *tiles = ASSETS_NOTE_NAMES; |
345 | tiles += 2 * trig.note; | 351 | tiles += 2 * trig.note; |
346 | draw_tile(x, y, tiles, COL_FG, true); | 352 | draw_tile(x, y, tiles, COL_FG, true); |
347 | draw_tile(x + 8, y, tiles + 1, COL_FG, true); | 353 | draw_tile(x + 8, y, tiles + 1, COL_FG, true); |
@@ -389,8 +395,7 @@ void | |||
389 | draw_channels(void) { | 395 | draw_channels(void) { |
390 | // Contains 5 channel buttons: Ch. 1-4 + FM. We are only drawing the DMG | 396 | // Contains 5 channel buttons: Ch. 1-4 + FM. We are only drawing the DMG |
391 | // channels for now, since FM may take some time to develop. | 397 | // channels for now, since FM may take some time to develop. |
392 | Tile channel_tiles[3 * 4] = {0}; | 398 | Tile *channel_tiles = ASSETS_CHANNEL_BUTTONS; |
393 | unpack_tiles(channel_buttons, channel_tiles, 3 * 4); | ||
394 | size_t k = 0; | 399 | size_t k = 0; |
395 | for (size_t i = 0; i < 4; i++) { | 400 | for (size_t i = 0; i < 4; i++) { |
396 | bool active = false; | 401 | bool active = false; |
@@ -669,10 +674,6 @@ void | |||
669 | draw_parameters_ch3(void) { | 674 | draw_parameters_ch3(void) { |
670 | clear_parameters(); | 675 | clear_parameters(); |
671 | 676 | ||
672 | // TODO: Move to VRAM and decompress at the beginning. | ||
673 | Tile wave_tiles[4 * 2] = {0}; | ||
674 | unpack_tiles(default_wave_buttons, wave_tiles, 4 * 2); | ||
675 | |||
676 | // Draw current wave data. | 677 | // Draw current wave data. |
677 | { | 678 | { |
678 | u8 *wave_a = ch3.params[trig_selection_loc].wave_a; | 679 | u8 *wave_a = ch3.params[trig_selection_loc].wave_a; |
@@ -709,6 +710,7 @@ draw_parameters_ch3(void) { | |||
709 | 710 | ||
710 | // Draw default wave buttons. | 711 | // Draw default wave buttons. |
711 | { | 712 | { |
713 | Tile *wave_tiles = ASSETS_DEFAULT_WAVES; | ||
712 | size_t x = PARAMS_START_X; | 714 | size_t x = PARAMS_START_X; |
713 | size_t y = PARAMS_START_Y + PARAMS_H - 7; | 715 | size_t y = PARAMS_START_Y + PARAMS_H - 7; |
714 | for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { | 716 | for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { |
@@ -1387,14 +1389,16 @@ handle_sequencer_input(void) { | |||
1387 | } | 1389 | } |
1388 | 1390 | ||
1389 | void | 1391 | void |
1390 | load_note_names(void) { | 1392 | load_assets(void) { |
1391 | unpack_tiles(note_names, ASSETS_DATA, 2 * 73); | 1393 | unpack_tiles(note_names, ASSETS_NOTE_NAMES, N_TILES_NOTE_NAMES); |
1394 | unpack_tiles(channel_buttons, ASSETS_CHANNEL_BUTTONS, N_TILES_CHAN_BTSN); | ||
1395 | unpack_tiles(default_wave_buttons, ASSETS_DEFAULT_WAVES, N_TILES_WAVE_BTNS); | ||
1392 | } | 1396 | } |
1393 | 1397 | ||
1394 | void | 1398 | void |
1395 | sequencer_init(void) { | 1399 | sequencer_init(void) { |
1396 | // Unpack non-sprite tiles directly on the VRAM. | 1400 | // Unpack non-sprite tiles directly on the VRAM. |
1397 | load_note_names(); | 1401 | load_assets(); |
1398 | 1402 | ||
1399 | // Initialize background objects and sprites. | 1403 | // Initialize background objects and sprites. |
1400 | draw_triggers(); | 1404 | draw_triggers(); |