aboutsummaryrefslogtreecommitdiffstats
path: root/src/dsound.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-08-06 11:13:22 +0200
committerBad Diode <bd@badd10de.dev>2023-08-06 11:13:22 +0200
commit8aa5155ecfbaaa2e67f82561352a5857bc86d39e (patch)
tree511b4efe38f661287a939a6758f91d2b64cf71c1 /src/dsound.c
parente66f7459129285ff0c69d17089c144189b0dad80 (diff)
downloadstepper-8aa5155ecfbaaa2e67f82561352a5857bc86d39e.tar.gz
stepper-8aa5155ecfbaaa2e67f82561352a5857bc86d39e.zip
Add missing .c files and wishlist TODOs
Diffstat (limited to 'src/dsound.c')
-rw-r--r--src/dsound.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/dsound.c b/src/dsound.c
new file mode 100644
index 0000000..cba8c86
--- /dev/null
+++ b/src/dsound.c
@@ -0,0 +1,61 @@
1static bool audio_sync_click = false;
2#define AUDIO_FREQ 40137
3#define AUDIO_BUF_LEN 672
4#define AUDIO_TIMER 65118
5
6s8 audio_buffer[AUDIO_BUF_LEN * 2];
7static int audio_buf_active = 1;
8
9void
10click_timer(void) {
11 DMA_TRANSFER[1].ctrl = 0;
12 TIMER_CTRL_0 = 0;
13 TIMER_CTRL_1 = 0;
14}
15
16void
17play_click(void) {
18 DMA_TRANSFER[1].ctrl = 0;
19 audio_buf_active = 1;
20 TIMER_CTRL_0 = 0;
21 TIMER_CTRL_1 = 0;
22 TIMER_DATA_1 = 0xFFFF - 1500;
23 TIMER_CTRL_1 = TIMER_CTRL_ENABLE | TIMER_CTRL_CASCADE;
24 irs_set(IRQ_TIMER_1, click_timer);
25 TIMER_DATA_0 = AUDIO_TIMER;
26 TIMER_CTRL_0 = TIMER_CTRL_ENABLE;
27 audio_sync_click = false;
28}
29
30void
31init_dsound(void) {
32 // Initialize audio buffers/channels.
33 int high = 1;
34 for (size_t i = 0; i < AUDIO_BUF_LEN * 2; i++) {
35 audio_buffer[i] = 127 * high;
36 if (i % AUDIO_BUF_LEN == 0) {
37 high *= -1;
38 }
39 }
40
41 // Enable the sound chip.
42 SOUND_STATUS = SOUND_ENABLE;
43}
44
45
46void
47sound_vsync() {
48 if(audio_buf_active == 1) {
49 dma_transfer_copy(SOUND_FIFO_A, audio_buffer, 1, 1,
50 DMA_DST_FIXED
51 | DMA_CHUNK_32
52 | DMA_REFRESH
53 | DMA_REPEAT
54 | DMA_ENABLE);
55 // Start playing and set the backbuffer.
56 audio_buf_active = 0;
57 } else {
58 // Flip front/backbuffer.
59 audio_buf_active = 1;
60 }
61}