diff options
Diffstat (limited to 'src/sequencer.c')
-rw-r--r-- | src/sequencer.c | 64 |
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 | ||
124 | void | 124 | void |
125 | send_lsdj_pulse(u8 out_byte) { | 125 | send_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) { | |||
782 | void | 786 | void |
783 | reset_sequencer(void) { | 787 | reset_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; |