[Scummvm-cvs-logs] SF.net SVN: scummvm:[33856] scummvm/branches/gsoc2008-tfmx

marwanhilmi at users.sourceforge.net marwanhilmi at users.sourceforge.net
Thu Aug 14 08:15:18 CEST 2008


Revision: 33856
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33856&view=rev
Author:   marwanhilmi
Date:     2008-08-14 06:15:18 +0000 (Thu, 14 Aug 2008)

Log Message:
-----------
Fixed some broken macros. Added console feedback for macro debugging. 

Modified Paths:
--------------
    scummvm/branches/gsoc2008-tfmx/base/main.cpp
    scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp

Modified: scummvm/branches/gsoc2008-tfmx/base/main.cpp
===================================================================
--- scummvm/branches/gsoc2008-tfmx/base/main.cpp	2008-08-14 03:50:48 UTC (rev 33855)
+++ scummvm/branches/gsoc2008-tfmx/base/main.cpp	2008-08-14 06:15:18 UTC (rev 33856)
@@ -299,7 +299,7 @@
 	_aTfmx.playSong(0);
 	
 	//if (_aTfmx.loadSong(0)) {
-	//	_aTfmx.testMacro(12);
+	//	_aTfmx.testMacro(23);
 	//}
 
 	system.getMixer()->playInputStream( Audio::Mixer::kMusicSoundType, &_handle, &_aTfmx, -1, 255, 0, false);

Modified: scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp
===================================================================
--- scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp	2008-08-14 03:50:48 UTC (rev 33855)
+++ scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp	2008-08-14 06:15:18 UTC (rev 33856)
@@ -441,6 +441,9 @@
 	for (int i = 0; i < numCommands; i++) {
 		_tracks[trackNumber].activeMacro.data[i] = macroSubStream.readUint32BE();
 	}
