# HG changeset patch # User Matti Hamalainen # Date 1105203961 0 # Node ID 45ad9f7c1628c48e3728e41f9c4b017ce71a6170 # Parent 36c776c8f55379f31c9c72fc087c8343cda775d8 Improved compatibility, some fixes in reSID emulation initialization. diff -r 36c776c8f553 -r 45ad9f7c1628 src/xs_sidplay2.cc --- a/src/xs_sidplay2.cc Wed Jan 05 10:38:03 2005 +0000 +++ b/src/xs_sidplay2.cc Sat Jan 08 17:06:01 2005 +0000 @@ -80,6 +80,7 @@ /* Allocate internal structures */ myEngine = (t_xs_sidplay2 *) g_malloc0(sizeof(t_xs_sidplay2)); + myStatus->sidEngine = myEngine; if (!myEngine) return FALSE; @@ -91,35 +92,6 @@ return FALSE; } - /* Initialize builder object */ - XSDEBUG("init builder #%i\n", xs_cfg.sid2Builder); -#ifdef HAVE_RESID_BUILDER - if (xs_cfg.sid2Builder == XS_BLD_RESID) - { - ReSIDBuilder *tmpb = new ReSIDBuilder("SIDPlay2 suxx - ReSID builder"); - - /* Create the builder -- WHAT IS THIS MEANT FOR??? */ - tmpb->create(myEngine->currEng->info().maxsids); - - myEngine->currBuilder = (sidbuilder *) tmpb; - } -#endif -#ifdef HAVE_HARDSID_BUILDER - if (xs_cfg.sid2Builder == XS_BLD_HARDSID) - { - } -#endif - - if (!myEngine->currBuilder) - { - XSERR("Could not initialize SIDBuilder object.\n"); - return FALSE; - } - - XSDEBUG("%s\n", myEngine->currBuilder->credits()); - myStatus->sidEngine = myEngine; - - /* Get current configuration */ myEngine->currConfig = myEngine->currEng->config(); @@ -178,19 +150,6 @@ } - /* Configure rest of the emulation */ - myEngine->currConfig.sidEmulation = myEngine->currBuilder; - myEngine->currConfig.clockForced = xs_cfg.forceSpeed; - myEngine->currConfig.optimisation = (xs_cfg.sid2OptLevel) ? 1 : 0; - if (xs_cfg.mos8580) - myEngine->currConfig.sidDefault = SID2_MOS8580; - else - myEngine->currConfig.sidDefault = SID2_MOS6581; - - myEngine->currConfig.sidModel = myEngine->currConfig.sidDefault; - myEngine->currConfig.sidSamples = TRUE; // FIXME FIX ME, make configurable! - - /* Audio parameters sanity checking and setup */ myEngine->currConfig.precision = myStatus->audioBitsPerSample; tmpFreq = myStatus->audioFrequency; @@ -246,6 +205,94 @@ break; } + /* Initialize builder object */ + XSDEBUG("init builder #%i, maxsids=%i\n", xs_cfg.sid2Builder, (myEngine->currEng->info()).maxsids); +#ifdef HAVE_RESID_BUILDER + if (xs_cfg.sid2Builder == XS_BLD_RESID) + { + ReSIDBuilder *rs = new ReSIDBuilder("ReSID builder"); + myEngine->currBuilder = (sidbuilder *) rs; + if (rs) + { + /* Builder object created, initialize it */ + rs->create((myEngine->currEng->info()).maxsids); + if (!*rs) + { + XSERR("rs->create() failed. SIDPlay2 suxx again.\n"); + return FALSE; + } + rs->filter(xs_cfg.emulateFilters); + if (!*rs) + { + XSERR("rs->filter(%d) failed.\n", xs_cfg.emulateFilters); + return FALSE; + } + + rs->sampling(tmpFreq); + if (!*rs) + { + XSERR("rs->sampling(%d) failed.\n", tmpFreq); + return FALSE; + } + + rs->filter((sid_filter_t *) NULL); + if (!*rs) + { + XSERR("rs->filter(NULL) failed.\n"); + return FALSE; + } +/* +*/ + } + } +#endif +#ifdef HAVE_HARDSID_BUILDER + if (xs_cfg.sid2Builder == XS_BLD_HARDSID) + { + HardSIDBuilder *hs = new HardSIDBuilder("HardSID builder"); + myEngine->currBuilder = (sidbuilder *) hs; + if (hs) + { + /* Builder object created, initialize it */ + hs->create((myEngine->currEng->info()).maxsids); + if (!*hs) + { + XSERR("hs->create() failed. SIDPlay2 suxx again.\n"); + return FALSE; + } + + hs->filter(xs_cfg.emulateFilters); + if (!*hs) + { + XSERR("hs->filter(%d) failed.\n", xs_cfg.emulateFilters); + return FALSE; + } + } + } +#endif + + if (!myEngine->currBuilder) + { + XSERR("Could not initialize SIDBuilder object.\n"); + return FALSE; + } + + XSDEBUG("%s\n", myEngine->currBuilder->credits()); + + + /* Configure rest of the emulation */ + myEngine->currConfig.sidEmulation = myEngine->currBuilder; + myEngine->currConfig.clockForced = xs_cfg.forceSpeed; + myEngine->currConfig.optimisation = (xs_cfg.sid2OptLevel) ? 1 : 0; + if (xs_cfg.mos8580) + myEngine->currConfig.sidDefault = SID2_MOS8580; + else + myEngine->currConfig.sidDefault = SID2_MOS6581; + + myEngine->currConfig.sidModel = myEngine->currConfig.sidDefault; + myEngine->currConfig.sidSamples = TRUE; // FIXME FIX ME, make configurable! + + /* Now set the emulator configuration */ if (myEngine->currEng->config(myEngine->currConfig) < 0) {