Atari MiNT: added more audio drivers
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40645
This commit is contained in:
parent
ae6427430d
commit
e1695a4b13
16 changed files with 2541 additions and 621 deletions
242
src/audio/mint/SDL_mintaudio_it.S
Normal file
242
src/audio/mint/SDL_mintaudio_it.S
Normal file
|
@ -0,0 +1,242 @@
|
|||
/*
|
||||
SDL - Simple DirectMedia Layer
|
||||
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
|
||||
|
||||
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
|
||||
*/
|
||||
|
||||
/*
|
||||
Audio interrupts
|
||||
|
||||
Patrice Mandin
|
||||
*/
|
||||
|
||||
.text
|
||||
|
||||
.globl _SDL_MintAudio_Callback
|
||||
|
||||
.globl _SDL_MintAudio_GsxbInterrupt
|
||||
.globl _SDL_MintAudio_EmptyGsxbInterrupt
|
||||
.globl _SDL_MintAudio_XbiosInterrupt
|
||||
.globl _SDL_MintAudio_Dma8Interrupt
|
||||
.globl _SDL_MintAudio_StfaInterrupt
|
||||
|
||||
.globl _SDL_MintAudio_mutex
|
||||
.globl _SDL_MintAudio_audiobuf
|
||||
.globl _SDL_MintAudio_numbuf
|
||||
.globl _SDL_MintAudio_audiosize
|
||||
|
||||
.globl _SDL_MintAudio_stfa
|
||||
|
||||
/*
|
||||
How it works:
|
||||
- Audio is playing buffer #0 (resp. #1)
|
||||
- We must calculate a sample in buffer #1 (resp. #0)
|
||||
so we first call the callback to do it
|
||||
- Then we swap the buffers
|
||||
*/
|
||||
|
||||
/*--- GSXB interrupt vector ---*/
|
||||
|
||||
.text
|
||||
_SDL_MintAudio_GsxbInterrupt:
|
||||
|
||||
/* Check if we are not already running */
|
||||
tstw _SDL_MintAudio_mutex
|
||||
bnes _SDL_MintAudio_EmptyGsxbInterrupt
|
||||
notw _SDL_MintAudio_mutex
|
||||
|
||||
/* Swap buffers */
|
||||
moveml d0-d2/a0-a2,sp@-
|
||||
|
||||
movel _SDL_MintAudio_numbuf,d0
|
||||
movel _SDL_MintAudio_audiobuf,a0
|
||||
eorl #1,d0
|
||||
beqs SDL_MintAudio_GsxbBuffer0
|
||||
movel _SDL_MintAudio_audiobuf+4,a0
|
||||
SDL_MintAudio_GsxbBuffer0:
|
||||
movel d0,_SDL_MintAudio_numbuf
|
||||
|
||||
/* Callback */
|
||||
movel a0,sp@-
|
||||
jsr _SDL_MintAudio_Callback
|
||||
movel sp@+,a0
|
||||
|
||||
/* Setbuffer xbios function */
|
||||
movel _SDL_MintAudio_audiosize,d1
|
||||
lea a0@(0,d1:l),a1
|
||||
|
||||
movel a1,sp@-
|
||||
movel a0,sp@-
|
||||
clrw sp@-
|
||||
movew #131,sp@-
|
||||
trap #14
|
||||
lea sp@(12),sp
|
||||
|
||||
moveml sp@+,d0-d2/a0-a2
|
||||
|
||||
clrw _SDL_MintAudio_mutex
|
||||
_SDL_MintAudio_EmptyGsxbInterrupt:
|
||||
rts
|
||||
|
||||
/*--- Xbios interrupt vector ---*/
|
||||
|
||||
_SDL_MintAudio_XbiosInterrupt:
|
||||
|
||||
/* Reenable interrupts, so other interrupts can work */
|
||||
movew #0x2300,sr
|
||||
|
||||
/* Clear service bit, so other MFP interrupts can work */
|
||||
bclr #5,0xfffffa0f:w
|
||||
|
||||
/* Check if we are not already running */
|
||||
tstw _SDL_MintAudio_mutex
|
||||
bnes SDL_MintAudio_XbiosEnd
|
||||
notw _SDL_MintAudio_mutex
|
||||
|
||||
/* Swap buffers */
|
||||
moveml d0-d2/a0-a2,sp@-
|
||||
|
||||
movel _SDL_MintAudio_numbuf,d0
|
||||
movel _SDL_MintAudio_audiobuf,a0
|
||||
eorl #1,d0
|
||||
beqs SDL_MintAudio_XbiosBuffer0
|
||||
movel _SDL_MintAudio_audiobuf+4,a0
|
||||
SDL_MintAudio_XbiosBuffer0:
|
||||
movel d0,_SDL_MintAudio_numbuf
|
||||
|
||||
/* Callback */
|
||||
movel a0,sp@-
|
||||
jsr _SDL_MintAudio_Callback
|
||||
movel sp@+,a0
|
||||
|
||||
/* Setbuffer xbios function */
|
||||
movel _SDL_MintAudio_audiosize,d1
|
||||
lea a0@(0,d1:l),a1
|
||||
|
||||
movel a1,sp@-
|
||||
movel a0,sp@-
|
||||
clrw sp@-
|
||||
movew #131,sp@-
|
||||
trap #14
|
||||
lea sp@(12),sp
|
||||
|
||||
moveml sp@+,d0-d2/a0-a2
|
||||
|
||||
clrw _SDL_MintAudio_mutex
|
||||
SDL_MintAudio_XbiosEnd:
|
||||
rte
|
||||
|
||||
/*--- DMA 8 bits interrupt vector ---*/
|
||||
|
||||
_SDL_MintAudio_Dma8Interrupt:
|
||||
|
||||
/* Reenable interrupts, so other interrupts can work */
|
||||
movew #0x2300,sr
|
||||
|
||||
/* Clear service bit, so other MFP interrupts can work */
|
||||
bclr #5,0xfffffa0f:w
|
||||
|
||||
/* Check if we are not already running */
|
||||
tstw _SDL_MintAudio_mutex
|
||||
bnes SDL_MintAudio_Dma8End
|
||||
notw _SDL_MintAudio_mutex
|
||||
|
||||
/* Swap buffers */
|
||||
moveml d0-d1/a0-a1,sp@-
|
||||
|
||||
movel _SDL_MintAudio_numbuf,d0
|
||||
movel _SDL_MintAudio_audiobuf,d1
|
||||
eorl #1,d0
|
||||
beqs SDL_MintAudio_Dma8Buffer0
|
||||
movel _SDL_MintAudio_audiobuf+4,d1
|
||||
SDL_MintAudio_Dma8Buffer0:
|
||||
movel d0,_SDL_MintAudio_numbuf
|
||||
|
||||
/* Callback */
|
||||
movel d1,sp@-
|
||||
jsr _SDL_MintAudio_Callback
|
||||
movel sp@+,d1
|
||||
|
||||
/* Modify DMA addresses */
|
||||
lea 0xffff8900:w,a0
|
||||
|
||||
moveb d1,a0@(0x07) /* Start address */
|
||||
rorl #8,d1
|
||||
moveb d1,a0@(0x05)
|
||||
rorl #8,d1
|
||||
moveb d1,a0@(0x03)
|
||||
swap d1
|
||||
|
||||
addl _SDL_MintAudio_audiosize,d1
|
||||
|
||||
moveb d1,a0@(0x13) /* End address */
|
||||
rorl #8,d1
|
||||
moveb d1,a0@(0x11)
|
||||
rorl #8,d1
|
||||
moveb d1,a0@(0x0f)
|
||||
|
||||
moveml sp@+,d0-d1/a0-a1
|
||||
|
||||
clrw _SDL_MintAudio_mutex
|
||||
SDL_MintAudio_Dma8End:
|
||||
rte
|
||||
|
||||
/*--- STFA interrupt vector ---*/
|
||||
|
||||
STFA_SOUND_START = 6
|
||||
STFA_SOUND_END = STFA_SOUND_START+8
|
||||
|
||||
_SDL_MintAudio_StfaInterrupt:
|
||||
|
||||
/* Reenable interrupts, so other interrupts can work */
|
||||
movew #0x2300,sr
|
||||
|
||||
/* Check if we are not already running */
|
||||
tstw _SDL_MintAudio_mutex
|
||||
bnes SDL_MintAudio_StfaEnd
|
||||
notw _SDL_MintAudio_mutex
|
||||
|
||||
/* Swap buffers */
|
||||
moveml d0-d1/a0-a1,sp@-
|
||||
|
||||
movel _SDL_MintAudio_numbuf,d0
|
||||
movel _SDL_MintAudio_audiobuf,d1
|
||||
eorl #1,d0
|
||||
beqs SDL_MintAudio_StfaBuffer0
|
||||
movel _SDL_MintAudio_audiobuf+4,d1
|
||||
SDL_MintAudio_StfaBuffer0:
|
||||
movel d0,_SDL_MintAudio_numbuf
|
||||
|
||||
/* Callback */
|
||||
movel d1,sp@-
|
||||
jsr _SDL_MintAudio_Callback
|
||||
movel sp@+,d1
|
||||
|
||||
/* Modify STFA replay buffers */
|
||||
movel _SDL_MintAudio_stfa,a0
|
||||
movel d1,a0@(STFA_SOUND_START)
|
||||
addl _SDL_MintAudio_audiosize,d1
|
||||
movel d1,a0@(STFA_SOUND_END)
|
||||
|
||||
moveml sp@+,d0-d1/a0-a1
|
||||
|
||||
clrw _SDL_MintAudio_mutex
|
||||
SDL_MintAudio_StfaEnd:
|
||||
rte
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue