aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-05-10 18:10:27 +0200
committerBad Diode <bd@badd10de.dev>2024-05-10 18:10:27 +0200
commit3240295fb846dfb0cf95ceef399b3ef9f085b2bd (patch)
tree7959a735f5da2ffdd50a5ed0588fb67b1607e9a3
parent33451307ae4e3a4119dd6be46b25aec03aa51b5d (diff)
downloadstepper-3240295fb846dfb0cf95ceef399b3ef9f085b2bd.tar.gz
stepper-3240295fb846dfb0cf95ceef399b3ef9f085b2bd.zip
Refactor gate send functions
-rw-r--r--src/main.c2
-rw-r--r--src/sequencer.c191
2 files changed, 67 insertions, 126 deletions
diff --git a/src/main.c b/src/main.c
index 81e47a1..170e0e0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -255,7 +255,7 @@ main(void) {
255 255
256 // Register interrupts. 256 // Register interrupts.
257 irq_init(); 257 irq_init();
258 irs_set(IRQ_VBLANK, irs_stub); 258 irs_set(IRQ_VBLANK, sound_vsync);
259 259
260 // Initialize sequencer. 260 // Initialize sequencer.
261 sequencer_init(); 261 sequencer_init();
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 25INLINE void
26void 26gate_set(u8 sc, u8 so) {
27gate_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
40int pulses_sent = 0; 38int pulses_sent = 0;
@@ -44,22 +42,14 @@ void
44gate_lsdj(void) { 42gate_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
72void 62//void
73gate_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
119bool first_pulse = true; 109bool first_pulse = true;
120int so_status = 1; 110int 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
851void 801void
@@ -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}