[Scummvm-cvs-logs] SF.net SVN: scummvm:[46855] scummvm/trunk/engines/kyra/sound_adlib.cpp
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Fri Jan 1 22:59:15 CET 2010
Revision: 46855
http://scummvm.svn.sourceforge.net/scummvm/?rev=46855&view=rev
Author: lordhoto
Date: 2010-01-01 21:59:11 +0000 (Fri, 01 Jan 2010)
Log Message:
-----------
- Add some asserts
- Renamed snd_unkOpcode3 to snd_stopChannel
- Cleanup
Modified Paths:
--------------
scummvm/trunk/engines/kyra/sound_adlib.cpp
Modified: scummvm/trunk/engines/kyra/sound_adlib.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sound_adlib.cpp 2010-01-01 21:55:51 UTC (rev 46854)
+++ scummvm/trunk/engines/kyra/sound_adlib.cpp 2010-01-01 21:59:11 UTC (rev 46855)
@@ -113,7 +113,7 @@
int snd_unkOpcode1(va_list &list);
int snd_startSong(va_list &list);
int snd_isChannelPlaying(va_list &list);
- int snd_unkOpcode3(va_list &list);
+ int snd_stopChannel(va_list &list);
int snd_readByte(va_list &list);
int snd_writeByte(va_list &list);
int snd_getSoundTrigger(va_list &list);
@@ -529,6 +529,7 @@
_flagTrigger = 1;
uint8 *ptr = getProgram(songId);
+ assert(ptr);
uint8 chan = *ptr;
if ((songId << 1) != 0) {
@@ -549,29 +550,30 @@
int AdlibDriver::snd_isChannelPlaying(va_list &list) {
int channel = va_arg(list, int);
- if (_channels[channel].dataptr)
- return 1;
- return 0;
+ assert(channel >= 0 && channel <= 9);
+ return (_channels[channel].dataptr != 0) ? 1 : 0;
}
-int AdlibDriver::snd_unkOpcode3(va_list &list) {
- int value = va_arg(list, int);
- int loop = value;
- if (value < 0) {
- value = 0;
- loop = 9;
+int AdlibDriver::snd_stopChannel(va_list &list) {
+ int channel = va_arg(list, int);
+
+ int maxChannel;
+ if (channel < 0) {
+ channel = 0;
+ maxChannel = 9;
+ } else {
+ maxChannel = channel;
}
- loop -= value;
- ++loop;
- while (loop--) {
- _curChannel = value;
- Channel &channel = _channels[_curChannel];
- channel.priority = 0;
- channel.dataptr = 0;
- if (value != 9)
- noteOff(channel);
- ++value;
+ for (; channel <= maxChannel; ++channel) {
+ _curChannel = channel;
+
+ Channel &chan = _channels[_curChannel];
+ chan.priority = 0;
+ chan.dataptr = 0;
+
+ if (channel != 9)
+ noteOff(chan);
}
return 0;
@@ -581,17 +583,18 @@
int a = va_arg(list, int);
int b = va_arg(list, int);
uint8 *ptr = getProgram(a) + b;
+ assert(ptr);
return *ptr;
}
int AdlibDriver::snd_writeByte(va_list &list) {
int a = va_arg(list, int);
int b = va_arg(list, int);
- int c = va_arg(list, int);
+ uint8 value = va_arg(list, int);
uint8 *ptr = getProgram(a) + b;
- uint8 oldValue = *ptr;
- *ptr = (uint8)c;
- return oldValue;
+ assert(ptr);
+ SWAP(*ptr, value);
+ return value;
}
int AdlibDriver::snd_getSoundTrigger(va_list &list) {
@@ -1898,7 +1901,7 @@
COMMAND(snd_unkOpcode1),
COMMAND(snd_startSong),
COMMAND(snd_isChannelPlaying),
- COMMAND(snd_unkOpcode3),
+ COMMAND(snd_stopChannel),
COMMAND(snd_readByte),
COMMAND(snd_writeByte),
COMMAND(snd_getSoundTrigger),
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