aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-02-01 19:09:51 +0100
committerBad Diode <bd@badd10de.dev>2024-02-01 19:09:51 +0100
commit8cc0da2ca7ba0cb3e44deea8eb031a36d96f7c72 (patch)
tree5ab6a644ee8654d5ea9a1c4139c9c613e921b061
parente475e43918fc200fea3951093223273ee2fb3761 (diff)
downloadstepper-8cc0da2ca7ba0cb3e44deea8eb031a36d96f7c72.tar.gz
stepper-8cc0da2ca7ba0cb3e44deea8eb031a36d96f7c72.zip
Fix some issues with sync and added more modes
-rw-r--r--src/drawing.c4
-rw-r--r--src/profiling.c4
-rw-r--r--src/sequencer.c34
-rw-r--r--src/settings.c8
-rw-r--r--src/settings.h6
5 files changed, 38 insertions, 18 deletions
diff --git a/src/drawing.c b/src/drawing.c
index 3f646a6..18ee3b9 100644
--- a/src/drawing.c
+++ b/src/drawing.c
@@ -908,9 +908,11 @@ draw_panning(s8 pan, u8 clr) {
908 case SYNC_OUT_AUDIO_12BPQ: 908 case SYNC_OUT_AUDIO_12BPQ:
909 case SYNC_OUT_AUDIO_6BPQ: 909 case SYNC_OUT_AUDIO_6BPQ:
910 case SYNC_OUT_AUDIO_4BPQ: 910 case SYNC_OUT_AUDIO_4BPQ:
911 case SYNC_OUT_AUDIO_2BPQ:
911 case SYNC_OUT_LINK_AUDIO_12BPQ: 912 case SYNC_OUT_LINK_AUDIO_12BPQ:
912 case SYNC_OUT_LINK_AUDIO_6BPQ: 913 case SYNC_OUT_LINK_AUDIO_6BPQ:
913 case SYNC_OUT_LINK_AUDIO_4BPQ: { clr = COL_OFF; } break; 914 case SYNC_OUT_LINK_AUDIO_4BPQ:
915 case SYNC_OUT_LINK_AUDIO_2BPQ: { clr = COL_OFF; } break;
914 default: break; 916 default: break;
915 } 917 }
916 size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; 918 size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3;
diff --git a/src/profiling.c b/src/profiling.c
index 713e2b3..cc58694 100644
--- a/src/profiling.c
+++ b/src/profiling.c
@@ -139,9 +139,7 @@ u8 prof_detail_level = 2;
139// No profiling. 139// No profiling.
140#define PROF_INIT() 140#define PROF_INIT()
141#define PROF(F,VAR) do {F;} while(0) 141#define PROF(F,VAR) do {F;} while(0)
142#define FRAME_START() do { \ 142#define FRAME_START()
143 profile_start();\
144} while(0)
145#define FRAME_END() 143#define FRAME_END()
146#define PROF_SHOW() 144#define PROF_SHOW()
147#define PROF_DETAIL(N) 145#define PROF_DETAIL(N)
diff --git a/src/sequencer.c b/src/sequencer.c
index a72eced..56146c5 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -38,6 +38,7 @@ gate_off(void) {
38 38
39void 39void
40gate_on(void) { 40gate_on(void) {
41 gate_off();
41 SIO_MODE = SIO_MODE_GP 42 SIO_MODE = SIO_MODE_GP
42 | SIO_SC_OUT(1) 43 | SIO_SC_OUT(1)
43 | SIO_SD_OUT(1) 44 | SIO_SD_OUT(1)
@@ -311,9 +312,11 @@ play_step(void) {
311 case SYNC_OUT_AUDIO_12BPQ: 312 case SYNC_OUT_AUDIO_12BPQ:
312 case SYNC_OUT_AUDIO_6BPQ: 313 case SYNC_OUT_AUDIO_6BPQ:
313 case SYNC_OUT_AUDIO_4BPQ: 314 case SYNC_OUT_AUDIO_4BPQ:
315 case SYNC_OUT_AUDIO_2BPQ:
314 case SYNC_OUT_LINK_AUDIO_12BPQ: 316 case SYNC_OUT_LINK_AUDIO_12BPQ:
315 case SYNC_OUT_LINK_AUDIO_6BPQ: 317 case SYNC_OUT_LINK_AUDIO_6BPQ:
316 case SYNC_OUT_LINK_AUDIO_4BPQ: break; 318 case SYNC_OUT_LINK_AUDIO_4BPQ:
319 case SYNC_OUT_LINK_AUDIO_2BPQ: break;
317 default: { 320 default: {
318 SOUND_DMG_MASTER = dmg_stereo_vol(3) 321 SOUND_DMG_MASTER = dmg_stereo_vol(3)
319 | channel_vol(SOUND_SQUARE1, pan[0]) 322 | channel_vol(SOUND_SQUARE1, pan[0])
@@ -474,22 +477,26 @@ void
474sequencer_tick(void) { 477sequencer_tick(void) {
475 switch (settings.sync) { 478 switch (settings.sync) {
476 case SYNC_OUT_LINK_96BPQ: { gate_on(); } break; 479 case SYNC_OUT_LINK_96BPQ: { gate_on(); } break;
477 case SYNC_OUT_LINK_48BPQ: { if (nseq_ticks % 2 == 0) { gate_on(); } } break; 480 case SYNC_OUT_LINK_48BPQ: { if (sync_ticks++ % 2 == 0) { gate_on(); } } break;
478 case SYNC_OUT_LINK_24BPQ: { if (nseq_ticks % 4 == 0) { gate_on(); } } break; 481 case SYNC_OUT_LINK_24BPQ: { if (sync_ticks++ % 4 == 0) { gate_on(); } } break;
479 case SYNC_OUT_LINK_12BPQ: { if (nseq_ticks % 8 == 0) { gate_on(); } } break; 482 case SYNC_OUT_LINK_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); } } break;
480 case SYNC_OUT_LINK_6BPQ: { if (nseq_ticks % 16 == 0) { gate_on(); } } break; 483 case SYNC_OUT_LINK_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); } } break;
481 case SYNC_OUT_LINK_4BPQ: { if (nseq_ticks % 24 == 0) { gate_on(); } } break; 484 case SYNC_OUT_LINK_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); } } break;
482 case SYNC_OUT_AUDIO_12BPQ: { if (nseq_ticks % 8 == 0) { audio_sync_click = true; } } break; 485 case SYNC_OUT_LINK_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); } } break;
483 case SYNC_OUT_AUDIO_6BPQ: { if (nseq_ticks % 16 == 0) { audio_sync_click = true; } } break; 486 case SYNC_OUT_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { audio_sync_click = true; } } break;
484 case SYNC_OUT_AUDIO_4BPQ: { if (nseq_ticks % 24 == 0) { audio_sync_click = true; } } break; 487 case SYNC_OUT_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { audio_sync_click = true; } } break;
485 case SYNC_OUT_LINK_AUDIO_12BPQ: { if (nseq_ticks % 8 == 0) { gate_on(); audio_sync_click = true; } } break; 488 case SYNC_OUT_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { audio_sync_click = true; } } break;
486 case SYNC_OUT_LINK_AUDIO_6BPQ: { if (nseq_ticks % 16 == 0) { audio_sync_click = true; } } break; 489 case SYNC_OUT_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { audio_sync_click = true; } } break;
487 case SYNC_OUT_LINK_AUDIO_4BPQ: { if (nseq_ticks % 24 == 0) { gate_on(); audio_sync_click = true; } } break; 490 case SYNC_OUT_LINK_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); audio_sync_click = true; } } break;
491 case SYNC_OUT_LINK_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); audio_sync_click = true; } } break;
492 case SYNC_OUT_LINK_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); audio_sync_click = true; } } break;
493 case SYNC_OUT_LINK_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); audio_sync_click = true; } } break;
488 default: break; 494 default: break;
489 } 495 }
490 if (nseq_ticks++ == 0) { 496 if (nseq_ticks++ == 0) {
491 play_step(); 497 play_step();
492 } else if (nseq_ticks == 24) { 498 }
499 if (nseq_ticks == 24) {
493 nseq_ticks = 0; 500 nseq_ticks = 0;
494 } 501 }
495 wave_ad_tick(); 502 wave_ad_tick();
@@ -679,6 +686,7 @@ void
679reset_sequencer(void) { 686reset_sequencer(void) {
680 step_counter = 0; 687 step_counter = 0;
681 nseq_ticks = 0; 688 nseq_ticks = 0;
689 sync_ticks = 0;
682 chain.current = 15; 690 chain.current = 15;
683 chain.current = find_next_pattern(); 691 chain.current = find_next_pattern();
684 chain.playing = false; 692 chain.playing = false;
diff --git a/src/settings.c b/src/settings.c
index 48cc3e7..8b4c3b1 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -14,9 +14,12 @@ void sync_in_24(void);
14void sync_in_12(void); 14void sync_in_12(void);
15void sync_in_6(void); 15void sync_in_6(void);
16void sync_in_4(void); 16void sync_in_4(void);
17void reset_sequencer(void);
17void toggle_playing(void); 18void toggle_playing(void);
18void stop_playing(void); 19void stop_playing(void);
19 20
21static int sync_ticks = 0;
22
20void 23void
21set_audio_settings(void) { 24set_audio_settings(void) {
22 if (settings.sync == SYNC_IN_LINK_96BPQ || 25 if (settings.sync == SYNC_IN_LINK_96BPQ ||
@@ -48,9 +51,11 @@ set_audio_settings(void) {
48 case SYNC_OUT_AUDIO_12BPQ: 51 case SYNC_OUT_AUDIO_12BPQ:
49 case SYNC_OUT_AUDIO_6BPQ: 52 case SYNC_OUT_AUDIO_6BPQ:
50 case SYNC_OUT_AUDIO_4BPQ: 53 case SYNC_OUT_AUDIO_4BPQ:
54 case SYNC_OUT_AUDIO_2BPQ:
51 case SYNC_OUT_LINK_AUDIO_12BPQ: 55 case SYNC_OUT_LINK_AUDIO_12BPQ:
52 case SYNC_OUT_LINK_AUDIO_6BPQ: 56 case SYNC_OUT_LINK_AUDIO_6BPQ:
53 case SYNC_OUT_LINK_AUDIO_4BPQ: { 57 case SYNC_OUT_LINK_AUDIO_4BPQ:
58 case SYNC_OUT_LINK_AUDIO_2BPQ: {
54 SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 59 SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1
55 | SOUND_SQUARE2 60 | SOUND_SQUARE2
56 | SOUND_WAVE 61 | SOUND_WAVE
@@ -205,6 +210,7 @@ handle_settings_input(void) {
205 next_scene = SCENE_SEQUENCER; 210 next_scene = SCENE_SEQUENCER;
206 } 211 }
207 if (key_tap(KEY_START)) { 212 if (key_tap(KEY_START)) {
213 reset_sequencer();
208 toggle_playing(); 214 toggle_playing();
209 } 215 }
210} 216}
diff --git a/src/settings.h b/src/settings.h
index 916f1be..bbfdfd2 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -19,12 +19,15 @@ typedef enum SyncSetting {
19 SYNC_OUT_LINK_12BPQ, 19 SYNC_OUT_LINK_12BPQ,
20 SYNC_OUT_LINK_6BPQ, 20 SYNC_OUT_LINK_6BPQ,
21 SYNC_OUT_LINK_4BPQ, 21 SYNC_OUT_LINK_4BPQ,
22 SYNC_OUT_LINK_2BPQ,
22 SYNC_OUT_AUDIO_12BPQ, 23 SYNC_OUT_AUDIO_12BPQ,
23 SYNC_OUT_AUDIO_6BPQ, 24 SYNC_OUT_AUDIO_6BPQ,
24 SYNC_OUT_AUDIO_4BPQ, 25 SYNC_OUT_AUDIO_4BPQ,
26 SYNC_OUT_AUDIO_2BPQ,
25 SYNC_OUT_LINK_AUDIO_12BPQ, 27 SYNC_OUT_LINK_AUDIO_12BPQ,
26 SYNC_OUT_LINK_AUDIO_6BPQ, 28 SYNC_OUT_LINK_AUDIO_6BPQ,
27 SYNC_OUT_LINK_AUDIO_4BPQ, 29 SYNC_OUT_LINK_AUDIO_4BPQ,
30 SYNC_OUT_LINK_AUDIO_2BPQ,
28 SYNC_IN_LINK_96BPQ, 31 SYNC_IN_LINK_96BPQ,
29 SYNC_IN_LINK_48BPQ, 32 SYNC_IN_LINK_48BPQ,
30 SYNC_IN_LINK_24BPQ, 33 SYNC_IN_LINK_24BPQ,
@@ -42,12 +45,15 @@ char * sync_setting_str[] = {
42 "LINK OUT (12BPQ)", 45 "LINK OUT (12BPQ)",
43 "LINK OUT (6BPQ)", 46 "LINK OUT (6BPQ)",
44 "LINK OUT (4BPQ)", 47 "LINK OUT (4BPQ)",
48 "LINK OUT (2BPQ)",
45 "AUDIO OUT (12BPQ)", 49 "AUDIO OUT (12BPQ)",
46 "AUDIO OUT (6BPQ)", 50 "AUDIO OUT (6BPQ)",
47 "AUDIO OUT (4BPQ)", 51 "AUDIO OUT (4BPQ)",
52 "AUDIO OUT (2BPQ)",
48 "LINK+AUDIO OUT (12BPQ)", 53 "LINK+AUDIO OUT (12BPQ)",
49 "LINK+AUDIO OUT (6BPQ)", 54 "LINK+AUDIO OUT (6BPQ)",
50 "LINK+AUDIO OUT (4BPQ)", 55 "LINK+AUDIO OUT (4BPQ)",
56 "LINK+AUDIO OUT (2BPQ)",
51 "LINK IN (96BPQ)", 57 "LINK IN (96BPQ)",
52 "LINK IN (48BPQ)", 58 "LINK IN (48BPQ)",
53 "LINK IN (24BPQ)", 59 "LINK IN (24BPQ)",