diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | src/sequencer.c | 41 |
2 files changed, 28 insertions, 15 deletions
@@ -27,7 +27,7 @@ INC_FLAGS := $(addprefix -I,$(INC_DIRS)) | |||
27 | INC_FLAGS += -I$(LIBGBA_SRC) | 27 | INC_FLAGS += -I$(LIBGBA_SRC) |
28 | 28 | ||
29 | # Output library names and executables. | 29 | # Output library names and executables. |
30 | TARGET := STEPPER-v1.8-dev-lsdj | 30 | TARGET := STEPPER-v1.9-dev-2 |
31 | ELF := $(BUILD_DIR)/$(TARGET).elf | 31 | ELF := $(BUILD_DIR)/$(TARGET).elf |
32 | BIN := $(BUILD_DIR)/$(TARGET).gba | 32 | BIN := $(BUILD_DIR)/$(TARGET).gba |
33 | 33 | ||
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 | ||
44 | void | 44 | void |
45 | gate_on(void) { | 45 | gate_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 | |||
542 | sequencer_tick(void) { | 552 | sequencer_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 | } |