diff options
author | Martin Kiewitz | 2009-12-25 21:51:02 +0000 |
---|---|---|
committer | Martin Kiewitz | 2009-12-25 21:51:02 +0000 |
commit | 9255d43a16e1c3e65e46d198ec606fcef07ff71a (patch) | |
tree | af3474235996fcb073153be20cae7fa0adeb19e5 /engines | |
parent | 2f5f625b98230b345371c666a93602c4fec6ba7c (diff) | |
download | scummvm-rg350-9255d43a16e1c3e65e46d198ec606fcef07ff71a.tar.gz scummvm-rg350-9255d43a16e1c3e65e46d198ec606fcef07ff71a.tar.bz2 scummvm-rg350-9255d43a16e1c3e65e46d198ec606fcef07ff71a.zip |
SCI/newmusic: Change to channel filtering for sci0early to reflect actual sierra driver behaviour
svn-id: r46564
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/resource.cpp | 17 | ||||
-rw-r--r-- | engines/sci/sfx/softseq/adlib.cpp | 2 | ||||
-rw-r--r-- | engines/sci/sfx/softseq/amiga.cpp | 2 | ||||
-rw-r--r-- | engines/sci/sfx/softseq/pcjr.cpp | 2 |
4 files changed, 19 insertions, 4 deletions
diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index f6121bd951..3eb1eb3672 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -1939,15 +1939,30 @@ SoundResource::Track* SoundResource::getTrackByType(TrackType type) { int SoundResource::getChannelFilterMask(int hardwareMask) { byte *data = _innerResource->data; int channelMask = 0; + int reverseHardwareMask = 0; switch (_soundVersion) { case SCI_VERSION_0_EARLY: + // TODO: MT32 driver uses no hardwaremask at all and uses all channels + switch (hardwareMask) { + case 0x01: // Adlib needs an additional reverse check against bit 3 + reverseHardwareMask = 0x08; + break; + } + // Control-Channel -> where bit 0 is not set, bit 3 is set data++; // Skip over digital sample flag for (int channelNr = 0; channelNr < 16; channelNr++) { channelMask = channelMask >> 1; if (*data & hardwareMask) { - // this Channel is supposed to get played for hardware + if ((reverseHardwareMask == 0) || ((*data & reverseHardwareMask) == 0)) { + // this Channel is supposed to get played for hardware + channelMask |= 0x8000; + } + } + if ((*data & 0x08) && ((*data & 0x01) == 0)) { + // this channel is control channel, so don't filter it channelMask |= 0x8000; + // TODO: We need to accept this channel in parseNextEvent() for events } data++; } diff --git a/engines/sci/sfx/softseq/adlib.cpp b/engines/sci/sfx/softseq/adlib.cpp index 77e1f5f370..b14fdfdb1f 100644 --- a/engines/sci/sfx/softseq/adlib.cpp +++ b/engines/sci/sfx/softseq/adlib.cpp @@ -814,7 +814,7 @@ int MidiPlayer_Adlib::open(ResourceManager *resMan) { int MidiPlayer_Adlib::getPlayMask(SciVersion soundVersion) { switch (soundVersion) { case SCI_VERSION_0_EARLY: - return 0x10; // FIXME: Not correct + return 0x01; } return 0x04; } diff --git a/engines/sci/sfx/softseq/amiga.cpp b/engines/sci/sfx/softseq/amiga.cpp index e0141153ac..bc401da21e 100644 --- a/engines/sci/sfx/softseq/amiga.cpp +++ b/engines/sci/sfx/softseq/amiga.cpp @@ -666,7 +666,7 @@ MidiPlayer *MidiPlayer_Amiga_create() { int MidiPlayer_Amiga::getPlayMask(SciVersion soundVersion) { switch (soundVersion) { case SCI_VERSION_0_EARLY: - return 0x40; // FIXME: Not correct + error("No amiga support for sci0early"); } return 0x40; } diff --git a/engines/sci/sfx/softseq/pcjr.cpp b/engines/sci/sfx/softseq/pcjr.cpp index b9118eb678..3049263594 100644 --- a/engines/sci/sfx/softseq/pcjr.cpp +++ b/engines/sci/sfx/softseq/pcjr.cpp @@ -203,7 +203,7 @@ int MidiPlayer_PCJr::getPlayMask(SciVersion soundVersion) { int MidiPlayer_PCSpeaker::getPlayMask(SciVersion soundVersion) { switch (soundVersion) { case SCI_VERSION_0_EARLY: - return 0x20; // FIXME: Not correct + return 0x02; } return 0x20; } |