aboutsummaryrefslogtreecommitdiffstats
path: root/src/sequencer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sequencer.c')
-rw-r--r--src/sequencer.c41
1 files changed, 27 insertions, 14 deletions
diff --git a/src/sequencer.c b/src/sequencer.c
index ed13486..64e0e49 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -42,7 +42,7 @@ gate_off(void) {
42} 42}
43 43
44void 44void
45gate_on(void) { 45gate_on(SyncSetting sync_mode) {
46 // SYNC24 NOTES 46 // SYNC24 NOTES
47 // (from https://e-rm.de/data/E-RM_report_HowToDinSync_10_14_EN.pdf) 47 // (from https://e-rm.de/data/E-RM_report_HowToDinSync_10_14_EN.pdf)
48 // 48 //
@@ -55,7 +55,17 @@ gate_on(void) {
55 // for less lenient machines. 55 // for less lenient machines.
56 gate_off(); 56 gate_off();
57 gate_set(1, 1); 57 gate_set(1, 1);
58 int n_ticks = -80 / 4; // 1.25ms 58 int n_ticks = 0;
59 switch (sync_mode) {
60 case SYNC_OUT_LINK_96BPQ: { n_ticks = -80 / 4; } break;
61 case SYNC_OUT_LINK_48BPQ: { n_ticks = -80 / 2; } break;
62 case SYNC_OUT_LINK_24BPQ: { n_ticks = -80; } break;
63 case SYNC_OUT_LINK_12BPQ: { n_ticks = -80 * 2; } break;
64 case SYNC_OUT_LINK_6BPQ: { n_ticks = -80 * 4; } break;
65 case SYNC_OUT_LINK_4BPQ: { n_ticks = -80 * 6; } break;
66 case SYNC_OUT_LINK_2BPQ: { n_ticks = -80 * 12; } break;
67 default: break;
68 }
59 irs_set(IRQ_TIMER_3, gate_off); 69 irs_set(IRQ_TIMER_3, gate_off);
60 TIMER_DATA_3 = n_ticks; 70 TIMER_DATA_3 = n_ticks;
61 TIMER_CTRL_3 = TIMER_CTRL_IRQ | TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3; 71 TIMER_CTRL_3 = TIMER_CTRL_IRQ | TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3;
@@ -542,23 +552,24 @@ void
542sequencer_tick(void) { 552sequencer_tick(void) {
543 irs_interruptible(IRQ_VBLANK); // Audio mix. 553 irs_interruptible(IRQ_VBLANK); // Audio mix.
544 irs_interruptible(IRQ_TIMER_1); // Audio click sync. 554 irs_interruptible(IRQ_TIMER_1); // Audio click sync.
545 irs_interruptible(IRQ_TIMER_3); // Link cable sync. 555 irs_interruptible(IRQ_TIMER_3); // Link cable sync out.
556 irs_interruptible(IRQ_SERIAL); // Linc cable sync in.
546 switch (settings.sync) { 557 switch (settings.sync) {
547 case SYNC_OUT_LINK_96BPQ: { gate_on(); } break; 558 case SYNC_OUT_LINK_96BPQ: { gate_on(SYNC_OUT_LINK_96BPQ); } break;
548 case SYNC_OUT_LINK_48BPQ: { if (sync_ticks++ % 2 == 0) { gate_on(); } } break; 559 case SYNC_OUT_LINK_48BPQ: { if (sync_ticks++ % 2 == 0) { gate_on(SYNC_OUT_LINK_48BPQ); } } break;
549 case SYNC_OUT_LINK_24BPQ: { if (sync_ticks++ % 4 == 0) { gate_on(); } } break; 560 case SYNC_OUT_LINK_24BPQ: { if (sync_ticks++ % 4 == 0) { gate_on(SYNC_OUT_LINK_24BPQ); } } break;
550 case SYNC_OUT_LINK_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); } } break; 561 case SYNC_OUT_LINK_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(SYNC_OUT_LINK_12BPQ); } } break;
551 case SYNC_OUT_LINK_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); } } break; 562 case SYNC_OUT_LINK_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(SYNC_OUT_LINK_6BPQ); } } break;
552 case SYNC_OUT_LINK_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); } } break; 563 case SYNC_OUT_LINK_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(SYNC_OUT_LINK_4BPQ); } } break;
553 case SYNC_OUT_LINK_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); } } break; 564 case SYNC_OUT_LINK_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(SYNC_OUT_LINK_2BPQ); } } break;
554 case SYNC_OUT_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { audio_sync_click = true; } } break; 565 case SYNC_OUT_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { audio_sync_click = true; } } break;
555 case SYNC_OUT_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { audio_sync_click = true; } } break; 566 case SYNC_OUT_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { audio_sync_click = true; } } break;
556 case SYNC_OUT_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { audio_sync_click = true; } } break; 567 case SYNC_OUT_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { audio_sync_click = true; } } break;
557 case SYNC_OUT_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { audio_sync_click = true; } } break; 568 case SYNC_OUT_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { audio_sync_click = true; } } break;
558 case SYNC_OUT_LINK_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); audio_sync_click = true; } } break; 569 case SYNC_OUT_LINK_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(SYNC_OUT_LINK_12BPQ); audio_sync_click = true; } } break;
559 case SYNC_OUT_LINK_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); audio_sync_click = true; } } break; 570 case SYNC_OUT_LINK_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(SYNC_OUT_LINK_6BPQ); audio_sync_click = true; } } break;
560 case SYNC_OUT_LINK_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); audio_sync_click = true; } } break; 571 case SYNC_OUT_LINK_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(SYNC_OUT_LINK_4BPQ); audio_sync_click = true; } } break;
561 case SYNC_OUT_LINK_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); audio_sync_click = true; } } break; 572 case SYNC_OUT_LINK_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(SYNC_OUT_LINK_2BPQ); audio_sync_click = true; } } break;
562 case SYNC_OUT_LSDJ: { 573 case SYNC_OUT_LSDJ: {
563 if (sync_ticks++ % 4 == 0) { 574 if (sync_ticks++ % 4 == 0) {
564 u8 val = 0xff; 575 u8 val = 0xff;
@@ -2064,4 +2075,6 @@ sequencer_init(void) {
2064 SOUND_STATUS = SOUND_ENABLE; 2075 SOUND_STATUS = SOUND_ENABLE;
2065 init_dsound(); 2076 init_dsound();
2066 set_audio_settings(); 2077 set_audio_settings();
2078 // TODO: Set the gate to expected value depending on sync mode selected.
2079 // Also applies to the reset_sequencer function.
2067} 2080}