+
+	printf("MACRO NUMBER:: %02x \n", macroNumber);
+	printf("MACRO LENGTH:: %02x \n", numCommands);
 }
 void Tfmx::doMacro(uint8 trackNumber) {
 	uint8 byte1 = ( *(_tracks[trackNumber].activeMacro.data) ) >> 24;
@@ -449,14 +452,17 @@
 	int8 sbyte3 = ( *(_tracks[trackNumber].activeMacro.data) & 0x0000FF00 ) >> 8;
 	uint8 byte4 = ( *(_tracks[trackNumber].activeMacro.data) & 0x000000FF );
 	uint8 currentChannel = _tracks[trackNumber].activeMacro.noteChannel;
-	uint16 currentPeriod = _tracks[trackNumber].activeMacro.notePeriod;
 	uint16 tunedPeriod = 0;
+	
+	printf("COUNT:: %02x ::::", _tracks[trackNumber].activeMacro.macroCount);
+	printf("COMMAND:: %02x \n", byte1);
 
 	switch (byte1) {
 	case 0x00: //DMAoff reset + CLEARS EFFECTS
 		_channels[currentChannel].sampleOn = false;
 		_channels[currentChannel].sampleOffset = 0;
 		_channels[currentChannel].sampleLength = 0;
+		break;
 	case 0x01:
 		_channels[currentChannel].sampleOn = true;
 		//_tracks[trackNumber].activeMacro.macroWait = 1;
@@ -465,7 +471,8 @@
 		_channels[currentChannel].sampleOffset = *(_tracks[trackNumber].activeMacro.data) & 0x00FFFFFF;
 		break;
 	case 0x03: //set sample length
-		_channels[currentChannel].sampleLength = ( *(_tracks[trackNumber].activeMacro.data) & 0x0000FFFF ) * 2;
+		//_channels[currentChannel].sampleLength = ( *(_tracks[trackNumber].activeMacro.data) & 0x0000FFFF ) * 2;
+		_channels[currentChannel].sampleLength = ( *(_tracks[trackNumber].activeMacro.data) & 0x0000FFFF );
 		break;
 	case 0x04: //wait
 		if ( (*(_tracks[trackNumber].activeMacro.data) & 0x0000FFFF) == 0 ) {
@@ -493,27 +500,29 @@
 		break;
 	case 0x0E: //set volume
 		if (byte3 != 0xFE) {
-			_channels[currentChannel].volume = byte4;
+			_channels[currentChannel].volume = byte2;
 		}
 		break;
 	case 0x19: //set one shot ? cut off?
 		_tracks[trackNumber].activeMacro.notePeriod = 0;
 		_channels[currentChannel].sampleOffset = 0;
-		_channels[currentChannel].sampleLength = 1;
+		_channels[currentChannel].sampleLength = 0;
 		break;
 	case 0x18: //sampleloop
-		_channels[currentChannel].sampleOffset += ( *(_tracks[trackNumber].activeMacro.data) & 0x00FFFFFF );
-		_channels[currentChannel].sampleLength -= ( *(_tracks[trackNumber].activeMacro.data) & 0x00FFFFFF );
+		//_channels[currentChannel].sampleOffset += ( *(_tracks[trackNumber].activeMacro.data) & 0x00FFFFFF );
+		//_channels[currentChannel].sampleLength -= ( *(_tracks[trackNumber].activeMacro.data) & 0x00FFFFFF );
+		_channels[currentChannel].sampleOffset += ( ( *(_tracks[trackNumber].activeMacro.data) & 0x0000FFFF ) & 0xFFFE );
+		_channels[currentChannel].sampleLength -= ( ( *(_tracks[trackNumber].activeMacro.data) & 0x0000FFFF ) >> 1);
 		break;
-	case 0x8: //add note
-		tunedPeriod = (periods[(byte2 + currentPeriod) & (0x3F)]);
+	case 0x08: //add note
+		tunedPeriod = (periods[(byte2 + _tracks[trackNumber].activeMacro.noteNumber) & (0x3F)]);
 		_tracks[trackNumber].activeMacro.fineTune = sbyte3 / 0x100;
 		_tracks[trackNumber].activeMacro.fineTune += (_tracks[trackNumber].activeMacro.noteFineTune / 0x100);
 		_tracks[trackNumber].activeMacro.fineTune += 1;
 		_tracks[trackNumber].activeMacro.notePeriod = (int)(tunedPeriod * _tracks[trackNumber].activeMacro.fineTune);
 		_tracks[trackNumber].activeMacro.macroWait = 1;
 		break;
-	case 0x9: //set note
+	case 0x09: //set note
 		tunedPeriod = (periods[(byte2) & (0x3F)]);
 		_tracks[trackNumber].activeMacro.fineTune = sbyte3 / 0x100;
 		_tracks[trackNumber].activeMacro.fineTune += (_tracks[trackNumber].activeMacro.noteFineTune / 0x100);
@@ -521,19 +530,25 @@
 		_tracks[trackNumber].activeMacro.notePeriod = (int)(tunedPeriod * _tracks[trackNumber].activeMacro.fineTune);
 		_tracks[trackNumber].activeMacro.macroWait = 1;
 		break;
+	case 0x17: //set period
+		_tracks[trackNumber].activeMacro.notePeriod = ( *(_tracks[trackNumber].activeMacro.data) & 0x0000FFFF );
+		_tracks[trackNumber].activeMacro.macroWait = 1;
+		break;
 	default:
 		break;
 	}//end switch
 
+	if (_channels[currentChannel].volume == 0) {
+		_channels[currentChannel].volume = _tracks[trackNumber].activeMacro.noteVelocity;
+	}
 	_channels[currentChannel].period = _tracks[trackNumber].activeMacro.notePeriod;
-	//_channels[currentChannel].volume = _tracks[trackNumber].activeMacro.noteVolume;
 	
 	_tracks[trackNumber].activeMacro.data++;
 	_tracks[trackNumber].activeMacro.macroCount++;
-	
+
 	if (_tracks[trackNumber].activeMacro.macroCount == _tracks[trackNumber].activeMacro.macroLength) {
 		_tracks[trackNumber].macroOn = false;
-		//_channels[currentChannel].sampleOn = false;
+		_channels[currentChannel].sampleOn = false;
 	}
 }
 void Tfmx::testMacro(uint8 macroNumber) {
@@ -541,13 +556,17 @@
 	loadMacro(0, macroNumber);
 	_tracks[0].macroOn = true; //set to false again when macro terminates
 	_tracks[0].activeMacro.noteNumber = 0x1E;  //middle C
-	_tracks[0].activeMacro.noteVelocity = 0x40;
+	_tracks[0].activeMacro.noteVelocity = 0x0F;
 	_tracks[0].activeMacro.noteChannel = 0;
 	_tracks[0].activeMacro.noteWait = 0; 
-	_tracks[0].activeMacro.notePeriod = periods[0x1E & 0x3F];
+	_tracks[0].activeMacro.notePeriod = periods[0x1E];
 	startPaula();
 }
 void Tfmx::interrupt(void) {
+	static int count = 0;
+	count++;
+	//printf("INTERRUPT COUNT:: %02x \n", count);
+	
 	if (!_macroTest) { //Would be the normal case unless macro testing is on.
 
 		if (_trackAdvance) {
@@ -567,6 +586,11 @@
 			setChannelPeriod(i,_channels[i].period);
 			setChannelVolume(i,_channels[i].volume);
 			if (_channels[i].sampleOn) {
+				printf("SAMPLE ON \n");
+				printf("SAMPLE OFFSET:: %02x \n", _channels[0].sampleOffset);
+				printf("SAMPLE LENGTH:: %02x \n", _channels[0].sampleLength);
+				printf("SAMPLE VOLUME:: %02x \n", _channels[0].volume);
+				printf("SAMPLE PERIOD:: %02x \n", _channels[0].period);
 				setChannelData(i, _sampleData + _channels[i].sampleOffset, 0, _channels[i].sampleLength, 0);
 			}	
 		}
@@ -590,8 +614,14 @@
 		}
 		setChannelPeriod(0,_channels[0].period);
 		setChannelVolume(0,_channels[0].volume);
-		if (_channels[0].sampleOn) {
+		if (_channels[0].sampleOn == true) {
+			printf("SAMPLE ON \n");
+			printf("SAMPLE OFFSET:: %02x \n", _channels[0].sampleOffset);
+			printf("SAMPLE LENGTH:: %02x \n", _channels[0].sampleLength);
+			printf("SAMPLE VOLUME:: %02x \n", _channels[0].volume);
+			printf("SAMPLE PERIOD:: %02x \n", _channels[0].period);
 			setChannelData(0, _sampleData + _channels[0].sampleOffset, 0, _channels[0].sampleLength, 0);
+			//setChannelData(0, _sampleData + _channels[0].sampleOffset, _sampleData + _channels[0].sampleOffset, _channels[0].sampleLength, _channels[0].sampleLength);
 		}	
 
 		if (_tracks[0].activeMacro.macroWait != 0) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list