[Scummvm-cvs-logs] CVS: scummvm/scumm instrument.cpp,2.20,2.21

Jamieson Christian jamieson630 at users.sourceforge.net
Sat May 31 20:21:04 CEST 2003


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv3391/scummvm/scumm

Modified Files:
	instrument.cpp 
Log Message:
Fixed checksum error

Index: instrument.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/instrument.cpp,v
retrieving revision 2.20
retrieving revision 2.21
diff -u -d -r2.20 -r2.21
--- instrument.cpp	1 Jun 2003 02:59:58 -0000	2.20
+++ instrument.cpp	1 Jun 2003 03:06:10 -0000	2.21
@@ -421,10 +421,21 @@
 	if (_native_mt32) {
 //		_instrument.device_id = mc->getNumber();
 		_instrument.device_id = 0x10;
+
+		// Remap instrument to appropriate address space.
 		int address = 0x010000 + mc->getNumber() * 246;
 		_instrument.address[0] = (address >> 14) & 0x7F;
 		_instrument.address[1] = (address >>  7) & 0x7F;
 		_instrument.address[2] = (address      ) & 0x7F;
+
+		// Recompute checksum.
+		byte checksum = 0;
+		byte *ptr = (byte *) &_instrument + 4;
+		int i;
+		for (i = 4; i < sizeof (_instrument) - 1; ++i)
+			checksum -= *ptr++;
+		_instrument.checksum = checksum & 0x7F;
+
 		mc->device()->sysEx ((byte *) &_instrument, sizeof (_instrument));
 	} else {
 		// Convert to a GM program change.





More information about the Scummvm-git-logs mailing list