Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
501 lines (413 loc) · 14.4 KB

SDL_mintaudio_xbios.c

File metadata and controls

501 lines (413 loc) · 14.4 KB
 
1
2
/*
SDL - Simple DirectMedia Layer
Jan 4, 2004
Jan 4, 2004
3
Copyright (C) 1997-2004 Sam Lantinga
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Sam Lantinga
slouken@libsdl.org
*/
Feb 21, 2006
Feb 21, 2006
22
#include "SDL_config.h"
23
24
25
26
27
/*
MiNT audio driver
using XBIOS functions (Falcon)
Oct 29, 2004
Oct 29, 2004
28
Patrice Mandin, Didier Méquignon
29
30
*/
Oct 29, 2004
Oct 29, 2004
31
#include <unistd.h>
Aug 10, 2005
Aug 10, 2005
32
#include <support.h>
33
34
35
36
37
38
39
/* Mint includes */
#include <mint/osbind.h>
#include <mint/falcon.h>
#include <mint/cookie.h>
#include "SDL_audio.h"
Feb 16, 2006
Feb 16, 2006
40
41
#include "../SDL_audio_c.h"
#include "../SDL_sysaudio.h"
42
Feb 21, 2006
Feb 21, 2006
43
#include "../../video/ataricommon/SDL_atarimxalloc_c.h"
44
45
#include "SDL_mintaudio.h"
Oct 29, 2004
Oct 29, 2004
46
#include "SDL_mintaudio_dma8.h"
47
48
49
50
51
52
53
/*--- Defines ---*/
#define MINT_AUDIO_DRIVER_NAME "mint_xbios"
/* Debug print info */
#define DEBUG_NAME "audio:xbios: "
Oct 29, 2004
Oct 29, 2004
54
#if 0
55
56
57
58
59
60
61
62
#define DEBUG_PRINT(what) \
{ \
printf what; \
}
#else
#define DEBUG_PRINT(what)
#endif
Oct 7, 2006
Oct 7, 2006
63
static unsigned long cookie_snd = 0;
64
Jul 10, 2006
Jul 10, 2006
65
static int
Oct 7, 2006
Oct 7, 2006
66
MINTXBIOS_Available(void)
67
{
Oct 7, 2006
Oct 7, 2006
68
unsigned long dummy = 0;
Sep 24, 2006
Sep 24, 2006
69
/*SDL_MintAudio_mint_present = (Getcookie(C_MiNT, &dummy) == C_FOUND); */
Sep 12, 2006
Sep 12, 2006
70
SDL_MintAudio_mint_present = SDL_FALSE;
Jul 20, 2005
Jul 20, 2005
71
Jul 10, 2006
Jul 10, 2006
72
73
74
75
/* We can't use XBIOS in interrupt with Magic, don't know about thread */
if (Getcookie(C_MagX, &dummy) == C_FOUND) {
return (0);
}
Jul 29, 2005
Jul 29, 2005
76
Jul 10, 2006
Jul 10, 2006
77
78
79
80
/* Cookie _SND present ? if not, assume ST machine */
if (Getcookie(C__SND, &cookie_snd) == C_NOTFOUND) {
cookie_snd = SND_PSG;
}
81
Jul 10, 2006
Jul 10, 2006
82
83
84
85
86
/* Check if we have 16 bits audio */
if ((cookie_snd & SND_16BIT) == 0) {
DEBUG_PRINT((DEBUG_NAME "no 16 bits sound\n"));
return (0);
}
87
Jul 10, 2006
Jul 10, 2006
88
89
90
91
92
/* Check if audio is lockable */
if (Locksnd() != 1) {
DEBUG_PRINT((DEBUG_NAME "audio locked by other application\n"));
return (0);
}
93
Jul 10, 2006
Jul 10, 2006
94
Unlocksnd();
95
Jul 10, 2006
Jul 10, 2006
96
97
DEBUG_PRINT((DEBUG_NAME "XBIOS audio available!\n"));
return (1);
98
99
}
Jul 10, 2006
Jul 10, 2006
100
static void
Oct 7, 2006
Oct 7, 2006
101
MINTXBIOS_LockDevice(_THIS)
102
{
Jul 10, 2006
Jul 10, 2006
103
104
/* Stop replay */
Buffoper(0);
105
106
}
Jul 10, 2006
Jul 10, 2006
107
static void
Oct 7, 2006
Oct 7, 2006
108
MINTXBIOS_UnlockDevice(_THIS)
109
{
Jul 10, 2006
Jul 10, 2006
110
111
/* Restart replay */
Buffoper(SB_PLA_ENA | SB_PLA_RPT);
112
113
}
Jul 10, 2006
Jul 10, 2006
114
static void
Oct 7, 2006
Oct 7, 2006
115
MINTXBIOS_CloseDevice(_THIS)
116
{
Oct 7, 2006
Oct 7, 2006
117
118
119
120
121
122
123
124
125
if (this->hidden != NULL) {
/* Stop replay */
SDL_MintAudio_WaitThread();
Buffoper(0);
if (!SDL_MintAudio_mint_present) {
/* Uninstall interrupt */
Jdisint(MFP_DMASOUND);
}
126
Oct 7, 2006
Oct 7, 2006
127
128
/* Wait if currently playing sound */
while (SDL_MintAudio_mutex != 0) {}
129
Oct 7, 2006
Oct 7, 2006
130
131
132
133
134
/* Clear buffers */
if (SDL_MintAudio_audiobuf[0]) {
Mfree(SDL_MintAudio_audiobuf[0]);
SDL_MintAudio_audiobuf[0] = SDL_MintAudio_audiobuf[1] = NULL;
}
135
Oct 7, 2006
Oct 7, 2006
136
137
/* Unlock sound system */
Unlocksnd();
138
Oct 7, 2006
Oct 7, 2006
139
140
141
SDL_free(this->hidden);
this->hidden = NULL;
}
142
143
}
Oct 29, 2004
Oct 29, 2004
144
/* Falcon XBIOS implementation of Devconnect() is buggy with external clock */
Jul 10, 2006
Jul 10, 2006
145
146
147
148
149
150
151
152
153
154
155
156
157
static void
Devconnect2(int src, int dst, int sclk, int pre)
{
static const unsigned short MASK1[3] = { 0, 0x6000, 0 };
static const unsigned short MASK2[4] = { 0xFFF0, 0xFF8F, 0xF0FF, 0x0FFF };
static const unsigned short INDEX1[4] = { 1, 3, 5, 7 };
static const unsigned short INDEX2[4] = { 0, 2, 4, 6 };
unsigned short sync_div, dev_ctrl, dest_ctrl;
void *oldstack;
if (dst == 0) {
return;
}
Oct 29, 2004
Oct 29, 2004
158
Jul 10, 2006
Jul 10, 2006
159
oldstack = (void *) Super(0);
Oct 29, 2004
Oct 29, 2004
160
Jul 10, 2006
Jul 10, 2006
161
162
163
dev_ctrl = DMAAUDIO_IO.dev_ctrl;
dest_ctrl = DMAAUDIO_IO.dest_ctrl;
dev_ctrl &= MASK2[src];
Oct 29, 2004
Oct 29, 2004
164
Jul 10, 2006
Jul 10, 2006
165
166
167
168
169
if (src == ADC) {
dev_ctrl |= MASK1[sclk];
} else {
dev_ctrl |= (INDEX1[sclk] << (src << 4));
}
Oct 29, 2004
Oct 29, 2004
170
Jul 10, 2006
Jul 10, 2006
171
172
173
174
if (dst & DMAREC) {
dest_ctrl &= 0xFFF0;
dest_ctrl |= INDEX1[src];
}
Oct 29, 2004
Oct 29, 2004
175
Jul 10, 2006
Jul 10, 2006
176
177
178
179
if (dst & DSPRECV) {
dest_ctrl &= 0xFF8F;
dest_ctrl |= (INDEX1[src] << 4);
}
Oct 29, 2004
Oct 29, 2004
180
Jul 10, 2006
Jul 10, 2006
181
182
183
184
if (dst & EXTOUT) {
dest_ctrl &= 0xF0FF;
dest_ctrl |= (INDEX1[src] << 8);
}
Oct 29, 2004
Oct 29, 2004
185
Jul 10, 2006
Jul 10, 2006
186
187
188
189
190
191
if (dst & DAC) {
dev_ctrl &= 0x0FFF;
dev_ctrl |= MASK1[sclk];
dest_ctrl &= 0x0FFF;
dest_ctrl |= (INDEX2[src] << 12);
}
Oct 29, 2004
Oct 29, 2004
192
Jul 10, 2006
Jul 10, 2006
193
194
195
196
197
198
199
200
sync_div = DMAAUDIO_IO.sync_div;
if (sclk == CLKEXT) {
pre <<= 8;
sync_div &= 0xF0FF;
} else {
sync_div &= 0xFFF0;
}
sync_div |= pre;
Oct 29, 2004
Oct 29, 2004
201
Jul 10, 2006
Jul 10, 2006
202
203
204
DMAAUDIO_IO.dev_ctrl = dev_ctrl;
DMAAUDIO_IO.dest_ctrl = dest_ctrl;
DMAAUDIO_IO.sync_div = sync_div;
Oct 29, 2004
Oct 29, 2004
205
Jul 10, 2006
Jul 10, 2006
206
Super(oldstack);
Oct 29, 2004
Oct 29, 2004
207
208
}
Jul 10, 2006
Jul 10, 2006
209
static void
Oct 7, 2006
Oct 7, 2006
210
MINTXBIOS_CheckExternalClock(_THIS)
Oct 29, 2004
Oct 29, 2004
211
212
213
{
#define SIZE_BUF_CLOCK_MEASURE (44100/10)
Jul 10, 2006
Jul 10, 2006
214
215
216
unsigned long cookie_snd;
char *buffer;
int i, j;
Oct 29, 2004
Oct 29, 2004
217
Jul 10, 2006
Jul 10, 2006
218
219
220
221
222
223
224
/* DSP present with its GPIO port ? */
if (Getcookie(C__SND, &cookie_snd) == C_NOTFOUND) {
return;
}
if ((cookie_snd & SND_DSP) == 0) {
return;
}
Oct 29, 2004
Oct 29, 2004
225
Jul 10, 2006
Jul 10, 2006
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
buffer = Atari_SysMalloc(SIZE_BUF_CLOCK_MEASURE, MX_STRAM);
if (buffer == NULL) {
DEBUG_PRINT((DEBUG_NAME "Not enough memory for the measure\n"));
return;
}
SDL_memset(buffer, 0, SIZE_BUF_CLOCK_MEASURE);
Buffoper(0);
Settracks(0, 0);
Setmontracks(0);
Setmode(MONO8);
Jdisint(MFP_TIMERA);
for (i = 0; i < 2; i++) {
Gpio(GPIO_SET, 7); /* DSP port gpio outputs */
Gpio(GPIO_WRITE, 2 + i); /* 22.5792/24.576 MHz for 44.1/48KHz */
Devconnect2(DMAPLAY, DAC, CLKEXT, CLK50K); /* Matrix and clock source */
Setbuffer(0, buffer, buffer + SIZE_BUF_CLOCK_MEASURE); /* Set buffer */
Xbtimer(XB_TIMERA, 5, 38, SDL_MintAudio_XbiosInterruptMeasureClock); /* delay mode timer A, prediv /64, 1KHz */
Jenabint(MFP_TIMERA);
SDL_MintAudio_clocktics = 0;
Buffoper(SB_PLA_ENA);
usleep(110000);
if ((Buffoper(-1) & 1) == 0) {
if (SDL_MintAudio_clocktics) {
unsigned long khz;
khz =
((SIZE_BUF_CLOCK_MEASURE /
SDL_MintAudio_clocktics) + 1) & 0xFFFFFFFE;
DEBUG_PRINT((DEBUG_NAME "measure %d: freq=%lu KHz\n",
i + 1, khz));
if (khz == 44) {
for (j = 1; j < 4; j++) {
SDL_MintAudio_AddFrequency(this,
MASTERCLOCK_44K
/
(MASTERPREDIV_FALCON
* (1 << j)),
MASTERCLOCK_44K,
(1 << j) - 1, 2 + i);
}
} else if (khz == 48) {
for (j = 1; j < 4; j++) {
SDL_MintAudio_AddFrequency(this,
MASTERCLOCK_48K
/
(MASTERPREDIV_FALCON
* (1 << j)),
MASTERCLOCK_48K,
(1 << j) - 1, 2 + i);
}
}
} else {
DEBUG_PRINT((DEBUG_NAME "No measure\n"));
}
} else {
DEBUG_PRINT((DEBUG_NAME "No SDMA clock\n"));
}
Oct 29, 2004
Oct 29, 2004
287
Jul 10, 2006
Jul 10, 2006
288
289
290
291
292
Buffoper(0); /* stop */
Jdisint(MFP_TIMERA); /* Uninstall interrupt */
}
Mfree(buffer);
Oct 29, 2004
Oct 29, 2004
293
294
}
Jul 10, 2006
Jul 10, 2006
295
static int
Oct 7, 2006
Oct 7, 2006
296
MINTXBIOS_CheckAudio(_THIS)
297
{
Jul 10, 2006
Jul 10, 2006
298
299
300
int i;
Uint32 extclock;
Sep 24, 2006
Sep 24, 2006
301
DEBUG_PRINT((DEBUG_NAME "asked: %d bits, ",
Oct 7, 2006
Oct 7, 2006
302
303
304
305
306
307
SDL_AUDIO_BITSIZE(this->spec.format)));
DEBUG_PRINT(("float=%d, ", SDL_AUDIO_ISFLOAT(this->spec.format)));
DEBUG_PRINT(("signed=%d, ", SDL_AUDIO_ISSIGNED(this->spec.format)));
DEBUG_PRINT(("big endian=%d, ", SDL_AUDIO_ISBIGENDIAN(this->spec.format)));
DEBUG_PRINT(("channels=%d, ", this->spec.channels));
DEBUG_PRINT(("freq=%d\n", this->spec.freq));
Jul 10, 2006
Jul 10, 2006
308
Oct 7, 2006
Oct 7, 2006
309
this->spec.format |= SDL_AUDIO_MASK_SIGNED; /* Audio is always signed */
Sep 1, 2006
Sep 1, 2006
310
311
/* clamp out int32/float32 */
Oct 7, 2006
Oct 7, 2006
312
313
314
315
316
if (SDL_AUDIO_BITSIZE(this->spec.format) >= 16) {
this->spec.format = AUDIO_S16MSB; /* Audio is always big endian */
this->spec.channels = 2; /* 16 bits always stereo */
} else if (this->spec.channels > 2) {
this->spec.channels = 2; /* no more than stereo! */
Jul 10, 2006
Jul 10, 2006
317
}
318
Jul 10, 2006
Jul 10, 2006
319
MINTAUDIO_freqcount = 0;
Aug 7, 2005
Aug 7, 2005
320
Jul 10, 2006
Jul 10, 2006
321
/* Add external clocks if present */
Oct 7, 2006
Oct 7, 2006
322
MINTXBIOS_CheckExternalClock(this);
Oct 29, 2004
Oct 29, 2004
323
Jul 10, 2006
Jul 10, 2006
324
325
326
327
328
329
330
331
332
333
334
/* Standard clocks */
for (i = 1; i < 12; i++) {
/* Remove unusable Falcon codec predivisors */
if ((i == 6) || (i == 8) || (i == 10)) {
continue;
}
SDL_MintAudio_AddFrequency(this,
MASTERCLOCK_FALCON1 /
(MASTERPREDIV_FALCON * (i + 1)),
MASTERCLOCK_FALCON1, i, -1);
}
Oct 29, 2004
Oct 29, 2004
335
336
#if 1
Jul 10, 2006
Jul 10, 2006
337
338
339
340
341
342
for (i = 0; i < MINTAUDIO_freqcount; i++) {
DEBUG_PRINT((DEBUG_NAME "freq %d: %lu Hz, clock %lu, prediv %d\n",
i, MINTAUDIO_frequencies[i].frequency,
MINTAUDIO_frequencies[i].masterclock,
MINTAUDIO_frequencies[i].predivisor));
}
Oct 29, 2004
Oct 29, 2004
343
#endif
344
Oct 7, 2006
Oct 7, 2006
345
346
MINTAUDIO_numfreq = SDL_MintAudio_SearchFrequency(this, this->spec.freq);
this->spec.freq = MINTAUDIO_frequencies[MINTAUDIO_numfreq].frequency;
347
Sep 24, 2006
Sep 24, 2006
348
DEBUG_PRINT((DEBUG_NAME "obtained: %d bits, ",
Oct 7, 2006
Oct 7, 2006
349
350
351
352
353
354
SDL_AUDIO_BITSIZE(this->spec.format)));
DEBUG_PRINT(("float=%d, ", SDL_AUDIO_ISFLOAT(this->spec.format)));
DEBUG_PRINT(("signed=%d, ", SDL_AUDIO_ISSIGNED(this->spec.format)));
DEBUG_PRINT(("big endian=%d, ", SDL_AUDIO_ISBIGENDIAN(this->spec.format)));
DEBUG_PRINT(("channels=%d, ", this->spec.channels));
DEBUG_PRINT(("freq=%d\n", this->spec.freq));
355
Jul 10, 2006
Jul 10, 2006
356
return 0;
357
358
}
Jul 10, 2006
Jul 10, 2006
359
static void
Oct 7, 2006
Oct 7, 2006
360
MINTXBIOS_InitAudio(_THIS)
361
{
Jul 10, 2006
Jul 10, 2006
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
int channels_mode, dmaclock, prediv;
void *buffer;
/* Stop currently playing sound */
SDL_MintAudio_quit_thread = SDL_FALSE;
SDL_MintAudio_thread_finished = SDL_TRUE;
SDL_MintAudio_WaitThread();
Buffoper(0);
/* Set replay tracks */
Settracks(0, 0);
Setmontracks(0);
/* Select replay format */
channels_mode = STEREO16;
Oct 7, 2006
Oct 7, 2006
377
switch (SDL_AUDIO_BITSIZE(this->spec.format)) {
Jul 10, 2006
Jul 10, 2006
378
case 8:
Oct 7, 2006
Oct 7, 2006
379
if (this->spec.channels == 2) {
Jul 10, 2006
Jul 10, 2006
380
381
382
383
384
385
386
387
388
channels_mode = STEREO8;
} else {
channels_mode = MONO8;
}
break;
}
if (Setmode(channels_mode) < 0) {
DEBUG_PRINT((DEBUG_NAME "Setmode() failed\n"));
}
389
Jul 10, 2006
Jul 10, 2006
390
391
392
393
394
395
396
397
398
dmaclock = MINTAUDIO_frequencies[MINTAUDIO_numfreq].masterclock;
prediv = MINTAUDIO_frequencies[MINTAUDIO_numfreq].predivisor;
if (MINTAUDIO_frequencies[MINTAUDIO_numfreq].gpio_bits != -1) {
Gpio(GPIO_SET, 7); /* DSP port gpio outputs */
Gpio(GPIO_WRITE, MINTAUDIO_frequencies[MINTAUDIO_numfreq].gpio_bits);
Devconnect2(DMAPLAY, DAC | EXTOUT, CLKEXT, prediv);
} else {
Devconnect2(DMAPLAY, DAC, CLK25M, prediv);
}
399
Jul 10, 2006
Jul 10, 2006
400
401
/* Set buffer */
buffer = SDL_MintAudio_audiobuf[SDL_MintAudio_numbuf];
Oct 7, 2006
Oct 7, 2006
402
if (Setbuffer(0, buffer, buffer + this->spec.size) < 0) {
Jul 10, 2006
Jul 10, 2006
403
404
405
406
407
408
409
410
DEBUG_PRINT((DEBUG_NAME "Setbuffer() failed\n"));
}
if (SDL_MintAudio_mint_present) {
SDL_MintAudio_thread_pid = tfork(SDL_MintAudio_Thread, 0);
} else {
/* Install interrupt */
Jdisint(MFP_DMASOUND);
Sep 24, 2006
Sep 24, 2006
411
/*Xbtimer(XB_TIMERA, 8, 1, SDL_MintAudio_XbiosInterrupt); */
Sep 12, 2006
Sep 12, 2006
412
Xbtimer(XB_TIMERA, 8, 1, SDL_MintAudio_Dma8Interrupt);
Jul 10, 2006
Jul 10, 2006
413
Jenabint(MFP_DMASOUND);
414
Jul 10, 2006
Jul 10, 2006
415
416
417
418
419
420
421
422
if (Setinterrupt(SI_TIMERA, SI_PLAY) < 0) {
DEBUG_PRINT((DEBUG_NAME "Setinterrupt() failed\n"));
}
}
/* Go */
Buffoper(SB_PLA_ENA | SB_PLA_RPT);
DEBUG_PRINT((DEBUG_NAME "hardware initialized\n"));
423
424
}
Jul 10, 2006
Jul 10, 2006
425
static int
Oct 7, 2006
Oct 7, 2006
426
MINTXBIOS_OpenDevice(_THIS, const char *devname, int iscapture)
427
{
Jul 10, 2006
Jul 10, 2006
428
429
/* Lock sound system */
if (Locksnd() != 1) {
Oct 7, 2006
Oct 7, 2006
430
431
SDL_SetError("MINTXBIOS_OpenAudio: Audio system already in use");
return 0;
Jul 10, 2006
Jul 10, 2006
432
}
433
Jul 10, 2006
Jul 10, 2006
434
SDL_MintAudio_device = this;
435
Jul 10, 2006
Jul 10, 2006
436
/* Check audio capabilities */
Oct 7, 2006
Oct 7, 2006
437
438
439
440
441
442
443
444
445
446
if (MINTXBIOS_CheckAudio(this) == -1) {
return 0;
}
/* Initialize all variables that we clean on shutdown */
this->hidden = (struct SDL_PrivateAudioData *)
SDL_malloc((sizeof *this->hidden));
if (this->hidden == NULL) {
SDL_OutOfMemory();
return 0;
Jul 10, 2006
Jul 10, 2006
447
}
Oct 7, 2006
Oct 7, 2006
448
SDL_memset(this->hidden, 0, (sizeof *this->hidden));
449
Oct 7, 2006
Oct 7, 2006
450
SDL_CalculateAudioSpec(&this->spec);
451
Jul 10, 2006
Jul 10, 2006
452
/* Allocate memory for audio buffers in DMA-able RAM */
Oct 7, 2006
Oct 7, 2006
453
DEBUG_PRINT((DEBUG_NAME "buffer size=%d\n", this->spec.size));
454
Oct 7, 2006
Oct 7, 2006
455
SDL_MintAudio_audiobuf[0] = Atari_SysMalloc(this->spec.size * 2, MX_STRAM);
Jul 10, 2006
Jul 10, 2006
456
if (SDL_MintAudio_audiobuf[0] == NULL) {
Oct 7, 2006
Oct 7, 2006
457
458
459
460
SDL_free(this->hidden);
this->hidden = NULL;
SDL_OutOfMemory();
return 0;
Jul 10, 2006
Jul 10, 2006
461
}
Oct 7, 2006
Oct 7, 2006
462
SDL_MintAudio_audiobuf[1] = SDL_MintAudio_audiobuf[0] + this->spec.size;
Jul 10, 2006
Jul 10, 2006
463
SDL_MintAudio_numbuf = 0;
Oct 7, 2006
Oct 7, 2006
464
465
SDL_memset(SDL_MintAudio_audiobuf[0],this->spec.silence,this->spec.size*2);
SDL_MintAudio_audiosize = this->spec.size;
Jul 10, 2006
Jul 10, 2006
466
SDL_MintAudio_mutex = 0;
467
Jul 10, 2006
Jul 10, 2006
468
469
470
471
DEBUG_PRINT((DEBUG_NAME "buffer 0 at 0x%08x\n",
SDL_MintAudio_audiobuf[0]));
DEBUG_PRINT((DEBUG_NAME "buffer 1 at 0x%08x\n",
SDL_MintAudio_audiobuf[1]));
472
Sep 16, 2006
Sep 16, 2006
473
474
SDL_MintAudio_CheckFpu();
Jul 10, 2006
Jul 10, 2006
475
/* Setup audio hardware */
Oct 7, 2006
Oct 7, 2006
476
477
478
479
MINTXBIOS_InitAudio(this);
return 1; /* good to go. */
}
480
Oct 7, 2006
Oct 7, 2006
481
482
483
484
485
486
487
488
489
490
491
492
493
static int
MINTXBIOS_Init(SDL_AudioDriverImpl *impl)
{
/* Set the function pointers */
impl->OpenDevice = MINTXBIOS_OpenDevice;
impl->CloseDevice = MINTXBIOS_CloseDevice;
impl->LockAudio = MINTXBIOS_LockAudio;
impl->UnlockAudio = MINTXBIOS_UnlockAudio;
impl->OnlyHasDefaultOutputDevice = 1;
impl->ProvidesOwnCallbackThread = 1;
impl->SkipMixerLock = 1;
return 1;
494
}
Jul 10, 2006
Jul 10, 2006
495
Oct 7, 2006
Oct 7, 2006
496
497
498
499
500
AudioBootStrap MINTAUDIO_XBIOS_bootstrap = {
MINT_AUDIO_DRIVER_NAME, "MiNT XBIOS audio driver",
MINTXBIOS_Available, MINTXBIOS_Init, 0
};
Jul 10, 2006
Jul 10, 2006
501
/* vi: set ts=4 sw=4 expandtab: */