[Scummvm-cvs-logs] CVS: scummvm/backends/midi adlib.cpp,1.16,1.16.2.1

Max Horn fingolfin at users.sourceforge.net
Mon May 5 08:57:01 CEST 2003


Update of /cvsroot/scummvm/scummvm/backends/midi
In directory sc8-pr-cvs1:/tmp/cvs-serv22295/backends/midi

Modified Files:
      Tag: branch-0-4-0
	adlib.cpp 
Log Message:
reverted to old fmopl code on the branch

Index: adlib.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/midi/adlib.cpp,v
retrieving revision 1.16
retrieving revision 1.16.2.1
diff -u -d -r1.16 -r1.16.2.1
--- adlib.cpp	4 May 2003 21:17:42 -0000	1.16
+++ adlib.cpp	5 May 2003 15:55:59 -0000	1.16.2.1
@@ -510,6 +510,7 @@
 	bool _isOpen;
 	bool _game_SmallHeader;
 
+	FM_OPL *_opl;
 	byte *_adlib_reg_cache;
 	SoundMixer *_mixer;
 
@@ -714,6 +715,8 @@
 
 	int i;
 	MidiChannelAdl *mc;
+	int env_bits = g_system->property(OSystem::PROP_GET_FMOPL_ENV_BITS, NULL);
+	int eg_ent = g_system->property(OSystem::PROP_GET_FMOPL_EG_ENT, NULL);
 
 	for (i = 0, mc = _midi_channels; i != ARRAYSIZE(_midi_channels); i++, mc++) {
 		mc->_channel = i;
@@ -723,9 +726,9 @@
 
 	_adlib_reg_cache = (byte *)calloc(256, 1);
 
-	// We need to emulate one YM3812 chip
-	if (0 != YM3812Init(1, 3579545, g_system->property(OSystem::PROP_GET_SAMPLE_RATE, 0)))
-		error("Error initialising YM3812 sound chip emulation");
+	OPLBuildTables((env_bits ? env_bits : FMOPL_ENV_BITS_HQ), (eg_ent ? eg_ent : FMOPL_EG_ENT_HQ));
+
+	_opl = OPLCreate(OPL_TYPE_YM3812, 3579545, g_system->property(OSystem::PROP_GET_SAMPLE_RATE, 0));
 
 	adlib_write(1, 0x20);
 	adlib_write(8, 0x40);
@@ -747,9 +750,6 @@
 
 	// Detach the premix callback handler
 	_mixer->setupPremix (0, 0);
-	
-	// Turn of the OPL emulation
-	YM3812Shutdown();
 
 	_isOpen = false;
 }
@@ -860,18 +860,22 @@
 		return;
 	_adlib_reg_cache[port] = value;
 
-	YM3812Write(0, 0, port);
-	YM3812Write(0, 1, value);
+	OPLWriteReg(_opl, port, value);
 }
 
 void MidiDriver_ADLIB::generate_samples(int16 *data, int len) {
 	int step;
 
+	if (!_opl) {
+		memset(data, 0, len * sizeof(int16));
+		return;
+	}
+
 	do {
 		step = len;
 		if (step > _next_tick)
 			step = _next_tick;
-		YM3812UpdateOne(0, data, step);
+		YM3812UpdateOne(_opl, data, step);
 
 		if (!(_next_tick -= step)) {
 			if (_timer_proc)





More information about the Scummvm-git-logs mailing list