diff options
-rw-r--r-- | scumm/player_v1.cpp | 33 | ||||
-rw-r--r-- | scumm/player_v2.cpp | 66 | ||||
-rw-r--r-- | scumm/player_v2.h | 12 |
3 files changed, 90 insertions, 21 deletions
diff --git a/scumm/player_v1.cpp b/scumm/player_v1.cpp index 2ae223cdab..45fe739be0 100644 --- a/scumm/player_v1.cpp +++ b/scumm/player_v1.cpp @@ -132,8 +132,10 @@ void Player_V1::parseSpeakerChunk() { parse_again: _chunk_type = READ_LE_UINT16(_next_chunk); +#ifndef __PALM_OS__ debug(6, "parseSpeakerChunk: sound %d, offset %4x, chunk %x", _current_nr, _next_chunk - _current_data, _chunk_type); +#endif _next_chunk += 2; switch (_chunk_type) { @@ -169,8 +171,10 @@ void Player_V1::parseSpeakerChunk() { _repeat_ctr = READ_LE_UINT16(_next_chunk + 8); _channels[0].freq = _start; _next_chunk += 10; +#ifndef __PALM_OS__ debug(6, "chunk 1: mplex %d, freq %d -> %d step %d x %d", _mplex, _start, _end, _delta, _repeat_ctr); +#endif break; case 2: _start = READ_LE_UINT16(_next_chunk); @@ -179,8 +183,10 @@ void Player_V1::parseSpeakerChunk() { _channels[0].freq = 0; _next_chunk += 6; _forced_level = -1; +#ifndef __PALM_OS__ debug(6, "chunk 2: %d -> %d step %d", _start, _end, _delta); +#endif break; case 3: _start = READ_LE_UINT16(_next_chunk); @@ -189,8 +195,10 @@ void Player_V1::parseSpeakerChunk() { _channels[0].freq = 0; _next_chunk += 6; _forced_level = -1; +#ifndef __PALM_OS__ debug(6, "chunk 3: %d -> %d step %d", _start, _end, _delta); +#endif break; } } @@ -208,15 +216,18 @@ void Player_V1::nextSpeakerCmd() { _time_left = READ_LE_UINT16(_next_chunk); _next_chunk += 2; } +#ifndef __PALM_OS__ debug(7, "nextSpeakerCmd: chunk %d, offset %4x: notelen %d", _chunk_type, _next_chunk - 2 - _current_data, _time_left); - +#endif if (_time_left == 0) { parseSpeakerChunk(); } else { _channels[0].freq = READ_LE_UINT16(_next_chunk); _next_chunk += 2; +#ifndef __PALM_OS__ debug(7, "freq_current: %d", _channels[0].freq); +#endif } break; @@ -265,8 +276,10 @@ void Player_V1::parsePCjrChunk() { parse_again: _chunk_type = READ_LE_UINT16(_next_chunk); +#ifndef __PALM_OS__ debug(6, "parsePCjrChunk: sound %d, offset %4x, chunk %x", _current_nr, _next_chunk - _current_data, _chunk_type); +#endif _next_chunk += 2; switch (_chunk_type) { @@ -351,9 +364,11 @@ parse_again: } *_value_ptr_2 = _start_2; } +#ifndef __PALM_OS__ debug(6, "chunk 1: %d: %d step %d for %d, %d: %d step %d for %d", _value_ptr - (uint*)_channels, _start, _delta, _time_left, _value_ptr_2 - (uint*)_channels, _start_2, _delta_2, _time_left_2); +#endif break; case 2: @@ -363,8 +378,10 @@ parse_again: _channels[0].freq = 0; _next_chunk += 6; _forced_level = -1; +#ifndef __PALM_OS__ debug(6, "chunk 2: %d -> %d step %d", _start, _end, _delta); +#endif break; case 3: set_mplex(READ_LE_UINT16(_next_chunk)); @@ -408,8 +425,10 @@ void Player_V1::nextPCjrCmd() { _channels[i].hull_counter = 1; _channels[i].freq = dummy; } +#ifndef __PALM_OS__ debug(7, "chunk 0: channel %d play %d for %d", i, dummy, _channels[i].notelen); +#endif _channels[i].cmd_ptr += 4; } @@ -483,7 +502,9 @@ void Player_V1::nextPCjrCmd() { return; } set_mplex(_start); +#ifndef __PALM_OS__ debug(7, "chunk 2: mplex %d curve %d", _start, _forced_level); +#endif _forced_level = -_forced_level; break; case 3: @@ -532,14 +553,18 @@ void Player_V1::generateSpkSamples(int16 *data, uint len) { int sample = _forced_level * _volumetable[0]; for (i = 0; i < len; i++) data[2*i] = data[2*i+1] = sample; +#ifndef __PALM_OS__ debug(9, "speaker: %8x: forced one", _tick_len); +#endif } else if (!_level) { return; } } else { squareGenerator(0, _channels[0].freq, 0, 0, data, len); +#ifndef __PALM_OS__ debug(9, "speaker: %8x: freq %d %.1f", _tick_len, _channels[0].freq, 1193000.0 / _channels[0].freq); +#endif } lowPassFilter(data, len); } @@ -556,7 +581,9 @@ void Player_V1::generatePCjrSamples(int16 *data, uint len) { for (i = 0; i < len; i++) data[2*i] = data[2*i+1] = sample; hasdata = true; +#ifndef __PALM_OS__ debug(9, "channel[4]: %8x: forced one", _tick_len); +#endif } for (i = 1; i < 3; i++) { @@ -587,8 +614,10 @@ void Player_V1::generatePCjrSamples(int16 *data, uint len) { } else if (i < 3) { hasdata = true; squareGenerator(i, freq, vol, 0, data, len); +#ifndef __PALM_OS__ debug(9, "channel[%d]: %8x: freq %d %.1f ; volume %d", i, _tick_len, freq, 111860.0 / freq, vol); +#endif } else { int noiseFB = (freq & 4) ? FB_WNOISE : FB_PNOISE; int n = (freq & 3); @@ -596,8 +625,10 @@ void Player_V1::generatePCjrSamples(int16 *data, uint len) { freq = (n == 3) ? 2 * (_channels[2].freq) : 1 << (5 + n); hasdata = true; squareGenerator(i, freq, vol, noiseFB, data, len); +#ifndef __PALM_OS__ debug(9, "channel[%d]: %x: noise freq %d %.1f ; volume %d", i, _tick_len, freq, 111860.0 / freq, vol); +#endif } } diff --git a/scumm/player_v2.cpp b/scumm/player_v2.cpp index c0bc738003..85070723f9 100644 --- a/scumm/player_v2.cpp +++ b/scumm/player_v2.cpp @@ -42,14 +42,14 @@ namespace Scumm { #define FB_PNOISE 0x08000 /* feedback for periodic noise */ #ifdef __PALM_OS__ -const uint8 *note_lengths; -static const uint16 *hull_offsets; -static const int16 *hulls; -static const uint16 *freqmod_lengths; -static const uint16 *freqmod_offsets; -static const int8 *freqmod_table; -static const uint16 *spk_freq_table; -static const uint16 *pcjr_freq_table; +const uint8 *g_note_lengths; +static const uint16 *g_hull_offsets; +static const int16 *g_hulls; +static const uint16 *g_freqmod_lengths; +static const uint16 *g_freqmod_offsets; +static const int8 *g_freqmod_table; +static const uint16 *g_spk_freq_table; +static const uint16 *g_pcjr_freq_table; #else const uint8 note_lengths[] = { 0, @@ -343,7 +343,18 @@ static const uint16 pcjr_freq_table[12] = { Player_V2::Player_V2(ScummEngine *scumm, bool pcjr) { int i; - + +#ifdef __PALM_OS__ + note_lengths = g_note_lengths; + hull_offsets = g_hull_offsets; + hulls = g_hulls; + freqmod_lengths = g_freqmod_lengths; + freqmod_offsets = g_freqmod_offsets; + freqmod_table = g_freqmod_table; + spk_freq_table = g_spk_freq_table; + pcjr_freq_table = g_pcjr_freq_table; +#endif + _isV3Game = (scumm->_version >= 3); _scumm = scumm; _system = scumm->_system; @@ -588,15 +599,19 @@ void Player_V2::execute_cmd(ChannelInfo *channel) { if (opcode >= 0xf8) { switch (opcode) { case 0xf8: // set hull curve +#ifndef __PALM_OS__ debug(7, "channels[%d]: hull curve %2d", channel - _channels, *script_ptr); +#endif channel->d.hull_curve = hull_offsets[*script_ptr / 2]; script_ptr++; break; case 0xf9: // set freqmod curve +#ifndef __PALM_OS__ debug(7, "channels[%d]: freqmod curve %2d", channel - _channels, *script_ptr); +#endif channel->d.freqmod_table = freqmod_offsets[*script_ptr / 4]; channel->d.freqmod_modulo = freqmod_lengths[*script_ptr / 4]; script_ptr++; @@ -604,7 +619,9 @@ void Player_V2::execute_cmd(ChannelInfo *channel) { case 0xfd: // clear other channel value = READ_LE_UINT16 (script_ptr) / sizeof (ChannelInfo); +#ifndef __PALM_OS__ debug(7, "clear channel %d", value); +#endif script_ptr += 2; // In Indy3, when traveling to Venice a command is // issued to clear channel 4. So we introduce a 4th @@ -620,8 +637,10 @@ void Player_V2::execute_cmd(ChannelInfo *channel) { // fall through case 0xfa: // clear current channel +#ifndef __PALM_OS__ if (opcode == 0xfa) debug(9, "clear channel"); +#endif channel->d.next_cmd = 0; channel->d.base_freq = 0; channel->d.freq_delta = 0; @@ -647,7 +666,9 @@ void Player_V2::execute_cmd(ChannelInfo *channel) { case 0xfc: // call subroutine offset = READ_LE_UINT16 (script_ptr); +#ifndef __PALM_OS__ debug(7, "subroutine %d", offset); +#endif script_ptr += 2; _retaddr = script_ptr; script_ptr = _current_data + offset; @@ -657,7 +678,9 @@ void Player_V2::execute_cmd(ChannelInfo *channel) { opcode = *script_ptr++; offset = READ_LE_UINT16 (script_ptr); script_ptr += 2; +#ifndef __PALM_OS__ debug(7, "loop if %d to %d", opcode, offset); +#endif if (!channel->array[opcode / 2] || --channel->array[opcode/2]) script_ptr += offset; break; @@ -666,8 +689,10 @@ void Player_V2::execute_cmd(ChannelInfo *channel) { opcode = *script_ptr++; value = READ_LE_UINT16 (script_ptr); channel->array[opcode / 2] = value; +#ifndef __PALM_OS__ debug(7, "channels[%d]: set param %2d = %5d", channel - &_channels[0], opcode, value); +#endif script_ptr += 2; if (opcode == 14) { /* tempo var */ @@ -706,14 +731,14 @@ void Player_V2::execute_cmd(ChannelInfo *channel) { note = (*script_ptr++) & 0x7f; } - +#ifndef __PALM_OS__ debug(8, "channels[%d]: @%04x note: %3d+%d len: %2d hull: %d mod: %d/%d/%d %s", dest_channel - channel, script_ptr ? script_ptr - _current_data - 2 : 0, note, (signed short) dest_channel->d.transpose, channel->d.time_left, dest_channel->d.hull_curve, dest_channel->d.freqmod_table, dest_channel->d.freqmod_incr,dest_channel->d.freqmod_multiplier, is_last_note ? "last":""); - +#endif uint16 myfreq; dest_channel->d.time_left = channel->d.time_left; @@ -774,11 +799,13 @@ void Player_V2::next_freqs(ChannelInfo *channel) { * (int) channel->d.freqmod_multiplier / 256 + channel->d.base_freq; +#ifndef __PALM_OS__ debug(9, "Freq: %d/%d, %d/%d/%d*%d %d", channel->d.base_freq, (int16)channel->d.freq_delta, channel->d.freqmod_table, channel->d.freqmod_offset, channel->d.freqmod_incr, channel->d.freqmod_multiplier, channel->d.freq); +#endif if (channel->d.note_length && !--channel->d.note_length) { channel->d.hull_offset = 16; @@ -992,14 +1019,14 @@ void Player_V2::generatePCjrSamples(int16 *data, uint len) { #include "scumm_globals.h" _GINIT(PlayerV2) -_GSETPTR(Scumm::note_lengths, GBVARS_NOTELENGTHS_INDEX, uint8, GBVARS_SCUMM) -_GSETPTR(Scumm::hull_offsets, GBVARS_HULLOFFSETS_INDEX, uint16, GBVARS_SCUMM) -_GSETPTR(Scumm::hulls, GBVARS_HULLS_INDEX, int16, GBVARS_SCUMM) -_GSETPTR(Scumm::freqmod_lengths, GBVARS_FREQMODLENGTHS_INDEX, uint16, GBVARS_SCUMM) -_GSETPTR(Scumm::freqmod_offsets, GBVARS_FREQMODOFFSETS_INDEX, uint16, GBVARS_SCUMM) -_GSETPTR(Scumm::freqmod_table, GBVARS_FREQMODTABLE_INDEX, int8, GBVARS_SCUMM) -_GSETPTR(Scumm::spk_freq_table, GBVARS_SPKFREQTABLE_INDEX, uint16, GBVARS_SCUMM) -_GSETPTR(Scumm::pcjr_freq_table, GBVARS_PCJRFREQTABLE_INDEX, uint16, GBVARS_SCUMM) +_GSETPTR(Scumm::g_note_lengths, GBVARS_NOTELENGTHS_INDEX, uint8, GBVARS_SCUMM) +_GSETPTR(Scumm::g_hull_offsets, GBVARS_HULLOFFSETS_INDEX, uint16, GBVARS_SCUMM) +_GSETPTR(Scumm::g_hulls, GBVARS_HULLS_INDEX, int16, GBVARS_SCUMM) +_GSETPTR(Scumm::g_freqmod_lengths, GBVARS_FREQMODLENGTHS_INDEX, uint16, GBVARS_SCUMM) +_GSETPTR(Scumm::g_freqmod_offsets, GBVARS_FREQMODOFFSETS_INDEX, uint16, GBVARS_SCUMM) +_GSETPTR(Scumm::g_freqmod_table, GBVARS_FREQMODTABLE_INDEX, int8, GBVARS_SCUMM) +_GSETPTR(Scumm::g_spk_freq_table, GBVARS_SPKFREQTABLE_INDEX, uint16, GBVARS_SCUMM) +_GSETPTR(Scumm::g_pcjr_freq_table, GBVARS_PCJRFREQTABLE_INDEX, uint16, GBVARS_SCUMM) _GEND _GRELEASE(PlayerV2) @@ -1014,4 +1041,3 @@ _GRELEASEPTR(GBVARS_PCJRFREQTABLE_INDEX, GBVARS_SCUMM) _GEND #endif - diff --git a/scumm/player_v2.h b/scumm/player_v2.h index 8e47122106..f3a2ba98b9 100644 --- a/scumm/player_v2.h +++ b/scumm/player_v2.h @@ -84,6 +84,18 @@ public: virtual int getMusicTimer() const; virtual int getSoundStatus(int sound) const; +#ifdef __PALM_OS__ +private: + const uint8 *note_lengths; + const uint16 *hull_offsets; + const int16 *hulls; + const uint16 *freqmod_lengths; + const uint16 *freqmod_offsets; + const int8 *freqmod_table; + const uint16 *spk_freq_table; + const uint16 *pcjr_freq_table; +#endif + protected: bool _isV3Game; SoundMixer *_mixer; |