From 8cc0da2ca7ba0cb3e44deea8eb031a36d96f7c72 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Thu, 1 Feb 2024 19:09:51 +0100 Subject: Fix some issues with sync and added more modes --- src/drawing.c | 4 +++- src/profiling.c | 4 +--- src/sequencer.c | 34 +++++++++++++++++++++------------- src/settings.c | 8 +++++++- src/settings.h | 6 ++++++ 5 files changed, 38 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/drawing.c b/src/drawing.c index 3f646a6..18ee3b9 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -908,9 +908,11 @@ draw_panning(s8 pan, u8 clr) { case SYNC_OUT_AUDIO_12BPQ: case SYNC_OUT_AUDIO_6BPQ: case SYNC_OUT_AUDIO_4BPQ: + case SYNC_OUT_AUDIO_2BPQ: case SYNC_OUT_LINK_AUDIO_12BPQ: case SYNC_OUT_LINK_AUDIO_6BPQ: - case SYNC_OUT_LINK_AUDIO_4BPQ: { clr = COL_OFF; } break; + case SYNC_OUT_LINK_AUDIO_4BPQ: + case SYNC_OUT_LINK_AUDIO_2BPQ: { clr = COL_OFF; } break; default: break; } size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; diff --git a/src/profiling.c b/src/profiling.c index 713e2b3..cc58694 100644 --- a/src/profiling.c +++ b/src/profiling.c @@ -139,9 +139,7 @@ u8 prof_detail_level = 2; // No profiling. #define PROF_INIT() #define PROF(F,VAR) do {F;} while(0) -#define FRAME_START() do { \ - profile_start();\ -} while(0) +#define FRAME_START() #define FRAME_END() #define PROF_SHOW() #define PROF_DETAIL(N) diff --git a/src/sequencer.c b/src/sequencer.c index a72eced..56146c5 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -38,6 +38,7 @@ gate_off(void) { void gate_on(void) { + gate_off(); SIO_MODE = SIO_MODE_GP | SIO_SC_OUT(1) | SIO_SD_OUT(1) @@ -311,9 +312,11 @@ play_step(void) { case SYNC_OUT_AUDIO_12BPQ: case SYNC_OUT_AUDIO_6BPQ: case SYNC_OUT_AUDIO_4BPQ: + case SYNC_OUT_AUDIO_2BPQ: case SYNC_OUT_LINK_AUDIO_12BPQ: case SYNC_OUT_LINK_AUDIO_6BPQ: - case SYNC_OUT_LINK_AUDIO_4BPQ: break; + case SYNC_OUT_LINK_AUDIO_4BPQ: + case SYNC_OUT_LINK_AUDIO_2BPQ: break; default: { SOUND_DMG_MASTER = dmg_stereo_vol(3) | channel_vol(SOUND_SQUARE1, pan[0]) @@ -474,22 +477,26 @@ void sequencer_tick(void) { switch (settings.sync) { case SYNC_OUT_LINK_96BPQ: { gate_on(); } break; - case SYNC_OUT_LINK_48BPQ: { if (nseq_ticks % 2 == 0) { gate_on(); } } break; - case SYNC_OUT_LINK_24BPQ: { if (nseq_ticks % 4 == 0) { gate_on(); } } break; - case SYNC_OUT_LINK_12BPQ: { if (nseq_ticks % 8 == 0) { gate_on(); } } break; - case SYNC_OUT_LINK_6BPQ: { if (nseq_ticks % 16 == 0) { gate_on(); } } break; - case SYNC_OUT_LINK_4BPQ: { if (nseq_ticks % 24 == 0) { gate_on(); } } break; - case SYNC_OUT_AUDIO_12BPQ: { if (nseq_ticks % 8 == 0) { audio_sync_click = true; } } break; - case SYNC_OUT_AUDIO_6BPQ: { if (nseq_ticks % 16 == 0) { audio_sync_click = true; } } break; - case SYNC_OUT_AUDIO_4BPQ: { if (nseq_ticks % 24 == 0) { audio_sync_click = true; } } break; - case SYNC_OUT_LINK_AUDIO_12BPQ: { if (nseq_ticks % 8 == 0) { gate_on(); audio_sync_click = true; } } break; - case SYNC_OUT_LINK_AUDIO_6BPQ: { if (nseq_ticks % 16 == 0) { audio_sync_click = true; } } break; - case SYNC_OUT_LINK_AUDIO_4BPQ: { if (nseq_ticks % 24 == 0) { gate_on(); audio_sync_click = true; } } 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; } if (nseq_ticks++ == 0) { play_step(); - } else if (nseq_ticks == 24) { + } + if (nseq_ticks == 24) { nseq_ticks = 0; } wave_ad_tick(); @@ -679,6 +686,7 @@ void reset_sequencer(void) { step_counter = 0; nseq_ticks = 0; + sync_ticks = 0; chain.current = 15; chain.current = find_next_pattern(); chain.playing = false; diff --git a/src/settings.c b/src/settings.c index 48cc3e7..8b4c3b1 100644 --- a/src/settings.c +++ b/src/settings.c @@ -14,9 +14,12 @@ void sync_in_24(void); void sync_in_12(void); void sync_in_6(void); void sync_in_4(void); +void reset_sequencer(void); void toggle_playing(void); void stop_playing(void); +static int sync_ticks = 0; + void set_audio_settings(void) { if (settings.sync == SYNC_IN_LINK_96BPQ || @@ -48,9 +51,11 @@ set_audio_settings(void) { case SYNC_OUT_AUDIO_12BPQ: case SYNC_OUT_AUDIO_6BPQ: case SYNC_OUT_AUDIO_4BPQ: + case SYNC_OUT_AUDIO_2BPQ: case SYNC_OUT_LINK_AUDIO_12BPQ: case SYNC_OUT_LINK_AUDIO_6BPQ: - case SYNC_OUT_LINK_AUDIO_4BPQ: { + case SYNC_OUT_LINK_AUDIO_4BPQ: + case SYNC_OUT_LINK_AUDIO_2BPQ: { SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 | SOUND_SQUARE2 | SOUND_WAVE @@ -205,6 +210,7 @@ handle_settings_input(void) { next_scene = SCENE_SEQUENCER; } if (key_tap(KEY_START)) { + reset_sequencer(); toggle_playing(); } } diff --git a/src/settings.h b/src/settings.h index 916f1be..bbfdfd2 100644 --- a/src/settings.h +++ b/src/settings.h @@ -19,12 +19,15 @@ typedef enum SyncSetting { SYNC_OUT_LINK_12BPQ, SYNC_OUT_LINK_6BPQ, SYNC_OUT_LINK_4BPQ, + SYNC_OUT_LINK_2BPQ, SYNC_OUT_AUDIO_12BPQ, SYNC_OUT_AUDIO_6BPQ, SYNC_OUT_AUDIO_4BPQ, + SYNC_OUT_AUDIO_2BPQ, SYNC_OUT_LINK_AUDIO_12BPQ, SYNC_OUT_LINK_AUDIO_6BPQ, SYNC_OUT_LINK_AUDIO_4BPQ, + SYNC_OUT_LINK_AUDIO_2BPQ, SYNC_IN_LINK_96BPQ, SYNC_IN_LINK_48BPQ, SYNC_IN_LINK_24BPQ, @@ -42,12 +45,15 @@ char * sync_setting_str[] = { "LINK OUT (12BPQ)", "LINK OUT (6BPQ)", "LINK OUT (4BPQ)", + "LINK OUT (2BPQ)", "AUDIO OUT (12BPQ)", "AUDIO OUT (6BPQ)", "AUDIO OUT (4BPQ)", + "AUDIO OUT (2BPQ)", "LINK+AUDIO OUT (12BPQ)", "LINK+AUDIO OUT (6BPQ)", "LINK+AUDIO OUT (4BPQ)", + "LINK+AUDIO OUT (2BPQ)", "LINK IN (96BPQ)", "LINK IN (48BPQ)", "LINK IN (24BPQ)", -- cgit v1.2.1