diff options
Diffstat (limited to 'src/sequencer.c')
-rw-r--r-- | src/sequencer.c | 191 |
1 files changed, 66 insertions, 125 deletions
diff --git a/src/sequencer.c b/src/sequencer.c index a70ae85..9e39cc7 100644 --- a/src/sequencer.c +++ b/src/sequencer.c | |||
@@ -22,19 +22,17 @@ clear_pattern(size_t idx) { | |||
22 | redraw_bpm = true; | 22 | redraw_bpm = true; |
23 | redraw_params = true; | 23 | redraw_params = true; |
24 | } | 24 | } |
25 | 25 | INLINE void | |
26 | void | 26 | gate_set(u8 sc, u8 so) { |
27 | gate_off(void) { | 27 | SIO_MODE = SIO_MODE_GP |
28 | // SIO_MODE = SIO_MODE_GP | 28 | | SIO_SC_OUT(1) |
29 | // | SIO_SC_OUT(1) | 29 | | SIO_SO_OUT(1) |
30 | // | SIO_SD_OUT(0) | 30 | | SIO_SD_OUT(0) |
31 | // | SIO_SI_OUT(0) | 31 | | SIO_SI_OUT(0) |
32 | // | SIO_SO_OUT(0) | 32 | | SIO_SC(sc) |
33 | // | SIO_SI(0) | 33 | | SIO_SO(so) |
34 | // | SIO_SC(0) | 34 | | SIO_SD(0) |
35 | // | SIO_SD(0) | 35 | | SIO_SI(0); |
36 | // | SIO_SO(0); | ||
37 | // TIMER_CTRL_3 = 0; | ||
38 | } | 36 | } |
39 | 37 | ||
40 | int pulses_sent = 0; | 38 | int pulses_sent = 0; |
@@ -44,22 +42,14 @@ void | |||
44 | gate_lsdj(void) { | 42 | gate_lsdj(void) { |
45 | gate_status ^= 1; | 43 | gate_status ^= 1; |
46 | if (pulses_sent >= 7) { | 44 | if (pulses_sent >= 7) { |
47 | gate_off(); | 45 | gate_set(0, 0); |
48 | return; | 46 | return; |
49 | } | 47 | } |
50 | if (gate_status == 1) { | 48 | if (gate_status == 1) { |
51 | gate_off(); | 49 | gate_set(0, 0); |
52 | } else { | 50 | } else { |
53 | pulses_sent++; | 51 | pulses_sent++; |
54 | SIO_MODE = SIO_MODE_GP | 52 | gate_set(1, 0); |
55 | | SIO_SC_OUT(1) | ||
56 | | SIO_SD_OUT(0) | ||
57 | | SIO_SI_OUT(0) | ||
58 | | SIO_SO_OUT(0) | ||
59 | | SIO_SI(0) | ||
60 | | SIO_SC(1) | ||
61 | | SIO_SD(0) | ||
62 | | SIO_SO(0); | ||
63 | } | 53 | } |
64 | int n_ticks = -80 / 8 / 2; // 5ms | 54 | int n_ticks = -80 / 8 / 2; // 5ms |
65 | irs_set(IRQ_TIMER_3, gate_lsdj); | 55 | irs_set(IRQ_TIMER_3, gate_lsdj); |
@@ -69,52 +59,52 @@ gate_lsdj(void) { | |||
69 | 59 | ||
70 | // TODO: LSDJ sync pulse? | 60 | // TODO: LSDJ sync pulse? |
71 | 61 | ||
72 | void | 62 | //void |
73 | gate_on(void) { | 63 | //gate_on(void) { |
74 | // SYNC24 NOTES | 64 | // // SYNC24 NOTES |
75 | // (from https://e-rm.de/data/E-RM_report_HowToDinSync_10_14_EN.pdf) | 65 | // // (from https://e-rm.de/data/E-RM_report_HowToDinSync_10_14_EN.pdf) |
76 | // | 66 | // // |
77 | // "Moreover, a duty cycle of 50% doesn’t seem to be nescessary, all tested | 67 | // // "Moreover, a duty cycle of 50% doesn’t seem to be nescessary, all tested |
78 | // machines were able to sync properly to clock ticks with a positive width | 68 | // // machines were able to sync properly to clock ticks with a positive width |
79 | // of 5 ms to up to 300 BPM" @ 24bpq | 69 | // // of 5 ms to up to 300 BPM" @ 24bpq |
80 | // | 70 | // // |
81 | // int bpm = 100; | 71 | // // int bpm = 100; |
82 | // if (settings.global_bpm) { | 72 | // // if (settings.global_bpm) { |
83 | // bpm = settings.bpm; | 73 | // // bpm = settings.bpm; |
84 | // } else { | 74 | // // } else { |
85 | // bpm patterns[current_pattern].bpm; | 75 | // // bpm patterns[current_pattern].bpm; |
86 | // } | 76 | // // } |
87 | // gate_off(); | 77 | // // gate_off(); |
88 | // pulses_sent = 0; | 78 | // // pulses_sent = 0; |
89 | // gate_status = 0; | 79 | // // gate_status = 0; |
90 | // SIO_MODE = SIO_MODE_GP | 80 | // // SIO_MODE = SIO_MODE_GP |
91 | // | SIO_SC_OUT(1) | 81 | // // | SIO_SC_OUT(1) |
92 | // | SIO_SD_OUT(0) | 82 | // // | SIO_SO_OUT(0) |
93 | // | SIO_SI_OUT(0) | 83 | // // | SIO_SD_OUT(0) |
94 | // | SIO_SO_OUT(0) | 84 | // // | SIO_SI_OUT(0) |
95 | // | SIO_SI(0) | 85 | // // | SIO_SC(1) |
96 | // | SIO_SC(1) | 86 | // // | SIO_SO(0) |
97 | // | SIO_SD(0) | 87 | // // | SIO_SD(0) |
98 | // | SIO_SO(0); | 88 | // // | SIO_SI(0); |
99 | // // int n_ticks = -80; // 5ms | 89 | // // // int n_ticks = -80; // 5ms |
100 | // // irs_set(IRQ_TIMER_3, gate_off); | 90 | // // // irs_set(IRQ_TIMER_3, gate_off); |
101 | // // TIMER_DATA_3 = n_ticks; | 91 | // // // TIMER_DATA_3 = n_ticks; |
102 | // // TIMER_CTRL_3 = TIMER_CTRL_IRQ | TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3; | 92 | // // // TIMER_CTRL_3 = TIMER_CTRL_IRQ | TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3; |
103 | // int n_ticks = -80 / 8 / 2; // 5ms | 93 | // // int n_ticks = -80 / 8 / 2; // 5ms |
104 | // irs_set(IRQ_TIMER_3, gate_lsdj); | 94 | // // irs_set(IRQ_TIMER_3, gate_lsdj); |
105 | // TIMER_DATA_3 = n_ticks; | 95 | // // TIMER_DATA_3 = n_ticks; |
106 | // TIMER_CTRL_3 = TIMER_CTRL_IRQ | TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3; | 96 | // // TIMER_CTRL_3 = TIMER_CTRL_IRQ | TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3; |
107 | // int n_ticks = -79; // 5ms | 97 | // // int n_ticks = -79; // 5ms |
108 | // TIMER_DATA_3 = n_ticks; | 98 | // // TIMER_DATA_3 = n_ticks; |
109 | // TIMER_CTRL_3 = TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3; | 99 | // // TIMER_CTRL_3 = TIMER_CTRL_ENABLE | TIMER_CTRL_FREQ_3; |
110 | // while (1) { | 100 | // // while (1) { |
111 | // int cnt = TIMER_DATA_3; | 101 | // // int cnt = TIMER_DATA_3; |
112 | // if (cnt >= 80) { | 102 | // // if (cnt >= 80) { |
113 | // gate_off(); | 103 | // // gate_off(); |
114 | // break; | 104 | // // break; |
115 | // } | 105 | // // } |
116 | // } | 106 | // // } |
117 | } | 107 | //} |
118 | 108 | ||
119 | bool first_pulse = true; | 109 | bool first_pulse = true; |
120 | int so_status = 1; | 110 | int so_status = 1; |
@@ -124,38 +114,14 @@ lsdj_toggle(void) { | |||
124 | gate_status ^= 1; | 114 | gate_status ^= 1; |
125 | if (pulses_sent >= 7) { | 115 | if (pulses_sent >= 7) { |
126 | TIMER_CTRL_3 = 0; | 116 | TIMER_CTRL_3 = 0; |
127 | SIO_MODE = SIO_MODE_GP | 117 | gate_set(1, so_status); |
128 | | SIO_SI_OUT(0) | ||
129 | | SIO_SC_OUT(1) | ||
130 | | SIO_SD_OUT(0) | ||
131 | | SIO_SO_OUT(1) | ||
132 | | SIO_SI(0) | ||
133 | | SIO_SC(1) | ||
134 | | SIO_SD(0) | ||
135 | | SIO_SO(so_status); | ||
136 | return; | 118 | return; |
137 | } | 119 | } |
138 | if (gate_status == 1) { | 120 | if (gate_status == 1) { |
139 | SIO_MODE = SIO_MODE_GP | 121 | gate_set(1, so_status); |
140 | | SIO_SI_OUT(0) | ||
141 | | SIO_SC_OUT(1) | ||
142 | | SIO_SD_OUT(0) | ||
143 | | SIO_SO_OUT(1) | ||
144 | | SIO_SI(0) | ||
145 | | SIO_SC(1) | ||
146 | | SIO_SD(0) | ||
147 | | SIO_SO(so_status); | ||
148 | } else { | 122 | } else { |
149 | pulses_sent++; | 123 | pulses_sent++; |
150 | SIO_MODE = SIO_MODE_GP | 124 | gate_set(0, so_status); |
151 | | SIO_SI_OUT(0) | ||
152 | | SIO_SC_OUT(1) | ||
153 | | SIO_SD_OUT(0) | ||
154 | | SIO_SO_OUT(1) | ||
155 | | SIO_SI(0) | ||
156 | | SIO_SC(0) | ||
157 | | SIO_SD(0) | ||
158 | | SIO_SO(so_status); | ||
159 | } | 125 | } |
160 | TIMER_CTRL_3 = 0; | 126 | TIMER_CTRL_3 = 0; |
161 | // int n_ticks = -80 / 8 / 2; // 5ms | 127 | // int n_ticks = -80 / 8 / 2; // 5ms |
@@ -191,15 +157,7 @@ lsdj_pulse(void) { | |||
191 | TIMER_DATA_3 = 0; | 157 | TIMER_DATA_3 = 0; |
192 | pulses_sent = 0; | 158 | pulses_sent = 0; |
193 | gate_status = 0; | 159 | gate_status = 0; |
194 | SIO_MODE = SIO_MODE_GP | 160 | gate_set(0, so_status); |
195 | | SIO_SC_OUT(1) | ||
196 | | SIO_SD_OUT(0) | ||
197 | | SIO_SI_OUT(0) | ||
198 | | SIO_SO_OUT(1) | ||
199 | | SIO_SI(0) | ||
200 | | SIO_SC(0) | ||
201 | | SIO_SD(0) | ||
202 | | SIO_SO(so_status); | ||
203 | int n_ticks = -9; // 122/2 = 61us; 61 / 3.8 = 16 | 161 | int n_ticks = -9; // 122/2 = 61us; 61 / 3.8 = 16 |
204 | irs_set(IRQ_TIMER_3, lsdj_toggle); | 162 | irs_set(IRQ_TIMER_3, lsdj_toggle); |
205 | TIMER_DATA_3 = n_ticks; | 163 | TIMER_DATA_3 = n_ticks; |
@@ -837,15 +795,7 @@ stop_sound(void) { | |||
837 | SOUND_NOISE_CTRL = 0; | 795 | SOUND_NOISE_CTRL = 0; |
838 | redraw_play_pause = true; | 796 | redraw_play_pause = true; |
839 | redraw_pattern_buttons = true; | 797 | redraw_pattern_buttons = true; |
840 | SIO_MODE = SIO_MODE_GP | 798 | gate_set(1, 1); |
841 | | SIO_SI_OUT(0) | ||
842 | | SIO_SC_OUT(1) | ||
843 | | SIO_SD_OUT(0) | ||
844 | | SIO_SO_OUT(1) | ||
845 | | SIO_SI(0) | ||
846 | | SIO_SC(1) | ||
847 | | SIO_SD(0) | ||
848 | | SIO_SO(1); | ||
849 | } | 799 | } |
850 | 800 | ||
851 | void | 801 | void |
@@ -2154,14 +2104,5 @@ sequencer_init(void) { | |||
2154 | SOUND_STATUS = SOUND_ENABLE; | 2104 | SOUND_STATUS = SOUND_ENABLE; |
2155 | init_dsound(); | 2105 | init_dsound(); |
2156 | set_audio_settings(); | 2106 | set_audio_settings(); |
2157 | // gate_off(); | 2107 | gate_set(1, 1); |
2158 | SIO_MODE = SIO_MODE_GP | ||
2159 | | SIO_SC_OUT(1) | ||
2160 | | SIO_SD_OUT(0) | ||
2161 | | SIO_SI_OUT(0) | ||
2162 | | SIO_SO_OUT(1) | ||
2163 | | SIO_SI(0) | ||
2164 | | SIO_SC(1) | ||
2165 | | SIO_SD(0) | ||
2166 | | SIO_SO(1); | ||
2167 | } | 2108 | } |