Ticket #8071: monkey1_instr2.diff

File monkey1_instr2.diff, 13.1 KB (added by SF/roever, 22 years ago)

Patch against 29. Sept. 2002 CVS

  • scumm/imuse.cpp

    diff -ur scummorig/scumm/imuse.cpp scummvm/scumm/imuse.cpp
    old new  
    36783678
    36793679        port = channel_mappings[chan];
    36803680        adlib_write(port + 0x20, instr->flags_1);
    3681         adlib_write(port + 0x40, (instr->oplvl_1 | 0x3F) - vol_1);
    3682         adlib_write(port + 0x60, ~instr->atdec_1);
    3683         adlib_write(port + 0x80, ~instr->sustrel_1);
     3681
     3682        if ((g_scumm->_gameId != GID_MONKEY_VGA) || (instr->feedback & 1))
     3683                adlib_write(port + 0x40, (instr->oplvl_1 | 0x3F) - vol_1 );
     3684        else
     3685                adlib_write(port + 0x40, instr->oplvl_1);
     3686
     3687        adlib_write(port + 0x60, 0xff & (~instr->atdec_1));
     3688        adlib_write(port + 0x80, 0xff & (~instr->sustrel_1));
    36843689        adlib_write(port + 0xE0, instr->waveform_1);
    36853690
    36863691        port = channel_mappings_2[chan];
    36873692        adlib_write(port + 0x20, instr->flags_2);
    3688         adlib_write(port + 0x40, (instr->oplvl_2 | 0x3F) - vol_2);
    3689         adlib_write(port + 0x60, ~instr->atdec_2);
    3690         adlib_write(port + 0x80, ~instr->sustrel_2);
     3693        adlib_write(port + 0x40, (instr->oplvl_2 | 0x3F) - vol_2 );
     3694        adlib_write(port + 0x60, 0xff & (~instr->atdec_2));
     3695        adlib_write(port + 0x80, 0xff & (~instr->sustrel_2));
    36913696        adlib_write(port + 0xE0, instr->waveform_2);
    36923697
    36933698        adlib_write((byte)chan + 0xC0, instr->feedback);
  • scumm/resource.cpp

    diff -ur scummorig/scumm/resource.cpp scummvm/scumm/resource.cpp
    old new  
    741741                                        "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
    742742                                        "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
    743743                                        "\x00"                  // part/channel
    744                                         "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
     744                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    745745                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    746                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     746                                        "\x05\x04\x0c\x00\x03\x01\x01\x00"
    747747                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
    748                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
     748                                        "\x01\x00\x01\x00\x01\x02\x00\x01"
    749749                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
    750750                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
    751751                                        "\x04\x00\x00\xf7"
     
    758758                                        "\x01"                  // part/channel
    759759                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    760760                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    761                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     761                                        "\x05\x04\x0c\x00\x03\x01\x01\x00"
    762762                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
    763                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
     763                                        "\x01\x00\x01\x00\x01\x02\x00\x01"
    764764                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
    765765                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
    766766                                        "\x04\x00\x00\xf7"
     
    773773                                        "\x02"                  // part/channel
    774774                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    775775                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    776                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     776                                        "\x05\x04\x0c\x00\x03\x01\x01\x00"
    777777                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
    778                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
     778                                        "\x01\x00\x01\x00\x01\x02\x00\x01"
    779779                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
    780780                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
    781781                                        "\x04\x00\x00\xf7"
     
    788788                                        "\x03"                  // part/channel
    789789                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    790790                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    791                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     791                                        "\x05\x04\x0c\x00\x03\x01\x01\x00"
    792792                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
    793                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
     793                                        "\x01\x00\x01\x00\x01\x02\x00\x01"
    794794                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
    795795                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
    796796                                        "\x04\x00\x00\xf7"
     
    803803                                        "\x04"                  // part/channel
    804804                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    805805                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    806                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     806                                        "\x05\x04\x0c\x00\x03\x01\x01\x00"
    807807                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
    808                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
     808                                        "\x01\x00\x01\x00\x01\x02\x00\x01"
    809809                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
    810810                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
    811811                                        "\x04\x00\x00\xf7"
     
    818818                                        "\x05"                  // part/channel
    819819                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    820820                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    821                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     821                                        "\x05\x04\x0c\x00\x03\x01\x01\x00"
    822822                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
    823                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
     823                                        "\x01\x00\x01\x00\x01\x02\x00\x01"
    824824                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
    825825                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
    826826                                        "\x04\x00\x00\xf7"
     
    833833                                        "\x06"                  // part/channel
    834834                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    835835                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    836                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     836                                        "\x05\x04\x0c\x00\x03\x01\x01\x00"
    837837                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
    838                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
     838                                        "\x01\x00\x01\x00\x01\x02\x00\x01"
    839839                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
    840840                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
    841841                                        "\x04\x00\x00\xf7"
     
    848848                                        "\x07"                  // part/channel
    849849                                        "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    850850                                        "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    851                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
     851                                        "\x05\x04\x0c\x00\x03\x01\x01\x00"
    852852                                        "\x00\x00\x01\x01\x0e\x00\x02\x02"
    853                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
     853                                        "\x01\x00\x01\x00\x01\x02\x00\x01"
    854854                                        "\x08\x00\x00\x00\x01\x02\x04\x00"
    855855                                        "\x06\x02\x00\x00\x04\x00\x03\x02"
    856856                                        "\x04\x00\x00\xf7"
    857                                         "\x00\xb7\x07\x64"      // Controller 7 = 100
    858                                         // 8
    859                                         "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
    860                                         "\x08\x00\x03"          // part/channel
    861                                         "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
    862                                         "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
    863                                         "\x08"                  // part/channel
    864                                         "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    865                                         "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    866                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
    867                                         "\x00\x00\x01\x01\x0e\x00\x02\x02"
    868                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
    869                                         "\x08\x00\x00\x00\x01\x02\x04\x00"
    870                                         "\x06\x02\x00\x00\x04\x00\x03\x02"
    871                                         "\x04\x00\x00\xf7"
    872                                         "\x00\xb8\x07\x64"      // Controller 7 = 100
    873                                         // 9
    874                                         "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
    875                                         "\x09\x00\x03"          // part/channel
    876                                         "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
    877                                         "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
    878                                         "\x09"                  // part/channel
    879                                         "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    880                                         "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    881                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
    882                                         "\x00\x00\x01\x01\x0e\x00\x02\x02"
    883                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
    884                                         "\x08\x00\x00\x00\x01\x02\x04\x00"
    885                                         "\x06\x02\x00\x00\x04\x00\x03\x02"
    886                                         "\x04\x00\x00\xf7"
    887                                         "\x00\xb9\x07\x64"      // Controller 7 = 100
    888                                         // Channels after 9 realy necessary ?!?
    889                                         // A
    890                                         "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
    891                                         "\x0A\x00\x03"          // part/channel
    892                                         "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
    893                                         "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
    894                                         "\x0A"                  // part/channel
    895                                         "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    896                                         "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    897                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
    898                                         "\x00\x00\x01\x01\x0e\x00\x02\x02"
    899                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
    900                                         "\x08\x00\x00\x00\x01\x02\x04\x00"
    901                                         "\x06\x02\x00\x00\x04\x00\x03\x02"
    902                                         "\x04\x00\x00\xf7"
    903                                         "\x00\xbA\x07\x64"      // Controller 7 = 100
    904                                         // B
    905                                         "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
    906                                         "\x0B\x00\x03"          // part/channel
    907                                         "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
    908                                         "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
    909                                         "\x0B"                  // part/channel
    910                                         "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    911                                         "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    912                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
    913                                         "\x00\x00\x01\x01\x0e\x00\x02\x02"
    914                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
    915                                         "\x08\x00\x00\x00\x01\x02\x04\x00"
    916                                         "\x06\x02\x00\x00\x04\x00\x03\x02"
    917                                         "\x04\x00\x00\xf7"
    918                                         "\x00\xbB\x07\x64"      // Controller 7 = 100
    919                                         // C
    920                                         "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
    921                                         "\x0C\x00\x03"          // part/channel
    922                                         "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
    923                                         "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
    924                                         "\x0C"                  // part/channel
    925                                         "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    926                                         "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    927                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
    928                                         "\x00\x00\x01\x01\x0e\x00\x02\x02"
    929                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
    930                                         "\x08\x00\x00\x00\x01\x02\x04\x00"
    931                                         "\x06\x02\x00\x00\x04\x00\x03\x02"
    932                                         "\x04\x00\x00\xf7"
    933                                         "\x00\xbC\x07\x64"      // Controller 7 = 100
    934                                         // D
    935                                         "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
    936                                         "\x0D\x00\x03"          // part/channel
    937                                         "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
    938                                         "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
    939                                         "\x0D"                  // part/channel
    940                                         "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    941                                         "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    942                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
    943                                         "\x00\x00\x01\x01\x0e\x00\x02\x02"
    944                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
    945                                         "\x08\x00\x00\x00\x01\x02\x04\x00"
    946                                         "\x06\x02\x00\x00\x04\x00\x03\x02"
    947                                         "\x04\x00\x00\xf7"
    948                                         "\x00\xbD\x07\x64"      // Controller 7 = 100
    949                                         // E
    950                                         "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
    951                                         "\x0E\x00\x03"          // part/channel
    952                                         "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
    953                                         "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
    954                                         "\x0E"                  // part/channel
    955                                         "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    956                                         "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    957                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
    958                                         "\x00\x00\x01\x01\x0e\x00\x02\x02"
    959                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
    960                                         "\x08\x00\x00\x00\x01\x02\x04\x00"
    961                                         "\x06\x02\x00\x00\x04\x00\x03\x02"
    962                                         "\x04\x00\x00\xf7"
    963                                         "\x00\xbE\x07\x64"      // Controller 7 = 100
    964                                         // F
    965                                         "\x00\xf0\x14\x7d\x00"  // sysex 00: part on/off
    966                                         "\x0F\x00\x03"          // part/channel
    967                                         "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7"
    968                                         "\x04\xf0\x41\x7d\x10"  // sysex 16: set instrument
    969                                         "\x0F"                  // part/channel
    970                                         "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04"
    971                                         "\x04\x06\x02\x02\x03\x07\x0f\x0d"
    972                                         "\x05\x04\x0c\x00\x03\x0a\x01\x00"
    973                                         "\x00\x00\x01\x01\x0e\x00\x02\x02"
    974                                         "\x01\x00\x01\x00\x01\x02\x00\x0a"
    975                                         "\x08\x00\x00\x00\x01\x02\x04\x00"
    976                                         "\x06\x02\x00\x00\x04\x00\x03\x02"
    977                                         "\x04\x00\x00\xf7"
    978                                         "\x00\xbF\x07\x64";      // Controller 7 = 100
     857                                        "\x00\xb7\x07\x64";     // Controller 7 = 100
    979858
    980859int Scumm::readSoundResourceSmallHeader(int type, int idx)
    981860{
    982861        uint32 pos, total_size, size, dw, tag;
    983862        uint32 best_size = 0, best_offs = 0;
    984         byte *ptr, *track;
     863        byte *ptr, *track, *instr;
    985864        uint16 ticks, skip;
    986865
    987866        debug(4, "readSoundResourceSmallHeader(%s,%d)", resTypeFromId(type), idx);
     
    1048927                } else {
    1049928                        skip = 0x98;
    1050929                }
     930
     931                /* copy the instrument data in another memory area */
     932                instr = (byte *)calloc(8 * 16, 1);
     933                memcpy(instr, ptr + 0x19, 8*16);
     934
    1051935                ptr  += skip;                     // size + instruments
    1052936                size -= skip;                     // drop instruments for now
    1053937                CHECK_HEAP
     
    1056940                        error("Out of memory while allocating %d", size);
    1057941                }
    1058942                memcpy(track, ptr, size);         // saving MIDI track data
     943
    1059944                nukeResource(type, idx);
    1060945
    1061946                total_size = 8 + 16 + 14 + 8 + 7 + sizeof(OLD256_MIDI_HACK) - 1 + size;
     
    1090975                *ptr++ = (byte)((dw >> 8) & 0xFF);
    1091976                *ptr++ = (byte)(dw & 0xFF);
    1092977                memcpy(ptr, OLD256_MIDI_HACK, sizeof(OLD256_MIDI_HACK) - 1);
     978
     979                /* now fill in the instruments */
     980                for (int i = 0; i < 8; i++) {
     981
     982                        /* flags_1 */
     983                        ptr[95 * i + 30 + 0] = (instr[i * 16 + 3] >> 4) & 0xf;
     984                        ptr[95 * i + 30 + 1] = instr[i * 16 + 3] & 0xf;
     985
     986                        /* oplvl_1 */
     987                        ptr[95 * i + 30 + 2] = (instr[i * 16 + 4] >> 4) & 0xf;
     988                        ptr[95 * i + 30 + 3] = instr[i * 16 + 4] & 0xf;
     989
     990                        /* atdec_1 */
     991                        ptr[95 * i + 30 + 4] = ((~instr[i * 16 + 5]) >> 4) & 0xf;
     992                        ptr[95 * i + 30 + 5] = (~instr[i * 16 + 5]) & 0xf;
     993
     994                        /* sustrel_1 */
     995                        ptr[95 * i + 30 + 6] = ((~instr[i * 16 + 6]) >> 4) & 0xf;
     996                        ptr[95 * i + 30 + 7] = (~instr[i * 16 + 6]) & 0xf;
     997
     998                        /* waveform_1 */
     999                        ptr[95 * i + 30 + 8] = (instr[i * 16 + 7] >> 4) & 0xf;
     1000                        ptr[95 * i + 30 + 9] = instr[i * 16 + 7] & 0xf;
     1001
     1002                        /* flags_2 */
     1003                        ptr[95 * i + 30 + 10] = (instr[i * 16 + 8] >> 4) & 0xf;
     1004                        ptr[95 * i + 30 + 11] = instr[i * 16 + 8] & 0xf;
     1005
     1006                        /* oplvl_2 */
     1007                        ptr[95 * i + 30 + 12] = 3;
     1008                        ptr[95 * i + 30 + 13] = 0xF;
     1009
     1010                        /* atdec_2 */
     1011                        ptr[95 * i + 30 + 14] = ((~instr[i * 16 + 10]) >> 4) & 0xf;
     1012                        ptr[95 * i + 30 + 15] = (~instr[i * 16 + 10]) & 0xf;
     1013
     1014                        /* sustrel_2 */
     1015                        ptr[95 * i + 30 + 16] = ((~instr[i * 16 + 11]) >> 4) & 0xf;
     1016                        ptr[95 * i + 30 + 17] = (~instr[i * 16 + 11]) & 0xf;
     1017
     1018                        /* waveform_2 */
     1019                        ptr[95 * i + 30 + 18] = (instr[i * 16 + 12] >> 4) & 0xf;
     1020                        ptr[95 * i + 30 + 19] = instr[i * 16 + 12] & 0xf;
     1021
     1022                        /* feedback */
     1023                        ptr[95 * i + 30 + 20] = (instr[i * 16 + 2] >> 4) & 0xf;
     1024                        ptr[95 * i + 30 + 21] = instr[i * 16 + 2] & 0xf;
     1025                }
     1026
     1027                free(instr);
     1028
    10931029                ptr += sizeof(OLD256_MIDI_HACK) - 1;
    10941030                memcpy(ptr, track, size);
    10951031                free(track);