diff options
author | Bad Diode <bd@badd10de.dev> | 2024-05-10 23:24:58 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2024-05-10 23:24:58 +0200 |
commit | 291765561cd740d24a4b98bb7bb2a85a95728f0d (patch) | |
tree | fc242e83392534debf4f58105a686b44ffe08186 /src/sequencer.c | |
parent | dd59c2d078a62876d89ed5637e83d86b294f55f2 (diff) | |
download | stepper-291765561cd740d24a4b98bb7bb2a85a95728f0d.tar.gz stepper-291765561cd740d24a4b98bb7bb2a85a95728f0d.zip |
Add back previous sync modes with updated resolution
NOTE: Needs testing
Diffstat (limited to 'src/sequencer.c')
-rw-r--r-- | src/sequencer.c | 103 |
1 files changed, 40 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 | 38 | void |
39 | //gate_on(void) { | 39 | gate_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 | 44 | void |
45 | // // of 5 ms to up to 300 BPM" @ 24bpq | 45 | gate_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 | ||
85 | int pulse_count = 0; | 64 | int pulse_count = 0; |
86 | int pulse_value = 0; | 65 | int 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 | ||
786 | void | 764 | void |
@@ -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 | } |