aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-05-10 23:24:58 +0200
committerBad Diode <bd@badd10de.dev>2024-05-10 23:24:58 +0200
commit291765561cd740d24a4b98bb7bb2a85a95728f0d (patch)
treefc242e83392534debf4f58105a686b44ffe08186 /src
parentdd59c2d078a62876d89ed5637e83d86b294f55f2 (diff)
downloadstepper-291765561cd740d24a4b98bb7bb2a85a95728f0d.tar.gz
stepper-291765561cd740d24a4b98bb7bb2a85a95728f0d.zip
Add back previous sync modes with updated resolution
NOTE: Needs testing
Diffstat (limited to 'src')
-rw-r--r--src/sequencer.c103
-rw-r--r--src/settings.c5
2 files changed, 45 insertions, 63 deletions
diff --git a/src/sequencer.c b/src/sequencer.c
index bcb090c..ed13486 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -35,52 +35,31 @@ gate_set(u8 sc, u8 so) {
35 | SIO_SI(0); 35 | SIO_SI(0);
36} 36}
37 37
38//void 38void
39//gate_on(void) { 39gate_off(void) {
40// // SYNC24 NOTES 40 TIMER_CTRL_3 = 0;
41// // (from https://e-rm.de/data/E-RM_report_HowToDinSync_10_14_EN.pdf) 41 gate_set(0, 0);
42// // 42}
43// // "Moreover, a duty cycle of 50% doesn’t seem to be nescessary, all tested 43
44// // machines were able to sync properly to clock ticks with a positive width 44void
45// // of 5 ms to up to 300 BPM" @ 24bpq 45gate_on(void) {
46// // 46 // SYNC24 NOTES
47// // int bpm = 100; 47 // (from https://e-rm.de/data/E-RM_report_HowToDinSync_10_14_EN.pdf)
48// // if (settings.global_bpm) { 48 //
49// // bpm = settings.bpm; 49 // "Moreover, a duty cycle of 50% doesn't seem to be necessary, all tested
50// // } else { 50 // machines were able to sync properly to clock ticks with a positive width
51// // bpm patterns[current_pattern].bpm; 51 // of 5 ms to up to 300 BPM" @ 24bpq
52// // } 52 //
53// // gate_off(); 53 // Since we want to use a 96bpq timer, we need to go 4 times faster (1.25ms
54// // pulses_sent = 0; 54 // per gate), though we could tailor the timing to the selected sync mode
55// // gate_status = 0; 55 // for less lenient machines.
56// // SIO_MODE = SIO_MODE_GP 56 gate_off();
57// // | SIO_SC_OUT(1) 57 gate_set(1, 1);
58// // | SIO_SO_OUT(0) 58 int n_ticks = -80 / 4; // 1.25ms
59// // | SIO_SD_OUT(0) 59 irs_set(IRQ_TIMER_3, gate_off);
60// // | SIO_SI_OUT(0) 60 TIMER_DATA_3 = n_ticks;
61// // | SIO_SC(1) 61 TIMER_CTRL_3 = TIMER_CTRL_IRQ | TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3;
62// // | SIO_SO(0) 62}
63// // | SIO_SD(0)
64// // | SIO_SI(0);
65// // // int n_ticks = -80; // 5ms
66// // // irs_set(IRQ_TIMER_3, gate_off);
67// // // TIMER_DATA_3 = n_ticks;
68// // // TIMER_CTRL_3 = TIMER_CTRL_IRQ | TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3;
69// // int n_ticks = -80 / 8 / 2; // 5ms
70// // irs_set(IRQ_TIMER_3, gate_lsdj);
71// // TIMER_DATA_3 = n_ticks;
72// // TIMER_CTRL_3 = TIMER_CTRL_IRQ | TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3;
73// // int n_ticks = -79; // 5ms
74// // TIMER_DATA_3 = n_ticks;
75// // TIMER_CTRL_3 = TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3;
76// // while (1) {
77// // int cnt = TIMER_DATA_3;
78// // if (cnt >= 80) {
79// // gate_off();
80// // break;
81// // }
82// // }
83//}
84 63
85int pulse_count = 0; 64int pulse_count = 0;
86int pulse_value = 0; 65int pulse_value = 0;
@@ -565,21 +544,21 @@ sequencer_tick(void) {
565 irs_interruptible(IRQ_TIMER_1); // Audio click sync. 544 irs_interruptible(IRQ_TIMER_1); // Audio click sync.
566 irs_interruptible(IRQ_TIMER_3); // Link cable sync. 545 irs_interruptible(IRQ_TIMER_3); // Link cable sync.
567 switch (settings.sync) { 546 switch (settings.sync) {
568 // case SYNC_OUT_LINK_96BPQ: { gate_on(); } break; 547 case SYNC_OUT_LINK_96BPQ: { gate_on(); } break;
569 // case SYNC_OUT_LINK_48BPQ: { if (sync_ticks++ % 2 == 0) { gate_on(); } } break; 548 case SYNC_OUT_LINK_48BPQ: { if (sync_ticks++ % 2 == 0) { gate_on(); } } break;
570 // case SYNC_OUT_LINK_24BPQ: { if (sync_ticks++ % 4 == 0) { gate_on(); } } break; 549 case SYNC_OUT_LINK_24BPQ: { if (sync_ticks++ % 4 == 0) { gate_on(); } } break;
571 // case SYNC_OUT_LINK_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); } } break; 550 case SYNC_OUT_LINK_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); } } break;
572 // case SYNC_OUT_LINK_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); } } break; 551 case SYNC_OUT_LINK_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); } } break;
573 // case SYNC_OUT_LINK_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); } } break; 552 case SYNC_OUT_LINK_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); } } break;
574 // case SYNC_OUT_LINK_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); } } break; 553 case SYNC_OUT_LINK_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); } } break;
575 // case SYNC_OUT_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { audio_sync_click = true; } } break; 554 case SYNC_OUT_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { audio_sync_click = true; } } break;
576 // case SYNC_OUT_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { audio_sync_click = true; } } break; 555 case SYNC_OUT_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { audio_sync_click = true; } } break;
577 // case SYNC_OUT_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { audio_sync_click = true; } } break; 556 case SYNC_OUT_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { audio_sync_click = true; } } break;
578 // case SYNC_OUT_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { audio_sync_click = true; } } break; 557 case SYNC_OUT_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { audio_sync_click = true; } } break;
579 // case SYNC_OUT_LINK_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); audio_sync_click = true; } } break; 558 case SYNC_OUT_LINK_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); audio_sync_click = true; } } break;
580 // case SYNC_OUT_LINK_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); audio_sync_click = true; } } break; 559 case SYNC_OUT_LINK_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); audio_sync_click = true; } } break;
581 // case SYNC_OUT_LINK_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); audio_sync_click = true; } } break; 560 case SYNC_OUT_LINK_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); audio_sync_click = true; } } break;
582 // case SYNC_OUT_LINK_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); audio_sync_click = true; } } break; 561 case SYNC_OUT_LINK_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); audio_sync_click = true; } } break;
583 case SYNC_OUT_LSDJ: { 562 case SYNC_OUT_LSDJ: {
584 if (sync_ticks++ % 4 == 0) { 563 if (sync_ticks++ % 4 == 0) {
585 u8 val = 0xff; 564 u8 val = 0xff;
@@ -780,7 +759,6 @@ stop_sound(void) {
780 SOUND_NOISE_CTRL = 0; 759 SOUND_NOISE_CTRL = 0;
781 redraw_play_pause = true; 760 redraw_play_pause = true;
782 redraw_pattern_buttons = true; 761 redraw_pattern_buttons = true;
783 gate_set(1, 1);
784} 762}
785 763
786void 764void
@@ -2086,5 +2064,4 @@ sequencer_init(void) {
2086 SOUND_STATUS = SOUND_ENABLE; 2064 SOUND_STATUS = SOUND_ENABLE;
2087 init_dsound(); 2065 init_dsound();
2088 set_audio_settings(); 2066 set_audio_settings();
2089 gate_set(1, 1);
2090} 2067}
diff --git a/src/settings.c b/src/settings.c
index 8b4c3b1..e6f07f4 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -17,6 +17,7 @@ void sync_in_4(void);
17void reset_sequencer(void); 17void reset_sequencer(void);
18void toggle_playing(void); 18void toggle_playing(void);
19void stop_playing(void); 19void stop_playing(void);
20void gate_set(u8, u8);
20 21
21static int sync_ticks = 0; 22static int sync_ticks = 0;
22 23
@@ -65,6 +66,10 @@ set_audio_settings(void) {
65 | SOUND_DSOUND_RATIO_A 66 | SOUND_DSOUND_RATIO_A
66 | SOUND_DSOUND_LEFT_A 67 | SOUND_DSOUND_LEFT_A
67 | SOUND_DSOUND_RESET_A; 68 | SOUND_DSOUND_RESET_A;
69 gate_set(0, 0);
70 } break;
71 case SYNC_OUT_LSDJ: {
72 gate_set(1, 1);
68 } break; 73 } break;
69 default: { 74 default: {
70 SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 75 SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1