symbian-qemu-0.9.1-12/libsdl-trunk/src/audio/mint/SDL_mintaudio.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 /*
       
     2     SDL - Simple DirectMedia Layer
       
     3     Copyright (C) 1997-2004 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 
       
    42 typedef struct {
       
    43 	Uint32	frequency;
       
    44 	Uint32	masterclock;
       
    45 	Uint32	predivisor;
       
    46 	int	gpio_bits;	/* in case of external clock */
       
    47 } mint_frequency_t;
       
    48 
       
    49 struct 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) */
       
    62 enum {
       
    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 enum {
       
    88 	MFP_PARALLEL=0,
       
    89 	MFP_DCD,
       
    90 	MFP_CTS,
       
    91 	MFP_BITBLT,
       
    92 	MFP_TIMERD,
       
    93 	MFP_BAUDRATE=MFP_TIMERD,
       
    94 	MFP_TIMERC,
       
    95 	MFP_200HZ=MFP_TIMERC,
       
    96 	MFP_ACIA,
       
    97 	MFP_DISK,
       
    98 	MFP_TIMERB,
       
    99 	MFP_HBLANK=MFP_TIMERB,
       
   100 	MFP_TERR,
       
   101 	MFP_TBE,
       
   102 	MFP_RERR,
       
   103 	MFP_RBF,
       
   104 	MFP_TIMERA,
       
   105 	MFP_DMASOUND=MFP_TIMERA,
       
   106 	MFP_RING,
       
   107 	MFP_MONODETECT
       
   108 };
       
   109 
       
   110 /* Xbtimer() timers */
       
   111 enum {
       
   112 	XB_TIMERA=0,
       
   113 	XB_TIMERB,
       
   114 	XB_TIMERC,
       
   115 	XB_TIMERD
       
   116 };
       
   117 
       
   118 /* Variables */
       
   119 extern SDL_AudioDevice *SDL_MintAudio_device;
       
   120 extern Uint8 *SDL_MintAudio_audiobuf[2];	/* Pointers to buffers */
       
   121 extern unsigned long SDL_MintAudio_audiosize;		/* Length of audio buffer=spec->size */
       
   122 extern volatile unsigned short SDL_MintAudio_numbuf;		/* Buffer to play */
       
   123 extern volatile unsigned short SDL_MintAudio_mutex;
       
   124 extern cookie_stfa_t *SDL_MintAudio_stfa;
       
   125 extern volatile unsigned long SDL_MintAudio_clocktics;
       
   126 extern unsigned short SDL_MintAudio_hasfpu;	/* To preserve fpu registers if needed */
       
   127 
       
   128 /* MiNT thread variables */
       
   129 extern SDL_bool	SDL_MintAudio_mint_present;
       
   130 extern SDL_bool SDL_MintAudio_quit_thread;
       
   131 extern SDL_bool SDL_MintAudio_thread_finished;
       
   132 extern long SDL_MintAudio_thread_pid;
       
   133 
       
   134 /* Functions */
       
   135 void SDL_MintAudio_Callback(void);
       
   136 void SDL_MintAudio_AddFrequency(_THIS, Uint32 frequency, Uint32 clock,
       
   137 	Uint32 prediv, int gpio_bits);
       
   138 int SDL_MintAudio_SearchFrequency(_THIS, int desired_freq);
       
   139 void SDL_MintAudio_CheckFpu(void);
       
   140 
       
   141 /* MiNT thread functions */
       
   142 int SDL_MintAudio_Thread(long param);
       
   143 void SDL_MintAudio_WaitThread(void);
       
   144 
       
   145 /* ASM interrupt functions */
       
   146 void SDL_MintAudio_GsxbInterrupt(void);
       
   147 void SDL_MintAudio_EmptyGsxbInterrupt(void);
       
   148 void SDL_MintAudio_XbiosInterruptMeasureClock(void);
       
   149 void SDL_MintAudio_XbiosInterrupt(void);
       
   150 void SDL_MintAudio_Dma8Interrupt(void);
       
   151 void SDL_MintAudio_StfaInterrupt(void);
       
   152 
       
   153 #endif /* _SDL_mintaudio_h */