comparison src/audio/SDL_mixer_m68k.c @ 1662:782fd950bd46 SDL-1.3

Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API. WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid. The code is now run through a consistent indent format: indent -i4 -nut -nsc -br -ce The headers are being converted to automatically generate doxygen documentation.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 28 May 2006 13:04:16 +0000
parents d910939febfa
children 4da1ee79c9af
comparison
equal deleted inserted replaced
1661:281d3f4870e5 1662:782fd950bd46
26 26
27 Patrice Mandin 27 Patrice Mandin
28 */ 28 */
29 29
30 #if defined(__M68000__) && defined(__GNUC__) 30 #if defined(__M68000__) && defined(__GNUC__)
31 void SDL_MixAudio_m68k_U8(char* dst, char* src, long len, long volume, char* mix8) 31 void
32 SDL_MixAudio_m68k_U8 (char *dst, char *src, long len, long volume, char *mix8)
32 { 33 {
33 __asm__ __volatile__ ( 34 __asm__ __volatile__ ("tstl %2\n" " beqs stoploop_u8\n" "mixloop_u8:\n"
34 35 /* Mix a sample */
35 "tstl %2\n" 36 " moveq #0,%%d0\n" " moveq #0,%%d1\n" " moveb %1@+,%%d0\n" /* d0 = *src++ */
36 " beqs stoploop_u8\n" 37 " sub #128,%%d0\n" /* d0 -= 128 */
37 "mixloop_u8:\n" 38 " muls %3,%%d0\n" /* d0 *= volume (0<=volume<=128) */
38 39 " moveb %0@,%%d1\n" /* d1 = *dst */
39 /* Mix a sample */ 40 " asr #7,%%d0\n" /* d0 /= 128 (SDL_MIX_MAXVOLUME) */
40 41 " add #128,%%d0\n" /* d0 += 128 */
41 " moveq #0,%%d0\n" 42 " add %%d1,%%d0\n"
42 " moveq #0,%%d1\n" 43 " moveb %4@(%%d0:w),%0@+\n"
43 44 /* Loop till done */
44 " moveb %1@+,%%d0\n" /* d0 = *src++ */ 45 " subql #1,%2\n" " bhis mixloop_u8\n" "stoploop_u8:\n": /* no return value */
45 " sub #128,%%d0\n" /* d0 -= 128 */ 46 : /* input */
46 " muls %3,%%d0\n" /* d0 *= volume (0<=volume<=128) */ 47 "a" (dst), "a" (src), "d" (len), "d" (volume), "a" (mix8): /* clobbered registers */
47 " moveb %0@,%%d1\n" /* d1 = *dst */ 48 "d0", "d1", "cc", "memory");
48 " asr #7,%%d0\n" /* d0 /= 128 (SDL_MIX_MAXVOLUME) */
49 " add #128,%%d0\n" /* d0 += 128 */
50
51 " add %%d1,%%d0\n"
52
53 " moveb %4@(%%d0:w),%0@+\n"
54
55 /* Loop till done */
56
57 " subql #1,%2\n"
58 " bhis mixloop_u8\n"
59 "stoploop_u8:\n"
60
61 : /* no return value */
62 : /* input */
63 "a"(dst), "a"(src), "d"(len), "d"(volume), "a"(mix8)
64 : /* clobbered registers */
65 "d0", "d1", "cc", "memory"
66 );
67 } 49 }
68 50
69 void SDL_MixAudio_m68k_S8(char* dst, char* src, long len, long volume) 51 void
52 SDL_MixAudio_m68k_S8 (char *dst, char *src, long len, long volume)
70 { 53 {
71 __asm__ __volatile__ ( 54 __asm__ __volatile__ ("tstl %2\n"
72 55 " beqs stoploop_s8\n"
73 "tstl %2\n" 56 " moveq #-128,%%d2\n"
74 " beqs stoploop_s8\n" 57 " moveq #127,%%d3\n" "mixloop_s8:\n"
75 " moveq #-128,%%d2\n" 58 /* Mix a sample */
76 " moveq #127,%%d3\n" 59 " moveq #0,%%d0\n" " moveq #0,%%d1\n" " moveb %1@+,%%d0\n" /* d0 = *src++ */
77 "mixloop_s8:\n" 60 " muls %3,%%d0\n" /* d0 *= volume (0<=volume<=128) */
78 61 " moveb %0@,%%d1\n" /* d1 = *dst */
79 /* Mix a sample */ 62 " asr #7,%%d0\n" /* d0 /= 128 (SDL_MIX_MAXVOLUME) */
80 63 " add %%d1,%%d0\n"
81 " moveq #0,%%d0\n" 64 " cmp %%d2,%%d0\n"
82 " moveq #0,%%d1\n" 65 " bges lower_limit_s8\n"
83 66 " move %%d2,%%d0\n"
84 " moveb %1@+,%%d0\n" /* d0 = *src++ */ 67 "lower_limit_s8:\n"
85 " muls %3,%%d0\n" /* d0 *= volume (0<=volume<=128) */ 68 " cmp %%d3,%%d0\n"
86 " moveb %0@,%%d1\n" /* d1 = *dst */ 69 " bles upper_limit_s8\n"
87 " asr #7,%%d0\n" /* d0 /= 128 (SDL_MIX_MAXVOLUME) */ 70 " move %%d3,%%d0\n"
88 71 "upper_limit_s8:\n" " moveb %%d0,%0@+\n"
89 " add %%d1,%%d0\n" 72 /* Loop till done */
90 73 " subql #1,%2\n" " bhis mixloop_s8\n" "stoploop_s8:\n": /* no return value */
91 " cmp %%d2,%%d0\n" 74 : /* input */
92 " bges lower_limit_s8\n" 75 "a" (dst), "a" (src), "d" (len), "d" (volume): /* clobbered registers */
93 " move %%d2,%%d0\n" 76 "d0", "d1", "d2", "d3", "cc", "memory");
94 "lower_limit_s8:\n"
95
96 " cmp %%d3,%%d0\n"
97 " bles upper_limit_s8\n"
98 " move %%d3,%%d0\n"
99 "upper_limit_s8:\n"
100 " moveb %%d0,%0@+\n"
101
102 /* Loop till done */
103
104 " subql #1,%2\n"
105 " bhis mixloop_s8\n"
106 "stoploop_s8:\n"
107
108 : /* no return value */
109 : /* input */
110 "a"(dst), "a"(src), "d"(len), "d"(volume)
111 : /* clobbered registers */
112 "d0", "d1", "d2", "d3", "cc", "memory"
113 );
114 } 77 }
115 78
116 void SDL_MixAudio_m68k_S16MSB(short* dst, short* src, long len, long volume) 79 void
80 SDL_MixAudio_m68k_S16MSB (short *dst, short *src, long len, long volume)
117 { 81 {
118 __asm__ __volatile__ ( 82 __asm__ __volatile__ ("tstl %2\n"
119 83 " beqs stoploop_s16msb\n"
120 "tstl %2\n" 84 " movel #-32768,%%d2\n"
121 " beqs stoploop_s16msb\n" 85 " movel #32767,%%d3\n"
122 " movel #-32768,%%d2\n" 86 " lsrl #1,%2\n" "mixloop_s16msb:\n"
123 " movel #32767,%%d3\n" 87 /* Mix a sample */
124 " lsrl #1,%2\n" 88 " move %1@+,%%d0\n" /* d0 = *src++ */
125 "mixloop_s16msb:\n" 89 " muls %3,%%d0\n" /* d0 *= volume (0<=volume<=128) */
126 90 " move %0@,%%d1\n" /* d1 = *dst */
127 /* Mix a sample */ 91 " extl %%d1\n" /* extend d1 to 32 bits */
128 92 " asrl #7,%%d0\n" /* d0 /= 128 (SDL_MIX_MAXVOLUME) */
129 " move %1@+,%%d0\n" /* d0 = *src++ */ 93 " addl %%d1,%%d0\n"
130 " muls %3,%%d0\n" /* d0 *= volume (0<=volume<=128) */ 94 " cmpl %%d2,%%d0\n"
131 " move %0@,%%d1\n" /* d1 = *dst */ 95 " bges lower_limit_s16msb\n"
132 " extl %%d1\n" /* extend d1 to 32 bits */ 96 " move %%d2,%%d0\n"
133 " asrl #7,%%d0\n" /* d0 /= 128 (SDL_MIX_MAXVOLUME) */ 97 "lower_limit_s16msb:\n"
134 98 " cmpl %%d3,%%d0\n"
135 " addl %%d1,%%d0\n" 99 " bles upper_limit_s16msb\n"
136 100 " move %%d3,%%d0\n"
137 " cmpl %%d2,%%d0\n" 101 "upper_limit_s16msb:\n" " move %%d0,%0@+\n"
138 " bges lower_limit_s16msb\n" 102 /* Loop till done */
139 " move %%d2,%%d0\n" 103 " subql #1,%2\n" " bhis mixloop_s16msb\n" "stoploop_s16msb:\n": /* no return value */
140 "lower_limit_s16msb:\n" 104 : /* input */
141 105 "a" (dst), "a" (src), "d" (len), "d" (volume): /* clobbered registers */
142 " cmpl %%d3,%%d0\n" 106 "d0", "d1", "d2", "d3", "cc", "memory");
143 " bles upper_limit_s16msb\n"
144 " move %%d3,%%d0\n"
145 "upper_limit_s16msb:\n"
146 " move %%d0,%0@+\n"
147
148 /* Loop till done */
149
150 " subql #1,%2\n"
151 " bhis mixloop_s16msb\n"
152 "stoploop_s16msb:\n"
153
154 : /* no return value */
155 : /* input */
156 "a"(dst), "a"(src), "d"(len), "d"(volume)
157 : /* clobbered registers */
158 "d0", "d1", "d2", "d3", "cc", "memory"
159 );
160 } 107 }
161 108
162 void SDL_MixAudio_m68k_S16LSB(short* dst, short* src, long len, long volume) 109 void
110 SDL_MixAudio_m68k_S16LSB (short *dst, short *src, long len, long volume)
163 { 111 {
164 __asm__ __volatile__ ( 112 __asm__ __volatile__ ("tstl %2\n"
165 113 " beqs stoploop_s16lsb\n"
166 "tstl %2\n" 114 " movel #-32768,%%d2\n"
167 " beqs stoploop_s16lsb\n" 115 " movel #32767,%%d3\n"
168 " movel #-32768,%%d2\n" 116 " lsrl #1,%2\n" "mixloop_s16lsb:\n"
169 " movel #32767,%%d3\n" 117 /* Mix a sample */
170 " lsrl #1,%2\n" 118 " move %1@+,%%d0\n" /* d0 = *src++ */
171 "mixloop_s16lsb:\n" 119 " rorw #8,%%d0\n" " muls %3,%%d0\n" /* d0 *= volume (0<=volume<=128) */
172 120 " move %0@,%%d1\n" /* d1 = *dst */
173 /* Mix a sample */ 121 " rorw #8,%%d1\n" " extl %%d1\n" /* extend d1 to 32 bits */
174 122 " asrl #7,%%d0\n" /* d0 /= 128 (SDL_MIX_MAXVOLUME) */
175 " move %1@+,%%d0\n" /* d0 = *src++ */ 123 " addl %%d1,%%d0\n"
176 " rorw #8,%%d0\n" 124 " cmpl %%d2,%%d0\n"
177 " muls %3,%%d0\n" /* d0 *= volume (0<=volume<=128) */ 125 " bges lower_limit_s16lsb\n"
178 " move %0@,%%d1\n" /* d1 = *dst */ 126 " move %%d2,%%d0\n"
179 " rorw #8,%%d1\n" 127 "lower_limit_s16lsb:\n"
180 " extl %%d1\n" /* extend d1 to 32 bits */ 128 " cmpl %%d3,%%d0\n"
181 " asrl #7,%%d0\n" /* d0 /= 128 (SDL_MIX_MAXVOLUME) */ 129 " bles upper_limit_s16lsb\n"
182 130 " move %%d3,%%d0\n"
183 " addl %%d1,%%d0\n" 131 "upper_limit_s16lsb:\n"
184 132 " rorw #8,%%d0\n" " move %%d0,%0@+\n"
185 " cmpl %%d2,%%d0\n" 133 /* Loop till done */
186 " bges lower_limit_s16lsb\n" 134 " subql #1,%2\n" " bhis mixloop_s16lsb\n" "stoploop_s16lsb:\n": /* no return value */
187 " move %%d2,%%d0\n" 135 : /* input */
188 "lower_limit_s16lsb:\n" 136 "a" (dst), "a" (src), "d" (len), "d" (volume): /* clobbered registers */
189 137 "d0", "d1", "d2", "d3", "cc", "memory");
190 " cmpl %%d3,%%d0\n"
191 " bles upper_limit_s16lsb\n"
192 " move %%d3,%%d0\n"
193 "upper_limit_s16lsb:\n"
194 " rorw #8,%%d0\n"
195 " move %%d0,%0@+\n"
196
197 /* Loop till done */
198
199 " subql #1,%2\n"
200 " bhis mixloop_s16lsb\n"
201 "stoploop_s16lsb:\n"
202
203 : /* no return value */
204 : /* input */
205 "a"(dst), "a"(src), "d"(len), "d"(volume)
206 : /* clobbered registers */
207 "d0", "d1", "d2", "d3", "cc", "memory"
208 );
209 } 138 }
210 #endif 139 #endif
211 140 /* vi: set ts=4 sw=4 expandtab: */