blob: cba8c86566854d04b9f21f4b4417bef52d1b659e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
static bool audio_sync_click = false;
#define AUDIO_FREQ 40137
#define AUDIO_BUF_LEN 672
#define AUDIO_TIMER 65118
s8 audio_buffer[AUDIO_BUF_LEN * 2];
static int audio_buf_active = 1;
void
click_timer(void) {
DMA_TRANSFER[1].ctrl = 0;
TIMER_CTRL_0 = 0;
TIMER_CTRL_1 = 0;
}
void
play_click(void) {
DMA_TRANSFER[1].ctrl = 0;
audio_buf_active = 1;
TIMER_CTRL_0 = 0;
TIMER_CTRL_1 = 0;
TIMER_DATA_1 = 0xFFFF - 1500;
TIMER_CTRL_1 = TIMER_CTRL_ENABLE | TIMER_CTRL_CASCADE;
irs_set(IRQ_TIMER_1, click_timer);
TIMER_DATA_0 = AUDIO_TIMER;
TIMER_CTRL_0 = TIMER_CTRL_ENABLE;
audio_sync_click = false;
}
void
init_dsound(void) {
// Initialize audio buffers/channels.
int high = 1;
for (size_t i = 0; i < AUDIO_BUF_LEN * 2; i++) {
audio_buffer[i] = 127 * high;
if (i % AUDIO_BUF_LEN == 0) {
high *= -1;
}
}
// Enable the sound chip.
SOUND_STATUS = SOUND_ENABLE;
}
void
sound_vsync() {
if(audio_buf_active == 1) {
dma_transfer_copy(SOUND_FIFO_A, audio_buffer, 1, 1,
DMA_DST_FIXED
| DMA_CHUNK_32
| DMA_REFRESH
| DMA_REPEAT
| DMA_ENABLE);
// Start playing and set the backbuffer.
audio_buf_active = 0;
} else {
// Flip front/backbuffer.
audio_buf_active = 1;
}
}
|