SDL-1.2.14
[sdl_omap.git] / src / audio / mint / SDL_mintaudio.h
CommitLineData
e14743d1 1/*
2 SDL - Simple DirectMedia Layer
3 Copyright (C) 1997-2009 Sam Lantinga
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public
16 License along with this library; if not, write to the Free
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19 Sam Lantinga
20 slouken@libsdl.org
21*/
22#include "SDL_config.h"
23
24/*
25 MiNT audio driver
26
27 Patrice Mandin
28*/
29
30#ifndef _SDL_mintaudio_h
31#define _SDL_mintaudio_h
32
33#include "../SDL_sysaudio.h"
34#include "SDL_mintaudio_stfa.h"
35
36/* Hidden "this" pointer for the audio functions */
37#define _THIS SDL_AudioDevice *this
38
39/* 16 predivisors with 3 clocks max. */
40#define MINTAUDIO_maxfreqs (16*3)
41
42typedef struct {
43 Uint32 frequency;
44 Uint32 masterclock;
45 Uint32 predivisor;
46 int gpio_bits; /* in case of external clock */
47} mint_frequency_t;
48
49struct SDL_PrivateAudioData {
50 mint_frequency_t frequencies[MINTAUDIO_maxfreqs];
51 int freq_count; /* Number of frequencies in the array */
52 int numfreq; /* Number of selected frequency */
53};
54
55/* Old variable names */
56
57#define MINTAUDIO_frequencies (this->hidden->frequencies)
58#define MINTAUDIO_freqcount (this->hidden->freq_count)
59#define MINTAUDIO_numfreq (this->hidden->numfreq)
60
61/* _MCH cookie (values>>16) */
62enum {
63 MCH_ST=0,
64 MCH_STE,
65 MCH_TT,
66 MCH_F30,
67 MCH_CLONE,
68 MCH_ARANYM
69};
70
71/* Master clocks for replay frequencies */
72#define MASTERCLOCK_STE 8010666 /* Not sure of this one */
73#define MASTERCLOCK_TT 16107953 /* Not sure of this one */
74#define MASTERCLOCK_FALCON1 25175000
75#define MASTERCLOCK_FALCON2 32000000 /* Only usable for DSP56K */
76#define MASTERCLOCK_FALCONEXT -1 /* Clock on DSP56K port, unknown */
77#define MASTERCLOCK_44K 22579200 /* Standard clock for 44.1 Khz */
78#define MASTERCLOCK_48K 24576000 /* Standard clock for 48 Khz */
79
80/* Master clock predivisors */
81#define MASTERPREDIV_STE 160
82#define MASTERPREDIV_TT 320
83#define MASTERPREDIV_FALCON 256
84#define MASTERPREDIV_MILAN 256
85
86/* MFP 68901 interrupt sources */
87#ifndef MFP_PARALLEL
88enum {
89 MFP_PARALLEL=0,
90 MFP_DCD,
91 MFP_CTS,
92 MFP_BITBLT,
93 MFP_TIMERD,
94 MFP_BAUDRATE=MFP_TIMERD,
95 MFP_TIMERC,
96 MFP_200HZ=MFP_TIMERC,
97 MFP_ACIA,
98 MFP_DISK,
99 MFP_TIMERB,
100 MFP_HBLANK=MFP_TIMERB,
101 MFP_TERR,
102 MFP_TBE,
103 MFP_RERR,
104 MFP_RBF,
105 MFP_TIMERA,
106 MFP_DMASOUND=MFP_TIMERA,
107 MFP_RING,
108 MFP_MONODETECT
109};
110#endif
111
112/* Xbtimer() timers */
113#ifndef XB_TIMERA
114enum {
115 XB_TIMERA=0,
116 XB_TIMERB,
117 XB_TIMERC,
118 XB_TIMERD
119};
120#endif
121
122/* Variables */
123extern SDL_AudioDevice *SDL_MintAudio_device;
124extern Uint8 *SDL_MintAudio_audiobuf[2]; /* Pointers to buffers */
125extern unsigned long SDL_MintAudio_audiosize; /* Length of audio buffer=spec->size */
126extern volatile unsigned short SDL_MintAudio_numbuf; /* Buffer to play */
127extern volatile unsigned short SDL_MintAudio_mutex;
128extern cookie_stfa_t *SDL_MintAudio_stfa;
129extern volatile unsigned long SDL_MintAudio_clocktics;
130extern unsigned short SDL_MintAudio_hasfpu; /* To preserve fpu registers if needed */
131
132/* MiNT thread variables */
133extern SDL_bool SDL_MintAudio_mint_present;
134extern SDL_bool SDL_MintAudio_quit_thread;
135extern SDL_bool SDL_MintAudio_thread_finished;
136extern long SDL_MintAudio_thread_pid;
137
138/* Functions */
139void SDL_MintAudio_Callback(void);
140void SDL_MintAudio_AddFrequency(_THIS, Uint32 frequency, Uint32 clock,
141 Uint32 prediv, int gpio_bits);
142int SDL_MintAudio_SearchFrequency(_THIS, int desired_freq);
143void SDL_MintAudio_CheckFpu(void);
144
145/* MiNT thread functions */
146int SDL_MintAudio_Thread(long param);
147void SDL_MintAudio_WaitThread(void);
148
149/* ASM interrupt functions */
150void SDL_MintAudio_GsxbInterrupt(void);
151void SDL_MintAudio_EmptyGsxbInterrupt(void);
152void SDL_MintAudio_XbiosInterruptMeasureClock(void);
153void SDL_MintAudio_XbiosInterrupt(void);
154void SDL_MintAudio_Dma8Interrupt(void);
155void SDL_MintAudio_StfaInterrupt(void);
156
157#endif /* _SDL_mintaudio_h */