changeset 44:90cd38b28a72

Various fixes and transmogrifying for dual emulation engine environment
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 20 Jun 2003 01:12:03 +0000
parents 3c609b6d5a02
children 84214a409d19
files src/xmms-sid.cc src/xs_config.c src/xs_config.h
diffstat 3 files changed, 108 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/xmms-sid.cc	Fri Jun 20 01:12:00 2003 +0000
+++ b/src/xmms-sid.cc	Fri Jun 20 01:12:03 2003 +0000
@@ -54,10 +54,14 @@
 static struct emuConfig	xs_emuConf;
 static emuEngine	xs_emuEngine;
 typedef	sidTune		t_xs_tune;
+typedef struct sidTuneInfo	t_xs_tuneinfo;
 #endif
 
 #ifdef HAVE_SIDPLAY2
+static struct sid2_config_t	xs_emuConf;
 static sidplay2		xs_emuEngine;
+typedef SidTune		t_xs_tune;
+typedef struct SidTuneInfo	t_xs_tuneinfo;
 #endif
 
 static GtkWidget	*xs_ctrlwin	= NULL;
@@ -234,7 +238,7 @@
 void xs_play_file(char *fileName)
 {
  t_xs_tune *newTune;
- struct sidTuneInfo sidInf;
+ t_xs_tuneinfo sidInf;
 
  XSDEBUG("request to load '%s'\n", fileName);
 
@@ -252,16 +256,16 @@
 
 
  /* Try to get the tune */
- newTune = new sidTune(fileName);
+ newTune = new t_xs_tune(fileName);
  if (newTune == NULL) return;
 
  XSDEBUG("tune ok, configuring SIDPlay engine\n");
 
 
+#ifdef HAVE_SIDPLAY1
  /* Get current configuration */
  xs_emuEngine.getConfig(xs_emuConf);
 
-
  /* Configure channels and stuff */
  switch (xs_cfg.fmtChannels) {
 
@@ -338,17 +342,99 @@
  xs_emuConf.filterFm		= xs_cfg.filterFm;
  xs_emuConf.filterFt		= xs_cfg.filterFt;
 
- XSDEBUG("configuring engine..\n");
+ /* Now set the emulator configuration */
+ xs_emuEngine.setConfig(xs_emuConf);
+#endif
+
+
+
+#ifdef HAVE_SIDPLAY2
+ /* Get current configuration */
+ xs_emuConf = xs_emuEngine.config();
+
+ /* Configure channels and stuff */
+ switch (xs_cfg.fmtChannels) {
+
+	case XS_CHN_AUTOPAN:
+		xs_emuConf.playback = sid2_stereo;
+		break;
+
+	case XS_CHN_STEREO:
+		xs_emuConf.playback = sid2_stereo;
+		break;
+
+	case XS_CHN_MONO:
+		xs_emuConf.playback = sid2_mono;
+		break;
+
+	default:
+		XSERR("Internal: Invalid channels setting. Possibly corrupted configuration file.\n");
+		delete newTune;
+		return;
+ }
 
 
+ /* Memory mode settings */
+ switch (xs_cfg.memoryMode) {
+	case XS_MPU_BANK_SWITCHING:
+		xs_emuConf.environment = sid2_envBS;
+		break;
+
+	case XS_MPU_TRANSPARENT_ROM:
+		xs_emuConf.environment = sid2_envTP;
+		break;
+
+	case XS_MPU_PLAYSID_ENVIRONMENT:
+		xs_emuConf.environment = sid2_envPS;
+		break;
+
+	case XS_MPU_REAL:
+		xs_emuConf.environment = sid2_envR;
+		break;
+
+	default:
+		XSERR("Internal: Invalid memoryMode setting. Possibly corrupted configuration file.\n");
+		delete newTune;
+		return;
+ }
+
+
+ /* Clockspeed settings */
+ switch (xs_cfg.clockSpeed) {
+	case XS_CLOCK_PAL:
+		xs_emuConf.clockSpeed = xs_emuConf.clockDefault = SID2_CLOCK_PAL;
+		break;
+
+	case XS_CLOCK_NTSC:
+		xs_emuConf.clockSpeed = xs_emuConf.clockDefault = SID2_CLOCK_NTSC;
+		break;
+
+	default:
+		XSERR("Internal: Invalid clockSpeed setting. Possibly corrupted configuration file.\n");
+		delete newTune;
+		return;
+ }
+
+
+ /* Configure rest of the emulation */
+ xs_emuConf.precision    = audio.precision; 
+ xs_emuConf.frequency    = xs_cfg.fmtFrequency; 
+ xs_emuConf.clockForced  = xs_cfg.forceSpeed;
+ xs_emuConf.optimisation = xs_cfg.optimiseLevel;
+ xs_emuConf.sidModel     = (xs_cfg.mos8580) ? SID2_MOS8580 : SID2_MOS6581;
+ xs_emuConf.sidDefault   = SID2_MOS6581;
+ xs_emuConf.sidSamples   = emulation.sidSamples;
+
  /* Now set the emulator configuration */
- xs_emuEngine.setConfig(xs_emuConf);
- newTune->getInfo(sidInf);
+ xs_emuEngine.config(xs_emuConf);
+#endif
 
 
  /* Initialize status information */
  XSDEBUG("initializing and starting playing thread!\n");
 
+ newTune->getInfo(sidInf);
+
  xs_status.isError	= FALSE;
  xs_status.isPlaying	= TRUE;
  xs_status.allowNext	= TRUE;
@@ -445,7 +531,7 @@
  */
 void xs_get_song_info(char *songFilename, char **songTitle, int *songLength)
 {
- struct sidTuneInfo sidInf;
+ t_xs_tuneinfo sidInf;
  t_xs_tune *testTune = new sidTune(songFilename);
 
  /* Check if the tune exists and is readable */
@@ -476,7 +562,7 @@
 {
  gint i, j, iLength;
  gchar *pcResult;
- struct sidTuneInfo *finfo = (struct sidTuneInfo *) pfInfo;
+ t_xs_tuneinfo *finfo = (t_xs_tuneinfo *) pfInfo;
 #ifdef HAVE_XMMSEXTRA
  TitleInput *ptInput;
 #endif
--- a/src/xs_config.c	Fri Jun 20 01:12:00 2003 +0000
+++ b/src/xs_config.c	Fri Jun 20 01:12:03 2003 +0000
@@ -40,9 +40,9 @@
  * Configuration specific stuff
  */
 t_xs_cfg_item xs_cfgtable[] = {
-	{ATYPE_INT,	&xs_cfg.fmtBitsPerSample,"bitsPerSample"},
-	{ATYPE_INT,	&xs_cfg.fmtChannels,	"channels"},
-	{ATYPE_INT,	&xs_cfg.fmtFrequency,	"frequency"},
+	{ATYPE_INT,	&xs_cfg.fmtBitsPerSample,"fmtBitsPerSample"},
+	{ATYPE_INT,	&xs_cfg.fmtChannels,	"fmtChannels"},
+	{ATYPE_INT,	&xs_cfg.fmtFrequency,	"fmtFrequency"},
 
 	{ATYPE_BOOL,	&xs_cfg.mos8580,	"mos8580"},
 	{ATYPE_BOOL,	&xs_cfg.emulateFilters,	"emulateFilters"},
@@ -61,13 +61,13 @@
 	{ATYPE_BOOL,	&xs_cfg.songlenDBEnable,"songlenDBEnable"},
 	{ATYPE_STR,	&xs_cfg.songlenDBPath,	"songlenDBPath"},
 
-	{ATYPE_BOOL,	&xs_cfg.stilDBEnable,	"useSTIL"},
-	{ATYPE_STR,	&xs_cfg.stilDBPath,	"STILpath"},
+	{ATYPE_BOOL,	&xs_cfg.stilDBEnable,	"stilDBEnable"},
+	{ATYPE_STR,	&xs_cfg.stilDBPath,	"stilDBPath"},
 
 	{ATYPE_BOOL,	&xs_cfg.detectMagic,	"detectMagic"},
 
 	{ATYPE_BOOL,	&xs_cfg.titleOverride,	"titleOverride"},
-	{ATYPE_STR,	&xs_cfg.titleFormat,	"fileInfo"}
+	{ATYPE_STR,	&xs_cfg.titleFormat,	"titleFormat"}
 };
 
 const gint XS_CFGTABLE_MAX = (sizeof(xs_cfgtable) / sizeof(t_xs_cfg_item));
@@ -106,7 +106,13 @@
  xs_cfg.mos8580			= FALSE;
  xs_cfg.emulateFilters		= TRUE;
  xs_reset_filters();
+
+#ifdef HAVE_SIDPLAY2
+ xs_cfg.memoryMode		= XS_MPU_REAL;
+#else
  xs_cfg.memoryMode		= XS_MPU_BANK_SWITCHING;
+#endif
+
  xs_cfg.clockSpeed		= XS_CLOCK_PAL;
  xs_cfg.forceSpeed		= FALSE;
 
--- a/src/xs_config.h	Fri Jun 20 01:12:00 2003 +0000
+++ b/src/xs_config.h	Fri Jun 20 01:12:03 2003 +0000
@@ -45,7 +45,8 @@
 enum XS_MPU {
 	XS_MPU_BANK_SWITCHING = 1,
 	XS_MPU_TRANSPARENT_ROM,
-	XS_MPU_PLAYSID_ENVIRONMENT
+	XS_MPU_PLAYSID_ENVIRONMENT,
+	XS_MPU_REAL
 };