changeset 321:45ad9f7c1628

Improved compatibility, some fixes in reSID emulation initialization.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 08 Jan 2005 17:06:01 +0000
parents 36c776c8f553
children d40c1ca754aa
files src/xs_sidplay2.cc
diffstat 1 files changed, 89 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- 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)
 	{