diff options
author | Bad Diode <bd@badd10de.dev> | 2023-04-23 17:16:39 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-04-23 17:16:39 +0200 |
commit | a4092c4a6b1ad1589552c06b29a72d868ef778f1 (patch) | |
tree | d08027606a4d490a85798cb09a5d7631366426b9 | |
parent | ff6e784e7c5ebe223666c6c631305397ad358289 (diff) | |
download | stepper-a4092c4a6b1ad1589552c06b29a72d868ef778f1.tar.gz stepper-a4092c4a6b1ad1589552c06b29a72d868ef778f1.zip |
Fix small font rendering and sprite drawing
-rw-r--r-- | src/assets.c | 8 | ||||
-rw-r--r-- | src/drawing.c | 258 | ||||
-rw-r--r-- | src/main.c | 3 | ||||
-rw-r--r-- | src/renderer.c | 73 | ||||
-rw-r--r-- | src/renderer_m0.c | 19 |
5 files changed, 153 insertions, 208 deletions
diff --git a/src/assets.c b/src/assets.c index 74d27d2..64a2265 100644 --- a/src/assets.c +++ b/src/assets.c | |||
@@ -104,10 +104,10 @@ u32 ch_btn_sprite[] = { | |||
104 | }; | 104 | }; |
105 | 105 | ||
106 | static const u32 default_wave_buttons[] = { | 106 | static const u32 default_wave_buttons[] = { |
107 | 0xff013149, 0x850101ff, 0x3f202028, 0x2423203f, | 107 | 0x493101ff, 0xff010185, 0x2820203f, 0x3f202324, |
108 | 0xff016151, 0x49c501ff, 0x3f202c2a, 0x2928203f, | 108 | 0x516101ff, 0xff01c549, 0x2a2c203f, 0x3f202829, |
109 | 0xff017d45, 0x45c501ff, 0x3f202828, 0x282f203f, | 109 | 0x457d01ff, 0xff01c545, 0x2828203f, 0x3f202f28, |
110 | 0xff014911, 0x812501ff, 0x3f202128, 0x2420203f, | 110 | 0x114901ff, 0xff012581, 0x2821203f, 0x3f202024, |
111 | }; | 111 | }; |
112 | 112 | ||
113 | // | 113 | // |
diff --git a/src/drawing.c b/src/drawing.c index 4f08e39..b790595 100644 --- a/src/drawing.c +++ b/src/drawing.c | |||
@@ -157,7 +157,7 @@ void | |||
157 | draw_bank_buttons() { | 157 | draw_bank_buttons() { |
158 | size_t x = BANK_START_X; | 158 | size_t x = BANK_START_X; |
159 | size_t y = BANK_START_Y; | 159 | size_t y = BANK_START_Y; |
160 | // txt_drawf_small("BANK", x - 2, y - 10, 4, COL_FG); | 160 | txt_drawf_small("BANK", x - 2, y - 10, COL_FG); |
161 | char bank_names[] = { | 161 | char bank_names[] = { |
162 | 'A', 'B', 'C', 'D', | 162 | 'A', 'B', 'C', 'D', |
163 | }; | 163 | }; |
@@ -168,7 +168,7 @@ draw_bank_buttons() { | |||
168 | } | 168 | } |
169 | draw_filled_rect(x, y, x + PAT_W, y + PAT_H, COL_BG); | 169 | draw_filled_rect(x, y, x + PAT_W, y + PAT_H, COL_BG); |
170 | draw_rect(x, y, x + PAT_W, y + PAT_H, color); | 170 | draw_rect(x, y, x + PAT_W, y + PAT_H, color); |
171 | // txt_drawc(bank_names[i], x + 4, y + 2, 6, color); | 171 | txt_drawc(bank_names[i], x + 4, y + 2, color); |
172 | y += PAT_OFFSET_Y; | 172 | y += PAT_OFFSET_Y; |
173 | } | 173 | } |
174 | } | 174 | } |
@@ -177,7 +177,7 @@ void | |||
177 | draw_pattern_buttons() { | 177 | draw_pattern_buttons() { |
178 | size_t x = PAT_START_X; | 178 | size_t x = PAT_START_X; |
179 | size_t y = PAT_START_Y; | 179 | size_t y = PAT_START_Y; |
180 | // txt_drawf_small("PAT", x, y - 10, 4, COL_FG); | 180 | txt_drawf_small("PAT", x, y - 10, COL_FG); |
181 | char pat_names[] = { | 181 | char pat_names[] = { |
182 | 'A', 'B', 'C', 'D', | 182 | 'A', 'B', 'C', 'D', |
183 | 'E', 'F', 'G', 'H', | 183 | 'E', 'F', 'G', 'H', |
@@ -192,7 +192,7 @@ draw_pattern_buttons() { | |||
192 | } | 192 | } |
193 | draw_filled_rect(x, y, x + PAT_W, y + PAT_H, COL_BG); | 193 | draw_filled_rect(x, y, x + PAT_W, y + PAT_H, COL_BG); |
194 | draw_rect(x, y, x + PAT_W, y + PAT_H, color); | 194 | draw_rect(x, y, x + PAT_W, y + PAT_H, color); |
195 | // txt_drawc(pat_names[i], x + 4, y + 2, 6, color); | 195 | txt_drawc(pat_names[i], x + 4, y + 2, color); |
196 | y += PAT_OFFSET_Y; | 196 | y += PAT_OFFSET_Y; |
197 | } | 197 | } |
198 | } | 198 | } |
@@ -244,14 +244,14 @@ draw_bpm() { | |||
244 | draw_filled_rect(x, y, x + R_COL_W, y + BPM_H, COL_BG); | 244 | draw_filled_rect(x, y, x + R_COL_W, y + BPM_H, COL_BG); |
245 | draw_rect(x, y, x + R_COL_W, y + BPM_H, COL_FG); | 245 | draw_rect(x, y, x + R_COL_W, y + BPM_H, COL_FG); |
246 | draw_line(x + 5, y, x + 19, y, COL_BG); | 246 | draw_line(x + 5, y, x + 19, y, COL_BG); |
247 | // txt_drawf_small("BPM", x + 5, y - 4, 4, COL_FG); | 247 | txt_drawf_small("BPM", x + 5, y - 4, COL_FG); |
248 | 248 | ||
249 | // Make sure its horizontally centered if only 2 digits | 249 | // Make sure its horizontally centered if only 2 digits |
250 | int bpm = patterns[pattern_selection_loc].bpm; | 250 | int bpm = patterns[pattern_selection_loc].bpm; |
251 | if (bpm >= 100) { | 251 | if (bpm >= 100) { |
252 | txt_drawf("%d", x + 3, y + 7, 6, COL_FG, bpm); | 252 | txt_drawf("%d", x + 3, y + 7, COL_FG, bpm); |
253 | } else { | 253 | } else { |
254 | txt_drawf("%d", x + 6, y + 7, 6, COL_FG, bpm); | 254 | txt_drawf("%d", x + 6, y + 7, COL_FG, bpm); |
255 | } | 255 | } |
256 | } | 256 | } |
257 | 257 | ||
@@ -568,38 +568,38 @@ draw_parameters_wave(void) { | |||
568 | 568 | ||
569 | // Wave text. | 569 | // Wave text. |
570 | x -= 2; | 570 | x -= 2; |
571 | // txt_drawf_small("%02x%02x%02x%02x", x, y + 20, 4, COL_FG, | 571 | txt_drawf_small("%02x%02x%02x%02x", x, y + 20, COL_FG, |
572 | // wave_a[0], wave_a[1], wave_a[2], wave_a[3]); | 572 | wave_a[0], wave_a[1], wave_a[2], wave_a[3]); |
573 | // txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 20, 4, COL_FG, | 573 | txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 20, COL_FG, |
574 | // wave_a[4], wave_a[5], wave_a[6], wave_a[7]); | 574 | wave_a[4], wave_a[5], wave_a[6], wave_a[7]); |
575 | // txt_drawf_small("%02x%02x%02x%02x", x, y + 28, 4, COL_FG, | 575 | txt_drawf_small("%02x%02x%02x%02x", x, y + 28, COL_FG, |
576 | // wave_a[8], wave_a[9], wave_a[10], wave_a[11]); | 576 | wave_a[8], wave_a[9], wave_a[10], wave_a[11]); |
577 | // txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, 4, COL_FG, | 577 | txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, COL_FG, |
578 | // wave_a[12], wave_a[13], wave_a[14], wave_a[15]); | 578 | wave_a[12], wave_a[13], wave_a[14], wave_a[15]); |
579 | 579 | ||
580 | x += 70; | 580 | x += 70; |
581 | // txt_drawf_small("%02x%02x%02x%02x", x, y + 20, 4, COL_FG, | 581 | txt_drawf_small("%02x%02x%02x%02x", x, y + 20, COL_FG, |
582 | // wave_b[0], wave_b[1], wave_b[2], wave_b[3]); | 582 | wave_b[0], wave_b[1], wave_b[2], wave_b[3]); |
583 | // txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 20, 4, COL_FG, | 583 | txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 20, COL_FG, |
584 | // wave_b[4], wave_b[5], wave_b[6], wave_b[7]); | 584 | wave_b[4], wave_b[5], wave_b[6], wave_b[7]); |
585 | // txt_drawf_small("%02x%02x%02x%02x", x, y + 28, 4, COL_FG, | 585 | txt_drawf_small("%02x%02x%02x%02x", x, y + 28, COL_FG, |
586 | // wave_b[8], wave_b[9], wave_b[10], wave_b[11]); | 586 | wave_b[8], wave_b[9], wave_b[10], wave_b[11]); |
587 | // txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, 4, COL_FG, | 587 | txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, COL_FG, |
588 | // wave_b[12], wave_b[13], wave_b[14], wave_b[15]); | 588 | wave_b[12], wave_b[13], wave_b[14], wave_b[15]); |
589 | } | 589 | } |
590 | 590 | ||
591 | // Draw default wave buttons. | 591 | // Draw default wave buttons. |
592 | { | 592 | { |
593 | // Tile *wave_tiles = ASSETS_DEFAULT_WAVES; | 593 | u32 *tile = default_wave_buttons; |
594 | size_t x = PARAMS_START_X; | 594 | size_t x = PARAMS_START_X; |
595 | size_t y = PARAMS_START_Y + PARAMS_H - 12; | 595 | size_t y = PARAMS_START_Y + PARAMS_H - 12; |
596 | for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { | 596 | for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { |
597 | // draw_tile(x + 17 * k, y, wave_tiles + i, COL_FG, true); | 597 | draw_icn(x + 17 * k , y, &tile[i * 2 + 0], COL_FG, 1, 0); |
598 | // draw_tile(x + 17 * k + 8, y, wave_tiles + i + 1, COL_FG, true); | 598 | draw_icn(x + 17 * k + 8, y, &tile[i * 2 + 2], COL_FG, 1, 0); |
599 | } | 599 | } |
600 | for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { | 600 | for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { |
601 | // draw_tile(x + 17 * k + 70, y, wave_tiles + i, COL_FG, true); | 601 | draw_icn(x + 70 + 17 * k , y, &tile[i * 2 + 0], COL_FG, 1, 0); |
602 | // draw_tile(x + 17 * k + 8 + 70, y, wave_tiles + i + 1, COL_FG, true); | 602 | draw_icn(x + 70 + 17 * k + 8, y, &tile[i * 2 + 2], COL_FG, 1, 0); |
603 | } | 603 | } |
604 | } | 604 | } |
605 | 605 | ||
@@ -612,17 +612,17 @@ draw_parameters_wave(void) { | |||
612 | draw_line(x, y + 5, x, y + 16, COL_FG); | 612 | draw_line(x, y + 5, x, y + 16, COL_FG); |
613 | draw_line(x + 30, y + 5, x + 30, y + 17, COL_FG); | 613 | draw_line(x + 30, y + 5, x + 30, y + 17, COL_FG); |
614 | draw_line(x, y + 17, x + 30, y + 17, COL_FG); | 614 | draw_line(x, y + 17, x + 30, y + 17, COL_FG); |
615 | // txt_drawf_small("mode", x + 6, y, 4, COL_FG); | 615 | txt_drawf_small("mode", x + 6, y, COL_FG); |
616 | 616 | ||
617 | switch (pat->ch3.params[trig_selection_loc].wave_mode) { | 617 | switch (pat->ch3.params[trig_selection_loc].wave_mode) { |
618 | case 0: { | 618 | case 0: { |
619 | txt_drawf("A", x + 12, y + 7, 6, COL_FG); | 619 | txt_drawf("A", x + 12, y + 7, COL_FG); |
620 | } break; | 620 | } break; |
621 | case 1: { | 621 | case 1: { |
622 | txt_drawf("B", x + 12, y + 7, 6, COL_FG); | 622 | txt_drawf("B", x + 12, y + 7, COL_FG); |
623 | } break; | 623 | } break; |
624 | case 2: { | 624 | case 2: { |
625 | txt_drawf("A+B", x + 6, y + 7, 6, COL_FG); | 625 | txt_drawf("A+B", x + 6, y + 7, COL_FG); |
626 | } break; | 626 | } break; |
627 | } | 627 | } |
628 | } | 628 | } |
@@ -636,23 +636,23 @@ draw_parameters_wave(void) { | |||
636 | draw_line(x, y + 8, x, y + 19, COL_FG); | 636 | draw_line(x, y + 8, x, y + 19, COL_FG); |
637 | draw_line(x + 30, y + 8, x + 30, y + 19, COL_FG); | 637 | draw_line(x + 30, y + 8, x + 30, y + 19, COL_FG); |
638 | draw_line(x, y + 20, x + 30, y + 20, COL_FG); | 638 | draw_line(x, y + 20, x + 30, y + 20, COL_FG); |
639 | // txt_drawf_small("vol", x + 8, y + 3, 4, COL_FG); | 639 | txt_drawf_small("vol", x + 8, y + 3, COL_FG); |
640 | 640 | ||
641 | switch (pat->ch3.params[trig_selection_loc].wave_volume) { | 641 | switch (pat->ch3.params[trig_selection_loc].wave_volume) { |
642 | case 0: { | 642 | case 0: { |
643 | txt_drawf("0", x + 12, y + 10, 6, COL_FG); | 643 | txt_drawf("0", x + 12, y + 10, COL_FG); |
644 | } break; | 644 | } break; |
645 | case 1: { | 645 | case 1: { |
646 | txt_drawf("25", x + 9, y + 10, 6, COL_FG); | 646 | txt_drawf("25", x + 9, y + 10, COL_FG); |
647 | } break; | 647 | } break; |
648 | case 2: { | 648 | case 2: { |
649 | txt_drawf("50", x + 9, y + 10, 6, COL_FG); | 649 | txt_drawf("50", x + 9, y + 10, COL_FG); |
650 | } break; | 650 | } break; |
651 | case 3: { | 651 | case 3: { |
652 | txt_drawf("75", x + 9, y + 10, 6, COL_FG); | 652 | txt_drawf("75", x + 9, y + 10, COL_FG); |
653 | } break; | 653 | } break; |
654 | case 4: { | 654 | case 4: { |
655 | txt_drawf("100", x + 6, y + 10, 6, COL_FG); | 655 | txt_drawf("100", x + 6, y + 10, COL_FG); |
656 | } break; | 656 | } break; |
657 | } | 657 | } |
658 | } | 658 | } |
@@ -731,20 +731,20 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { | |||
731 | draw_line(x, y + 8, x, y + 19, COL_FG); | 731 | draw_line(x, y + 8, x, y + 19, COL_FG); |
732 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 732 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
733 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 733 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
734 | // txt_drawf_small("duty", x + 3, y + 3, 4, COL_FG); | 734 | txt_drawf_small("duty", x + 3, y + 3, COL_FG); |
735 | 735 | ||
736 | switch (params->duty_cycle) { | 736 | switch (params->duty_cycle) { |
737 | case 0: { | 737 | case 0: { |
738 | txt_drawf("12", x + 6, y + 10, 6, COL_FG); | 738 | txt_drawf("12", x + 6, y + 10, COL_FG); |
739 | } break; | 739 | } break; |
740 | case 1: { | 740 | case 1: { |
741 | txt_drawf("25", x + 6, y + 10, 6, COL_FG); | 741 | txt_drawf("25", x + 6, y + 10, COL_FG); |
742 | } break; | 742 | } break; |
743 | case 2: { | 743 | case 2: { |
744 | txt_drawf("50", x + 6, y + 10, 6, COL_FG); | 744 | txt_drawf("50", x + 6, y + 10, COL_FG); |
745 | } break; | 745 | } break; |
746 | case 3: { | 746 | case 3: { |
747 | txt_drawf("75", x + 6, y + 10, 6, COL_FG); | 747 | txt_drawf("75", x + 6, y + 10, COL_FG); |
748 | } break; | 748 | } break; |
749 | } | 749 | } |
750 | } | 750 | } |
@@ -790,56 +790,56 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { | |||
790 | draw_line(x, y + 8, x, y + 19, COL_FG); | 790 | draw_line(x, y + 8, x, y + 19, COL_FG); |
791 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 791 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
792 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 792 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
793 | // txt_drawf_small("vol", x + 5, y + 3, 4, COL_FG); | 793 | txt_drawf_small("vol", x + 5, y + 3, COL_FG); |
794 | 794 | ||
795 | switch (params->env_volume) { | 795 | switch (params->env_volume) { |
796 | case 0: { | 796 | case 0: { |
797 | txt_drawf("0", x + 9, y + 10, 6, COL_FG); | 797 | txt_drawf("0", x + 9, y + 10, COL_FG); |
798 | } break; | 798 | } break; |
799 | case 1: { | 799 | case 1: { |
800 | txt_drawf("6", x + 9, y + 10, 6, COL_FG); | 800 | txt_drawf("6", x + 9, y + 10, COL_FG); |
801 | } break; | 801 | } break; |
802 | case 2: { | 802 | case 2: { |
803 | txt_drawf("13", x + 6, y + 10, 6, COL_FG); | 803 | txt_drawf("13", x + 6, y + 10, COL_FG); |
804 | } break; | 804 | } break; |
805 | case 3: { | 805 | case 3: { |
806 | txt_drawf("20", x + 6, y + 10, 6, COL_FG); | 806 | txt_drawf("20", x + 6, y + 10, COL_FG); |
807 | } break; | 807 | } break; |
808 | case 4: { | 808 | case 4: { |
809 | txt_drawf("26", x + 6, y + 10, 6, COL_FG); | 809 | txt_drawf("26", x + 6, y + 10, COL_FG); |
810 | } break; | 810 | } break; |
811 | case 5: { | 811 | case 5: { |
812 | txt_drawf("33", x + 6, y + 10, 6, COL_FG); | 812 | txt_drawf("33", x + 6, y + 10, COL_FG); |
813 | } break; | 813 | } break; |
814 | case 6: { | 814 | case 6: { |
815 | txt_drawf("40", x + 6, y + 10, 6, COL_FG); | 815 | txt_drawf("40", x + 6, y + 10, COL_FG); |
816 | } break; | 816 | } break; |
817 | case 7: { | 817 | case 7: { |
818 | txt_drawf("46", x + 6, y + 10, 6, COL_FG); | 818 | txt_drawf("46", x + 6, y + 10, COL_FG); |
819 | } break; | 819 | } break; |
820 | case 8: { | 820 | case 8: { |
821 | txt_drawf("53", x + 6, y + 10, 6, COL_FG); | 821 | txt_drawf("53", x + 6, y + 10, COL_FG); |
822 | } break; | 822 | } break; |
823 | case 9: { | 823 | case 9: { |
824 | txt_drawf("60", x + 6, y + 10, 6, COL_FG); | 824 | txt_drawf("60", x + 6, y + 10, COL_FG); |
825 | } break; | 825 | } break; |
826 | case 10: { | 826 | case 10: { |
827 | txt_drawf("66", x + 6, y + 10, 6, COL_FG); | 827 | txt_drawf("66", x + 6, y + 10, COL_FG); |
828 | } break; | 828 | } break; |
829 | case 11: { | 829 | case 11: { |
830 | txt_drawf("73", x + 6, y + 10, 6, COL_FG); | 830 | txt_drawf("73", x + 6, y + 10, COL_FG); |
831 | } break; | 831 | } break; |
832 | case 12: { | 832 | case 12: { |
833 | txt_drawf("80", x + 6, y + 10, 6, COL_FG); | 833 | txt_drawf("80", x + 6, y + 10, COL_FG); |
834 | } break; | 834 | } break; |
835 | case 13: { | 835 | case 13: { |
836 | txt_drawf("86", x + 6, y + 10, 6, COL_FG); | 836 | txt_drawf("86", x + 6, y + 10, COL_FG); |
837 | } break; | 837 | } break; |
838 | case 14: { | 838 | case 14: { |
839 | txt_drawf("93", x + 6, y + 10, 6, COL_FG); | 839 | txt_drawf("93", x + 6, y + 10, COL_FG); |
840 | } break; | 840 | } break; |
841 | case 15: { | 841 | case 15: { |
842 | txt_drawf("100", x + 3, y + 10, 6, COL_FG); | 842 | txt_drawf("100", x + 3, y + 10, COL_FG); |
843 | } break; | 843 | } break; |
844 | } | 844 | } |
845 | } | 845 | } |
@@ -853,16 +853,16 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { | |||
853 | draw_line(x, y + 8, x, y + 19, COL_FG); | 853 | draw_line(x, y + 8, x, y + 19, COL_FG); |
854 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 854 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
855 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 855 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
856 | // txt_drawf_small("dir", x + 5, y + 3, 4, COL_FG); | 856 | txt_drawf_small("dir", x + 5, y + 3, COL_FG); |
857 | 857 | ||
858 | char arr_up[2] = { 0x19, 0 }; | 858 | char arr_up[2] = { 0x19, 0 }; |
859 | char arr_down[2] = { 0x18, 0 }; | 859 | char arr_down[2] = { 0x18, 0 }; |
860 | switch (params->env_direction) { | 860 | switch (params->env_direction) { |
861 | case 0: { | 861 | case 0: { |
862 | txt_drawf(arr_up, x + 9, y + 11, 6, COL_FG); | 862 | txt_drawf(arr_up, x + 9, y + 11, COL_FG); |
863 | } break; | 863 | } break; |
864 | case 1: { | 864 | case 1: { |
865 | txt_drawf(arr_down, x + 9, y + 11, 6, COL_FG); | 865 | txt_drawf(arr_down, x + 9, y + 11, COL_FG); |
866 | } break; | 866 | } break; |
867 | } | 867 | } |
868 | } | 868 | } |
@@ -876,32 +876,32 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { | |||
876 | draw_line(x, y + 8, x, y + 19, COL_FG); | 876 | draw_line(x, y + 8, x, y + 19, COL_FG); |
877 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 877 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
878 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 878 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
879 | // txt_drawf_small("time", x + 3, y + 3, 4, COL_FG); | 879 | txt_drawf_small("time", x + 3, y + 3, COL_FG); |
880 | 880 | ||
881 | switch (params->env_time) { | 881 | switch (params->env_time) { |
882 | case 0: { | 882 | case 0: { |
883 | txt_drawf("0", x + 9, y + 10, 6, COL_FG); | 883 | txt_drawf("0", x + 9, y + 10, COL_FG); |
884 | } break; | 884 | } break; |
885 | case 1: { | 885 | case 1: { |
886 | txt_drawf("14", x + 6, y + 10, 6, COL_FG); | 886 | txt_drawf("14", x + 6, y + 10, COL_FG); |
887 | } break; | 887 | } break; |
888 | case 2: { | 888 | case 2: { |
889 | txt_drawf("28", x + 6, y + 10, 6, COL_FG); | 889 | txt_drawf("28", x + 6, y + 10, COL_FG); |
890 | } break; | 890 | } break; |
891 | case 3: { | 891 | case 3: { |
892 | txt_drawf("42", x + 6, y + 10, 6, COL_FG); | 892 | txt_drawf("42", x + 6, y + 10, COL_FG); |
893 | } break; | 893 | } break; |
894 | case 4: { | 894 | case 4: { |
895 | txt_drawf("57", x + 6, y + 10, 6, COL_FG); | 895 | txt_drawf("57", x + 6, y + 10, COL_FG); |
896 | } break; | 896 | } break; |
897 | case 5: { | 897 | case 5: { |
898 | txt_drawf("71", x + 6, y + 10, 6, COL_FG); | 898 | txt_drawf("71", x + 6, y + 10, COL_FG); |
899 | } break; | 899 | } break; |
900 | case 6: { | 900 | case 6: { |
901 | txt_drawf("85", x + 6, y + 10, 6, COL_FG); | 901 | txt_drawf("85", x + 6, y + 10, COL_FG); |
902 | } break; | 902 | } break; |
903 | case 7: { | 903 | case 7: { |
904 | txt_drawf("100", x + 3, y + 10, 6, COL_FG); | 904 | txt_drawf("100", x + 3, y + 10, COL_FG); |
905 | } break; | 905 | } break; |
906 | } | 906 | } |
907 | } | 907 | } |
@@ -916,32 +916,32 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { | |||
916 | draw_line(x, y + 8, x, y + 19, COL_FG); | 916 | draw_line(x, y + 8, x, y + 19, COL_FG); |
917 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 917 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
918 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 918 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
919 | // txt_drawf_small("num", x + 5, y + 3, 4, COL_FG); | 919 | txt_drawf_small("num", x + 5, y + 3, COL_FG); |
920 | 920 | ||
921 | switch (params->sweep_number) { | 921 | switch (params->sweep_number) { |
922 | case 0: { | 922 | case 0: { |
923 | txt_drawf("0", x + 9, y + 10, 6, COL_FG); | 923 | txt_drawf("0", x + 9, y + 10, COL_FG); |
924 | } break; | 924 | } break; |
925 | case 1: { | 925 | case 1: { |
926 | txt_drawf("1", x + 9, y + 10, 6, COL_FG); | 926 | txt_drawf("1", x + 9, y + 10, COL_FG); |
927 | } break; | 927 | } break; |
928 | case 2: { | 928 | case 2: { |
929 | txt_drawf("2", x + 9, y + 10, 6, COL_FG); | 929 | txt_drawf("2", x + 9, y + 10, COL_FG); |
930 | } break; | 930 | } break; |
931 | case 3: { | 931 | case 3: { |
932 | txt_drawf("3", x + 9, y + 10, 6, COL_FG); | 932 | txt_drawf("3", x + 9, y + 10, COL_FG); |
933 | } break; | 933 | } break; |
934 | case 4: { | 934 | case 4: { |
935 | txt_drawf("4", x + 9, y + 10, 6, COL_FG); | 935 | txt_drawf("4", x + 9, y + 10, COL_FG); |
936 | } break; | 936 | } break; |
937 | case 5: { | 937 | case 5: { |
938 | txt_drawf("5", x + 9, y + 10, 6, COL_FG); | 938 | txt_drawf("5", x + 9, y + 10, COL_FG); |
939 | } break; | 939 | } break; |
940 | case 6: { | 940 | case 6: { |
941 | txt_drawf("6", x + 9, y + 10, 6, COL_FG); | 941 | txt_drawf("6", x + 9, y + 10, COL_FG); |
942 | } break; | 942 | } break; |
943 | case 7: { | 943 | case 7: { |
944 | txt_drawf("7", x + 9, y + 10, 6, COL_FG); | 944 | txt_drawf("7", x + 9, y + 10, COL_FG); |
945 | } break; | 945 | } break; |
946 | } | 946 | } |
947 | } | 947 | } |
@@ -955,32 +955,32 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { | |||
955 | draw_line(x, y + 8, x, y + 19, COL_FG); | 955 | draw_line(x, y + 8, x, y + 19, COL_FG); |
956 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 956 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
957 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 957 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
958 | // txt_drawf_small("time", x + 3, y + 3, 4, COL_FG); | 958 | txt_drawf_small("time", x + 3, y + 3, COL_FG); |
959 | 959 | ||
960 | switch (params->sweep_time) { | 960 | switch (params->sweep_time) { |
961 | case 0: { | 961 | case 0: { |
962 | txt_drawf("0", x + 9, y + 10, 6, COL_FG); | 962 | txt_drawf("0", x + 9, y + 10, COL_FG); |
963 | } break; | 963 | } break; |
964 | case 1: { | 964 | case 1: { |
965 | txt_drawf("1", x + 9, y + 10, 6, COL_FG); | 965 | txt_drawf("1", x + 9, y + 10, COL_FG); |
966 | } break; | 966 | } break; |
967 | case 2: { | 967 | case 2: { |
968 | txt_drawf("2", x + 9, y + 10, 6, COL_FG); | 968 | txt_drawf("2", x + 9, y + 10, COL_FG); |
969 | } break; | 969 | } break; |
970 | case 3: { | 970 | case 3: { |
971 | txt_drawf("3", x + 9, y + 10, 6, COL_FG); | 971 | txt_drawf("3", x + 9, y + 10, COL_FG); |
972 | } break; | 972 | } break; |
973 | case 4: { | 973 | case 4: { |
974 | txt_drawf("4", x + 9, y + 10, 6, COL_FG); | 974 | txt_drawf("4", x + 9, y + 10, COL_FG); |
975 | } break; | 975 | } break; |
976 | case 5: { | 976 | case 5: { |
977 | txt_drawf("5", x + 9, y + 10, 6, COL_FG); | 977 | txt_drawf("5", x + 9, y + 10, COL_FG); |
978 | } break; | 978 | } break; |
979 | case 6: { | 979 | case 6: { |
980 | txt_drawf("6", x + 9, y + 10, 6, COL_FG); | 980 | txt_drawf("6", x + 9, y + 10, COL_FG); |
981 | } break; | 981 | } break; |
982 | case 7: { | 982 | case 7: { |
983 | txt_drawf("7", x + 9, y + 10, 6, COL_FG); | 983 | txt_drawf("7", x + 9, y + 10, COL_FG); |
984 | } break; | 984 | } break; |
985 | } | 985 | } |
986 | } | 986 | } |
@@ -994,16 +994,16 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { | |||
994 | draw_line(x, y + 8, x, y + 19, COL_FG); | 994 | draw_line(x, y + 8, x, y + 19, COL_FG); |
995 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 995 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
996 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 996 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
997 | // txt_drawf_small("dir", x + 5, y + 3, 4, COL_FG); | 997 | txt_drawf_small("dir", x + 5, y + 3, COL_FG); |
998 | 998 | ||
999 | char arr_up[2] = { 0x19, 0 }; | 999 | char arr_up[2] = { 0x19, 0 }; |
1000 | char arr_down[2] = { 0x18, 0 }; | 1000 | char arr_down[2] = { 0x18, 0 }; |
1001 | switch (params->sweep_direction) { | 1001 | switch (params->sweep_direction) { |
1002 | case 0: { | 1002 | case 0: { |
1003 | txt_drawf(arr_up, x + 9, y + 11, 6, COL_FG); | 1003 | txt_drawf(arr_up, x + 9, y + 11, COL_FG); |
1004 | } break; | 1004 | } break; |
1005 | case 1: { | 1005 | case 1: { |
1006 | txt_drawf(arr_down, x + 9, y + 11, 6, COL_FG); | 1006 | txt_drawf(arr_down, x + 9, y + 11, COL_FG); |
1007 | } break; | 1007 | } break; |
1008 | } | 1008 | } |
1009 | } | 1009 | } |
@@ -1012,10 +1012,10 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { | |||
1012 | { | 1012 | { |
1013 | size_t x = PARAMS_START_X + x_offset; | 1013 | size_t x = PARAMS_START_X + x_offset; |
1014 | size_t y = PARAMS_START_Y + PARAMS_H - 45; | 1014 | size_t y = PARAMS_START_Y + PARAMS_H - 45; |
1015 | // txt_drawf_small("shape", x + 1, y - 12, 4, COL_FG); | 1015 | txt_drawf_small("shape", x + 1, y - 12, COL_FG); |
1016 | // txt_drawf_small("envelope", x + 54, y - 12, 4, COL_FG); | 1016 | txt_drawf_small("envelope", x + 54, y - 12, COL_FG); |
1017 | if (sweep) { | 1017 | if (sweep) { |
1018 | // txt_drawf_small("sweep", x + 133, y - 12, 4, COL_FG); | 1018 | txt_drawf_small("sweep", x + 133, y - 12, COL_FG); |
1019 | } | 1019 | } |
1020 | } | 1020 | } |
1021 | } | 1021 | } |
@@ -1037,14 +1037,14 @@ draw_parameters_noise(void) { | |||
1037 | draw_line(x, y + 8, x, y + 19, COL_FG); | 1037 | draw_line(x, y + 8, x, y + 19, COL_FG); |
1038 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 1038 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
1039 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 1039 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
1040 | // txt_drawf_small("mode", x + 3, y + 3, 4, COL_FG); | 1040 | txt_drawf_small("mode", x + 3, y + 3, COL_FG); |
1041 | 1041 | ||
1042 | switch (params->bit_mode) { | 1042 | switch (params->bit_mode) { |
1043 | case 0: { | 1043 | case 0: { |
1044 | txt_drawf("A", x + 9, y + 10, 6, COL_FG); | 1044 | txt_drawf("A", x + 9, y + 10, COL_FG); |
1045 | } break; | 1045 | } break; |
1046 | case 1: { | 1046 | case 1: { |
1047 | txt_drawf("B", x + 9, y + 10, 6, COL_FG); | 1047 | txt_drawf("B", x + 9, y + 10, COL_FG); |
1048 | } break; | 1048 | } break; |
1049 | } | 1049 | } |
1050 | } | 1050 | } |
@@ -1090,56 +1090,56 @@ draw_parameters_noise(void) { | |||
1090 | draw_line(x, y + 8, x, y + 19, COL_FG); | 1090 | draw_line(x, y + 8, x, y + 19, COL_FG); |
1091 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 1091 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
1092 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 1092 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
1093 | // txt_drawf_small("vol", x + 5, y + 3, 4, COL_FG); | 1093 | txt_drawf_small("vol", x + 5, y + 3, COL_FG); |
1094 | 1094 | ||
1095 | switch (params->env_volume) { | 1095 | switch (params->env_volume) { |
1096 | case 0: { | 1096 | case 0: { |
1097 | txt_drawf("0", x + 9, y + 10, 6, COL_FG); | 1097 | txt_drawf("0", x + 9, y + 10, COL_FG); |
1098 | } break; | 1098 | } break; |
1099 | case 1: { | 1099 | case 1: { |
1100 | txt_drawf("6", x + 9, y + 10, 6, COL_FG); | 1100 | txt_drawf("6", x + 9, y + 10, COL_FG); |
1101 | } break; | 1101 | } break; |
1102 | case 2: { | 1102 | case 2: { |
1103 | txt_drawf("13", x + 6, y + 10, 6, COL_FG); | 1103 | txt_drawf("13", x + 6, y + 10, COL_FG); |
1104 | } break; | 1104 | } break; |
1105 | case 3: { | 1105 | case 3: { |
1106 | txt_drawf("20", x + 6, y + 10, 6, COL_FG); | 1106 | txt_drawf("20", x + 6, y + 10, COL_FG); |
1107 | } break; | 1107 | } break; |
1108 | case 4: { | 1108 | case 4: { |
1109 | txt_drawf("26", x + 6, y + 10, 6, COL_FG); | 1109 | txt_drawf("26", x + 6, y + 10, COL_FG); |
1110 | } break; | 1110 | } break; |
1111 | case 5: { | 1111 | case 5: { |
1112 | txt_drawf("33", x + 6, y + 10, 6, COL_FG); | 1112 | txt_drawf("33", x + 6, y + 10, COL_FG); |
1113 | } break; | 1113 | } break; |
1114 | case 6: { | 1114 | case 6: { |
1115 | txt_drawf("40", x + 6, y + 10, 6, COL_FG); | 1115 | txt_drawf("40", x + 6, y + 10, COL_FG); |
1116 | } break; | 1116 | } break; |
1117 | case 7: { | 1117 | case 7: { |
1118 | txt_drawf("46", x + 6, y + 10, 6, COL_FG); | 1118 | txt_drawf("46", x + 6, y + 10, COL_FG); |
1119 | } break; | 1119 | } break; |
1120 | case 8: { | 1120 | case 8: { |
1121 | txt_drawf("53", x + 6, y + 10, 6, COL_FG); | 1121 | txt_drawf("53", x + 6, y + 10, COL_FG); |
1122 | } break; | 1122 | } break; |
1123 | case 9: { | 1123 | case 9: { |
1124 | txt_drawf("60", x + 6, y + 10, 6, COL_FG); | 1124 | txt_drawf("60", x + 6, y + 10, COL_FG); |
1125 | } break; | 1125 | } break; |
1126 | case 10: { | 1126 | case 10: { |
1127 | txt_drawf("66", x + 6, y + 10, 6, COL_FG); | 1127 | txt_drawf("66", x + 6, y + 10, COL_FG); |
1128 | } break; | 1128 | } break; |
1129 | case 11: { | 1129 | case 11: { |
1130 | txt_drawf("73", x + 6, y + 10, 6, COL_FG); | 1130 | txt_drawf("73", x + 6, y + 10, COL_FG); |
1131 | } break; | 1131 | } break; |
1132 | case 12: { | 1132 | case 12: { |
1133 | txt_drawf("80", x + 6, y + 10, 6, COL_FG); | 1133 | txt_drawf("80", x + 6, y + 10, COL_FG); |
1134 | } break; | 1134 | } break; |
1135 | case 13: { | 1135 | case 13: { |
1136 | txt_drawf("86", x + 6, y + 10, 6, COL_FG); | 1136 | txt_drawf("86", x + 6, y + 10, COL_FG); |
1137 | } break; | 1137 | } break; |
1138 | case 14: { | 1138 | case 14: { |
1139 | txt_drawf("93", x + 6, y + 10, 6, COL_FG); | 1139 | txt_drawf("93", x + 6, y + 10, COL_FG); |
1140 | } break; | 1140 | } break; |
1141 | case 15: { | 1141 | case 15: { |
1142 | txt_drawf("100", x + 3, y + 10, 6, COL_FG); | 1142 | txt_drawf("100", x + 3, y + 10, COL_FG); |
1143 | } break; | 1143 | } break; |
1144 | } | 1144 | } |
1145 | } | 1145 | } |
@@ -1153,16 +1153,16 @@ draw_parameters_noise(void) { | |||
1153 | draw_line(x, y + 8, x, y + 19, COL_FG); | 1153 | draw_line(x, y + 8, x, y + 19, COL_FG); |
1154 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 1154 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
1155 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 1155 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
1156 | // txt_drawf_small("dir", x + 5, y + 3, 4, COL_FG); | 1156 | txt_drawf_small("dir", x + 5, y + 3, COL_FG); |
1157 | 1157 | ||
1158 | char arr_up[2] = { 0x19, 0 }; | 1158 | char arr_up[2] = { 0x19, 0 }; |
1159 | char arr_down[2] = { 0x18, 0 }; | 1159 | char arr_down[2] = { 0x18, 0 }; |
1160 | switch (params->env_direction) { | 1160 | switch (params->env_direction) { |
1161 | case 0: { | 1161 | case 0: { |
1162 | txt_drawf(arr_up, x + 9, y + 11, 6, COL_FG); | 1162 | txt_drawf(arr_up, x + 9, y + 11, COL_FG); |
1163 | } break; | 1163 | } break; |
1164 | case 1: { | 1164 | case 1: { |
1165 | txt_drawf(arr_down, x + 9, y + 11, 6, COL_FG); | 1165 | txt_drawf(arr_down, x + 9, y + 11, COL_FG); |
1166 | } break; | 1166 | } break; |
1167 | } | 1167 | } |
1168 | } | 1168 | } |
@@ -1176,32 +1176,32 @@ draw_parameters_noise(void) { | |||
1176 | draw_line(x, y + 8, x, y + 19, COL_FG); | 1176 | draw_line(x, y + 8, x, y + 19, COL_FG); |
1177 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); | 1177 | draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); |
1178 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); | 1178 | draw_line(x, y + 20, x + 24, y + 20, COL_FG); |
1179 | // txt_drawf_small("time", x + 3, y + 3, 4, COL_FG); | 1179 | txt_drawf_small("time", x + 3, y + 3, COL_FG); |
1180 | 1180 | ||
1181 | switch (params->env_time) { | 1181 | switch (params->env_time) { |
1182 | case 0: { | 1182 | case 0: { |
1183 | txt_drawf("0", x + 9, y + 10, 6, COL_FG); | 1183 | txt_drawf("0", x + 9, y + 10, COL_FG); |
1184 | } break; | 1184 | } break; |
1185 | case 1: { | 1185 | case 1: { |
1186 | txt_drawf("14", x + 6, y + 10, 6, COL_FG); | 1186 | txt_drawf("14", x + 6, y + 10, COL_FG); |
1187 | } break; | 1187 | } break; |
1188 | case 2: { | 1188 | case 2: { |
1189 | txt_drawf("28", x + 6, y + 10, 6, COL_FG); | 1189 | txt_drawf("28", x + 6, y + 10, COL_FG); |
1190 | } break; | 1190 | } break; |
1191 | case 3: { | 1191 | case 3: { |
1192 | txt_drawf("42", x + 6, y + 10, 6, COL_FG); | 1192 | txt_drawf("42", x + 6, y + 10, COL_FG); |
1193 | } break; | 1193 | } break; |
1194 | case 4: { | 1194 | case 4: { |
1195 | txt_drawf("57", x + 6, y + 10, 6, COL_FG); | 1195 | txt_drawf("57", x + 6, y + 10, COL_FG); |
1196 | } break; | 1196 | } break; |
1197 | case 5: { | 1197 | case 5: { |
1198 | txt_drawf("71", x + 6, y + 10, 6, COL_FG); | 1198 | txt_drawf("71", x + 6, y + 10, COL_FG); |
1199 | } break; | 1199 | } break; |
1200 | case 6: { | 1200 | case 6: { |
1201 | txt_drawf("85", x + 6, y + 10, 6, COL_FG); | 1201 | txt_drawf("85", x + 6, y + 10, COL_FG); |
1202 | } break; | 1202 | } break; |
1203 | case 7: { | 1203 | case 7: { |
1204 | txt_drawf("100", x + 3, y + 10, 6, COL_FG); | 1204 | txt_drawf("100", x + 3, y + 10, COL_FG); |
1205 | } break; | 1205 | } break; |
1206 | } | 1206 | } |
1207 | } | 1207 | } |
@@ -1211,7 +1211,7 @@ draw_parameters_noise(void) { | |||
1211 | { | 1211 | { |
1212 | size_t x = PARAMS_START_X + x_offset; | 1212 | size_t x = PARAMS_START_X + x_offset; |
1213 | size_t y = PARAMS_START_Y + PARAMS_H - 45; | 1213 | size_t y = PARAMS_START_Y + PARAMS_H - 45; |
1214 | // txt_drawf_small("envelope", x + 54, y - 12, 4, COL_FG); | 1214 | txt_drawf_small("envelope", x + 54, y - 12, COL_FG); |
1215 | } | 1215 | } |
1216 | } | 1216 | } |
1217 | 1217 | ||
@@ -21,8 +21,7 @@ WITH REGARD TO THIS SOFTWARE. | |||
21 | 21 | ||
22 | void | 22 | void |
23 | render(void) { | 23 | render(void) { |
24 | // TODO: Fix small font rendering. | 24 | // TODO: Make sure we are drawing the proper cursor color. |
25 | // TODO: Draw remaining sprites. | ||
26 | // TODO: Decouple update from rendering. | 25 | // TODO: Decouple update from rendering. |
27 | PROF(screen_fill(0), clear_cycles); | 26 | PROF(screen_fill(0), clear_cycles); |
28 | PROF(draw_rect(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 1), clear_cycles); | 27 | PROF(draw_rect(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 1), clear_cycles); |
diff --git a/src/renderer.c b/src/renderer.c index 07d79d6..65dfd2b 100644 --- a/src/renderer.c +++ b/src/renderer.c | |||
@@ -260,79 +260,6 @@ draw_filled_rect(size_t x0, size_t y0, size_t x1, size_t y1, u8 clr) { | |||
260 | } | 260 | } |
261 | } | 261 | } |
262 | 262 | ||
263 | IWRAM_CODE | ||
264 | void | ||
265 | draw_tile(size_t x, size_t y, Tile *tile, u8 clr, bool merge) { | ||
266 | BOUNDCHECK_SCREEN(x, y); | ||
267 | |||
268 | // Find row position for the given x/y coordinates. | ||
269 | size_t tile_x = x / 8; | ||
270 | size_t tile_y = y / 8; | ||
271 | size_t start_col = x % 8; | ||
272 | size_t start_row = y % 8; | ||
273 | |||
274 | // Get a pointer to the backbuffer and the tile row. | ||
275 | size_t pos = start_row + (tile_x + tile_y * 32) * 8; | ||
276 | u32 *backbuffer = &BACKBUF[pos]; | ||
277 | u32 *row = tile; | ||
278 | |||
279 | // This will blend all colors weirdly if using tiles that contain colors | ||
280 | // higher than 1. | ||
281 | size_t shift_left = start_col * 4; | ||
282 | size_t shift_right = (8 - start_col) * 4; | ||
283 | u32 row_mask_left = merge ? 0 : 0xFFFFFFFF << shift_left; | ||
284 | u32 row_mask_right = merge ? 0 : 0xFFFFFFFF >> shift_right; | ||
285 | |||
286 | // Draw the tiles. There are 4 possible cases: | ||
287 | // 1. The tile is exactly at the tile boundary. | ||
288 | // 2. The tile spans 2 tiles horizontally. | ||
289 | // 3. The tile spans 2 tiles vertically. | ||
290 | // 4. The tile spans 4 tiles. | ||
291 | if (start_col == 0 && start_row == 0) { | ||
292 | for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { | ||
293 | BOUNDCHECK_SCREEN(x, y + i); | ||
294 | backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr; | ||
295 | } | ||
296 | dirty_tiles[tile_y] |= 1 << tile_x; | ||
297 | } else if (start_row == 0) { | ||
298 | for (size_t i = 0; i < 8; i++, backbuffer++) { | ||
299 | BOUNDCHECK_SCREEN(x, y + i); | ||
300 | backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left); | ||
301 | backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right); | ||
302 | } | ||
303 | dirty_tiles[tile_y] |= 1 << tile_x; | ||
304 | dirty_tiles[tile_y] |= 1 << (tile_x + 1); | ||
305 | } else if (start_col == 0) { | ||
306 | for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { | ||
307 | BOUNDCHECK_SCREEN(x, y + i); | ||
308 | backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr; | ||
309 | } | ||
310 | backbuffer += 8 * 31; | ||
311 | for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) { | ||
312 | BOUNDCHECK_SCREEN(x, y + i); | ||
313 | backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr; | ||
314 | } | ||
315 | dirty_tiles[tile_y] |= 1 << tile_x; | ||
316 | dirty_tiles[tile_y + 1] |= 1 << tile_x; | ||
317 | } else { | ||
318 | for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { | ||
319 | BOUNDCHECK_SCREEN(x, y + i); | ||
320 | backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left); | ||
321 | backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right); | ||
322 | } | ||
323 | backbuffer += 8 * 31; | ||
324 | for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) { | ||
325 | BOUNDCHECK_SCREEN(x, y + i); | ||
326 | backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left); | ||
327 | backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right); | ||
328 | } | ||
329 | dirty_tiles[tile_y] |= 1 << tile_x; | ||
330 | dirty_tiles[tile_y] |= 1 << (tile_x + 1); | ||
331 | dirty_tiles[tile_y + 1] |= 1 << tile_x; | ||
332 | dirty_tiles[tile_y + 1] |= 1 << (tile_x + 1); | ||
333 | } | ||
334 | } | ||
335 | |||
336 | void | 263 | void |
337 | clear_screen(void) { | 264 | clear_screen(void) { |
338 | dma_fill(FRONTBUF, 0, KB(20), 3); | 265 | dma_fill(FRONTBUF, 0, KB(20), 3); |
diff --git a/src/renderer_m0.c b/src/renderer_m0.c index 00874ea..bf15f56 100644 --- a/src/renderer_m0.c +++ b/src/renderer_m0.c | |||
@@ -837,6 +837,25 @@ txt_drawc(char c, size_t x, size_t y, u8 clr) { | |||
837 | draw_icn(x, y, tile + 8 * c, clr, 1, 0); | 837 | draw_icn(x, y, tile + 8 * c, clr, 1, 0); |
838 | } | 838 | } |
839 | 839 | ||
840 | void | ||
841 | txt_drawc_small(char c, size_t x, size_t y, u8 clr) { | ||
842 | u8 *tile = font_icn; | ||
843 | c = c < 'a' ? c + 16 * 6 : c + 16 * 4; | ||
844 | draw_icn(x, y, tile + 8 * c, clr, 1, 0); | ||
845 | } | ||
846 | |||
847 | #define txt_drawf_small(msg, x, y, clr, ...) \ | ||
848 | { \ | ||
849 | char buf[256] = {0}; \ | ||
850 | posprintf(buf, msg, ##__VA_ARGS__); \ | ||
851 | u8 tmp = text_engine.spacing;\ | ||
852 | txt_spacing(4);\ | ||
853 | text_engine.drawc = txt_drawc_small;\ | ||
854 | txt_draws(buf, x, y, clr); \ | ||
855 | txt_spacing(tmp);\ | ||
856 | text_engine.drawc = txt_drawc;\ | ||
857 | } | ||
858 | |||
840 | // | 859 | // |
841 | // Initialization. | 860 | // Initialization. |
842 | // | 861 | // |