diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/drawing.c | 13 | ||||
-rw-r--r-- | src/dsound.c | 3 | ||||
-rw-r--r-- | src/sequencer.c | 64 | ||||
-rw-r--r-- | src/settings.c | 15 | ||||
-rw-r--r-- | src/settings.h | 44 |
5 files changed, 90 insertions, 49 deletions
diff --git a/src/drawing.c b/src/drawing.c index a485ec4..3f646a6 100644 --- a/src/drawing.c +++ b/src/drawing.c | |||
@@ -422,6 +422,7 @@ draw_bpm() { | |||
422 | settings.sync == SYNC_IN_LINK_48BPQ || | 422 | settings.sync == SYNC_IN_LINK_48BPQ || |
423 | settings.sync == SYNC_IN_LINK_24BPQ || | 423 | settings.sync == SYNC_IN_LINK_24BPQ || |
424 | settings.sync == SYNC_IN_LINK_12BPQ || | 424 | settings.sync == SYNC_IN_LINK_12BPQ || |
425 | settings.sync == SYNC_IN_LINK_6BPQ || | ||
425 | settings.sync == SYNC_IN_LINK_4BPQ) { | 426 | settings.sync == SYNC_IN_LINK_4BPQ) { |
426 | txt_drawf("SYNC", x + 2, y + 2, COL_FG); | 427 | txt_drawf("SYNC", x + 2, y + 2, COL_FG); |
427 | } else { | 428 | } else { |
@@ -904,12 +905,12 @@ draw_prob(u8 prob, u8 clr) { | |||
904 | void | 905 | void |
905 | draw_panning(s8 pan, u8 clr) { | 906 | draw_panning(s8 pan, u8 clr) { |
906 | switch (settings.sync) { | 907 | switch (settings.sync) { |
907 | case SYNC_OUT_LINK_AUDIO_4: | 908 | case SYNC_OUT_AUDIO_12BPQ: |
908 | case SYNC_OUT_LINK_AUDIO_8: | 909 | case SYNC_OUT_AUDIO_6BPQ: |
909 | case SYNC_OUT_LINK_AUDIO_16: | 910 | case SYNC_OUT_AUDIO_4BPQ: |
910 | case SYNC_OUT_AUDIO_4: | 911 | case SYNC_OUT_LINK_AUDIO_12BPQ: |
911 | case SYNC_OUT_AUDIO_8: | 912 | case SYNC_OUT_LINK_AUDIO_6BPQ: |
912 | case SYNC_OUT_AUDIO_16: { clr = COL_OFF; } break; | 913 | case SYNC_OUT_LINK_AUDIO_4BPQ: { clr = COL_OFF; } break; |
913 | default: break; | 914 | default: break; |
914 | } | 915 | } |
915 | size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; | 916 | size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; |
diff --git a/src/dsound.c b/src/dsound.c index cba8c86..1751e47 100644 --- a/src/dsound.c +++ b/src/dsound.c | |||
@@ -45,6 +45,9 @@ init_dsound(void) { | |||
45 | 45 | ||
46 | void | 46 | void |
47 | sound_vsync() { | 47 | sound_vsync() { |
48 | if (play_status == 0) { | ||
49 | return; | ||
50 | } | ||
48 | if(audio_buf_active == 1) { | 51 | if(audio_buf_active == 1) { |
49 | dma_transfer_copy(SOUND_FIFO_A, audio_buffer, 1, 1, | 52 | dma_transfer_copy(SOUND_FIFO_A, audio_buffer, 1, 1, |
50 | DMA_DST_FIXED | 53 | DMA_DST_FIXED |
diff --git a/src/sequencer.c b/src/sequencer.c index 7570a7a..a72eced 100644 --- a/src/sequencer.c +++ b/src/sequencer.c | |||
@@ -306,27 +306,14 @@ play_step(void) { | |||
306 | SOUND_NOISE_CTRL = 0; | 306 | SOUND_NOISE_CTRL = 0; |
307 | } | 307 | } |
308 | 308 | ||
309 | switch (settings.sync) { | ||
310 | case SYNC_OUT_LINK_16: { gate_on(); } break; | ||
311 | case SYNC_OUT_LINK_8: { if (step_counter % 2 == 0) { gate_on(); } } break; | ||
312 | case SYNC_OUT_LINK_4: { if (step_counter % 4 == 0) { gate_on(); } } break; | ||
313 | case SYNC_OUT_AUDIO_16: { audio_sync_click = true; } break; | ||
314 | case SYNC_OUT_AUDIO_8: { if (step_counter % 2 == 0) { audio_sync_click = true; } } break; | ||
315 | case SYNC_OUT_AUDIO_4: { if (step_counter % 4 == 0) { audio_sync_click = true; } } break; | ||
316 | case SYNC_OUT_LINK_AUDIO_16: { gate_on(); audio_sync_click = true; } break; | ||
317 | case SYNC_OUT_LINK_AUDIO_8: { if (step_counter % 2 == 0) { gate_on(); audio_sync_click = true; } } break; | ||
318 | case SYNC_OUT_LINK_AUDIO_4: { if (step_counter % 4 == 0) { gate_on(); audio_sync_click = true; } } break; | ||
319 | default: break; | ||
320 | } | ||
321 | |||
322 | // Adjust per-channel panning. | 309 | // Adjust per-channel panning. |
323 | switch (settings.sync) { | 310 | switch (settings.sync) { |
324 | case SYNC_OUT_LINK_AUDIO_4: | 311 | case SYNC_OUT_AUDIO_12BPQ: |
325 | case SYNC_OUT_LINK_AUDIO_8: | 312 | case SYNC_OUT_AUDIO_6BPQ: |
326 | case SYNC_OUT_LINK_AUDIO_16: | 313 | case SYNC_OUT_AUDIO_4BPQ: |
327 | case SYNC_OUT_AUDIO_4: | 314 | case SYNC_OUT_LINK_AUDIO_12BPQ: |
328 | case SYNC_OUT_AUDIO_8: | 315 | case SYNC_OUT_LINK_AUDIO_6BPQ: |
329 | case SYNC_OUT_AUDIO_16: break; | 316 | case SYNC_OUT_LINK_AUDIO_4BPQ: break; |
330 | default: { | 317 | default: { |
331 | SOUND_DMG_MASTER = dmg_stereo_vol(3) | 318 | SOUND_DMG_MASTER = dmg_stereo_vol(3) |
332 | | channel_vol(SOUND_SQUARE1, pan[0]) | 319 | | channel_vol(SOUND_SQUARE1, pan[0]) |
@@ -485,6 +472,21 @@ env_start: | |||
485 | 472 | ||
486 | void | 473 | void |
487 | sequencer_tick(void) { | 474 | sequencer_tick(void) { |
475 | switch (settings.sync) { | ||
476 | case SYNC_OUT_LINK_96BPQ: { gate_on(); } break; | ||
477 | case SYNC_OUT_LINK_48BPQ: { if (nseq_ticks % 2 == 0) { gate_on(); } } break; | ||
478 | case SYNC_OUT_LINK_24BPQ: { if (nseq_ticks % 4 == 0) { gate_on(); } } break; | ||
479 | case SYNC_OUT_LINK_12BPQ: { if (nseq_ticks % 8 == 0) { gate_on(); } } break; | ||
480 | case SYNC_OUT_LINK_6BPQ: { if (nseq_ticks % 16 == 0) { gate_on(); } } break; | ||
481 | case SYNC_OUT_LINK_4BPQ: { if (nseq_ticks % 24 == 0) { gate_on(); } } break; | ||
482 | case SYNC_OUT_AUDIO_12BPQ: { if (nseq_ticks % 8 == 0) { audio_sync_click = true; } } break; | ||
483 | case SYNC_OUT_AUDIO_6BPQ: { if (nseq_ticks % 16 == 0) { audio_sync_click = true; } } break; | ||
484 | case SYNC_OUT_AUDIO_4BPQ: { if (nseq_ticks % 24 == 0) { audio_sync_click = true; } } break; | ||
485 | case SYNC_OUT_LINK_AUDIO_12BPQ: { if (nseq_ticks % 8 == 0) { gate_on(); audio_sync_click = true; } } break; | ||
486 | case SYNC_OUT_LINK_AUDIO_6BPQ: { if (nseq_ticks % 16 == 0) { audio_sync_click = true; } } break; | ||
487 | case SYNC_OUT_LINK_AUDIO_4BPQ: { if (nseq_ticks % 24 == 0) { gate_on(); audio_sync_click = true; } } break; | ||
488 | default: break; | ||
489 | } | ||
488 | if (nseq_ticks++ == 0) { | 490 | if (nseq_ticks++ == 0) { |
489 | play_step(); | 491 | play_step(); |
490 | } else if (nseq_ticks == 24) { | 492 | } else if (nseq_ticks == 24) { |
@@ -499,6 +501,7 @@ set_time(int bpm) { | |||
499 | settings.sync == SYNC_IN_LINK_48BPQ || | 501 | settings.sync == SYNC_IN_LINK_48BPQ || |
500 | settings.sync == SYNC_IN_LINK_24BPQ || | 502 | settings.sync == SYNC_IN_LINK_24BPQ || |
501 | settings.sync == SYNC_IN_LINK_12BPQ || | 503 | settings.sync == SYNC_IN_LINK_12BPQ || |
504 | settings.sync == SYNC_IN_LINK_6BPQ || | ||
502 | settings.sync == SYNC_IN_LINK_4BPQ) { | 505 | settings.sync == SYNC_IN_LINK_4BPQ) { |
503 | return; | 506 | return; |
504 | } | 507 | } |
@@ -1887,6 +1890,29 @@ sync_in_12(void) { | |||
1887 | } | 1890 | } |
1888 | 1891 | ||
1889 | void | 1892 | void |
1893 | sync_in_6(void) { | ||
1894 | if (play_status) { | ||
1895 | // 6bpq -> 96bpq. | ||
1896 | sequencer_tick(); | ||
1897 | sequencer_tick(); | ||
1898 | sequencer_tick(); | ||
1899 | sequencer_tick(); | ||
1900 | sequencer_tick(); | ||
1901 | sequencer_tick(); | ||
1902 | sequencer_tick(); | ||
1903 | sequencer_tick(); | ||
1904 | sequencer_tick(); | ||
1905 | sequencer_tick(); | ||
1906 | sequencer_tick(); | ||
1907 | sequencer_tick(); | ||
1908 | sequencer_tick(); | ||
1909 | sequencer_tick(); | ||
1910 | sequencer_tick(); | ||
1911 | sequencer_tick(); | ||
1912 | } | ||
1913 | } | ||
1914 | |||
1915 | void | ||
1890 | sync_in_4(void) { | 1916 | sync_in_4(void) { |
1891 | if (play_status) { | 1917 | if (play_status) { |
1892 | // 4bpq -> 96bpq. | 1918 | // 4bpq -> 96bpq. |
diff --git a/src/settings.c b/src/settings.c index 3e8138e..48cc3e7 100644 --- a/src/settings.c +++ b/src/settings.c | |||
@@ -12,6 +12,7 @@ void sync_in_96(void); | |||
12 | void sync_in_48(void); | 12 | void sync_in_48(void); |
13 | void sync_in_24(void); | 13 | void sync_in_24(void); |
14 | void sync_in_12(void); | 14 | void sync_in_12(void); |
15 | void sync_in_6(void); | ||
15 | void sync_in_4(void); | 16 | void sync_in_4(void); |
16 | void toggle_playing(void); | 17 | void toggle_playing(void); |
17 | void stop_playing(void); | 18 | void stop_playing(void); |
@@ -22,12 +23,14 @@ set_audio_settings(void) { | |||
22 | settings.sync == SYNC_IN_LINK_48BPQ || | 23 | settings.sync == SYNC_IN_LINK_48BPQ || |
23 | settings.sync == SYNC_IN_LINK_24BPQ || | 24 | settings.sync == SYNC_IN_LINK_24BPQ || |
24 | settings.sync == SYNC_IN_LINK_12BPQ || | 25 | settings.sync == SYNC_IN_LINK_12BPQ || |
26 | settings.sync == SYNC_IN_LINK_6BPQ || | ||
25 | settings.sync == SYNC_IN_LINK_4BPQ) { | 27 | settings.sync == SYNC_IN_LINK_4BPQ) { |
26 | switch (settings.sync) { | 28 | switch (settings.sync) { |
27 | case SYNC_IN_LINK_96BPQ: { irs_set(IRQ_SERIAL, sync_in_96); } break; | 29 | case SYNC_IN_LINK_96BPQ: { irs_set(IRQ_SERIAL, sync_in_96); } break; |
28 | case SYNC_IN_LINK_48BPQ: { irs_set(IRQ_SERIAL, sync_in_48); } break; | 30 | case SYNC_IN_LINK_48BPQ: { irs_set(IRQ_SERIAL, sync_in_48); } break; |
29 | case SYNC_IN_LINK_24BPQ: { irs_set(IRQ_SERIAL, sync_in_24); } break; | 31 | case SYNC_IN_LINK_24BPQ: { irs_set(IRQ_SERIAL, sync_in_24); } break; |
30 | case SYNC_IN_LINK_12BPQ: { irs_set(IRQ_SERIAL, sync_in_12); } break; | 32 | case SYNC_IN_LINK_12BPQ: { irs_set(IRQ_SERIAL, sync_in_12); } break; |
33 | case SYNC_IN_LINK_6BPQ: { irs_set(IRQ_SERIAL, sync_in_6); } break; | ||
31 | case SYNC_IN_LINK_4BPQ: { irs_set(IRQ_SERIAL, sync_in_4); } break; | 34 | case SYNC_IN_LINK_4BPQ: { irs_set(IRQ_SERIAL, sync_in_4); } break; |
32 | default: break; | 35 | default: break; |
33 | } | 36 | } |
@@ -42,12 +45,12 @@ set_audio_settings(void) { | |||
42 | irs_set(IRQ_SERIAL, NULL); | 45 | irs_set(IRQ_SERIAL, NULL); |
43 | } | 46 | } |
44 | switch (settings.sync) { | 47 | switch (settings.sync) { |
45 | case SYNC_OUT_LINK_AUDIO_4: | 48 | case SYNC_OUT_AUDIO_12BPQ: |
46 | case SYNC_OUT_LINK_AUDIO_8: | 49 | case SYNC_OUT_AUDIO_6BPQ: |
47 | case SYNC_OUT_LINK_AUDIO_16: | 50 | case SYNC_OUT_AUDIO_4BPQ: |
48 | case SYNC_OUT_AUDIO_4: | 51 | case SYNC_OUT_LINK_AUDIO_12BPQ: |
49 | case SYNC_OUT_AUDIO_8: | 52 | case SYNC_OUT_LINK_AUDIO_6BPQ: |
50 | case SYNC_OUT_AUDIO_16: { | 53 | case SYNC_OUT_LINK_AUDIO_4BPQ: { |
51 | SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 | 54 | SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 |
52 | | SOUND_SQUARE2 | 55 | | SOUND_SQUARE2 |
53 | | SOUND_WAVE | 56 | | SOUND_WAVE |
diff --git a/src/settings.h b/src/settings.h index fc8e8a0..916f1be 100644 --- a/src/settings.h +++ b/src/settings.h | |||
@@ -13,38 +13,46 @@ typedef enum SettingsList { | |||
13 | 13 | ||
14 | typedef enum SyncSetting { | 14 | typedef enum SyncSetting { |
15 | SYNC_NONE = 0, | 15 | SYNC_NONE = 0, |
16 | SYNC_OUT_LINK_16, | 16 | SYNC_OUT_LINK_96BPQ, |
17 | SYNC_OUT_LINK_8, | 17 | SYNC_OUT_LINK_48BPQ, |
18 | SYNC_OUT_LINK_4, | 18 | SYNC_OUT_LINK_24BPQ, |
19 | SYNC_OUT_AUDIO_16, | 19 | SYNC_OUT_LINK_12BPQ, |
20 | SYNC_OUT_AUDIO_8, | 20 | SYNC_OUT_LINK_6BPQ, |
21 | SYNC_OUT_AUDIO_4, | 21 | SYNC_OUT_LINK_4BPQ, |
22 | SYNC_OUT_LINK_AUDIO_16, | 22 | SYNC_OUT_AUDIO_12BPQ, |
23 | SYNC_OUT_LINK_AUDIO_8, | 23 | SYNC_OUT_AUDIO_6BPQ, |
24 | SYNC_OUT_LINK_AUDIO_4, | 24 | SYNC_OUT_AUDIO_4BPQ, |
25 | SYNC_OUT_LINK_AUDIO_12BPQ, | ||
26 | SYNC_OUT_LINK_AUDIO_6BPQ, | ||
27 | SYNC_OUT_LINK_AUDIO_4BPQ, | ||
25 | SYNC_IN_LINK_96BPQ, | 28 | SYNC_IN_LINK_96BPQ, |
26 | SYNC_IN_LINK_48BPQ, | 29 | SYNC_IN_LINK_48BPQ, |
27 | SYNC_IN_LINK_24BPQ, | 30 | SYNC_IN_LINK_24BPQ, |
28 | SYNC_IN_LINK_12BPQ, | 31 | SYNC_IN_LINK_12BPQ, |
32 | SYNC_IN_LINK_6BPQ, | ||
29 | SYNC_IN_LINK_4BPQ, | 33 | SYNC_IN_LINK_4BPQ, |
30 | SYNC_NUM, | 34 | SYNC_NUM, |
31 | } SyncSetting; | 35 | } SyncSetting; |
32 | 36 | ||
33 | char * sync_setting_str[] = { | 37 | char * sync_setting_str[] = { |
34 | "NONE", | 38 | "NONE", |
35 | "LINK OUT (16)", | 39 | "LINK OUT (96BPQ)", |
36 | "LINK OUT (8)", | 40 | "LINK OUT (48BPQ)", |
37 | "LINK OUT (4)", | 41 | "LINK OUT (24BPQ)", |
38 | "AUDIO OUT (16)", | 42 | "LINK OUT (12BPQ)", |
39 | "AUDIO OUT (8)", | 43 | "LINK OUT (6BPQ)", |
40 | "AUDIO OUT (4)", | 44 | "LINK OUT (4BPQ)", |
41 | "LINK+AUDIO OUT (16)", | 45 | "AUDIO OUT (12BPQ)", |
42 | "LINK+AUDIO OUT (8)", | 46 | "AUDIO OUT (6BPQ)", |
43 | "LINK+AUDIO OUT (4)", | 47 | "AUDIO OUT (4BPQ)", |
48 | "LINK+AUDIO OUT (12BPQ)", | ||
49 | "LINK+AUDIO OUT (6BPQ)", | ||
50 | "LINK+AUDIO OUT (4BPQ)", | ||
44 | "LINK IN (96BPQ)", | 51 | "LINK IN (96BPQ)", |
45 | "LINK IN (48BPQ)", | 52 | "LINK IN (48BPQ)", |
46 | "LINK IN (24BPQ)", | 53 | "LINK IN (24BPQ)", |
47 | "LINK IN (12BPQ)", | 54 | "LINK IN (12BPQ)", |
55 | "LINK IN (6BPQ)", | ||
48 | "LINK IN (4BPQ)", | 56 | "LINK IN (4BPQ)", |
49 | }; | 57 | }; |
50 | 58 | ||