aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-02-01 16:06:38 +0100
committerBad Diode <bd@badd10de.dev>2024-02-01 16:06:38 +0100
commite475e43918fc200fea3951093223273ee2fb3761 (patch)
tree60f72b186c6e6681f03b1ac115ad1b0e7d8a2852
parent8b34c630e2389df2b8892c7b3c52b8056ae5f8a1 (diff)
downloadstepper-e475e43918fc200fea3951093223273ee2fb3761.tar.gz
stepper-e475e43918fc200fea3951093223273ee2fb3761.zip
Adjust sync options to new tick sequencer
-rw-r--r--src/drawing.c13
-rw-r--r--src/dsound.c3
-rw-r--r--src/sequencer.c64
-rw-r--r--src/settings.c15
-rw-r--r--src/settings.h44
5 files changed, 90 insertions, 49 deletions
diff --git a/src/drawing.c b/src/drawing.c
index a485ec4..3f646a6 100644
--- a/src/drawing.c
+++ b/src/drawing.c
@@ -422,6 +422,7 @@ draw_bpm() {
422 settings.sync == SYNC_IN_LINK_48BPQ || 422 settings.sync == SYNC_IN_LINK_48BPQ ||
423 settings.sync == SYNC_IN_LINK_24BPQ || 423 settings.sync == SYNC_IN_LINK_24BPQ ||
424 settings.sync == SYNC_IN_LINK_12BPQ || 424 settings.sync == SYNC_IN_LINK_12BPQ ||
425 settings.sync == SYNC_IN_LINK_6BPQ ||
425 settings.sync == SYNC_IN_LINK_4BPQ) { 426 settings.sync == SYNC_IN_LINK_4BPQ) {
426 txt_drawf("SYNC", x + 2, y + 2, COL_FG); 427 txt_drawf("SYNC", x + 2, y + 2, COL_FG);
427 } else { 428 } else {
@@ -904,12 +905,12 @@ draw_prob(u8 prob, u8 clr) {
904void 905void
905draw_panning(s8 pan, u8 clr) { 906draw_panning(s8 pan, u8 clr) {
906 switch (settings.sync) { 907 switch (settings.sync) {
907 case SYNC_OUT_LINK_AUDIO_4: 908 case SYNC_OUT_AUDIO_12BPQ:
908 case SYNC_OUT_LINK_AUDIO_8: 909 case SYNC_OUT_AUDIO_6BPQ:
909 case SYNC_OUT_LINK_AUDIO_16: 910 case SYNC_OUT_AUDIO_4BPQ:
910 case SYNC_OUT_AUDIO_4: 911 case SYNC_OUT_LINK_AUDIO_12BPQ:
911 case SYNC_OUT_AUDIO_8: 912 case SYNC_OUT_LINK_AUDIO_6BPQ:
912 case SYNC_OUT_AUDIO_16: { clr = COL_OFF; } break; 913 case SYNC_OUT_LINK_AUDIO_4BPQ: { clr = COL_OFF; } break;
913 default: break; 914 default: break;
914 } 915 }
915 size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; 916 size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3;
diff --git a/src/dsound.c b/src/dsound.c
index cba8c86..1751e47 100644
--- a/src/dsound.c
+++ b/src/dsound.c
@@ -45,6 +45,9 @@ init_dsound(void) {
45 45
46void 46void
47sound_vsync() { 47sound_vsync() {
48 if (play_status == 0) {
49 return;
50 }
48 if(audio_buf_active == 1) { 51 if(audio_buf_active == 1) {
49 dma_transfer_copy(SOUND_FIFO_A, audio_buffer, 1, 1, 52 dma_transfer_copy(SOUND_FIFO_A, audio_buffer, 1, 1,
50 DMA_DST_FIXED 53 DMA_DST_FIXED
diff --git a/src/sequencer.c b/src/sequencer.c
index 7570a7a..a72eced 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -306,27 +306,14 @@ play_step(void) {
306 SOUND_NOISE_CTRL = 0; 306 SOUND_NOISE_CTRL = 0;
307 } 307 }
308 308
309 switch (settings.sync) {
310 case SYNC_OUT_LINK_16: { gate_on(); } break;
311 case SYNC_OUT_LINK_8: { if (step_counter % 2 == 0) { gate_on(); } } break;
312 case SYNC_OUT_LINK_4: { if (step_counter % 4 == 0) { gate_on(); } } break;
313 case SYNC_OUT_AUDIO_16: { audio_sync_click = true; } break;
314 case SYNC_OUT_AUDIO_8: { if (step_counter % 2 == 0) { audio_sync_click = true; } } break;
315 case SYNC_OUT_AUDIO_4: { if (step_counter % 4 == 0) { audio_sync_click = true; } } break;
316 case SYNC_OUT_LINK_AUDIO_16: { gate_on(); audio_sync_click = true; } break;
317 case SYNC_OUT_LINK_AUDIO_8: { if (step_counter % 2 == 0) { gate_on(); audio_sync_click = true; } } break;
318 case SYNC_OUT_LINK_AUDIO_4: { if (step_counter % 4 == 0) { gate_on(); audio_sync_click = true; } } break;
319 default: break;
320 }
321
322 // Adjust per-channel panning. 309 // Adjust per-channel panning.
323 switch (settings.sync) { 310 switch (settings.sync) {
324 case SYNC_OUT_LINK_AUDIO_4: 311 case SYNC_OUT_AUDIO_12BPQ:
325 case SYNC_OUT_LINK_AUDIO_8: 312 case SYNC_OUT_AUDIO_6BPQ:
326 case SYNC_OUT_LINK_AUDIO_16: 313 case SYNC_OUT_AUDIO_4BPQ:
327 case SYNC_OUT_AUDIO_4: 314 case SYNC_OUT_LINK_AUDIO_12BPQ:
328 case SYNC_OUT_AUDIO_8: 315 case SYNC_OUT_LINK_AUDIO_6BPQ:
329 case SYNC_OUT_AUDIO_16: break; 316 case SYNC_OUT_LINK_AUDIO_4BPQ: break;
330 default: { 317 default: {
331 SOUND_DMG_MASTER = dmg_stereo_vol(3) 318 SOUND_DMG_MASTER = dmg_stereo_vol(3)
332 | channel_vol(SOUND_SQUARE1, pan[0]) 319 | channel_vol(SOUND_SQUARE1, pan[0])
@@ -485,6 +472,21 @@ env_start:
485 472
486void 473void
487sequencer_tick(void) { 474sequencer_tick(void) {
475 switch (settings.sync) {
476 case SYNC_OUT_LINK_96BPQ: { gate_on(); } break;
477 case SYNC_OUT_LINK_48BPQ: { if (nseq_ticks % 2 == 0) { gate_on(); } } break;
478 case SYNC_OUT_LINK_24BPQ: { if (nseq_ticks % 4 == 0) { gate_on(); } } break;
479 case SYNC_OUT_LINK_12BPQ: { if (nseq_ticks % 8 == 0) { gate_on(); } } break;
480 case SYNC_OUT_LINK_6BPQ: { if (nseq_ticks % 16 == 0) { gate_on(); } } break;
481 case SYNC_OUT_LINK_4BPQ: { if (nseq_ticks % 24 == 0) { gate_on(); } } break;
482 case SYNC_OUT_AUDIO_12BPQ: { if (nseq_ticks % 8 == 0) { audio_sync_click = true; } } break;
483 case SYNC_OUT_AUDIO_6BPQ: { if (nseq_ticks % 16 == 0) { audio_sync_click = true; } } break;
484 case SYNC_OUT_AUDIO_4BPQ: { if (nseq_ticks % 24 == 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;
486 case SYNC_OUT_LINK_AUDIO_6BPQ: { if (nseq_ticks % 16 == 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;
488 default: break;
489 }
488 if (nseq_ticks++ == 0) { 490 if (nseq_ticks++ == 0) {
489 play_step(); 491 play_step();
490 } else if (nseq_ticks == 24) { 492 } else if (nseq_ticks == 24) {
@@ -499,6 +501,7 @@ set_time(int bpm) {
499 settings.sync == SYNC_IN_LINK_48BPQ || 501 settings.sync == SYNC_IN_LINK_48BPQ ||
500 settings.sync == SYNC_IN_LINK_24BPQ || 502 settings.sync == SYNC_IN_LINK_24BPQ ||
501 settings.sync == SYNC_IN_LINK_12BPQ || 503 settings.sync == SYNC_IN_LINK_12BPQ ||
504 settings.sync == SYNC_IN_LINK_6BPQ ||
502 settings.sync == SYNC_IN_LINK_4BPQ) { 505 settings.sync == SYNC_IN_LINK_4BPQ) {
503 return; 506 return;
504 } 507 }
@@ -1887,6 +1890,29 @@ sync_in_12(void) {
1887} 1890}
1888 1891
1889void 1892void
1893sync_in_6(void) {
1894 if (play_status) {
1895 // 6bpq -> 96bpq.
1896 sequencer_tick();
1897 sequencer_tick();
1898 sequencer_tick();
1899 sequencer_tick();
1900 sequencer_tick();
1901 sequencer_tick();
1902 sequencer_tick();
1903 sequencer_tick();
1904 sequencer_tick();
1905 sequencer_tick();
1906 sequencer_tick();
1907 sequencer_tick();
1908 sequencer_tick();
1909 sequencer_tick();
1910 sequencer_tick();
1911 sequencer_tick();
1912 }
1913}
1914
1915void
1890sync_in_4(void) { 1916sync_in_4(void) {
1891 if (play_status) { 1917 if (play_status) {
1892 // 4bpq -> 96bpq. 1918 // 4bpq -> 96bpq.
diff --git a/src/settings.c b/src/settings.c
index 3e8138e..48cc3e7 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -12,6 +12,7 @@ void sync_in_96(void);
12void sync_in_48(void); 12void sync_in_48(void);
13void sync_in_24(void); 13void sync_in_24(void);
14void sync_in_12(void); 14void sync_in_12(void);
15void sync_in_6(void);
15void sync_in_4(void); 16void sync_in_4(void);
16void toggle_playing(void); 17void toggle_playing(void);
17void stop_playing(void); 18void stop_playing(void);
@@ -22,12 +23,14 @@ set_audio_settings(void) {
22 settings.sync == SYNC_IN_LINK_48BPQ || 23 settings.sync == SYNC_IN_LINK_48BPQ ||
23 settings.sync == SYNC_IN_LINK_24BPQ || 24 settings.sync == SYNC_IN_LINK_24BPQ ||
24 settings.sync == SYNC_IN_LINK_12BPQ || 25 settings.sync == SYNC_IN_LINK_12BPQ ||
26 settings.sync == SYNC_IN_LINK_6BPQ ||
25 settings.sync == SYNC_IN_LINK_4BPQ) { 27 settings.sync == SYNC_IN_LINK_4BPQ) {
26 switch (settings.sync) { 28 switch (settings.sync) {
27 case SYNC_IN_LINK_96BPQ: { irs_set(IRQ_SERIAL, sync_in_96); } break; 29 case SYNC_IN_LINK_96BPQ: { irs_set(IRQ_SERIAL, sync_in_96); } break;
28 case SYNC_IN_LINK_48BPQ: { irs_set(IRQ_SERIAL, sync_in_48); } break; 30 case SYNC_IN_LINK_48BPQ: { irs_set(IRQ_SERIAL, sync_in_48); } break;
29 case SYNC_IN_LINK_24BPQ: { irs_set(IRQ_SERIAL, sync_in_24); } break; 31 case SYNC_IN_LINK_24BPQ: { irs_set(IRQ_SERIAL, sync_in_24); } break;
30 case SYNC_IN_LINK_12BPQ: { irs_set(IRQ_SERIAL, sync_in_12); } break; 32 case SYNC_IN_LINK_12BPQ: { irs_set(IRQ_SERIAL, sync_in_12); } break;
33 case SYNC_IN_LINK_6BPQ: { irs_set(IRQ_SERIAL, sync_in_6); } break;
31 case SYNC_IN_LINK_4BPQ: { irs_set(IRQ_SERIAL, sync_in_4); } break; 34 case SYNC_IN_LINK_4BPQ: { irs_set(IRQ_SERIAL, sync_in_4); } break;
32 default: break; 35 default: break;
33 } 36 }
@@ -42,12 +45,12 @@ set_audio_settings(void) {
42 irs_set(IRQ_SERIAL, NULL); 45 irs_set(IRQ_SERIAL, NULL);
43 } 46 }
44 switch (settings.sync) { 47 switch (settings.sync) {
45 case SYNC_OUT_LINK_AUDIO_4: 48 case SYNC_OUT_AUDIO_12BPQ:
46 case SYNC_OUT_LINK_AUDIO_8: 49 case SYNC_OUT_AUDIO_6BPQ:
47 case SYNC_OUT_LINK_AUDIO_16: 50 case SYNC_OUT_AUDIO_4BPQ:
48 case SYNC_OUT_AUDIO_4: 51 case SYNC_OUT_LINK_AUDIO_12BPQ:
49 case SYNC_OUT_AUDIO_8: 52 case SYNC_OUT_LINK_AUDIO_6BPQ:
50 case SYNC_OUT_AUDIO_16: { 53 case SYNC_OUT_LINK_AUDIO_4BPQ: {
51 SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 54 SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1
52 | SOUND_SQUARE2 55 | SOUND_SQUARE2
53 | SOUND_WAVE 56 | SOUND_WAVE
diff --git a/src/settings.h b/src/settings.h
index fc8e8a0..916f1be 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -13,38 +13,46 @@ typedef enum SettingsList {
13 13
14typedef enum SyncSetting { 14typedef enum SyncSetting {
15 SYNC_NONE = 0, 15 SYNC_NONE = 0,
16 SYNC_OUT_LINK_16, 16 SYNC_OUT_LINK_96BPQ,
17 SYNC_OUT_LINK_8, 17 SYNC_OUT_LINK_48BPQ,
18 SYNC_OUT_LINK_4, 18 SYNC_OUT_LINK_24BPQ,
19 SYNC_OUT_AUDIO_16, 19 SYNC_OUT_LINK_12BPQ,
20 SYNC_OUT_AUDIO_8, 20 SYNC_OUT_LINK_6BPQ,
21 SYNC_OUT_AUDIO_4, 21 SYNC_OUT_LINK_4BPQ,
22 SYNC_OUT_LINK_AUDIO_16, 22 SYNC_OUT_AUDIO_12BPQ,
23 SYNC_OUT_LINK_AUDIO_8, 23 SYNC_OUT_AUDIO_6BPQ,
24 SYNC_OUT_LINK_AUDIO_4, 24 SYNC_OUT_AUDIO_4BPQ,
25 SYNC_OUT_LINK_AUDIO_12BPQ,
26 SYNC_OUT_LINK_AUDIO_6BPQ,
27 SYNC_OUT_LINK_AUDIO_4BPQ,
25 SYNC_IN_LINK_96BPQ, 28 SYNC_IN_LINK_96BPQ,
26 SYNC_IN_LINK_48BPQ, 29 SYNC_IN_LINK_48BPQ,
27 SYNC_IN_LINK_24BPQ, 30 SYNC_IN_LINK_24BPQ,
28 SYNC_IN_LINK_12BPQ, 31 SYNC_IN_LINK_12BPQ,
32 SYNC_IN_LINK_6BPQ,
29 SYNC_IN_LINK_4BPQ, 33 SYNC_IN_LINK_4BPQ,
30 SYNC_NUM, 34 SYNC_NUM,
31} SyncSetting; 35} SyncSetting;
32 36
33char * sync_setting_str[] = { 37char * sync_setting_str[] = {
34 "NONE", 38 "NONE",
35 "LINK OUT (16)", 39 "LINK OUT (96BPQ)",
36 "LINK OUT (8)", 40 "LINK OUT (48BPQ)",
37 "LINK OUT (4)", 41 "LINK OUT (24BPQ)",
38 "AUDIO OUT (16)", 42 "LINK OUT (12BPQ)",
39 "AUDIO OUT (8)", 43 "LINK OUT (6BPQ)",
40 "AUDIO OUT (4)", 44 "LINK OUT (4BPQ)",
41 "LINK+AUDIO OUT (16)", 45 "AUDIO OUT (12BPQ)",
42 "LINK+AUDIO OUT (8)", 46 "AUDIO OUT (6BPQ)",
43 "LINK+AUDIO OUT (4)", 47 "AUDIO OUT (4BPQ)",
48 "LINK+AUDIO OUT (12BPQ)",
49 "LINK+AUDIO OUT (6BPQ)",
50 "LINK+AUDIO OUT (4BPQ)",
44 "LINK IN (96BPQ)", 51 "LINK IN (96BPQ)",
45 "LINK IN (48BPQ)", 52 "LINK IN (48BPQ)",
46 "LINK IN (24BPQ)", 53 "LINK IN (24BPQ)",
47 "LINK IN (12BPQ)", 54 "LINK IN (12BPQ)",
55 "LINK IN (6BPQ)",
48 "LINK IN (4BPQ)", 56 "LINK IN (4BPQ)",
49}; 57};
50 58