aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2006-03-05 20:09:02 +0000
committerTorbjörn Andersson2006-03-05 20:09:02 +0000
commit4fb6c92473a24421f498b7a95f328032351c50e4 (patch)
tree1a05cf0658dc585de784881ace8cc1f26b11ebbd
parent525690344ba46e59589fee9a042440e7c23791d3 (diff)
downloadscummvm-rg350-4fb6c92473a24421f498b7a95f328032351c50e4.tar.gz
scummvm-rg350-4fb6c92473a24421f498b7a95f328032351c50e4.tar.bz2
scummvm-rg350-4fb6c92473a24421f498b7a95f328032351c50e4.zip
The updateUnk6Value() appears to be some sort of random number generator, so I
have renamed it getRandomNr(). The _unk6 variable has been renamed _rnd. (Our MidiDriver_ADLIB class also has its own random number generator, so it's not such a far-fetched guess as it may seem.) svn-id: r21102
-rw-r--r--engines/kyra/sound_adlib.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/engines/kyra/sound_adlib.cpp b/engines/kyra/sound_adlib.cpp
index ddea471484..844084bc40 100644
--- a/engines/kyra/sound_adlib.cpp
+++ b/engines/kyra/sound_adlib.cpp
@@ -248,7 +248,7 @@ private:
uint8 _unk5;
int _soundsPlaying;
- uint16 _unk6;
+ uint16 _rnd;
uint8 _continueFlag;
uint8 _unkValue1;
@@ -320,7 +320,7 @@ AdlibDriver::AdlibDriver(Audio::Mixer *mixer) {
_unkOutputByte2 = _unkOutputByte1 = 0;
_lastProcessed = _flagTrigger = _curTable = _unk4 = 0;
- _unk6 = 0x1234;
+ _rnd = 0x1234;
_continueFlag = 0;
_unkTableByte1 = 0;
@@ -611,7 +611,7 @@ void AdlibDriver::callbackProcess() {
void AdlibDriver::resetAdlibState() {
debugC(9, kDebugLevelSound, "resetAdlibState()");
- _unk6 = 0x1234;
+ _rnd = 0x1234;
// Authorize the control of the waveforms
writeOPL(0x01, 0x20);
@@ -692,19 +692,23 @@ void AdlibDriver::unkOutput2(uint8 num) {
writeOPL(0xB0 + num, 0x20);
}
-uint16 AdlibDriver::updateUnk6Value() {
- _unk6 += 0x9248;
- uint16 lowBits = _unk6 & 7;
- _unk6 >>= 3;
- _unk6 |= lowBits << 13;
- return _unk6;
+// I believe this is a random number generator. It actually does seem to
+// generate an even distribution of almost all numbers from 0 through 65535,
+// though in my tests some numbers were never generated.
+
+uint16 AdlibDriver::getRandomNr() {
+ _rnd += 0x9248;
+ uint16 lowBits = _rnd & 7;
+ _rnd >>= 3;
+ _rnd |= (lowBits << 13);
+ return _rnd;
}
void AdlibDriver::update1(uint8 unk1, OutputState &state) {
debugC(9, kDebugLevelSound, "update1(%d, %d)", unk1, &state - _outputTables);
_continueFlag = unk1;
if (state.unk11) {
- state.unk5 = unk1 + (updateUnk6Value() & state.unk11 & 0xFF);
+ state.unk5 = unk1 + (getRandomNr() & state.unk11 & 0xFF);
return;
}
uint8 value = unk1;
@@ -1259,7 +1263,7 @@ int AdlibDriver::updateCallback38(uint8 *&dataptr, OutputState &state, uint8 val
int AdlibDriver::updateCallback39(uint8 *&dataptr, OutputState &state, uint8 value) {
uint16 unk = *dataptr++;
unk |= value << 8;
- unk &= updateUnk6Value();
+ unk &= getRandomNr();
uint16 unk2 = ((state.unkOutputValue1 & 0x1F) << 8) | state.unk17;
unk2 += unk;