Mercurial > hg > xmms-sid
comparison src/xs_sidplay2.cc @ 230:608f31f6c095
Raw cleanup.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 21 Dec 2004 09:25:03 +0000 |
parents | ddb513bd2610 |
children | e613873c3379 |
comparison
equal
deleted
inserted
replaced
229:7bb9e20e3092 | 230:608f31f6c095 |
---|---|
21 */ | 21 */ |
22 #include "xmms-sid.h" | 22 #include "xmms-sid.h" |
23 | 23 |
24 #ifdef HAVE_SIDPLAY2 | 24 #ifdef HAVE_SIDPLAY2 |
25 | 25 |
26 extern "C" { | |
27 #include "xs_sidplay2.h" | 26 #include "xs_sidplay2.h" |
28 #include <stdio.h> | 27 #include <stdio.h> |
29 #include <xmms/titlestring.h> | |
30 #include "xs_config.h" | 28 #include "xs_config.h" |
31 #include "xs_support.h" | 29 #include "xs_support.h" |
32 #include "xs_length.h" | 30 #include "xs_length.h" |
33 } | 31 #include "xs_title.h" |
34 | 32 |
35 #include <sidplay/sidplay2.h> | 33 #include <sidplay/sidplay2.h> |
36 #ifdef HAVE_RESID_BUILDER | 34 #ifdef HAVE_RESID_BUILDER |
37 #include <sidplay/builders/resid.h> | 35 #include <sidplay/builders/resid.h> |
38 #endif | 36 #endif |
77 /* | 75 /* |
78 * Initialize SIDPlay2 | 76 * Initialize SIDPlay2 |
79 */ | 77 */ |
80 gboolean xs_sidplay2_init(t_xs_status *myStatus) | 78 gboolean xs_sidplay2_init(t_xs_status *myStatus) |
81 { | 79 { |
82 t_xs_sidplay2 *myPlayer; | 80 t_xs_sidplay2 *myEngine; |
83 assert(myStatus); | 81 assert(myStatus); |
84 | 82 |
85 /* Allocate internal structures */ | 83 /* Allocate internal structures */ |
86 myPlayer = (t_xs_sidplay2 *) g_malloc0(sizeof(t_xs_sidplay2)); | 84 myEngine = (t_xs_sidplay2 *) g_malloc0(sizeof(t_xs_sidplay2)); |
87 if (!myPlayer) return FALSE; | 85 if (!myEngine) return FALSE; |
88 | 86 |
89 | 87 |
90 /* Initialize the engine */ | 88 /* Initialize the engine */ |
91 myPlayer->currEng = new sidplay2; | 89 myEngine->currEng = new sidplay2; |
92 if (!myPlayer->currEng) | 90 if (!myEngine->currEng) |
93 { | 91 { |
94 XSERR("Could not initialize libSIDPlay2 emulation engine\n"); | 92 XSERR("Could not initialize libSIDPlay2 emulation engine\n"); |
95 return FALSE; | 93 return FALSE; |
96 } | 94 } |
97 | 95 |
101 if (xs_cfg.sid2Builder == XS_BLD_RESID) | 99 if (xs_cfg.sid2Builder == XS_BLD_RESID) |
102 { | 100 { |
103 ReSIDBuilder *tmpb = new ReSIDBuilder("SIDPlay2 suxx and is made by a fag - ReSID builder"); | 101 ReSIDBuilder *tmpb = new ReSIDBuilder("SIDPlay2 suxx and is made by a fag - ReSID builder"); |
104 | 102 |
105 /* Create the builder -- WHAT IS THIS MEANT FOR??? */ | 103 /* Create the builder -- WHAT IS THIS MEANT FOR??? */ |
106 tmpb->create(myPlayer->currEng->info().maxsids); | 104 tmpb->create(myEngine->currEng->info().maxsids); |
107 | 105 |
108 myPlayer->currBuilder = (sidbuilder *) tmpb; | 106 myEngine->currBuilder = (sidbuilder *) tmpb; |
109 } | 107 } |
110 #endif | 108 #endif |
111 #ifdef HAVE_HARDSID_BUILDER | 109 #ifdef HAVE_HARDSID_BUILDER |
112 if (xs_cfg.sid2Builder == XS_BLD_HARDSID) | 110 if (xs_cfg.sid2Builder == XS_BLD_HARDSID) |
113 { | 111 { |
114 } | 112 } |
115 #endif | 113 #endif |
116 | 114 |
117 if (!myPlayer->currBuilder) | 115 if (!myEngine->currBuilder) |
118 { | 116 { |
119 XSERR("Could not initialize SIDBuilder object.\n"); | 117 XSERR("Could not initialize SIDBuilder object.\n"); |
120 return FALSE; | 118 return FALSE; |
121 } | 119 } |
122 | 120 |
123 XSDEBUG("%s\n", myPlayer->currBuilder->credits()); | 121 XSDEBUG("%s\n", myEngine->currBuilder->credits()); |
124 | 122 |
125 | 123 |
126 /* Create the sidtune */ | 124 /* Create the sidtune */ |
127 myPlayer->currTune = new SidTune(0); | 125 myEngine->currTune = new SidTune(0); |
128 if (!myPlayer->currTune) | 126 if (!myEngine->currTune) |
129 { | 127 { |
130 XSERR("Could not initialize SIDTune object.\n"); | 128 XSERR("Could not initialize SIDTune object.\n"); |
131 return FALSE; | 129 return FALSE; |
132 } | 130 } |
133 | 131 |
134 /* OK */ | 132 /* OK */ |
135 myStatus->player = myPlayer; | 133 myStatus->sidEngine = myEngine; |
136 return TRUE; | 134 return TRUE; |
137 } | 135 } |
138 | 136 |
139 | 137 |
140 /* | 138 /* |
141 * Close SIDPlay2 | 139 * Close SIDPlay2 |
142 */ | 140 */ |
143 void xs_sidplay2_close(t_xs_status *myStatus) | 141 void xs_sidplay2_close(t_xs_status *myStatus) |
144 { | 142 { |
145 t_xs_sidplay2 *myPlayer; | 143 t_xs_sidplay2 *myEngine; |
146 assert(myStatus); | 144 assert(myStatus); |
147 | 145 |
148 /* Free internals */ | 146 /* Free internals */ |
149 myPlayer = (t_xs_sidplay2 *) myStatus->player; | 147 myEngine = (t_xs_sidplay2 *) myStatus->sidEngine; |
150 | 148 |
151 if (myPlayer->currBuilder) | 149 if (myEngine->currBuilder) |
152 { | 150 { |
153 delete myPlayer->currBuilder; | 151 delete myEngine->currBuilder; |
154 myPlayer->currBuilder = NULL; | 152 myEngine->currBuilder = NULL; |
155 } | 153 } |
156 | 154 |
157 if (myPlayer->currEng) | 155 if (myEngine->currEng) |
158 { | 156 { |
159 delete myPlayer->currEng; | 157 delete myEngine->currEng; |
160 myPlayer->currEng = NULL; | 158 myEngine->currEng = NULL; |
161 } | 159 } |
162 | 160 |
163 if (myPlayer->currTune) | 161 if (myEngine->currTune) |
164 { | 162 { |
165 delete myPlayer->currTune; | 163 delete myEngine->currTune; |
166 myPlayer->currTune = NULL; | 164 myEngine->currTune = NULL; |
167 } | 165 } |
168 | 166 |
169 xs_sidplay2_deletesid(myStatus); | 167 xs_sidplay2_deletesid(myStatus); |
170 | 168 |
171 g_free(myPlayer); | 169 g_free(myEngine); |
172 myStatus->player = NULL; | 170 myStatus->sidEngine = NULL; |
173 } | 171 } |
174 | 172 |
175 | 173 |
176 gboolean xs_sidplay2_initsong(t_xs_status *myStatus) | 174 gboolean xs_sidplay2_initsong(t_xs_status *myStatus) |
177 { | 175 { |
178 t_xs_sidplay2 *myPlayer = (t_xs_sidplay2 *) myStatus->player; | 176 t_xs_sidplay2 *myEngine = (t_xs_sidplay2 *) myStatus->sidEngine; |
179 | 177 |
180 if (!myPlayer) return FALSE; | 178 if (!myEngine) return FALSE; |
181 | 179 |
182 if (!myPlayer->currTune->selectSong(myStatus->currSong)) | 180 if (!myEngine->currTune->selectSong(myStatus->currSong)) |
183 { | 181 { |
184 XSERR("ENGINE selectSong() failed\n"); | 182 XSERR("ENGINE selectSong() failed\n"); |
185 return FALSE; | 183 return FALSE; |
186 } | 184 } |
187 | 185 |
188 if (myPlayer->currEng->load(myPlayer->currTune) < 0) | 186 if (myEngine->currEng->load(myEngine->currTune) < 0) |
189 { | 187 { |
190 XSERR("ENGINE load() failed\n"); | 188 XSERR("ENGINE load() failed\n"); |
191 return FALSE; | 189 return FALSE; |
192 } | 190 } |
193 | 191 |
195 } | 193 } |
196 | 194 |
197 | 195 |
198 guint xs_sidplay2_fillbuffer(t_xs_status *myStatus, gchar *audioBuffer, guint audioBufSize) | 196 guint xs_sidplay2_fillbuffer(t_xs_status *myStatus, gchar *audioBuffer, guint audioBufSize) |
199 { | 197 { |
200 t_xs_sidplay2 *myPlayer = (t_xs_sidplay2 *) myStatus->player; | 198 t_xs_sidplay2 *myEngine = (t_xs_sidplay2 *) myStatus->sidEngine; |
201 | 199 |
202 return myPlayer->currEng->play(audioBuffer, audioBufSize); | 200 return myEngine->currEng->play(audioBuffer, audioBufSize); |
203 } | 201 } |
204 | 202 |
205 | 203 |
206 gboolean xs_sidplay2_loadsid(t_xs_status *myStatus, gchar *pcFilename) | 204 gboolean xs_sidplay2_loadsid(t_xs_status *myStatus, gchar *pcFilename) |
207 { | 205 { |
208 t_xs_sidplay2 *myPlayer = (t_xs_sidplay2 *) myStatus->player; | 206 t_xs_sidplay2 *myEngine = (t_xs_sidplay2 *) myStatus->sidEngine; |
209 assert(myStatus); | 207 assert(myStatus); |
210 | 208 |
211 /* Try to get the tune */ | 209 /* Try to get the tune */ |
212 if (!pcFilename) return FALSE; | 210 if (!pcFilename) return FALSE; |
213 if (!myPlayer->currTune->load(pcFilename)) return FALSE; | 211 if (!myEngine->currTune->load(pcFilename)) return FALSE; |
214 | 212 |
215 /* Get current configuration */ | 213 /* Get current configuration */ |
216 myPlayer->currConfig = myPlayer->currEng->config(); | 214 myEngine->currConfig = myEngine->currEng->config(); |
217 | 215 |
218 /* Configure channels and stuff */ | 216 /* Configure channels and stuff */ |
219 switch (myStatus->audioChannels) { | 217 switch (myStatus->audioChannels) { |
220 | 218 |
221 case XS_CHN_AUTOPAN: | 219 case XS_CHN_AUTOPAN: |
222 myPlayer->currConfig.playback = sid2_stereo; | 220 myEngine->currConfig.playback = sid2_stereo; |
223 break; | 221 break; |
224 | 222 |
225 case XS_CHN_STEREO: | 223 case XS_CHN_STEREO: |
226 myPlayer->currConfig.playback = sid2_stereo; | 224 myEngine->currConfig.playback = sid2_stereo; |
227 break; | 225 break; |
228 | 226 |
229 case XS_CHN_MONO: | 227 case XS_CHN_MONO: |
230 default: | 228 default: |
231 myPlayer->currConfig.playback = sid2_mono; | 229 myEngine->currConfig.playback = sid2_mono; |
232 break; | 230 break; |
233 } | 231 } |
234 | 232 |
235 | 233 |
236 /* Memory mode settings */ | 234 /* Memory mode settings */ |
237 switch (xs_cfg.memoryMode) { | 235 switch (xs_cfg.memoryMode) { |
238 case XS_MPU_BANK_SWITCHING: | 236 case XS_MPU_BANK_SWITCHING: |
239 myPlayer->currConfig.environment = sid2_envBS; | 237 myEngine->currConfig.environment = sid2_envBS; |
240 break; | 238 break; |
241 | 239 |
242 case XS_MPU_TRANSPARENT_ROM: | 240 case XS_MPU_TRANSPARENT_ROM: |
243 myPlayer->currConfig.environment = sid2_envTP; | 241 myEngine->currConfig.environment = sid2_envTP; |
244 break; | 242 break; |
245 | 243 |
246 case XS_MPU_PLAYSID_ENVIRONMENT: | 244 case XS_MPU_PLAYSID_ENVIRONMENT: |
247 myPlayer->currConfig.environment = sid2_envPS; | 245 myEngine->currConfig.environment = sid2_envPS; |
248 break; | 246 break; |
249 | 247 |
250 case XS_MPU_REAL: | 248 case XS_MPU_REAL: |
251 default: | 249 default: |
252 myPlayer->currConfig.environment = sid2_envR; | 250 myEngine->currConfig.environment = sid2_envR; |
253 break; | 251 break; |
254 } | 252 } |
255 | 253 |
256 | 254 |
257 /* Clockspeed settings */ | 255 /* Clockspeed settings */ |
258 switch (xs_cfg.clockSpeed) { | 256 switch (xs_cfg.clockSpeed) { |
259 case XS_CLOCK_NTSC: | 257 case XS_CLOCK_NTSC: |
260 myPlayer->currConfig.clockSpeed = myPlayer->currConfig.clockDefault = SID2_CLOCK_NTSC; | 258 myEngine->currConfig.clockSpeed = myEngine->currConfig.clockDefault = SID2_CLOCK_NTSC; |
261 break; | 259 break; |
262 | 260 |
263 case XS_CLOCK_PAL: | 261 case XS_CLOCK_PAL: |
264 default: | 262 default: |
265 myPlayer->currConfig.clockSpeed = myPlayer->currConfig.clockDefault = SID2_CLOCK_PAL; | 263 myEngine->currConfig.clockSpeed = myEngine->currConfig.clockDefault = SID2_CLOCK_PAL; |
266 break; | 264 break; |
267 } | 265 } |
268 | 266 |
269 | 267 |
270 /* Configure rest of the emulation */ | 268 /* Configure rest of the emulation */ |
271 myPlayer->currConfig.sidEmulation = myPlayer->currBuilder; | 269 myEngine->currConfig.sidEmulation = myEngine->currBuilder; |
272 myPlayer->currConfig.clockForced = xs_cfg.forceSpeed; | 270 myEngine->currConfig.clockForced = xs_cfg.forceSpeed; |
273 myPlayer->currConfig.optimisation = (xs_cfg.sid2OptLevel) ? 1 : 0; | 271 myEngine->currConfig.optimisation = (xs_cfg.sid2OptLevel) ? 1 : 0; |
274 myPlayer->currConfig.sidDefault = myPlayer->currConfig.sidModel = (xs_cfg.mos8580) ? SID2_MOS8580 : SID2_MOS6581; | 272 myEngine->currConfig.sidDefault = myEngine->currConfig.sidModel = (xs_cfg.mos8580) ? SID2_MOS8580 : SID2_MOS6581; |
275 myPlayer->currConfig.sidSamples = TRUE; // FIXME FIX ME, make configurable! | 273 myEngine->currConfig.sidSamples = TRUE; // FIXME FIX ME, make configurable! |
276 myPlayer->currConfig.precision = myStatus->audioBitsPerSample; | 274 myEngine->currConfig.precision = myStatus->audioBitsPerSample; |
277 myPlayer->currConfig.frequency = myStatus->audioFrequency; | 275 myEngine->currConfig.frequency = myStatus->audioFrequency; |
278 | 276 |
279 switch (myStatus->audioBitsPerSample) { | 277 switch (myStatus->audioBitsPerSample) { |
280 case XS_RES_8BIT: | 278 case XS_RES_8BIT: |
281 myStatus->audioFormat = FMT_U8; | 279 myStatus->audioFormat = FMT_U8; |
282 myPlayer->currConfig.sampleFormat = SID2_LITTLE_UNSIGNED; | 280 myEngine->currConfig.sampleFormat = SID2_LITTLE_UNSIGNED; |
283 break; | 281 break; |
284 | 282 |
285 case XS_RES_16BIT: | 283 case XS_RES_16BIT: |
286 switch (myStatus->audioFormat) { | 284 switch (myStatus->audioFormat) { |
287 case FMT_U16_LE: | 285 case FMT_U16_LE: |
288 myPlayer->currConfig.sampleFormat = SID2_LITTLE_UNSIGNED; | 286 myEngine->currConfig.sampleFormat = SID2_LITTLE_UNSIGNED; |
289 break; | 287 break; |
290 | 288 |
291 case FMT_U16_BE: | 289 case FMT_U16_BE: |
292 myPlayer->currConfig.sampleFormat = SID2_BIG_UNSIGNED; | 290 myEngine->currConfig.sampleFormat = SID2_BIG_UNSIGNED; |
293 break; | 291 break; |
294 | 292 |
295 case FMT_U16_NE: | 293 case FMT_U16_NE: |
296 myStatus->audioFormat = FMT_U16_NE; | 294 myStatus->audioFormat = FMT_U16_NE; |
297 #ifdef WORDS_BIGENDIAN | 295 #ifdef WORDS_BIGENDIAN |
298 myPlayer->currConfig.sampleFormat = SID2_BIG_UNSIGNED; | 296 myEngine->currConfig.sampleFormat = SID2_BIG_UNSIGNED; |
299 #else | 297 #else |
300 myPlayer->currConfig.sampleFormat = SID2_LITTLE_UNSIGNED; | 298 myEngine->currConfig.sampleFormat = SID2_LITTLE_UNSIGNED; |
301 #endif | 299 #endif |
302 break; | 300 break; |
303 | 301 |
304 case FMT_S16_LE: | 302 case FMT_S16_LE: |
305 myPlayer->currConfig.sampleFormat = SID2_LITTLE_SIGNED; | 303 myEngine->currConfig.sampleFormat = SID2_LITTLE_SIGNED; |
306 break; | 304 break; |
307 | 305 |
308 case FMT_S16_BE: | 306 case FMT_S16_BE: |
309 myPlayer->currConfig.sampleFormat = SID2_BIG_SIGNED; | 307 myEngine->currConfig.sampleFormat = SID2_BIG_SIGNED; |
310 break; | 308 break; |
311 | 309 |
312 default: | 310 default: |
313 myStatus->audioFormat = FMT_S16_NE; | 311 myStatus->audioFormat = FMT_S16_NE; |
314 #ifdef WORDS_BIGENDIAN | 312 #ifdef WORDS_BIGENDIAN |
315 myPlayer->currConfig.sampleFormat = SID2_BIG_SIGNED; | 313 myEngine->currConfig.sampleFormat = SID2_BIG_SIGNED; |
316 #else | 314 #else |
317 myPlayer->currConfig.sampleFormat = SID2_LITTLE_SIGNED; | 315 myEngine->currConfig.sampleFormat = SID2_LITTLE_SIGNED; |
318 #endif | 316 #endif |
319 break; | 317 break; |
320 | 318 |
321 } | 319 } |
322 break; | 320 break; |
323 } | 321 } |
324 | 322 |
325 | 323 |
326 /* Now set the emulator configuration */ | 324 /* Now set the emulator configuration */ |
327 if (myPlayer->currEng->config(myPlayer->currConfig) < 0) | 325 if (myEngine->currEng->config(myEngine->currConfig) < 0) |
328 { | 326 { |
329 XSERR("Emulator engine configuration failed!\n"); | 327 XSERR("Emulator engine configuration failed!\n"); |
330 return FALSE; | 328 return FALSE; |
331 } | 329 } |
332 | 330 |
346 | 344 |
347 | 345 |
348 /* | 346 /* |
349 * Return song information | 347 * Return song information |
350 */ | 348 */ |
351 #define TFUNCTION1 xs_sidplay2_filetitle | 349 #define TFUNCTION xs_sidplay2_getsidinfo |
352 #define TFUNCTION2 xs_sidplay2_getsidinfo | |
353 #define TTUNEINFO SidTuneInfo | 350 #define TTUNEINFO SidTuneInfo |
354 #define TTUNE SidTune | 351 #define TTUNE SidTune |
355 #include "xs_sidplay.h" | 352 #include "xs_sidplay.h" |
356 | 353 |
357 } /* extern "C" */ | 354 } /* extern "C" */ |