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

Latest commit

 

History

History
281 lines (211 loc) · 5.8 KB

SDL_mintaudio_it.S

File metadata and controls

281 lines (211 loc) · 5.8 KB
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
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
Oct 29, 2004
Oct 29, 2004
26
Patrice Mandin, Didier Méquignon
27
28
29
30
31
32
33
*/
.text
.globl _SDL_MintAudio_Callback
.globl _SDL_MintAudio_XbiosInterrupt
Oct 29, 2004
Oct 29, 2004
34
.globl _SDL_MintAudio_XbiosInterruptMeasureClock
35
36
37
38
39
40
41
.globl _SDL_MintAudio_Dma8Interrupt
.globl _SDL_MintAudio_StfaInterrupt
.globl _SDL_MintAudio_mutex
.globl _SDL_MintAudio_audiobuf
.globl _SDL_MintAudio_numbuf
.globl _SDL_MintAudio_audiosize
Oct 29, 2004
Oct 29, 2004
42
.globl _SDL_MintAudio_clocktics
Sep 16, 2006
Sep 16, 2006
43
.globl _SDL_MintAudio_hasfpu
44
45
46
47
48
49
50
51
52
53
54
.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
*/
Jul 20, 2005
Jul 20, 2005
55
56
57
#define savptr 0x4a2
#define savamt 0x46
Oct 29, 2004
Oct 29, 2004
58
59
60
61
62
63
64
65
66
67
68
/*--- Xbios interrupt vector to measure Falcon external clock ---*/
_SDL_MintAudio_XbiosInterruptMeasureClock: /* 1 mS */
btst #0,0xFFFF8901:w /* state DMA sound */
beqs SDL_MintAudio_EndIntMeasure
addql #1,_SDL_MintAudio_clocktics
SDL_MintAudio_EndIntMeasure:
bclr #5,0xFFFFFA0F:w /* Clear service bit */
rte
69
70
71
72
73
74
75
76
77
78
79
80
/*--- 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
Jul 13, 2007
Jul 13, 2007
81
bne SDL_MintAudio_XbiosEnd
82
83
84
notw _SDL_MintAudio_mutex
/* Swap buffers */
Aug 30, 2003
Aug 30, 2003
85
eorw #1,_SDL_MintAudio_numbuf
86
Jul 17, 2005
Jul 17, 2005
87
moveml d0-d7/a0-a6,sp@-
88
Sep 16, 2006
Sep 16, 2006
89
90
91
92
93
94
95
96
97
98
/* Save FPU if needed */
tstw _SDL_MintAudio_hasfpu
beqs SDL_MintAudio_Xbios_nofpu1
.chip 68060
fsave sp@-
fmoveml fpcr/fpsr/fpiar,sp@-
fmovemx fp0-fp7,sp@-
.chip 68000
SDL_MintAudio_Xbios_nofpu1:
99
100
101
/* Callback */
jsr _SDL_MintAudio_Callback
Sep 16, 2006
Sep 16, 2006
102
103
104
105
106
107
108
109
110
111
/* Restore FPU if needed */
tstw _SDL_MintAudio_hasfpu
beqs SDL_MintAudio_Xbios_nofpu2
.chip 68060
fmovemx sp@+,fp0-fp7
fmoveml sp@+,fpcr/fpsr/fpiar
frestore sp@+
.chip 68000
SDL_MintAudio_Xbios_nofpu2:
Jul 20, 2005
Jul 20, 2005
112
113
114
/* Reserve space for registers */
subl #savamt,savptr
Aug 30, 2003
Aug 30, 2003
115
116
117
/* Set new buffer */
moveq #0,d0
118
119
movel _SDL_MintAudio_audiosize,d1
Aug 30, 2003
Aug 30, 2003
120
121
122
123
124
125
126
127
movew _SDL_MintAudio_numbuf,d0
lsll #2,d0
lea _SDL_MintAudio_audiobuf,a0
movel a0@(d0:l),a1
lea a1@(d1:l),a2
movel a2,sp@-
128
129
130
131
132
133
movel a1,sp@-
clrw sp@-
movew #131,sp@-
trap #14
lea sp@(12),sp
Jul 20, 2005
Jul 20, 2005
134
135
136
/* Restore registers space */
addl #savamt,savptr
Jul 17, 2005
Jul 17, 2005
137
moveml sp@+,d0-d7/a0-a6
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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
Jul 13, 2007
Jul 13, 2007
155
bne SDL_MintAudio_Dma8End
156
157
158
notw _SDL_MintAudio_mutex
/* Swap buffers */
Aug 30, 2003
Aug 30, 2003
159
eorw #1,_SDL_MintAudio_numbuf
160
Sep 16, 2006
Sep 16, 2006
161
162
163
164
165
166
167
168
169
170
171
moveml d0-d1/a0-a1,sp@-
/* Save FPU if needed */
tstw _SDL_MintAudio_hasfpu
beqs SDL_MintAudio_Dma8_nofpu1
.chip 68060
fsave sp@-
fmoveml fpcr/fpsr/fpiar,sp@-
fmovemx fp0-fp7,sp@-
.chip 68000
SDL_MintAudio_Dma8_nofpu1:
172
173
174
/* Callback */
jsr _SDL_MintAudio_Callback
Aug 30, 2003
Aug 30, 2003
175
Sep 16, 2006
Sep 16, 2006
176
177
178
179
180
181
182
183
184
185
/* Restore FPU if needed */
tstw _SDL_MintAudio_hasfpu
beqs SDL_MintAudio_Dma8_nofpu2
.chip 68060
fmovemx sp@+,fp0-fp7
fmoveml sp@+,fpcr/fpsr/fpiar
frestore sp@+
.chip 68000
SDL_MintAudio_Dma8_nofpu2:
Aug 30, 2003
Aug 30, 2003
186
187
188
189
190
191
192
193
/* Set new buffer */
moveq #0,d0
movew _SDL_MintAudio_numbuf,d0
lslw #2,d0
lea _SDL_MintAudio_audiobuf,a0
movel a0@(d0:w),d1
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
/* 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)
Sep 16, 2006
Sep 16, 2006
213
moveml sp@+,d0-d1/a0-a1
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
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 */
Aug 30, 2003
Aug 30, 2003
235
eorw #1,_SDL_MintAudio_numbuf
236
Jul 17, 2005
Jul 17, 2005
237
moveml d0-d7/a0-a6,sp@-
238
Sep 16, 2006
Sep 16, 2006
239
240
241
242
243
244
245
246
247
248
/* Save FPU if needed */
tstw _SDL_MintAudio_hasfpu
beqs SDL_MintAudio_Stfa_nofpu1
.chip 68060
fsave sp@-
fmoveml fpcr/fpsr/fpiar,sp@-
fmovemx fp0-fp7,sp@-
.chip 68000
SDL_MintAudio_Stfa_nofpu1:
249
250
/* Callback */
jsr _SDL_MintAudio_Callback
Aug 30, 2003
Aug 30, 2003
251
Sep 16, 2006
Sep 16, 2006
252
253
254
255
256
257
258
259
260
261
/* Restore FPU if needed */
tstw _SDL_MintAudio_hasfpu
beqs SDL_MintAudio_Stfa_nofpu2
.chip 68060
fmovemx sp@+,fp0-fp7
fmoveml sp@+,fpcr/fpsr/fpiar
frestore sp@+
.chip 68000
SDL_MintAudio_Stfa_nofpu2:
Aug 30, 2003
Aug 30, 2003
262
263
264
265
266
267
268
269
270
/* Set new buffer */
moveq #0,d0
movel _SDL_MintAudio_stfa,a1
movew _SDL_MintAudio_numbuf,d0
lslw #2,d0
lea _SDL_MintAudio_audiobuf,a0
movel a0@(d0:w),d1
271
272
/* Modify STFA replay buffers */
Aug 30, 2003
Aug 30, 2003
273
movel d1,a1@(STFA_SOUND_START)
274
addl _SDL_MintAudio_audiosize,d1
Aug 30, 2003
Aug 30, 2003
275
movel d1,a1@(STFA_SOUND_END)
276
Jul 17, 2005
Jul 17, 2005
277
moveml sp@+,d0-d7/a0-a6
278
279
280
281
clrw _SDL_MintAudio_mutex
SDL_MintAudio_StfaEnd:
rte