aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-04-24 18:09:44 +0200
committerBad Diode <bd@badd10de.dev>2023-04-24 18:09:44 +0200
commitffdbbc90f042ba18697c78dfa3ab74640085a429 (patch)
tree4c214eb0c64dc9f09a78d1e1c715ce54b9dc823f
parent4771c84572008a223b1f35f6b2cb1d8b92bb2083 (diff)
downloadstepper-ffdbbc90f042ba18697c78dfa3ab74640085a429.tar.gz
stepper-ffdbbc90f042ba18697c78dfa3ab74640085a429.zip
Add grey foreground for global parameter select
This only happens if we are not changing parameters, makes for a better separation of the trigs and global params, since those are destructive.
-rw-r--r--src/drawing.c391
-rw-r--r--src/main.c8
2 files changed, 209 insertions, 190 deletions
diff --git a/src/drawing.c b/src/drawing.c
index acf1e63..149aa19 100644
--- a/src/drawing.c
+++ b/src/drawing.c
@@ -521,7 +521,12 @@ clear_parameters(void) {
521 521
522IWRAM_CODE 522IWRAM_CODE
523void 523void
524draw_parameters_wave(ChannelWaveParams *params) { 524draw_parameters_wave(ChannelWaveParams *params, bool global) {
525 u8 col_fg = COL_FG;
526 if (global && input_handler == handle_channel_selection) {
527 col_fg = COL_GREY;
528 }
529
525 // Draw current wave data. 530 // Draw current wave data.
526 { 531 {
527 u8 *wave_a = params->wave_a; 532 u8 *wave_a = params->wave_a;
@@ -536,23 +541,23 @@ draw_parameters_wave(ChannelWaveParams *params) {
536 541
537 // Wave text. 542 // Wave text.
538 x -= 2; 543 x -= 2;
539 txt_drawf_small("%02x%02x%02x%02x", x, y + 20, COL_FG, 544 txt_drawf_small("%02x%02x%02x%02x", x, y + 20, col_fg,
540 wave_a[0], wave_a[1], wave_a[2], wave_a[3]); 545 wave_a[0], wave_a[1], wave_a[2], wave_a[3]);
541 txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 20, COL_FG, 546 txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 20, col_fg,
542 wave_a[4], wave_a[5], wave_a[6], wave_a[7]); 547 wave_a[4], wave_a[5], wave_a[6], wave_a[7]);
543 txt_drawf_small("%02x%02x%02x%02x", x, y + 28, COL_FG, 548 txt_drawf_small("%02x%02x%02x%02x", x, y + 28, col_fg,
544 wave_a[8], wave_a[9], wave_a[10], wave_a[11]); 549 wave_a[8], wave_a[9], wave_a[10], wave_a[11]);
545 txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, COL_FG, 550 txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, col_fg,
546 wave_a[12], wave_a[13], wave_a[14], wave_a[15]); 551 wave_a[12], wave_a[13], wave_a[14], wave_a[15]);
547 552
548 x += 70; 553 x += 70;
549 txt_drawf_small("%02x%02x%02x%02x", x, y + 20, COL_FG, 554 txt_drawf_small("%02x%02x%02x%02x", x, y + 20, col_fg,
550 wave_b[0], wave_b[1], wave_b[2], wave_b[3]); 555 wave_b[0], wave_b[1], wave_b[2], wave_b[3]);
551 txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 20, COL_FG, 556 txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 20, col_fg,
552 wave_b[4], wave_b[5], wave_b[6], wave_b[7]); 557 wave_b[4], wave_b[5], wave_b[6], wave_b[7]);
553 txt_drawf_small("%02x%02x%02x%02x", x, y + 28, COL_FG, 558 txt_drawf_small("%02x%02x%02x%02x", x, y + 28, col_fg,
554 wave_b[8], wave_b[9], wave_b[10], wave_b[11]); 559 wave_b[8], wave_b[9], wave_b[10], wave_b[11]);
555 txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, COL_FG, 560 txt_drawf_small("%02x%02x%02x%02x", x + 34, y + 28, col_fg,
556 wave_b[12], wave_b[13], wave_b[14], wave_b[15]); 561 wave_b[12], wave_b[13], wave_b[14], wave_b[15]);
557 } 562 }
558 563
@@ -562,12 +567,12 @@ draw_parameters_wave(ChannelWaveParams *params) {
562 size_t x = PARAMS_START_X; 567 size_t x = PARAMS_START_X;
563 size_t y = PARAMS_START_Y + PARAMS_H - 12; 568 size_t y = PARAMS_START_Y + PARAMS_H - 12;
564 for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { 569 for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) {
565 draw_icn(x + 17 * k , y, &tile[i * 2 + 0], COL_FG, 1, 0); 570 draw_icn(x + 17 * k , y, &tile[i * 2 + 0], col_fg, 1, 0);
566 draw_icn(x + 17 * k + 8, y, &tile[i * 2 + 2], COL_FG, 1, 0); 571 draw_icn(x + 17 * k + 8, y, &tile[i * 2 + 2], col_fg, 1, 0);
567 } 572 }
568 for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { 573 for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) {
569 draw_icn(x + 70 + 17 * k , y, &tile[i * 2 + 0], COL_FG, 1, 0); 574 draw_icn(x + 70 + 17 * k , y, &tile[i * 2 + 0], col_fg, 1, 0);
570 draw_icn(x + 70 + 17 * k + 8, y, &tile[i * 2 + 2], COL_FG, 1, 0); 575 draw_icn(x + 70 + 17 * k + 8, y, &tile[i * 2 + 2], col_fg, 1, 0);
571 } 576 }
572 } 577 }
573 578
@@ -575,17 +580,17 @@ draw_parameters_wave(ChannelWaveParams *params) {
575 { 580 {
576 size_t x = PARAMS_START_X + 140; 581 size_t x = PARAMS_START_X + 140;
577 size_t y = PARAMS_START_Y + PARAMS_H - 22; 582 size_t y = PARAMS_START_Y + PARAMS_H - 22;
578 draw_line(x, y + 4, x + 5, y + 4, COL_FG); 583 draw_line(x, y + 4, x + 5, y + 4, col_fg);
579 draw_line(x + 25, y + 4, x + 30, y + 4, COL_FG); 584 draw_line(x + 25, y + 4, x + 30, y + 4, col_fg);
580 draw_line(x, y + 5, x, y + 16, COL_FG); 585 draw_line(x, y + 5, x, y + 16, col_fg);
581 draw_line(x + 30, y + 5, x + 30, y + 17, COL_FG); 586 draw_line(x + 30, y + 5, x + 30, y + 17, col_fg);
582 draw_line(x, y + 17, x + 30, y + 17, COL_FG); 587 draw_line(x, y + 17, x + 30, y + 17, col_fg);
583 txt_drawf_small("mode", x + 6, y, COL_FG); 588 txt_drawf_small("mode", x + 6, y, col_fg);
584 589
585 switch (params->wave_mode) { 590 switch (params->wave_mode) {
586 case 0: { txt_drawf("A", x + 12, y + 7, COL_FG); } break; 591 case 0: { txt_drawf("A", x + 12, y + 7, col_fg); } break;
587 case 1: { txt_drawf("B", x + 12, y + 7, COL_FG); } break; 592 case 1: { txt_drawf("B", x + 12, y + 7, col_fg); } break;
588 case 2: { txt_drawf("A+B", x + 6, y + 7, COL_FG); } break; 593 case 2: { txt_drawf("A+B", x + 6, y + 7, col_fg); } break;
589 } 594 }
590 } 595 }
591 596
@@ -593,26 +598,30 @@ draw_parameters_wave(ChannelWaveParams *params) {
593 { 598 {
594 size_t x = PARAMS_START_X + 140; 599 size_t x = PARAMS_START_X + 140;
595 size_t y = PARAMS_START_Y + PARAMS_H - 45; 600 size_t y = PARAMS_START_Y + PARAMS_H - 45;
596 draw_line(x, y + 7, x + 7, y + 7, COL_FG); 601 draw_line(x, y + 7, x + 7, y + 7, col_fg);
597 draw_line(x + 23, y + 7, x + 30, y + 7, COL_FG); 602 draw_line(x + 23, y + 7, x + 30, y + 7, col_fg);
598 draw_line(x, y + 8, x, y + 19, COL_FG); 603 draw_line(x, y + 8, x, y + 19, col_fg);
599 draw_line(x + 30, y + 8, x + 30, y + 19, COL_FG); 604 draw_line(x + 30, y + 8, x + 30, y + 19, col_fg);
600 draw_line(x, y + 20, x + 30, y + 20, COL_FG); 605 draw_line(x, y + 20, x + 30, y + 20, col_fg);
601 txt_drawf_small("vol", x + 8, y + 3, COL_FG); 606 txt_drawf_small("vol", x + 8, y + 3, col_fg);
602 607
603 switch (params->wave_volume) { 608 switch (params->wave_volume) {
604 case 0: { txt_drawf("0", x + 12, y + 10, COL_FG); } break; 609 case 0: { txt_drawf("0", x + 12, y + 10, col_fg); } break;
605 case 1: { txt_drawf("25", x + 9, y + 10, COL_FG); } break; 610 case 1: { txt_drawf("25", x + 9, y + 10, col_fg); } break;
606 case 2: { txt_drawf("50", x + 9, y + 10, COL_FG); } break; 611 case 2: { txt_drawf("50", x + 9, y + 10, col_fg); } break;
607 case 3: { txt_drawf("75", x + 9, y + 10, COL_FG); } break; 612 case 3: { txt_drawf("75", x + 9, y + 10, col_fg); } break;
608 case 4: { txt_drawf("100", x + 6, y + 10, COL_FG); } break; 613 case 4: { txt_drawf("100", x + 6, y + 10, col_fg); } break;
609 } 614 }
610 } 615 }
611} 616}
612 617
613void 618void
614draw_parameters_square(ChannelSquareParams *params, bool sweep) { 619draw_parameters_square(ChannelSquareParams *params, bool sweep, bool global) {
615 size_t x_offset = sweep ? 0 : 30; 620 size_t x_offset = sweep ? 0 : 30;
621 u8 col_fg = COL_FG;
622 if (global && input_handler == handle_channel_selection) {
623 col_fg = COL_GREY;
624 }
616 625
617 // Duty cycle. 626 // Duty cycle.
618 { 627 {
@@ -678,18 +687,18 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) {
678 { 687 {
679 size_t x = PARAMS_START_X + x_offset; 688 size_t x = PARAMS_START_X + x_offset;
680 size_t y = PARAMS_START_Y + PARAMS_H - 25; 689 size_t y = PARAMS_START_Y + PARAMS_H - 25;
681 draw_line(x, y + 7, x + 2, y + 7, COL_FG); 690 draw_line(x, y + 7, x + 2, y + 7, col_fg);
682 draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); 691 draw_line(x + 22, y + 7, x + 24, y + 7, col_fg);
683 draw_line(x, y + 8, x, y + 19, COL_FG); 692 draw_line(x, y + 8, x, y + 19, col_fg);
684 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 693 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
685 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 694 draw_line(x, y + 20, x + 24, y + 20, col_fg);
686 txt_drawf_small("duty", x + 3, y + 3, COL_FG); 695 txt_drawf_small("duty", x + 3, y + 3, col_fg);
687 696
688 switch (params->duty_cycle) { 697 switch (params->duty_cycle) {
689 case 0: { txt_drawf("12", x + 6, y + 10, COL_FG); } break; 698 case 0: { txt_drawf("12", x + 6, y + 10, col_fg); } break;
690 case 1: { txt_drawf("25", x + 6, y + 10, COL_FG); } break; 699 case 1: { txt_drawf("25", x + 6, y + 10, col_fg); } break;
691 case 2: { txt_drawf("50", x + 6, y + 10, COL_FG); } break; 700 case 2: { txt_drawf("50", x + 6, y + 10, col_fg); } break;
692 case 3: { txt_drawf("75", x + 6, y + 10, COL_FG); } break; 701 case 3: { txt_drawf("75", x + 6, y + 10, col_fg); } break;
693 } 702 }
694 } 703 }
695 } 704 }
@@ -729,30 +738,30 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) {
729 { 738 {
730 size_t x = PARAMS_START_X + 31 + x_offset; 739 size_t x = PARAMS_START_X + 31 + x_offset;
731 size_t y = PARAMS_START_Y + PARAMS_H - 25; 740 size_t y = PARAMS_START_Y + PARAMS_H - 25;
732 draw_line(x, y + 7, x + 4, y + 7, COL_FG); 741 draw_line(x, y + 7, x + 4, y + 7, col_fg);
733 draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); 742 draw_line(x + 20, y + 7, x + 24, y + 7, col_fg);
734 draw_line(x, y + 8, x, y + 19, COL_FG); 743 draw_line(x, y + 8, x, y + 19, col_fg);
735 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 744 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
736 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 745 draw_line(x, y + 20, x + 24, y + 20, col_fg);
737 txt_drawf_small("vol", x + 5, y + 3, COL_FG); 746 txt_drawf_small("vol", x + 5, y + 3, col_fg);
738 747
739 switch (params->env_volume) { 748 switch (params->env_volume) {
740 case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; 749 case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break;
741 case 1: { txt_drawf("6", x + 9, y + 10, COL_FG); } break; 750 case 1: { txt_drawf("6", x + 9, y + 10, col_fg); } break;
742 case 2: { txt_drawf("13", x + 6, y + 10, COL_FG); } break; 751 case 2: { txt_drawf("13", x + 6, y + 10, col_fg); } break;
743 case 3: { txt_drawf("20", x + 6, y + 10, COL_FG); } break; 752 case 3: { txt_drawf("20", x + 6, y + 10, col_fg); } break;
744 case 4: { txt_drawf("26", x + 6, y + 10, COL_FG); } break; 753 case 4: { txt_drawf("26", x + 6, y + 10, col_fg); } break;
745 case 5: { txt_drawf("33", x + 6, y + 10, COL_FG); } break; 754 case 5: { txt_drawf("33", x + 6, y + 10, col_fg); } break;
746 case 6: { txt_drawf("40", x + 6, y + 10, COL_FG); } break; 755 case 6: { txt_drawf("40", x + 6, y + 10, col_fg); } break;
747 case 7: { txt_drawf("46", x + 6, y + 10, COL_FG); } break; 756 case 7: { txt_drawf("46", x + 6, y + 10, col_fg); } break;
748 case 8: { txt_drawf("53", x + 6, y + 10, COL_FG); } break; 757 case 8: { txt_drawf("53", x + 6, y + 10, col_fg); } break;
749 case 9: { txt_drawf("60", x + 6, y + 10, COL_FG); } break; 758 case 9: { txt_drawf("60", x + 6, y + 10, col_fg); } break;
750 case 10: { txt_drawf("66", x + 6, y + 10, COL_FG); } break; 759 case 10: { txt_drawf("66", x + 6, y + 10, col_fg); } break;
751 case 11: { txt_drawf("73", x + 6, y + 10, COL_FG); } break; 760 case 11: { txt_drawf("73", x + 6, y + 10, col_fg); } break;
752 case 12: { txt_drawf("80", x + 6, y + 10, COL_FG); } break; 761 case 12: { txt_drawf("80", x + 6, y + 10, col_fg); } break;
753 case 13: { txt_drawf("86", x + 6, y + 10, COL_FG); } break; 762 case 13: { txt_drawf("86", x + 6, y + 10, col_fg); } break;
754 case 14: { txt_drawf("93", x + 6, y + 10, COL_FG); } break; 763 case 14: { txt_drawf("93", x + 6, y + 10, col_fg); } break;
755 case 15: { txt_drawf("100", x + 3, y + 10, COL_FG); } break; 764 case 15: { txt_drawf("100", x + 3, y + 10, col_fg); } break;
756 } 765 }
757 } 766 }
758 767
@@ -760,18 +769,18 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) {
760 { 769 {
761 size_t x = PARAMS_START_X + 59 + x_offset; 770 size_t x = PARAMS_START_X + 59 + x_offset;
762 size_t y = PARAMS_START_Y + PARAMS_H - 25; 771 size_t y = PARAMS_START_Y + PARAMS_H - 25;
763 draw_line(x, y + 7, x + 4, y + 7, COL_FG); 772 draw_line(x, y + 7, x + 4, y + 7, col_fg);
764 draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); 773 draw_line(x + 20, y + 7, x + 24, y + 7, col_fg);
765 draw_line(x, y + 8, x, y + 19, COL_FG); 774 draw_line(x, y + 8, x, y + 19, col_fg);
766 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 775 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
767 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 776 draw_line(x, y + 20, x + 24, y + 20, col_fg);
768 txt_drawf_small("dir", x + 5, y + 3, COL_FG); 777 txt_drawf_small("dir", x + 5, y + 3, col_fg);
769 778
770 char arr_up[2] = { 0x19, 0 }; 779 char arr_up[2] = { 0x19, 0 };
771 char arr_down[2] = { 0x18, 0 }; 780 char arr_down[2] = { 0x18, 0 };
772 switch (params->env_direction) { 781 switch (params->env_direction) {
773 case 0: { txt_drawf(arr_up, x + 9, y + 11, COL_FG); } break; 782 case 0: { txt_drawf(arr_up, x + 9, y + 11, col_fg); } break;
774 case 1: { txt_drawf(arr_down, x + 9, y + 11, COL_FG); } break; 783 case 1: { txt_drawf(arr_down, x + 9, y + 11, col_fg); } break;
775 } 784 }
776 } 785 }
777 786
@@ -779,22 +788,22 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) {
779 { 788 {
780 size_t x = PARAMS_START_X + 87 + x_offset; 789 size_t x = PARAMS_START_X + 87 + x_offset;
781 size_t y = PARAMS_START_Y + PARAMS_H - 25; 790 size_t y = PARAMS_START_Y + PARAMS_H - 25;
782 draw_line(x, y + 7, x + 2, y + 7, COL_FG); 791 draw_line(x, y + 7, x + 2, y + 7, col_fg);
783 draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); 792 draw_line(x + 22, y + 7, x + 24, y + 7, col_fg);
784 draw_line(x, y + 8, x, y + 19, COL_FG); 793 draw_line(x, y + 8, x, y + 19, col_fg);
785 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 794 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
786 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 795 draw_line(x, y + 20, x + 24, y + 20, col_fg);
787 txt_drawf_small("time", x + 3, y + 3, COL_FG); 796 txt_drawf_small("time", x + 3, y + 3, col_fg);
788 797
789 switch (params->env_time) { 798 switch (params->env_time) {
790 case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; 799 case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break;
791 case 1: { txt_drawf("14", x + 6, y + 10, COL_FG); } break; 800 case 1: { txt_drawf("14", x + 6, y + 10, col_fg); } break;
792 case 2: { txt_drawf("28", x + 6, y + 10, COL_FG); } break; 801 case 2: { txt_drawf("28", x + 6, y + 10, col_fg); } break;
793 case 3: { txt_drawf("42", x + 6, y + 10, COL_FG); } break; 802 case 3: { txt_drawf("42", x + 6, y + 10, col_fg); } break;
794 case 4: { txt_drawf("57", x + 6, y + 10, COL_FG); } break; 803 case 4: { txt_drawf("57", x + 6, y + 10, col_fg); } break;
795 case 5: { txt_drawf("71", x + 6, y + 10, COL_FG); } break; 804 case 5: { txt_drawf("71", x + 6, y + 10, col_fg); } break;
796 case 6: { txt_drawf("85", x + 6, y + 10, COL_FG); } break; 805 case 6: { txt_drawf("85", x + 6, y + 10, col_fg); } break;
797 case 7: { txt_drawf("100", x + 3, y + 10, COL_FG); } break; 806 case 7: { txt_drawf("100", x + 3, y + 10, col_fg); } break;
798 } 807 }
799 } 808 }
800 } 809 }
@@ -803,22 +812,22 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) {
803 if (sweep) { 812 if (sweep) {
804 size_t x = PARAMS_START_X + 118; 813 size_t x = PARAMS_START_X + 118;
805 size_t y = PARAMS_START_Y + PARAMS_H - 25; 814 size_t y = PARAMS_START_Y + PARAMS_H - 25;
806 draw_line(x, y + 7, x + 4, y + 7, COL_FG); 815 draw_line(x, y + 7, x + 4, y + 7, col_fg);
807 draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); 816 draw_line(x + 20, y + 7, x + 24, y + 7, col_fg);
808 draw_line(x, y + 8, x, y + 19, COL_FG); 817 draw_line(x, y + 8, x, y + 19, col_fg);
809 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 818 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
810 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 819 draw_line(x, y + 20, x + 24, y + 20, col_fg);
811 txt_drawf_small("num", x + 5, y + 3, COL_FG); 820 txt_drawf_small("num", x + 5, y + 3, col_fg);
812 821
813 switch (params->sweep_number) { 822 switch (params->sweep_number) {
814 case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; 823 case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break;
815 case 1: { txt_drawf("1", x + 9, y + 10, COL_FG); } break; 824 case 1: { txt_drawf("1", x + 9, y + 10, col_fg); } break;
816 case 2: { txt_drawf("2", x + 9, y + 10, COL_FG); } break; 825 case 2: { txt_drawf("2", x + 9, y + 10, col_fg); } break;
817 case 3: { txt_drawf("3", x + 9, y + 10, COL_FG); } break; 826 case 3: { txt_drawf("3", x + 9, y + 10, col_fg); } break;
818 case 4: { txt_drawf("4", x + 9, y + 10, COL_FG); } break; 827 case 4: { txt_drawf("4", x + 9, y + 10, col_fg); } break;
819 case 5: { txt_drawf("5", x + 9, y + 10, COL_FG); } break; 828 case 5: { txt_drawf("5", x + 9, y + 10, col_fg); } break;
820 case 6: { txt_drawf("6", x + 9, y + 10, COL_FG); } break; 829 case 6: { txt_drawf("6", x + 9, y + 10, col_fg); } break;
821 case 7: { txt_drawf("7", x + 9, y + 10, COL_FG); } break; 830 case 7: { txt_drawf("7", x + 9, y + 10, col_fg); } break;
822 } 831 }
823 } 832 }
824 833
@@ -826,22 +835,22 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) {
826 if (sweep) { 835 if (sweep) {
827 size_t x = PARAMS_START_X + 146; 836 size_t x = PARAMS_START_X + 146;
828 size_t y = PARAMS_START_Y + PARAMS_H - 25; 837 size_t y = PARAMS_START_Y + PARAMS_H - 25;
829 draw_line(x, y + 7, x + 2, y + 7, COL_FG); 838 draw_line(x, y + 7, x + 2, y + 7, col_fg);
830 draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); 839 draw_line(x + 22, y + 7, x + 24, y + 7, col_fg);
831 draw_line(x, y + 8, x, y + 19, COL_FG); 840 draw_line(x, y + 8, x, y + 19, col_fg);
832 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 841 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
833 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 842 draw_line(x, y + 20, x + 24, y + 20, col_fg);
834 txt_drawf_small("time", x + 3, y + 3, COL_FG); 843 txt_drawf_small("time", x + 3, y + 3, col_fg);
835 844
836 switch (params->sweep_time) { 845 switch (params->sweep_time) {
837 case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; 846 case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break;
838 case 1: { txt_drawf("1", x + 9, y + 10, COL_FG); } break; 847 case 1: { txt_drawf("1", x + 9, y + 10, col_fg); } break;
839 case 2: { txt_drawf("2", x + 9, y + 10, COL_FG); } break; 848 case 2: { txt_drawf("2", x + 9, y + 10, col_fg); } break;
840 case 3: { txt_drawf("3", x + 9, y + 10, COL_FG); } break; 849 case 3: { txt_drawf("3", x + 9, y + 10, col_fg); } break;
841 case 4: { txt_drawf("4", x + 9, y + 10, COL_FG); } break; 850 case 4: { txt_drawf("4", x + 9, y + 10, col_fg); } break;
842 case 5: { txt_drawf("5", x + 9, y + 10, COL_FG); } break; 851 case 5: { txt_drawf("5", x + 9, y + 10, col_fg); } break;
843 case 6: { txt_drawf("6", x + 9, y + 10, COL_FG); } break; 852 case 6: { txt_drawf("6", x + 9, y + 10, col_fg); } break;
844 case 7: { txt_drawf("7", x + 9, y + 10, COL_FG); } break; 853 case 7: { txt_drawf("7", x + 9, y + 10, col_fg); } break;
845 } 854 }
846 } 855 }
847 856
@@ -849,18 +858,18 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) {
849 if (sweep) { 858 if (sweep) {
850 size_t x = PARAMS_START_X + 132; 859 size_t x = PARAMS_START_X + 132;
851 size_t y = PARAMS_START_Y + PARAMS_H - 45; 860 size_t y = PARAMS_START_Y + PARAMS_H - 45;
852 draw_line(x, y + 7, x + 4, y + 7, COL_FG); 861 draw_line(x, y + 7, x + 4, y + 7, col_fg);
853 draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); 862 draw_line(x + 20, y + 7, x + 24, y + 7, col_fg);
854 draw_line(x, y + 8, x, y + 19, COL_FG); 863 draw_line(x, y + 8, x, y + 19, col_fg);
855 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 864 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
856 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 865 draw_line(x, y + 20, x + 24, y + 20, col_fg);
857 txt_drawf_small("dir", x + 5, y + 3, COL_FG); 866 txt_drawf_small("dir", x + 5, y + 3, col_fg);
858 867
859 char arr_up[2] = { 0x19, 0 }; 868 char arr_up[2] = { 0x19, 0 };
860 char arr_down[2] = { 0x18, 0 }; 869 char arr_down[2] = { 0x18, 0 };
861 switch (params->sweep_direction) { 870 switch (params->sweep_direction) {
862 case 0: { txt_drawf(arr_up, x + 9, y + 11, COL_FG); } break; 871 case 0: { txt_drawf(arr_up, x + 9, y + 11, col_fg); } break;
863 case 1: { txt_drawf(arr_down, x + 9, y + 11, COL_FG); } break; 872 case 1: { txt_drawf(arr_down, x + 9, y + 11, col_fg); } break;
864 } 873 }
865 } 874 }
866 875
@@ -868,17 +877,21 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) {
868 { 877 {
869 size_t x = PARAMS_START_X + x_offset; 878 size_t x = PARAMS_START_X + x_offset;
870 size_t y = PARAMS_START_Y + PARAMS_H - 45; 879 size_t y = PARAMS_START_Y + PARAMS_H - 45;
871 txt_drawf_small("shape", x + 1, y - 12, COL_FG); 880 txt_drawf_small("shape", x + 1, y - 12, col_fg);
872 txt_drawf_small("envelope", x + 54, y - 12, COL_FG); 881 txt_drawf_small("envelope", x + 54, y - 12, col_fg);
873 if (sweep) { 882 if (sweep) {
874 txt_drawf_small("sweep", x + 133, y - 12, COL_FG); 883 txt_drawf_small("sweep", x + 133, y - 12, col_fg);
875 } 884 }
876 } 885 }
877} 886}
878 887
879void 888void
880draw_parameters_noise(ChannelNoiseParams* params) { 889draw_parameters_noise(ChannelNoiseParams* params, bool global) {
881 size_t x_offset = 30; 890 size_t x_offset = 30;
891 u8 col_fg = COL_FG;
892 if (global && input_handler == handle_channel_selection) {
893 col_fg = COL_GREY;
894 }
882 895
883 // Bit mode. 896 // Bit mode.
884 { 897 {
@@ -886,16 +899,16 @@ draw_parameters_noise(ChannelNoiseParams* params) {
886 { 899 {
887 size_t x = PARAMS_START_X + x_offset; 900 size_t x = PARAMS_START_X + x_offset;
888 size_t y = PARAMS_START_Y + PARAMS_H - 25; 901 size_t y = PARAMS_START_Y + PARAMS_H - 25;
889 draw_line(x, y + 7, x + 2, y + 7, COL_FG); 902 draw_line(x, y + 7, x + 2, y + 7, col_fg);
890 draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); 903 draw_line(x + 22, y + 7, x + 24, y + 7, col_fg);
891 draw_line(x, y + 8, x, y + 19, COL_FG); 904 draw_line(x, y + 8, x, y + 19, col_fg);
892 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 905 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
893 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 906 draw_line(x, y + 20, x + 24, y + 20, col_fg);
894 txt_drawf_small("mode", x + 3, y + 3, COL_FG); 907 txt_drawf_small("mode", x + 3, y + 3, col_fg);
895 908
896 switch (params->bit_mode) { 909 switch (params->bit_mode) {
897 case 0: { txt_drawf("A", x + 9, y + 10, COL_FG); } break; 910 case 0: { txt_drawf("A", x + 9, y + 10, col_fg); } break;
898 case 1: { txt_drawf("B", x + 9, y + 10, COL_FG); } break; 911 case 1: { txt_drawf("B", x + 9, y + 10, col_fg); } break;
899 } 912 }
900 } 913 }
901 } 914 }
@@ -935,30 +948,30 @@ draw_parameters_noise(ChannelNoiseParams* params) {
935 { 948 {
936 size_t x = PARAMS_START_X + 31 + x_offset; 949 size_t x = PARAMS_START_X + 31 + x_offset;
937 size_t y = PARAMS_START_Y + PARAMS_H - 25; 950 size_t y = PARAMS_START_Y + PARAMS_H - 25;
938 draw_line(x, y + 7, x + 4, y + 7, COL_FG); 951 draw_line(x, y + 7, x + 4, y + 7, col_fg);
939 draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); 952 draw_line(x + 20, y + 7, x + 24, y + 7, col_fg);
940 draw_line(x, y + 8, x, y + 19, COL_FG); 953 draw_line(x, y + 8, x, y + 19, col_fg);
941 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 954 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
942 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 955 draw_line(x, y + 20, x + 24, y + 20, col_fg);
943 txt_drawf_small("vol", x + 5, y + 3, COL_FG); 956 txt_drawf_small("vol", x + 5, y + 3, col_fg);
944 957
945 switch (params->env_volume) { 958 switch (params->env_volume) {
946 case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; 959 case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break;
947 case 1: { txt_drawf("6", x + 9, y + 10, COL_FG); } break; 960 case 1: { txt_drawf("6", x + 9, y + 10, col_fg); } break;
948 case 2: { txt_drawf("13", x + 6, y + 10, COL_FG); } break; 961 case 2: { txt_drawf("13", x + 6, y + 10, col_fg); } break;
949 case 3: { txt_drawf("20", x + 6, y + 10, COL_FG); } break; 962 case 3: { txt_drawf("20", x + 6, y + 10, col_fg); } break;
950 case 4: { txt_drawf("26", x + 6, y + 10, COL_FG); } break; 963 case 4: { txt_drawf("26", x + 6, y + 10, col_fg); } break;
951 case 5: { txt_drawf("33", x + 6, y + 10, COL_FG); } break; 964 case 5: { txt_drawf("33", x + 6, y + 10, col_fg); } break;
952 case 6: { txt_drawf("40", x + 6, y + 10, COL_FG); } break; 965 case 6: { txt_drawf("40", x + 6, y + 10, col_fg); } break;
953 case 7: { txt_drawf("46", x + 6, y + 10, COL_FG); } break; 966 case 7: { txt_drawf("46", x + 6, y + 10, col_fg); } break;
954 case 8: { txt_drawf("53", x + 6, y + 10, COL_FG); } break; 967 case 8: { txt_drawf("53", x + 6, y + 10, col_fg); } break;
955 case 9: { txt_drawf("60", x + 6, y + 10, COL_FG); } break; 968 case 9: { txt_drawf("60", x + 6, y + 10, col_fg); } break;
956 case 10: { txt_drawf("66", x + 6, y + 10, COL_FG); } break; 969 case 10: { txt_drawf("66", x + 6, y + 10, col_fg); } break;
957 case 11: { txt_drawf("73", x + 6, y + 10, COL_FG); } break; 970 case 11: { txt_drawf("73", x + 6, y + 10, col_fg); } break;
958 case 12: { txt_drawf("80", x + 6, y + 10, COL_FG); } break; 971 case 12: { txt_drawf("80", x + 6, y + 10, col_fg); } break;
959 case 13: { txt_drawf("86", x + 6, y + 10, COL_FG); } break; 972 case 13: { txt_drawf("86", x + 6, y + 10, col_fg); } break;
960 case 14: { txt_drawf("93", x + 6, y + 10, COL_FG); } break; 973 case 14: { txt_drawf("93", x + 6, y + 10, col_fg); } break;
961 case 15: { txt_drawf("100", x + 3, y + 10, COL_FG); } break; 974 case 15: { txt_drawf("100", x + 3, y + 10, col_fg); } break;
962 } 975 }
963 } 976 }
964 977
@@ -966,21 +979,21 @@ draw_parameters_noise(ChannelNoiseParams* params) {
966 { 979 {
967 size_t x = PARAMS_START_X + 59 + x_offset; 980 size_t x = PARAMS_START_X + 59 + x_offset;
968 size_t y = PARAMS_START_Y + PARAMS_H - 25; 981 size_t y = PARAMS_START_Y + PARAMS_H - 25;
969 draw_line(x, y + 7, x + 4, y + 7, COL_FG); 982 draw_line(x, y + 7, x + 4, y + 7, col_fg);
970 draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); 983 draw_line(x + 20, y + 7, x + 24, y + 7, col_fg);
971 draw_line(x, y + 8, x, y + 19, COL_FG); 984 draw_line(x, y + 8, x, y + 19, col_fg);
972 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 985 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
973 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 986 draw_line(x, y + 20, x + 24, y + 20, col_fg);
974 txt_drawf_small("dir", x + 5, y + 3, COL_FG); 987 txt_drawf_small("dir", x + 5, y + 3, col_fg);
975 988
976 char arr_up[2] = { 0x19, 0 }; 989 char arr_up[2] = { 0x19, 0 };
977 char arr_down[2] = { 0x18, 0 }; 990 char arr_down[2] = { 0x18, 0 };
978 switch (params->env_direction) { 991 switch (params->env_direction) {
979 case 0: { 992 case 0: {
980 txt_drawf(arr_up, x + 9, y + 11, COL_FG); 993 txt_drawf(arr_up, x + 9, y + 11, col_fg);
981 } break; 994 } break;
982 case 1: { 995 case 1: {
983 txt_drawf(arr_down, x + 9, y + 11, COL_FG); 996 txt_drawf(arr_down, x + 9, y + 11, col_fg);
984 } break; 997 } break;
985 } 998 }
986 } 999 }
@@ -989,22 +1002,22 @@ draw_parameters_noise(ChannelNoiseParams* params) {
989 { 1002 {
990 size_t x = PARAMS_START_X + 87 + x_offset; 1003 size_t x = PARAMS_START_X + 87 + x_offset;
991 size_t y = PARAMS_START_Y + PARAMS_H - 25; 1004 size_t y = PARAMS_START_Y + PARAMS_H - 25;
992 draw_line(x, y + 7, x + 2, y + 7, COL_FG); 1005 draw_line(x, y + 7, x + 2, y + 7, col_fg);
993 draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); 1006 draw_line(x + 22, y + 7, x + 24, y + 7, col_fg);
994 draw_line(x, y + 8, x, y + 19, COL_FG); 1007 draw_line(x, y + 8, x, y + 19, col_fg);
995 draw_line(x + 24, y + 8, x + 24, y + 19, COL_FG); 1008 draw_line(x + 24, y + 8, x + 24, y + 19, col_fg);
996 draw_line(x, y + 20, x + 24, y + 20, COL_FG); 1009 draw_line(x, y + 20, x + 24, y + 20, col_fg);
997 txt_drawf_small("time", x + 3, y + 3, COL_FG); 1010 txt_drawf_small("time", x + 3, y + 3, col_fg);
998 1011
999 switch (params->env_time) { 1012 switch (params->env_time) {
1000 case 0: { txt_drawf("0", x + 9, y + 10, COL_FG); } break; 1013 case 0: { txt_drawf("0", x + 9, y + 10, col_fg); } break;
1001 case 1: { txt_drawf("14", x + 6, y + 10, COL_FG); } break; 1014 case 1: { txt_drawf("14", x + 6, y + 10, col_fg); } break;
1002 case 2: { txt_drawf("28", x + 6, y + 10, COL_FG); } break; 1015 case 2: { txt_drawf("28", x + 6, y + 10, col_fg); } break;
1003 case 3: { txt_drawf("42", x + 6, y + 10, COL_FG); } break; 1016 case 3: { txt_drawf("42", x + 6, y + 10, col_fg); } break;
1004 case 4: { txt_drawf("57", x + 6, y + 10, COL_FG); } break; 1017 case 4: { txt_drawf("57", x + 6, y + 10, col_fg); } break;
1005 case 5: { txt_drawf("71", x + 6, y + 10, COL_FG); } break; 1018 case 5: { txt_drawf("71", x + 6, y + 10, col_fg); } break;
1006 case 6: { txt_drawf("85", x + 6, y + 10, COL_FG); } break; 1019 case 6: { txt_drawf("85", x + 6, y + 10, col_fg); } break;
1007 case 7: { txt_drawf("100", x + 3, y + 10, COL_FG); } break; 1020 case 7: { txt_drawf("100", x + 3, y + 10, col_fg); } break;
1008 } 1021 }
1009 } 1022 }
1010 } 1023 }
@@ -1013,7 +1026,7 @@ draw_parameters_noise(ChannelNoiseParams* params) {
1013 { 1026 {
1014 size_t x = PARAMS_START_X + x_offset; 1027 size_t x = PARAMS_START_X + x_offset;
1015 size_t y = PARAMS_START_Y + PARAMS_H - 45; 1028 size_t y = PARAMS_START_Y + PARAMS_H - 45;
1016 txt_drawf_small("envelope", x + 54, y - 12, COL_FG); 1029 txt_drawf_small("envelope", x + 54, y - 12, col_fg);
1017 } 1030 }
1018} 1031}
1019 1032
@@ -1027,10 +1040,10 @@ draw_parameters(void) {
1027 input_handler == handle_param_selection_wave || 1040 input_handler == handle_param_selection_wave ||
1028 input_handler == handle_param_selection_noise) { 1041 input_handler == handle_param_selection_noise) {
1029 switch (channel_selection_loc) { 1042 switch (channel_selection_loc) {
1030 case 0: { draw_parameters_square(&pat->ch1.params[trig_selection_loc], true); } break; 1043 case 0: { draw_parameters_square(&pat->ch1.params[trig_selection_loc], true, false); } break;
1031 case 1: { draw_parameters_square(&pat->ch2.params[trig_selection_loc], false); } break; 1044 case 1: { draw_parameters_square(&pat->ch2.params[trig_selection_loc], false, false); } break;
1032 case 2: { draw_parameters_wave(&pat->ch3.params[trig_selection_loc]); } break; 1045 case 2: { draw_parameters_wave(&pat->ch3.params[trig_selection_loc], false); } break;
1033 case 3: { draw_parameters_noise(&pat->ch4.params[trig_selection_loc]); } break; 1046 case 3: { draw_parameters_noise(&pat->ch4.params[trig_selection_loc], false); } break;
1034 } 1047 }
1035 return; 1048 return;
1036 } 1049 }
@@ -1040,10 +1053,10 @@ draw_parameters(void) {
1040 input_handler == handle_param_selection_ch3 || 1053 input_handler == handle_param_selection_ch3 ||
1041 input_handler == handle_param_selection_ch4) { 1054 input_handler == handle_param_selection_ch4) {
1042 switch (channel_selection_loc) { 1055 switch (channel_selection_loc) {
1043 case 0: { draw_parameters_square(&ch1_params, true); } break; 1056 case 0: { draw_parameters_square(&ch1_params, true, true); } break;
1044 case 1: { draw_parameters_square(&ch2_params, false); } break; 1057 case 1: { draw_parameters_square(&ch2_params, false, true); } break;
1045 case 2: { draw_parameters_wave(&ch3_params); } break; 1058 case 2: { draw_parameters_wave(&ch3_params, true); } break;
1046 case 3: { draw_parameters_noise(&ch4_params); } break; 1059 case 3: { draw_parameters_noise(&ch4_params, true); } break;
1047 } 1060 }
1048 return; 1061 return;
1049 } 1062 }
diff --git a/src/main.c b/src/main.c
index 3a1c1d7..2693d51 100644
--- a/src/main.c
+++ b/src/main.c
@@ -26,7 +26,7 @@ WITH REGARD TO THIS SOFTWARE.
26// + Per channel sound adjustments that modify the sound in all trigs. 26// + Per channel sound adjustments that modify the sound in all trigs.
27// + Basic support. 27// + Basic support.
28// + Allow pasting parameters if they have been copied. 28// + Allow pasting parameters if they have been copied.
29// - Draw the global params in grey if they haven't been adjusted or aren't 29// + Draw the global params in grey if they haven't been adjusted or aren't
30// currently selected. 30// currently selected.
31// + Draw missing cursor. 31// + Draw missing cursor.
32// + Per-octave note adjustment with Select + L/R on a trig. 32// + Per-octave note adjustment with Select + L/R on a trig.
@@ -39,6 +39,12 @@ WITH REGARD TO THIS SOFTWARE.
39// - Sync via MIDI via arduinoboy or something similar. 39// - Sync via MIDI via arduinoboy or something similar.
40// - Sync via CV by using the link cable. 40// - Sync via CV by using the link cable.
41// 41//
42// Bugfixes
43// - Sound can get hung up sometimes, but I can't reproduce when this happens.
44// Not sure if this is an emulator thing or happens also in hardware.
45// - Cursor can stay in position instead of dissapering, again I can't
46// reproduce this right now, just happened randomly. Needs investigation.
47//
42// FIXME: Update readme and project pages with control changes. 48// FIXME: Update readme and project pages with control changes.
43 49
44#include "gba/gba.h" 50#include "gba/gba.h"