[Scummvm-cvs-logs] SF.net SVN: scummvm: [28513] scummvm/trunk/engines/agi/sound.cpp

buddha_ at users.sourceforge.net buddha_ at users.sourceforge.net
Fri Aug 10 15:04:59 CEST 2007


Revision: 28513
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28513&view=rev
Author:   buddha_
Date:     2007-08-10 06:04:59 -0700 (Fri, 10 Aug 2007)

Log Message:
-----------
Parsing Apple IIGS wave info into more easily accessible variables in the memory.

Modified Paths:
--------------
    scummvm/trunk/engines/agi/sound.cpp

Modified: scummvm/trunk/engines/agi/sound.cpp
===================================================================
--- scummvm/trunk/engines/agi/sound.cpp	2007-08-09 21:32:26 UTC (rev 28512)
+++ scummvm/trunk/engines/agi/sound.cpp	2007-08-10 13:04:59 UTC (rev 28513)
@@ -66,22 +66,19 @@
 
 struct IIgsWaveInfo {
 	uint8 top;
-	uint8 addr;
-	uint8 size;
-// Oscillator channel (Bits 4-7 of mode-byte). Simplified to use only stereo here.
-#define MASK_OSC_CHANNEL  (1 << 4)
-#define OSC_CHANNEL_LEFT  (1 << 4)
-#define OSC_CHANNEL_RIGHT (0 << 4)
-// Oscillator halt bit (Bit 0 of mode-byte)
-#define MASK_OSC_HALT     (1 << 0)
-#define OSC_HALT          (1 << 0)
-// Oscillator mode (Bits 1 and 2 of mode-byte)
-#define MASK_OSC_MODE     (3 << 1)
-#define OSC_MODE_LOOP     (0 << 1)
-#define OSC_MODE_ONESHOT  (1 << 1)
-#define OSC_MODE_SYNC_AM  (2 << 1)
-#define OSC_MODE_SWAP     (3 << 1)
-	uint8 mode;
+	uint addr;
+	uint size;
+// Oscillator channel
+#define OSC_CHANNEL_RIGHT 0
+#define OSC_CHANNEL_LEFT  1
+	uint channel;
+// Oscillator mode
+#define OSC_MODE_LOOP     0
+#define OSC_MODE_ONESHOT  1
+#define OSC_MODE_SYNC_AM  2
+#define OSC_MODE_SWAP     3
+	uint mode;
+	bool halt;
 	uint16 relPitch; ///< 8b.8b fixed point, big endian?
 };
 
@@ -128,9 +125,15 @@
 
 bool readIIgsWaveInfo(IIgsWaveInfo &waveInfo, Common::SeekableReadStream &stream) {
 	waveInfo.top      = stream.readByte();
-	waveInfo.addr     = stream.readByte();
-	waveInfo.size     = stream.readByte();
-	waveInfo.mode     = stream.readByte();
+	waveInfo.addr     = stream.readByte() * 256;
+	waveInfo.size     = (1 << (stream.readByte() & 7)) * 256;
+
+	// Read mode byte and parse it into parts
+	byte mode         = stream.readByte();
+	waveInfo.channel  = (mode >> 4) & 1; // Bit 4
+	waveInfo.mode     = (mode >> 1) & 3; // Bits 1-2
+	waveInfo.halt     = (mode & 1) != 0; // Bit 0 (Converted to boolean)
+
 	waveInfo.relPitch = stream.readUint16BE();
 	return !stream.ioFailed();
 }


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