Mercurial > hg > xmms-sid
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"); |