comparison src/xs_sidplay2.cc @ 402:f997b79a7251

More work on merging of improved STIL/SLDB handling code with completely dynamic memory allocation.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 01 Jun 2006 02:18:02 +0000
parents 0a60ef2b5ab0
children 7f694e5a1493
comparison
equal deleted inserted replaced
401:30da794755f7 402:f997b79a7251
26 26
27 #include "xs_sidplay2.h" 27 #include "xs_sidplay2.h"
28 #include <stdio.h> 28 #include <stdio.h>
29 #include "xs_config.h" 29 #include "xs_config.h"
30 #include "xs_support.h" 30 #include "xs_support.h"
31 #include "xs_length.h" 31
32 #include "xs_title.h"
33 32
34 #include <sidplay/sidplay2.h> 33 #include <sidplay/sidplay2.h>
35 #ifdef HAVE_RESID_BUILDER 34 #ifdef HAVE_RESID_BUILDER
36 #include <sidplay/builders/resid.h> 35 #include <sidplay/builders/resid.h>
37 #endif 36 #endif
198 myEngine->currBuilder = (sidbuilder *) rs; 197 myEngine->currBuilder = (sidbuilder *) rs;
199 if (rs) { 198 if (rs) {
200 /* Builder object created, initialize it */ 199 /* Builder object created, initialize it */
201 rs->create((myEngine->currEng->info()).maxsids); 200 rs->create((myEngine->currEng->info()).maxsids);
202 if (!*rs) { 201 if (!*rs) {
203 xs_error("rs->create() failed. SIDPlay2 suxx again.\n"); 202 xs_error("rs->create() failed.\n");
204 return FALSE; 203 return FALSE;
205 } 204 }
206 205
207 rs->filter(xs_cfg.emulateFilters); 206 rs->filter(xs_cfg.emulateFilters);
208 if (!*rs) { 207 if (!*rs) {
209 xs_error("rs->filter(%d) failed.\n", xs_cfg.emulateFilters); 208 xs_error("rs->filter(%d) failed.\n", xs_cfg.emulateFilters);
210 return FALSE; 209 return FALSE;
211 } 210 }
212 211
212 // FIXME FIX ME: support other configurable parameters ...
213 // ... WHEN/IF resid-builder+libsidplay2 gets fixed
213 rs->sampling(tmpFreq); 214 rs->sampling(tmpFreq);
214 if (!*rs) { 215 if (!*rs) {
215 xs_error("rs->sampling(%d) failed.\n", tmpFreq); 216 xs_error("rs->sampling(%d) failed.\n", tmpFreq);
216 return FALSE; 217 return FALSE;
217 } 218 }
218 219
220 // FIXME FIX ME: load filter spec
219 rs->filter((sid_filter_t *) NULL); 221 rs->filter((sid_filter_t *) NULL);
220 if (!*rs) { 222 if (!*rs) {
221 xs_error("rs->filter(NULL) failed.\n"); 223 xs_error("rs->filter(NULL) failed.\n");
222 return FALSE; 224 return FALSE;
223 } 225 }
230 myEngine->currBuilder = (sidbuilder *) hs; 232 myEngine->currBuilder = (sidbuilder *) hs;
231 if (hs) { 233 if (hs) {
232 /* Builder object created, initialize it */ 234 /* Builder object created, initialize it */
233 hs->create((myEngine->currEng->info()).maxsids); 235 hs->create((myEngine->currEng->info()).maxsids);
234 if (!*hs) { 236 if (!*hs) {
235 xs_error("hs->create() failed. SIDPlay2 suxx again.\n"); 237 xs_error("hs->create() failed.\n");
236 return FALSE; 238 return FALSE;
237 } 239 }
238 240
239 hs->filter(xs_cfg.emulateFilters); 241 hs->filter(xs_cfg.emulateFilters);
240 if (!*hs) { 242 if (!*hs) {
257 switch (xs_cfg.clockSpeed) { 259 switch (xs_cfg.clockSpeed) {
258 case XS_CLOCK_NTSC: 260 case XS_CLOCK_NTSC:
259 myEngine->currConfig.clockDefault = SID2_CLOCK_NTSC; 261 myEngine->currConfig.clockDefault = SID2_CLOCK_NTSC;
260 break; 262 break;
261 263
264 default:
265 xs_error("Invalid clockSpeed=%d, falling back to PAL.\n", xs_cfg.clockSpeed);
266
262 case XS_CLOCK_PAL: 267 case XS_CLOCK_PAL:
263 default:
264 myEngine->currConfig.clockDefault = SID2_CLOCK_PAL; 268 myEngine->currConfig.clockDefault = SID2_CLOCK_PAL;
265 xs_cfg.clockSpeed = XS_CLOCK_PAL; 269 xs_cfg.clockSpeed = XS_CLOCK_PAL;
266 break; 270 break;
267 } 271 }
268 272
276 } else { 280 } else {
277 myEngine->currConfig.clockForced = false; 281 myEngine->currConfig.clockForced = false;
278 myEngine->currConfig.clockSpeed = SID2_CLOCK_CORRECT; 282 myEngine->currConfig.clockSpeed = SID2_CLOCK_CORRECT;
279 } 283 }
280 284
281 if (xs_cfg.sid2OptLevel) 285 if ((xs_cfg.sid2OptLevel >= 0) && (xs_cfg.sid2OptLevel <= SID2_MAX_OPTIMISATION))
282 myEngine->currConfig.optimisation = 1; 286 myEngine->currConfig.optimisation = xs_cfg.sid2OptLevel;
283 else 287 else {
284 myEngine->currConfig.optimisation = 0; 288 xs_error("Invalid sid2OptLevel=%d, falling back to %d.\n",
289 xs_cfg.sid2OptLevel, SID2_DEFAULT_OPTIMISATION);
290
291 xs_cfg.sid2OptLevel =
292 myEngine->currConfig.optimisation = SID2_DEFAULT_OPTIMISATION;
293 }
285 294
286 if (xs_cfg.mos8580) 295 if (xs_cfg.mos8580)
287 myEngine->currConfig.sidDefault = SID2_MOS8580; 296 myEngine->currConfig.sidDefault = SID2_MOS8580;
288 else 297 else
289 myEngine->currConfig.sidDefault = SID2_MOS6581; 298 myEngine->currConfig.sidDefault = SID2_MOS6581;
291 if (xs_cfg.forceModel) 300 if (xs_cfg.forceModel)
292 myEngine->currConfig.sidModel = myEngine->currConfig.sidDefault; 301 myEngine->currConfig.sidModel = myEngine->currConfig.sidDefault;
293 else 302 else
294 myEngine->currConfig.sidModel = SID2_MODEL_CORRECT; 303 myEngine->currConfig.sidModel = SID2_MODEL_CORRECT;
295 304
296 myEngine->currConfig.sidSamples = TRUE; // FIXME FIX ME, make configurable! 305 /* XXX: Should this be configurable? libSIDPlay1 does not support it, though */
306 myEngine->currConfig.sidSamples = TRUE;
297 307
298 308
299 /* Now set the emulator configuration */ 309 /* Now set the emulator configuration */
300 if (myEngine->currEng->config(myEngine->currConfig) < 0) { 310 if (myEngine->currEng->config(myEngine->currConfig) < 0) {
301 xs_error("Emulator engine configuration failed!\n"); 311 xs_error("Emulator engine configuration failed!\n");