src/audio/mint/SDL_mintaudio_gsxb.c
changeset 1097 c83fa1c650dd
parent 962 176240cf4405
child 1107 856f76a099c7
equal deleted inserted replaced
1096:37b766becf3b 1097:c83fa1c650dd
    74 static void Mint_UnlockAudio(_THIS);
    74 static void Mint_UnlockAudio(_THIS);
    75 
    75 
    76 /* To check/init hardware audio */
    76 /* To check/init hardware audio */
    77 static int Mint_CheckAudio(_THIS, SDL_AudioSpec *spec);
    77 static int Mint_CheckAudio(_THIS, SDL_AudioSpec *spec);
    78 static void Mint_InitAudio(_THIS, SDL_AudioSpec *spec);
    78 static void Mint_InitAudio(_THIS, SDL_AudioSpec *spec);
       
    79 
       
    80 /* GSXB callbacks */
       
    81 static void Mint_GsxbInterrupt(void);
       
    82 static void Mint_GsxbNullInterrupt(void);
    79 
    83 
    80 /*--- Audio driver bootstrap functions ---*/
    84 /*--- Audio driver bootstrap functions ---*/
    81 
    85 
    82 static int Audio_Available(void)
    86 static int Audio_Available(void)
    83 {
    87 {
   178 {
   182 {
   179 	/* Stop replay */
   183 	/* Stop replay */
   180 	Buffoper(0);
   184 	Buffoper(0);
   181 
   185 
   182 	/* Uninstall interrupt */
   186 	/* Uninstall interrupt */
   183 	if (NSetinterrupt(2, SI_NONE, SDL_MintAudio_EmptyGsxbInterrupt)<0) {
   187 	if (NSetinterrupt(2, SI_NONE, Mint_GsxbNullInterrupt)<0) {
   184 		DEBUG_PRINT((DEBUG_NAME "NSetinterrupt() failed in close\n"));
   188 		DEBUG_PRINT((DEBUG_NAME "NSetinterrupt() failed in close\n"));
   185 	}
   189 	}
   186 
   190 
   187 	/* Wait if currently playing sound */
   191 	/* Wait if currently playing sound */
   188 	while (SDL_MintAudio_mutex != 0) {
   192 	while (SDL_MintAudio_mutex != 0) {
   340 	if (Setbuffer(0, buffer, buffer + spec->size)<0) {
   344 	if (Setbuffer(0, buffer, buffer + spec->size)<0) {
   341 		DEBUG_PRINT((DEBUG_NAME "Setbuffer() failed\n"));
   345 		DEBUG_PRINT((DEBUG_NAME "Setbuffer() failed\n"));
   342 	}
   346 	}
   343 	
   347 	
   344 	/* Install interrupt */
   348 	/* Install interrupt */
   345 	if (NSetinterrupt(2, SI_PLAY, SDL_MintAudio_GsxbInterrupt)<0) {
   349 	if (NSetinterrupt(2, SI_PLAY, Mint_GsxbInterrupt)<0) {
   346 		DEBUG_PRINT((DEBUG_NAME "NSetinterrupt() failed\n"));
   350 		DEBUG_PRINT((DEBUG_NAME "NSetinterrupt() failed\n"));
   347 	}
   351 	}
   348 
   352 
   349 	/* Go */
   353 	/* Go */
   350 	Buffoper(SB_PLA_ENA|SB_PLA_RPT);
   354 	Buffoper(SB_PLA_ENA|SB_PLA_RPT);
   388 	/* Setup audio hardware */
   392 	/* Setup audio hardware */
   389 	Mint_InitAudio(this, spec);
   393 	Mint_InitAudio(this, spec);
   390 
   394 
   391     return(1);	/* We don't use threaded audio */
   395     return(1);	/* We don't use threaded audio */
   392 }
   396 }
       
   397 
       
   398 static void Mint_GsxbInterrupt(void)
       
   399 {
       
   400 	Uint8 *newbuf;
       
   401 
       
   402 	if (SDL_MintAudio_mutex)
       
   403 		return;
       
   404 
       
   405 	SDL_MintAudio_mutex=1;
       
   406 
       
   407 	SDL_MintAudio_numbuf ^= 1;
       
   408 	SDL_MintAudio_Callback();
       
   409 	newbuf = SDL_MintAudio_audiobuf[SDL_MintAudio_numbuf];
       
   410 	Setbuffer(0, newbuf, newbuf + SDL_MintAudio_audiosize);
       
   411 
       
   412 	SDL_MintAudio_mutex=0;
       
   413 }
       
   414 
       
   415 static void Mint_GsxbNullInterrupt(void)
       
   416 {
       
   417 }