Mercurial > hg > xmms-sid
comparison src/xs_sidplay2.cpp @ 847:5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
improved debug output.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 08 Nov 2012 22:44:36 +0200 |
parents | ae1f6418d093 |
children | 2663b1ac9ce6 |
comparison
equal
deleted
inserted
replaced
846:7b11ba6fc4cc | 847:5b93bd8c7814 |
---|---|
111 sid_filter_t tmpFilter; | 111 sid_filter_t tmpFilter; |
112 xs_sid_filter_t *f; | 112 xs_sid_filter_t *f; |
113 gint i; | 113 gint i; |
114 assert(state); | 114 assert(state); |
115 | 115 |
116 XSDEBUG("SIDPlay2 backend initializing.\n"); | |
117 | |
116 /* Allocate internal structures */ | 118 /* Allocate internal structures */ |
117 engine = new XSSIDPlay2(); | 119 engine = new XSSIDPlay2(); |
118 state->internal = engine; | 120 state->internal = engine; |
119 if (!engine) | 121 if (!engine) |
120 return FALSE; | 122 return FALSE; |
121 | 123 |
122 /* Get current configuration */ | 124 /* Get current configuration */ |
125 XSDEBUG("SIDPlay2 emulation configuration\n"); | |
123 engine->config = engine->emu.config(); | 126 engine->config = engine->emu.config(); |
124 | 127 |
125 /* Configure channels and stuff */ | 128 /* Configure channels and stuff */ |
126 switch (state->audioChannels) | 129 switch (state->audioChannels) |
127 { | 130 { |
222 for (i = 0; i < f->npoints; i++) | 225 for (i = 0; i < f->npoints; i++) |
223 { | 226 { |
224 tmpFilter.cutoff[i][0] = f->points[i].x; | 227 tmpFilter.cutoff[i][0] = f->points[i].x; |
225 tmpFilter.cutoff[i][1] = f->points[i].y; | 228 tmpFilter.cutoff[i][1] = f->points[i].y; |
226 } | 229 } |
230 | |
231 /* Clockspeed settings */ | |
232 switch (xs_cfg.clockSpeed) | |
233 { | |
234 case XS_CLOCK_NTSC: | |
235 engine->config.clockDefault = SID2_CLOCK_NTSC; | |
236 break; | |
237 | |
238 default: | |
239 case XS_CLOCK_PAL: | |
240 engine->config.clockDefault = SID2_CLOCK_PAL; | |
241 xs_cfg.clockSpeed = XS_CLOCK_PAL; | |
242 break; | |
243 } | |
244 | |
245 | |
246 /* Configure rest of the emulation */ | |
247 if (xs_cfg.forceSpeed) | |
248 { | |
249 engine->config.clockForced = true; | |
250 engine->config.clockSpeed = engine->config.clockDefault; | |
251 } | |
252 else | |
253 { | |
254 engine->config.clockForced = false; | |
255 engine->config.clockSpeed = SID2_CLOCK_CORRECT; | |
256 } | |
257 | |
258 | |
259 if (xs_cfg.sid2OptLevel < 0 || xs_cfg.sid2OptLevel > SID2_MAX_OPTIMISATION) | |
260 { | |
261 xs_error("Invalid sid2OptLevel=%d, falling back to %d.\n", | |
262 xs_cfg.sid2OptLevel, SID2_DEFAULT_OPTIMISATION); | |
263 | |
264 xs_cfg.sid2OptLevel = SID2_DEFAULT_OPTIMISATION; | |
265 } | |
266 engine->config.optimisation = xs_cfg.sid2OptLevel; | |
267 | |
268 engine->config.sidDefault = xs_cfg.mos8580 ? SID2_MOS8580 : SID2_MOS6581; | |
269 engine->config.sidModel = xs_cfg.forceModel ? engine->config.sidDefault : SID2_MODEL_CORRECT; | |
270 engine->config.sidSamples = TRUE; | |
271 | |
227 | 272 |
228 /* Initialize builder object */ | 273 /* Initialize builder object */ |
229 XSDEBUG("init builder #%i, maxsids=%i\n", xs_cfg.sid2Builder, (engine->emu.info()).maxsids); | 274 XSDEBUG("init builder #%i, maxsids=%i\n", xs_cfg.sid2Builder, (engine->emu.info()).maxsids); |
230 | 275 |
231 switch (xs_cfg.sid2Builder) | 276 switch (xs_cfg.sid2Builder) |
263 break; | 308 break; |
264 #endif | 309 #endif |
265 | 310 |
266 default: | 311 default: |
267 xs_error("[SIDPlay2] Invalid or unsupported builder selected.\n"); | 312 xs_error("[SIDPlay2] Invalid or unsupported builder selected.\n"); |
268 break; | 313 return FALSE; |
269 } | 314 } |
270 | 315 |
271 if (!engine->config.sidEmulation) | 316 if (!engine->config.sidEmulation) |
272 { | 317 { |
273 xs_error("[SIDPlay2] Could not initialize SIDBuilder object.\n"); | 318 xs_error("[SIDPlay2] Could not initialize SIDBuilder object.\n"); |
284 } | 329 } |
285 #endif | 330 #endif |
286 | 331 |
287 XSDEBUG("%s\n", engine->config.sidEmulation->credits()); | 332 XSDEBUG("%s\n", engine->config.sidEmulation->credits()); |
288 | 333 |
289 /* Clockspeed settings */ | |
290 switch (xs_cfg.clockSpeed) | |
291 { | |
292 case XS_CLOCK_NTSC: | |
293 engine->config.clockDefault = SID2_CLOCK_NTSC; | |
294 break; | |
295 | |
296 default: | |
297 case XS_CLOCK_PAL: | |
298 engine->config.clockDefault = SID2_CLOCK_PAL; | |
299 xs_cfg.clockSpeed = XS_CLOCK_PAL; | |
300 break; | |
301 } | |
302 | |
303 | |
304 /* Configure rest of the emulation */ | |
305 if (xs_cfg.forceSpeed) | |
306 { | |
307 engine->config.clockForced = true; | |
308 engine->config.clockSpeed = engine->config.clockDefault; | |
309 } | |
310 else | |
311 { | |
312 engine->config.clockForced = false; | |
313 engine->config.clockSpeed = SID2_CLOCK_CORRECT; | |
314 } | |
315 | |
316 | |
317 if (xs_cfg.sid2OptLevel < 0 || xs_cfg.sid2OptLevel > SID2_MAX_OPTIMISATION) | |
318 { | |
319 xs_error("Invalid sid2OptLevel=%d, falling back to %d.\n", | |
320 xs_cfg.sid2OptLevel, SID2_DEFAULT_OPTIMISATION); | |
321 | |
322 xs_cfg.sid2OptLevel = SID2_DEFAULT_OPTIMISATION; | |
323 } | |
324 engine->config.optimisation = xs_cfg.sid2OptLevel; | |
325 | |
326 engine->config.sidDefault = xs_cfg.mos8580 ? SID2_MOS8580 : SID2_MOS6581; | |
327 engine->config.sidModel = xs_cfg.forceModel ? engine->config.sidDefault : SID2_MODEL_CORRECT; | |
328 engine->config.sidSamples = TRUE; | |
329 | 334 |
330 return TRUE; | 335 return TRUE; |
331 } | 336 } |
332 | 337 |
333 | 338 |
334 /* Close SIDPlay2 engine | 339 /* Close SIDPlay2 engine |
335 */ | 340 */ |
336 void xs_sidplay2_close(XSEngineState * state) | 341 void xs_sidplay2_close(XSEngineState * state) |
337 { | 342 { |
338 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; | 343 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; |
344 | |
345 XSDEBUG("SIDPlay2 backend shutdown.\n"); | |
339 | 346 |
340 xs_sidplay2_delete(state); | 347 xs_sidplay2_delete(state); |
341 | 348 |
342 if (engine) | 349 if (engine) |
343 { | 350 { |
437 #endif | 444 #endif |
438 } | 445 } |
439 | 446 |
440 | 447 |
441 } /* extern "C" */ | 448 } /* extern "C" */ |
442 #endif /* HAVE_SIDPLAY2 */ | 449 #endif /* HAVE_SIDPLAY2 |
450 */ |