aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorTorbjörn Andersson2006-03-01 08:06:54 +0000
committerTorbjörn Andersson2006-03-01 08:06:54 +0000
commit272a19cf5bdb722507b72a1ce380f64dbc974963 (patch)
treec1915d7bdfd275550cbeddd0b932b6ff82880f28 /engines/kyra
parent3a38721d028a2a2e738fb806fc22fc36863a0a3d (diff)
downloadscummvm-rg350-272a19cf5bdb722507b72a1ce380f64dbc974963.tar.gz
scummvm-rg350-272a19cf5bdb722507b72a1ce380f64dbc974963.tar.bz2
scummvm-rg350-272a19cf5bdb722507b72a1ce380f64dbc974963.zip
Use signed integers for jump offsets, so that the jump opcodes can jump both
forward and backward. This seems to fix the looping of the Black forest music (and probably others as well), and might fix the invalid pointer crashes and wrong music that would sometimes play after a song had finished. Changed the names of the jump opcode functions, and added "update_" prefixes to the previously cleaned-up opcode functions. svn-id: r20986
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/sound_adlib.cpp51
1 files changed, 24 insertions, 27 deletions
diff --git a/engines/kyra/sound_adlib.cpp b/engines/kyra/sound_adlib.cpp
index 640b2549f8..14e37ec914 100644
--- a/engines/kyra/sound_adlib.cpp
+++ b/engines/kyra/sound_adlib.cpp
@@ -185,13 +185,13 @@ private:
static const ParserOpcode _parserOpcodeTable[];
static const int _parserOpcodeTableSize;
- int updateCallback1(uint8 *&dataptr, OutputState &state, uint8 value);
- int updateCallback2(uint8 *&dataptr, OutputState &state, uint8 value);
+ int update_setRepeat(uint8 *&dataptr, OutputState &state, uint8 value);
+ int update_checkRepeat(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback3(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback4(uint8 *&dataptr, OutputState &state, uint8 value);
- int updateCallback5(uint8 *&dataptr, OutputState &state, uint8 value);
- int updateCallbackPushDataPtr(uint8 *&dataptr, OutputState &state, uint8 value);
- int updateCallbackPopDataPtr(uint8 *&dataptr, OutputState &state, uint8 value);
+ int update_jump(uint8 *&dataptr, OutputState &state, uint8 value);
+ int update_jumpToSubroutine(uint8 *&dataptr, OutputState &state, uint8 value);
+ int update_returnFromSubroutine(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback8(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback9(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback10(uint8 *&dataptr, OutputState &state, uint8 value);
@@ -219,8 +219,8 @@ private:
int updateCallback32(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback33(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback34(uint8 *&dataptr, OutputState &state, uint8 value);
- int setAMDepth(uint8 *&dataptr, OutputState &state, uint8 value);
- int setVibratoDepth(uint8 *&dataptr, OutputState &state, uint8 value);
+ int update_setAMDepth(uint8 *&dataptr, OutputState &state, uint8 value);
+ int update_setVibratoDepth(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback37(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback38(uint8 *&dataptr, OutputState &state, uint8 value);
int updateCallback39(uint8 *&dataptr, OutputState &state, uint8 value);
@@ -935,18 +935,15 @@ uint8 AdlibDriver::calculateLowByte2(OutputState &state) {
// parser opcodes
-int AdlibDriver::updateCallback1(uint8 *&dataptr, OutputState &state, uint8 value) {
+int AdlibDriver::update_setRepeat(uint8 *&dataptr, OutputState &state, uint8 value) {
state.unk9 = value;
return 0;
}
-int AdlibDriver::updateCallback2(uint8 *&dataptr, OutputState &state, uint8 value) {
+int AdlibDriver::update_checkRepeat(uint8 *&dataptr, OutputState &state, uint8 value) {
++dataptr;
if (--state.unk9) {
- --dataptr;
- --dataptr;
- uint16 add = READ_LE_UINT16(dataptr);
- dataptr += 2;
+ int16 add = READ_LE_UINT16(dataptr - 2);
dataptr += add;
}
return 0;
@@ -980,22 +977,22 @@ int AdlibDriver::updateCallback4(uint8 *&dataptr, OutputState &state, uint8 valu
return 0;
}
-int AdlibDriver::updateCallback5(uint8 *&dataptr, OutputState &state, uint8 value) {
+int AdlibDriver::update_jump(uint8 *&dataptr, OutputState &state, uint8 value) {
--dataptr;
- uint16 add = READ_LE_UINT16(dataptr); dataptr += 2;
+ int16 add = READ_LE_UINT16(dataptr); dataptr += 2;
dataptr += add;
return 0;
}
-int AdlibDriver::updateCallbackPushDataPtr(uint8 *&dataptr, OutputState &state, uint8 value) {
+int AdlibDriver::update_jumpToSubroutine(uint8 *&dataptr, OutputState &state, uint8 value) {
--dataptr;
- uint16 add = READ_LE_UINT16(dataptr); dataptr += 2;
+ int16 add = READ_LE_UINT16(dataptr); dataptr += 2;
state.dataptrStack[state.dataptrStackPos++] = dataptr;
dataptr += add;
return 0;
}
-int AdlibDriver::updateCallbackPopDataPtr(uint8 *&dataptr, OutputState &state, uint8 value) {
+int AdlibDriver::update_returnFromSubroutine(uint8 *&dataptr, OutputState &state, uint8 value) {
dataptr = state.dataptrStack[--state.dataptrStackPos];
return 0;
}
@@ -1201,7 +1198,7 @@ int AdlibDriver::updateCallback34(uint8 *&dataptr, OutputState &state, uint8 val
return 0;
}
-int AdlibDriver::setAMDepth(uint8 *&dataptr, OutputState &state, uint8 value) {
+int AdlibDriver::update_setAMDepth(uint8 *&dataptr, OutputState &state, uint8 value) {
if (value & 1)
_unkOutputByte2 |= 0x80;
else
@@ -1212,7 +1209,7 @@ int AdlibDriver::setAMDepth(uint8 *&dataptr, OutputState &state, uint8 value) {
return 0;
}
-int AdlibDriver::setVibratoDepth(uint8 *&dataptr, OutputState &state, uint8 value) {
+int AdlibDriver::update_setVibratoDepth(uint8 *&dataptr, OutputState &state, uint8 value) {
if (value & 1)
_unkOutputByte2 |= 0x40;
else
@@ -1674,15 +1671,15 @@ const AdlibDriver::OpcodeEntry AdlibDriver::_opcodeList[] = {
const AdlibDriver::ParserOpcode AdlibDriver::_parserOpcodeTable[] = {
// 0
- COMMAND(updateCallback1),
- COMMAND(updateCallback2),
+ COMMAND(update_setRepeat),
+ COMMAND(update_checkRepeat),
COMMAND(updateCallback3),
COMMAND(updateCallback4),
// 4
- COMMAND(updateCallback5),
- COMMAND(updateCallbackPushDataPtr),
- COMMAND(updateCallbackPopDataPtr),
+ COMMAND(update_jump),
+ COMMAND(update_jumpToSubroutine),
+ COMMAND(update_returnFromSubroutine),
COMMAND(updateCallback8),
// 8
@@ -1742,8 +1739,8 @@ const AdlibDriver::ParserOpcode AdlibDriver::_parserOpcodeTable[] = {
// 44
COMMAND(updateCallback33),
COMMAND(updateCallback34),
- COMMAND(setAMDepth),
- COMMAND(setVibratoDepth),
+ COMMAND(update_setAMDepth),
+ COMMAND(update_setVibratoDepth),
// 48
COMMAND(updateCallback37),