aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/sequencer.c64
1 files changed, 33 insertions, 31 deletions
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) {
123 123
124void 124void
125send_lsdj_pulse(u8 out_byte) { 125send_lsdj_pulse(u8 out_byte) {
126 pulse_value = out_byte;
127
128 // Reset timer. 126 // Reset timer.
129 TIMER_DATA_3 = 0; 127 TIMER_DATA_3 = 0;
128
129 // Set starting values.
130 gate_set(1, 1);
130 pulse_value = out_byte; 131 pulse_value = out_byte;
131 pulse_count = 0; 132 pulse_count = 0;
132 gate_status = 0; 133 gate_status = 0;
134
135 // Start pulse message.
133 int n_ticks = -9; // 122/2 = 61us; 61 / 3.8 = 16 136 int n_ticks = -9; // 122/2 = 61us; 61 / 3.8 = 16
134 irs_set(IRQ_TIMER_3, send_pulse); 137 irs_set(IRQ_TIMER_3, send_pulse);
135 TIMER_DATA_3 = n_ticks; 138 TIMER_DATA_3 = n_ticks;
@@ -561,33 +564,34 @@ sequencer_tick(void) {
561 irs_interruptible(IRQ_VBLANK); // Audio mix. 564 irs_interruptible(IRQ_VBLANK); // Audio mix.
562 irs_interruptible(IRQ_TIMER_1); // Audio click sync. 565 irs_interruptible(IRQ_TIMER_1); // Audio click sync.
563 irs_interruptible(IRQ_TIMER_3); // Link cable sync. 566 irs_interruptible(IRQ_TIMER_3); // Link cable sync.
564 // switch (settings.sync) { 567 switch (settings.sync) {
565 // case SYNC_OUT_LINK_96BPQ: { gate_on(); } break; 568 // case SYNC_OUT_LINK_96BPQ: { gate_on(); } break;
566 // case SYNC_OUT_LINK_48BPQ: { if (sync_ticks++ % 2 == 0) { gate_on(); } } break; 569 // case SYNC_OUT_LINK_48BPQ: { if (sync_ticks++ % 2 == 0) { gate_on(); } } break;
567 // case SYNC_OUT_LINK_24BPQ: { if (sync_ticks++ % 4 == 0) { gate_on(); } } break; 570 // case SYNC_OUT_LINK_24BPQ: { if (sync_ticks++ % 4 == 0) { gate_on(); } } break;
568 // case SYNC_OUT_LINK_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); } } break; 571 // case SYNC_OUT_LINK_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); } } break;
569 // case SYNC_OUT_LINK_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); } } break; 572 // case SYNC_OUT_LINK_6BPQ: { if (sync_ticks++ % 16 == 0) { gate_on(); } } break;
570 // case SYNC_OUT_LINK_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); } } break; 573 // case SYNC_OUT_LINK_4BPQ: { if (sync_ticks++ % 24 == 0) { gate_on(); } } break;
571 // case SYNC_OUT_LINK_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); } } break; 574 // case SYNC_OUT_LINK_2BPQ: { if (sync_ticks++ % 48 == 0) { gate_on(); } } break;
572 // case SYNC_OUT_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { audio_sync_click = true; } } break; 575 // case SYNC_OUT_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { audio_sync_click = true; } } break;
573 // case SYNC_OUT_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { audio_sync_click = true; } } break; 576 // case SYNC_OUT_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 0) { audio_sync_click = true; } } break;
574 // case SYNC_OUT_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { audio_sync_click = true; } } break; 577 // case SYNC_OUT_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 0) { audio_sync_click = true; } } break;
575 // case SYNC_OUT_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { audio_sync_click = true; } } break; 578 // case SYNC_OUT_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 0) { audio_sync_click = true; } } break;
576 // case SYNC_OUT_LINK_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); audio_sync_click = true; } } break; 579 // case SYNC_OUT_LINK_AUDIO_12BPQ: { if (sync_ticks++ % 8 == 0) { gate_on(); audio_sync_click = true; } } break;
577 // case SYNC_OUT_LINK_AUDIO_6BPQ: { if (sync_ticks++ % 16 == 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;
578 // case SYNC_OUT_LINK_AUDIO_4BPQ: { if (sync_ticks++ % 24 == 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;
579 // case SYNC_OUT_LINK_AUDIO_2BPQ: { if (sync_ticks++ % 48 == 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;
580 // default: break; 583 case SYNC_OUT_LSDJ: {
581 // } 584 if (sync_ticks++ % 4 == 0) {
582 // TODO: case sync_out_lsdj 585 u8 val = 0xff;
583 if (sync_ticks++ % 4 == 0) { 586 if ((sync_ticks - 1) == 0) {
584 u8 val = 0xff; 587 val = current_bank * 8 + current_pattern;
585 if ((sync_ticks - 1) == 0) { 588 } else if ((sync_ticks - 1) % 384 == 0) {
586 val = current_bank * 8 + current_pattern; 589 val = 253;
587 } else if ((sync_ticks - 1) % 384 == 0) { 590 }
588 val = 253; 591 send_lsdj_pulse(val);
589 } 592 }
590 send_lsdj_pulse(val); 593 } break;
594 default: break;
591 } 595 }
592 if (nseq_ticks++ == 0) { 596 if (nseq_ticks++ == 0) {
593 play_step(); 597 play_step();
@@ -782,8 +786,6 @@ stop_sound(void) {
782void 786void
783reset_sequencer(void) { 787reset_sequencer(void) {
784 TIMER_CTRL_3 = 0; 788 TIMER_CTRL_3 = 0;
785 gate_set(1, 1);
786 gate_status = 0;
787 step_counter = 0; 789 step_counter = 0;
788 nseq_ticks = 0; 790 nseq_ticks = 0;
789 sync_ticks = 0; 791 sync_ticks = 0;