#include "settings.h" #include "save.h" static Settings settings = { .bpm = 90, .auto_save = TOGGLE_ON, .help = TOGGLE_ON, }; static int settings_cursor_loc = 0; void sync_in_96(void); void sync_in_48(void); 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 || settings.sync == SYNC_IN_LINK_48BPQ || settings.sync == SYNC_IN_LINK_24BPQ || settings.sync == SYNC_IN_LINK_12BPQ || settings.sync == SYNC_IN_LINK_6BPQ || settings.sync == SYNC_IN_LINK_4BPQ) { switch (settings.sync) { case SYNC_IN_LINK_96BPQ: { irs_set(IRQ_SERIAL, sync_in_96); } break; case SYNC_IN_LINK_48BPQ: { irs_set(IRQ_SERIAL, sync_in_48); } break; case SYNC_IN_LINK_24BPQ: { irs_set(IRQ_SERIAL, sync_in_24); } break; case SYNC_IN_LINK_12BPQ: { irs_set(IRQ_SERIAL, sync_in_12); } break; case SYNC_IN_LINK_6BPQ: { irs_set(IRQ_SERIAL, sync_in_6); } break; case SYNC_IN_LINK_4BPQ: { irs_set(IRQ_SERIAL, sync_in_4); } break; default: break; } irs_set(IRQ_TIMER_3, NULL); SIO_MODE = SIO_MODE_GP | SIO_SC_OUT(0) | SIO_SD_OUT(0) | SIO_SI_OUT(0) | SIO_SO_OUT(0) | SIO_IRQ_ENABLE; } else { irs_set(IRQ_SERIAL, NULL); } switch (settings.sync) { 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_2BPQ: { SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 | SOUND_SQUARE2 | SOUND_WAVE | SOUND_NOISE, 3, 2); SOUND_DSOUND_MASTER = SOUND_DMG100 | SOUND_DSOUND_RATIO_A | SOUND_DSOUND_LEFT_A | SOUND_DSOUND_RESET_A; } break; default: { SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 | SOUND_SQUARE2 | SOUND_WAVE | SOUND_NOISE, 3, 0); SOUND_DSOUND_MASTER = SOUND_DMG100; } break; } } void handle_settings_input(void) { if (key_retrig(KEY_DOWN)) { if (settings_cursor_loc == (SETTINGS_NUM - 1)) { settings_cursor_loc = 0; } else { settings_cursor_loc++; } clear_screen = true; } if (key_retrig(KEY_UP)) { if (settings_cursor_loc == 0) { settings_cursor_loc = SETTINGS_NUM - 1; } else { settings_cursor_loc--; } clear_screen = true; } if (key_retrig(KEY_R)) { switch (settings_cursor_loc) { case SETTINGS_SYNC: { if ((settings.sync + 1) >= SYNC_NUM) { settings.sync = 0; } else { settings.sync++; } stop_playing(); set_audio_settings(); } break; case SETTINGS_THEME: { if ((settings.theme + 1) >= THEME_NUM) { settings.theme = 0; } else { settings.theme++; } swap_palette(settings.theme); } break; case SETTINGS_GLOBAL_MUTE: { if ((settings.global_mute + 1) >= TOGGLE_NUM) { settings.global_mute = 0; } else { settings.global_mute++; } } break; case SETTINGS_GLOBAL_BPM: { if ((settings.global_bpm + 1) >= TOGGLE_NUM) { settings.global_bpm = 0; } else { settings.global_bpm++; } redraw_bpm = true; settings.bpm = patterns[pattern_selection_loc].bpm; if (play_status) { update_bpm = true; } } break; case SETTINGS_AUTO_SAVE: { if ((settings.auto_save + 1) >= TOGGLE_NUM) { settings.auto_save = 0; } else { settings.auto_save++; } } break; case SETTINGS_HELP: { if ((settings.help + 1) >= TOGGLE_NUM) { settings.help = 0; } else { settings.help++; } } break; } save_metadata(); clear_screen = true; } if (key_retrig(KEY_L)) { switch (settings_cursor_loc) { case SETTINGS_SYNC: { if (settings.sync == 0) { settings.sync = SYNC_NUM - 1; } else { settings.sync--; } stop_playing(); set_audio_settings(); } break; case SETTINGS_THEME: { if (settings.theme == 0) { settings.theme = THEME_NUM - 1; } else { settings.theme--; } swap_palette(settings.theme); } break; case SETTINGS_GLOBAL_MUTE: { if (settings.global_mute == 0) { settings.global_mute = TOGGLE_NUM - 1; } else { settings.global_mute--; } } break; case SETTINGS_GLOBAL_BPM: { if (settings.global_bpm == 0) { settings.global_bpm = TOGGLE_NUM - 1; } else { settings.global_bpm--; } redraw_bpm = true; settings.bpm = patterns[pattern_selection_loc].bpm; if (play_status) { update_bpm = true; } } break; case SETTINGS_AUTO_SAVE: { if (settings.auto_save == 0) { settings.auto_save = TOGGLE_NUM - 1; } else { settings.auto_save--; } } break; case SETTINGS_HELP: { if (settings.help == 0) { settings.help = TOGGLE_NUM - 1; } else { settings.help--; } } break; } save_metadata(); clear_screen = true; } if (key_tap(KEY_A)) { next_scene = SCENE_SEQUENCER; } if (key_tap(KEY_START)) { reset_sequencer(); toggle_playing(); } }