From 66d0a907c10c88d0663bc876d59a30be8686f619 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Sun, 31 May 2015 00:58:49 +0200 Subject: [PATCH] SHERLOCK: adlib: in-use timer, thx LordHoto --- engines/sherlock/scalpel/drivers/adlib.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/engines/sherlock/scalpel/drivers/adlib.cpp b/engines/sherlock/scalpel/drivers/adlib.cpp index c1dbddbc0495..8dee5019f44b 100644 --- a/engines/sherlock/scalpel/drivers/adlib.cpp +++ b/engines/sherlock/scalpel/drivers/adlib.cpp @@ -269,8 +269,10 @@ class MidiDriver_AdLib : public MidiDriver_Emulated { // stores information about all FM voice channels adlib_ChannelEntry _channels[SHERLOCK_ADLIB_VOICES_COUNT]; - void updateChannelInUseTimers(); +protected: + void onTimer(); +private: void resetAdLib(); void resetAdLib_OperatorRegisters(byte baseRegister, byte value); void resetAdLib_FMVoiceChannelRegisters(byte baseRegister, byte value); @@ -337,10 +339,10 @@ void MidiDriver_AdLib::setVolume(byte volume) { //renewNotes(-1, true); } -// this should normally get called per tick -// but calling it per send() shouldn't be a problem -// TODO: maybe change inUseTimer to a 32-bit integer to make sure there are no overruns?!?! -void MidiDriver_AdLib::updateChannelInUseTimers() { +// this should/must get called per tick +// original driver did this before MIDI data processing on each tick +// we do it atm after MIDI data processing +void MidiDriver_AdLib::onTimer() { for (byte FMvoiceChannel = 0; FMvoiceChannel < SHERLOCK_ADLIB_VOICES_COUNT; FMvoiceChannel++) { if (_channels[FMvoiceChannel].inUse) { _channels[FMvoiceChannel].inUseTimer++; @@ -411,8 +413,6 @@ void MidiDriver_AdLib::send(uint32 b) { byte op1 = (b >> 8) & 0xff; byte op2 = (b >> 16) & 0xff; - updateChannelInUseTimers(); - switch (command) { case 0x80: noteOff(channel, op1);