From dd59c2d078a62876d89ed5637e83d86b294f55f2 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 10 May 2024 22:59:20 +0200 Subject: Setup for proper sync option --- src/sequencer.c | 64 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 31 deletions(-) (limited to 'src/sequencer.c') diff --git a/src/sequencer.c b/src/sequencer.c index a8187a0..bcb090c 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -123,13 +123,16 @@ send_pulse(void) { void send_lsdj_pulse(u8 out_byte) { - pulse_value = out_byte; - // Reset timer. TIMER_DATA_3 = 0; + + // Set starting values. + gate_set(1, 1); pulse_value = out_byte; pulse_count = 0; gate_status = 0; + + // Start pulse message. int n_ticks = -9; // 122/2 = 61us; 61 / 3.8 = 16 irs_set(IRQ_TIMER_3, send_pulse); TIMER_DATA_3 = n_ticks; @@ -561,33 +564,34 @@ sequencer_tick(void) { irs_interruptible(IRQ_VBLANK); // Audio mix. irs_interruptible(IRQ_TIMER_1); // Audio click sync. irs_interruptible(IRQ_TIMER_3); // Link cable sync. - // switch (settings.sync) { - // case SYNC_OUT_LINK_96BPQ: { gate_on(); } break; - // case SYNC_OUT_LINK_48BPQ: { if (sync_ticks++ % 2 == 0) { gate_on(); } } break; - // case SYNC_OUT_LINK_24BPQ: { if (sync_ticks++ % 4 == 0) { gate_on(); } } break; - // case SYNC_OUT_LINK_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); } } break; - // case SYNC_OUT_LINK_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); } } break; - // case SYNC_OUT_LINK_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); } } break; - // case SYNC_OUT_LINK_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); } } break; - // case SYNC_OUT_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { audio_sync_click = true; } } break; - // case SYNC_OUT_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { audio_sync_click = true; } } break; - // case SYNC_OUT_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { audio_sync_click = true; } } break; - // case SYNC_OUT_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { audio_sync_click = true; } } break; - // case SYNC_OUT_LINK_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); audio_sync_click = true; } } break; - // case SYNC_OUT_LINK_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); audio_sync_click = true; } } break; - // case SYNC_OUT_LINK_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); audio_sync_click = true; } } break; - // case SYNC_OUT_LINK_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); audio_sync_click = true; } } break; - // default: break; - // } - // TODO: case sync_out_lsdj - if (sync_ticks++ % 4 == 0) { - u8 val = 0xff; - if ((sync_ticks - 1) == 0) { - val = current_bank * 8 + current_pattern; - } else if ((sync_ticks - 1) % 384 == 0) { - val = 253; - } - send_lsdj_pulse(val); + switch (settings.sync) { + // case SYNC_OUT_LINK_96BPQ: { gate_on(); } break; + // case SYNC_OUT_LINK_48BPQ: { if (sync_ticks++ % 2 == 0) { gate_on(); } } break; + // case SYNC_OUT_LINK_24BPQ: { if (sync_ticks++ % 4 == 0) { gate_on(); } } break; + // case SYNC_OUT_LINK_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); } } break; + // case SYNC_OUT_LINK_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); } } break; + // case SYNC_OUT_LINK_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); } } break; + // case SYNC_OUT_LINK_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); } } break; + // case SYNC_OUT_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { audio_sync_click = true; } } break; + // case SYNC_OUT_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { audio_sync_click = true; } } break; + // case SYNC_OUT_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { audio_sync_click = true; } } break; + // case SYNC_OUT_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { audio_sync_click = true; } } break; + // case SYNC_OUT_LINK_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); audio_sync_click = true; } } break; + // case SYNC_OUT_LINK_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); audio_sync_click = true; } } break; + // case SYNC_OUT_LINK_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); audio_sync_click = true; } } break; + // case SYNC_OUT_LINK_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); audio_sync_click = true; } } break; + case SYNC_OUT_LSDJ: { + if (sync_ticks++ % 4 == 0) { + u8 val = 0xff; + if ((sync_ticks - 1) == 0) { + val = current_bank * 8 + current_pattern; + } else if ((sync_ticks - 1) % 384 == 0) { + val = 253; + } + send_lsdj_pulse(val); + } + } break; + default: break; } if (nseq_ticks++ == 0) { play_step(); @@ -782,8 +786,6 @@ stop_sound(void) { void reset_sequencer(void) { TIMER_CTRL_3 = 0; - gate_set(1, 1); - gate_status = 0; step_counter = 0; nseq_ticks = 0; sync_ticks = 0; -- cgit v1.2.1