It does not work on more modern cards, since it requires the OPL2 or OPL3 chip, that is not provided on sound cards any more. It works on DosBox.
Code: Select all
dim shared instruments(128,10) as ubyte={_
{ &H21, &H21, &H8f, &H0c, &Hf2, &Hf2, &H45, &H76, &H00, &H00, &H08 },_ '/* Acoustic Grand */
{ &H31, &H21, &H4b, &H09, &Hf2, &Hf2, &H54, &H56, &H00, &H00, &H08 },_ '/* Bright Acoustic */
{ &H31, &H21, &H49, &H09, &Hf2, &Hf2, &H55, &H76, &H00, &H00, &H08 },_ '/* Electric Grand */
{ &Hb1, &H61, &H0e, &H09, &Hf2, &Hf3, &H3b, &H0b, &H00, &H00, &H06 },_ '/* Honky-Tonk */
{ &H01, &H21, &H57, &H09, &Hf1, &Hf1, &H38, &H28, &H00, &H00, &H00 },_ '/* Electric Piano 1 */
{ &H01, &H21, &H93, &H09, &Hf1, &Hf1, &H38, &H28, &H00, &H00, &H00 },_ '/* Electric Piano 2 */
{ &H21, &H36, &H80, &H17, &Ha2, &Hf1, &H01, &Hd5, &H00, &H00, &H08 },_ '/* Harpsichord */
{ &H01, &H01, &H92, &H09, &Hc2, &Hc2, &Ha8, &H58, &H00, &H00, &H0a },_ '/* Clav */
{ &H0c, &H81, &H5c, &H09, &Hf6, &Hf3, &H54, &Hb5, &H00, &H00, &H00 },_ '/* Celesta */
{ &H07, &H11, &H97, &H89, &Hf6, &Hf5, &H32, &H11, &H00, &H00, &H02 },_ '/* Glockenspiel */
{ &H17, &H01, &H21, &H09, &H56, &Hf6, &H04, &H04, &H00, &H00, &H02 },_ '/* Music Box */
{ &H18, &H81, &H62, &H09, &Hf3, &Hf2, &He6, &Hf6, &H00, &H00, &H00 },_ '/* Vibraphone */
{ &H18, &H21, &H23, &H09, &Hf7, &He5, &H55, &Hd8, &H00, &H00, &H00 },_ '/* Marimba */
{ &H15, &H01, &H91, &H09, &Hf6, &Hf6, &Ha6, &He6, &H00, &H00, &H04 },_ '/* Xylophone */
{ &H45, &H81, &H59, &H89, &Hd3, &Ha3, &H82, &He3, &H00, &H00, &H0c },_ '/* Tubular Bells */
{ &H03, &H81, &H49, &H89, &H74, &Hb3, &H55, &H05, &H01, &H00, &H04 },_ '/* Dulcimer */
{ &H71, &H31, &H92, &H09, &Hf6, &Hf1, &H14, &H07, &H00, &H00, &H02 },_ '/* Drawbar Organ */
{ &H72, &H30, &H14, &H09, &Hc7, &Hc7, &H58, &H08, &H00, &H00, &H02 },_ '/* Percussive Organ */
{ &H70, &Hb1, &H44, &H09, &Haa, &H8a, &H18, &H08, &H00, &H00, &H04 },_ '/* Rock Organ */
{ &H23, &Hb1, &H93, &H09, &H97, &H55, &H23, &H14, &H01, &H00, &H04 },_ '/* Church Organ */
{ &H61, &Hb1, &H13, &H89, &H97, &H55, &H04, &H04, &H01, &H00, &H00 },_ '/* Reed Organ */
{ &H24, &Hb1, &H48, &H09, &H98, &H46, &H2a, &H1a, &H01, &H00, &H0c },_ '/* Accoridan */
{ &H61, &H21, &H13, &H09, &H91, &H61, &H06, &H07, &H01, &H00, &H0a },_ '/* Harmonica */
{ &H21, &Ha1, &H13, &H92, &H71, &H61, &H06, &H07, &H00, &H00, &H06 },_ '/* Tango Accordian */
{ &H02, &H41, &H9c, &H89, &Hf3, &Hf3, &H94, &Hc8, &H01, &H00, &H0c },_ '/* Acoustic Guitar(nylon) */
{ &H03, &H11, &H54, &H09, &Hf3, &Hf1, &H9a, &He7, &H01, &H00, &H0c },_ '/* Acoustic Guitar(steel) */
{ &H23, &H21, &H5f, &H09, &Hf1, &Hf2, &H3a, &Hf8, &H00, &H00, &H00 },_ '/* Electric Guitar(jazz) */
{ &H03, &H21, &H87, &H89, &Hf6, &Hf3, &H22, &Hf8, &H01, &H00, &H06 },_ '/* Electric Guitar(clean) */
{ &H03, &H21, &H47, &H09, &Hf9, &Hf6, &H54, &H3a, &H00, &H00, &H00 },_ '/* Electric Guitar(muted) */
{ &H23, &H21, &H4a, &H0e, &H91, &H84, &H41, &H19, &H01, &H00, &H08 },_ '/* Overdriven Guitar */
{ &H23, &H21, &H4a, &H09, &H95, &H94, &H19, &H19, &H01, &H00, &H08 },_ '/* Distortion Guitar */
{ &H09, &H84, &Ha1, &H89, &H20, &Hd1, &H4f, &Hf8, &H00, &H00, &H08 },_ '/* Guitar Harmonics */
{ &H21, &Ha2, &H1e, &H09, &H94, &Hc3, &H06, &Ha6, &H00, &H00, &H02 },_ '/* Acoustic Bass */
{ &H31, &H31, &H12, &H09, &Hf1, &Hf1, &H28, &H18, &H00, &H00, &H0a },_ '/* Electric Bass(finger) */
{ &H31, &H31, &H8d, &H09, &Hf1, &Hf1, &He8, &H78, &H00, &H00, &H0a },_ '/* Electric Bass(pick) */
{ &H31, &H32, &H5b, &H09, &H51, &H71, &H28, &H48, &H00, &H00, &H0c },_ '/* Fretless Bass */
{ &H01, &H21, &H8b, &H49, &Ha1, &Hf2, &H9a, &Hdf, &H00, &H00, &H08 },_ '/* Slap Bass 1 */
{ &H21, &H21, &H8b, &H11, &Ha2, &Ha1, &H16, &Hdf, &H00, &H00, &H08 },_ '/* Slap Bass 2 */
{ &H31, &H31, &H8b, &H09, &Hf4, &Hf1, &He8, &H78, &H00, &H00, &H0a },_ '/* Synth Bass 1 */
{ &H31, &H31, &H12, &H09, &Hf1, &Hf1, &H28, &H18, &H00, &H00, &H0a },_ '/* Synth Bass 2 */
{ &H31, &H21, &H15, &H09, &Hdd, &H56, &H13, &H26, &H01, &H00, &H08 },_ '/* Violin */
{ &H31, &H21, &H16, &H09, &Hdd, &H66, &H13, &H06, &H01, &H00, &H08 },_ '/* Viola */
{ &H71, &H31, &H49, &H09, &Hd1, &H61, &H1c, &H0c, &H01, &H00, &H08 },_ '/* Cello */
{ &H21, &H23, &H4d, &H89, &H71, &H72, &H12, &H06, &H01, &H00, &H02 },_ '/* Contrabass */
{ &Hf1, &He1, &H40, &H09, &Hf1, &H6f, &H21, &H16, &H01, &H00, &H02 },_ '/* Tremolo Strings */
{ &H02, &H01, &H1a, &H89, &Hf5, &H85, &H75, &H35, &H01, &H00, &H00 },_ '/* Pizzicato Strings */
{ &H02, &H01, &H1d, &H89, &Hf5, &Hf3, &H75, &Hf4, &H01, &H00, &H00 },_ '/* Orchestral Strings */
{ &H10, &H11, &H41, &H09, &Hf5, &Hf2, &H05, &Hc3, &H01, &H00, &H02 },_ '/* Timpani */
{ &H21, &Ha2, &H9b, &H0a, &Hb1, &H72, &H25, &H08, &H01, &H00, &H0e },_ '/* String Ensemble 1 */
{ &Ha1, &H21, &H98, &H09, &H7f, &H3f, &H03, &H07, &H01, &H01, &H00 },_ '/* String Ensemble 2 */
{ &Ha1, &H61, &H93, &H09, &Hc1, &H4f, &H12, &H05, &H00, &H00, &H0a },_ '/* SynthStrings 1 */
{ &H21, &H61, &H18, &H09, &Hc1, &H4f, &H22, &H05, &H00, &H00, &H0c },_ '/* SynthStrings 2 */
{ &H31, &H72, &H5b, &H8c, &Hf4, &H8a, &H15, &H05, &H00, &H00, &H00 },_ '/* Choir Aahs */
{ &Ha1, &H61, &H90, &H09, &H74, &H71, &H39, &H67, &H00, &H00, &H00 },_ '/* Voice Oohs */
{ &H71, &H72, &H57, &H09, &H54, &H7a, &H05, &H05, &H00, &H00, &H0c },_ '/* Synth Voice */
{ &H90, &H41, &H00, &H09, &H54, &Ha5, &H63, &H45, &H00, &H00, &H08 },_ '/* Orchestra Hit */
{ &H21, &H21, &H92, &H0a, &H85, &H8f, &H17, &H09, &H00, &H00, &H0c },_ '/* Trumpet */
{ &H21, &H21, &H94, &H0e, &H75, &H8f, &H17, &H09, &H00, &H00, &H0c },_ '/* Trombone */
{ &H21, &H61, &H94, &H09, &H76, &H82, &H15, &H37, &H00, &H00, &H0c },_ '/* Tuba */
{ &H31, &H21, &H43, &H09, &H9e, &H62, &H17, &H2c, &H01, &H01, &H02 },_ '/* Muted Trumpet */
{ &H21, &H21, &H9b, &H09, &H61, &H7f, &H6a, &H0a, &H00, &H00, &H02 },_ '/* French Horn */
{ &H61, &H22, &H8a, &H0f, &H75, &H74, &H1f, &H0f, &H00, &H00, &H08 },_ '/* Brass Section */
{ &Ha1, &H21, &H86, &H8c, &H72, &H71, &H55, &H18, &H01, &H00, &H00 },_ '/* SynthBrass 1 */
{ &H21, &H21, &H4d, &H09, &H54, &Ha6, &H3c, &H1c, &H00, &H00, &H08 },_ '/* SynthBrass 2 */
{ &H31, &H61, &H8f, &H09, &H93, &H72, &H02, &H0b, &H01, &H00, &H08 },_ '/* Soprano Sax */
{ &H31, &H61, &H8e, &H09, &H93, &H72, &H03, &H09, &H01, &H00, &H08 },_ '/* Alto Sax */
{ &H31, &H61, &H91, &H09, &H93, &H82, &H03, &H09, &H01, &H00, &H0a },_ '/* Tenor Sax */
{ &H31, &H61, &H8e, &H09, &H93, &H72, &H0f, &H0f, &H01, &H00, &H0a },_ '/* Baritone Sax */
{ &H21, &H21, &H4b, &H09, &Haa, &H8f, &H16, &H0a, &H01, &H00, &H08 },_ '/* Oboe */
{ &H31, &H21, &H90, &H09, &H7e, &H8b, &H17, &H0c, &H01, &H01, &H06 },_ '/* English Horn */
{ &H31, &H32, &H81, &H09, &H75, &H61, &H19, &H19, &H01, &H00, &H00 },_ '/* Bassoon */
{ &H32, &H21, &H90, &H09, &H9b, &H72, &H21, &H17, &H00, &H00, &H04 },_ '/* Clarinet */
{ &He1, &He1, &H1f, &H09, &H85, &H65, &H5f, &H1a, &H00, &H00, &H00 },_ '/* Piccolo */
{ &He1, &He1, &H46, &H09, &H88, &H65, &H5f, &H1a, &H00, &H00, &H00 },_ '/* Flute */
{ &Ha1, &H21, &H9c, &H09, &H75, &H75, &H1f, &H0a, &H00, &H00, &H02 },_ '/* Recorder */
{ &H31, &H21, &H8b, &H09, &H84, &H65, &H58, &H1a, &H00, &H00, &H00 },_ '/* Pan Flute */
{ &He1, &Ha1, &H4c, &H09, &H66, &H65, &H56, &H26, &H00, &H00, &H00 },_ '/* Blown Bottle */
{ &H62, &Ha1, &Hcb, &H09, &H76, &H55, &H46, &H36, &H00, &H00, &H00 },_ '/* Skakuhachi */
{ &H62, &Ha1, &Ha2, &H09, &H57, &H56, &H07, &H07, &H00, &H00, &H0b },_ '/* Whistle */
{ &H62, &Ha1, &H9c, &H09, &H77, &H76, &H07, &H07, &H00, &H00, &H0b },_ '/* Ocarina */
{ &H22, &H21, &H59, &H09, &Hff, &Hff, &H03, &H0f, &H02, &H00, &H00 },_ '/* Lead 1 (square) */
{ &H21, &H21, &H0e, &H09, &Hff, &Hff, &H0f, &H0f, &H01, &H01, &H00 },_ '/* Lead 2 (sawtooth) */
{ &H22, &H21, &H46, &H89, &H86, &H64, &H55, &H18, &H00, &H00, &H00 },_ '/* Lead 3 (calliope) */
{ &H21, &Ha1, &H45, &H09, &H66, &H96, &H12, &H0a, &H00, &H00, &H00 },_ '/* Lead 4 (chiff) */
{ &H21, &H22, &H8b, &H09, &H92, &H91, &H2a, &H2a, &H01, &H00, &H00 },_ '/* Lead 5 (charang) */
{ &Ha2, &H61, &H9e, &H49, &Hdf, &H6f, &H05, &H07, &H00, &H00, &H02 },_ '/* Lead 6 (voice) */
{ &H20, &H60, &H1a, &H09, &Hef, &H8f, &H01, &H06, &H00, &H02, &H00 },_ '/* Lead 7 (fifths) */
{ &H21, &H21, &H8f, &H86, &Hf1, &Hf4, &H29, &H09, &H00, &H00, &H0a },_ '/* Lead 8 (bass+lead) */
{ &H77, &Ha1, &Ha5, &H09, &H53, &Ha0, &H94, &H05, &H00, &H00, &H02 },_ '/* Pad 1 (new age) */
{ &H61, &Hb1, &H1f, &H89, &Ha8, &H25, &H11, &H03, &H00, &H00, &H0a },_ '/* Pad 2 (warm) */
{ &H61, &H61, &H17, &H09, &H91, &H55, &H34, &H16, &H00, &H00, &H0c },_ '/* Pad 3 (polysynth) */
{ &H71, &H72, &H5d, &H09, &H54, &H6a, &H01, &H03, &H00, &H00, &H00 },_ '/* Pad 4 (choir) */
{ &H21, &Ha2, &H97, &H09, &H21, &H42, &H43, &H35, &H00, &H00, &H08 },_ '/* Pad 5 (bowed) */
{ &Ha1, &H21, &H1c, &H09, &Ha1, &H31, &H77, &H47, &H01, &H01, &H00 },_ '/* Pad 6 (metallic) */
{ &H21, &H61, &H89, &H0c, &H11, &H42, &H33, &H25, &H00, &H00, &H0a },_ '/* Pad 7 (halo) */
{ &Ha1, &H21, &H15, &H09, &H11, &Hcf, &H47, &H07, &H01, &H00, &H00 },_ '/* Pad 8 (sweep) */
{ &H3a, &H51, &Hce, &H09, &Hf8, &H86, &Hf6, &H02, &H00, &H00, &H02 },_ '/* FX 1 (rain) */
{ &H21, &H21, &H15, &H09, &H21, &H41, &H23, &H13, &H01, &H00, &H00 },_ '/* FX 2 (soundtrack) */
{ &H06, &H01, &H5b, &H09, &H74, &Ha5, &H95, &H72, &H00, &H00, &H00 },_ '/* FX 3 (crystal) */
{ &H22, &H61, &H92, &H8c, &Hb1, &Hf2, &H81, &H26, &H00, &H00, &H0c },_ '/* FX 4 (atmosphere) */
{ &H41, &H42, &H4d, &H09, &Hf1, &Hf2, &H51, &Hf5, &H01, &H00, &H00 },_ '/* FX 5 (brightness) */
{ &H61, &Ha3, &H94, &H89, &H11, &H11, &H51, &H13, &H01, &H00, &H06 },_ '/* FX 6 (goblins) */
{ &H61, &Ha1, &H8c, &H89, &H11, &H1d, &H31, &H03, &H00, &H00, &H06 },_ '/* FX 7 (echoes) */
{ &Ha4, &H61, &H4c, &H09, &Hf3, &H81, &H73, &H23, &H01, &H00, &H04 },_ '/* FX 8 (sci-fi) */
{ &H02, &H07, &H85, &H0c, &Hd2, &Hf2, &H53, &Hf6, &H00, &H01, &H00 },_ '/* Sitar */
{ &H11, &H13, &H0c, &H89, &Ha3, &Ha2, &H11, &He5, &H01, &H00, &H00 },_ '/* Banjo */
{ &H11, &H11, &H06, &H09, &Hf6, &Hf2, &H41, &He6, &H01, &H02, &H04 },_ '/* Shamisen */
{ &H93, &H91, &H91, &H09, &Hd4, &Heb, &H32, &H11, &H00, &H01, &H08 },_ '/* Koto */
{ &H04, &H01, &H4f, &H09, &Hfa, &Hc2, &H56, &H05, &H00, &H00, &H0c },_ '/* Kalimba */
{ &H21, &H22, &H49, &H09, &H7c, &H6f, &H20, &H0c, &H00, &H01, &H06 },_ '/* Bagpipe */
{ &H31, &H21, &H85, &H09, &Hdd, &H56, &H33, &H16, &H01, &H00, &H0a },_ '/* Fiddle */
{ &H20, &H21, &H04, &H8a, &Hda, &H8f, &H05, &H0b, &H02, &H00, &H06 },_ '/* Shanai */
{ &H05, &H03, &H6a, &H89, &Hf1, &Hc3, &He5, &He5, &H00, &H00, &H06 },_ '/* Tinkle Bell */
{ &H07, &H02, &H15, &H09, &Hec, &Hf8, &H26, &H16, &H00, &H00, &H0a },_ '/* Agogo */
{ &H05, &H01, &H9d, &H09, &H67, &Hdf, &H35, &H05, &H00, &H00, &H08 },_ '/* Steel Drums */
{ &H18, &H12, &H96, &H09, &Hfa, &Hf8, &H28, &He5, &H00, &H00, &H0a },_ '/* Woodblock */
{ &H10, &H00, &H86, &H0c, &Ha8, &Hfa, &H07, &H03, &H00, &H00, &H06 },_ '/* Taiko Drum */
{ &H11, &H10, &H41, &H0c, &Hf8, &Hf3, &H47, &H03, &H02, &H00, &H04 },_ '/* Melodic Tom */
{ &H01, &H10, &H8e, &H09, &Hf1, &Hf3, &H06, &H02, &H02, &H00, &H0e },_ '/* Synth Drum */
{ &H0e, &Hc0, &H00, &H09, &H1f, &H1f, &H00, &Hff, &H00, &H03, &H0e },_ '/* Reverse Cymbal */
{ &H06, &H03, &H80, &H91, &Hf8, &H56, &H24, &H84, &H00, &H02, &H0e },_ '/* Guitar Fret Noise */
{ &H0e, &Hd0, &H00, &H0e, &Hf8, &H34, &H00, &H04, &H00, &H03, &H0e },_ '/* Breath Noise */
{ &H0e, &Hc0, &H00, &H09, &Hf6, &H1f, &H00, &H02, &H00, &H03, &H0e },_ '/* Seashore */
{ &Hd5, &Hda, &H95, &H49, &H37, &H56, &Ha3, &H37, &H00, &H00, &H00 },_ '/* Bird Tweet */
{ &H35, &H14, &H5c, &H11, &Hb2, &Hf4, &H61, &H15, &H02, &H00, &H0a },_ '/* Telephone ring */
{ &H0e, &Hd0, &H00, &H09, &Hf6, &H4f, &H00, &Hf5, &H00, &H03, &H0e },_ '/* Helicopter */
{ &H26, &He4, &H00, &H09, &Hff, &H12, &H01, &H16, &H00, &H01, &H0e },_ '/* Applause */
{ &H00, &H00, &H00, &H09, &Hf3, &Hf6, &Hf0, &Hc9, &H00, &H02, &H0e }} '/* Gunshot */
DIM SHARED DrumSetUp(35 TO 81, 10) AS ubyte={_ 'commento
{ 0, 0, 13, 0, 232, 165, 239, 255, 0, 0, 6},_ 'BDRUM2
{ 0, 0, 11, 0, 168, 214, 76, 79, 0, 0, 0},_ 'BDRUM1
{ 100, 3, 2, 64, 178, 151, 162, 212, 2, 1, 14},_ 'HIHAT
{ 6, 0, 0, 0, 240, 248, 240, 182, 0, 0, 14},_ 'SNARE1
{ 6, 0, 0, 0, 240, 248, 240, 182, 0, 0, 14},_ 'SNARE1
{ 6, 0, 0, 0, 240, 246, 240, 180, 0, 0, 14},_ 'SNARE2
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 100, 3, 2, 64, 178, 151, 162, 212, 2, 1, 14},_ 'HIHAT
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 100, 3, 2, 64, 178, 151, 162, 212, 2, 1, 14},_ 'HIHAT
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 100, 3, 2, 64, 178, 151, 162, 212, 2, 1, 14},_ 'HIHAT
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 36, 5, 0, 64, 181, 213, 84, 133, 0, 1, 14},_ 'CYMBAL
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 36, 5, 0, 64, 181, 213, 84, 133, 0, 1, 14},_ 'CYMBAL
{ 36, 5, 0, 64, 181, 213, 84, 133, 0, 1, 14},_ 'CYMBAL
{ 7, 18, 79, 0, 242, 242, 96, 114, 0, 0, 8},_ 'BELLS
{ 6, 196, 0, 3, 240, 196, 240, 52, 0, 0, 14},_ 'SNARELNG
{ 36, 5, 0, 64, 181, 213, 84, 133, 0, 1, 14},_ 'CYMBAL
{ 7, 18, 79, 0, 242, 242, 96, 114, 0, 0, 8},_ 'BELLS
{ 36, 5, 0, 64, 181, 213, 84, 133, 0, 1, 14},_ 'CYMBAL
{ 6, 65, 115, 3, 246, 242, 84, 179, 0, 0, 0},_ 'VIBRA
{ 36, 5, 0, 64, 181, 213, 84, 133, 0, 1, 14},_ 'CYMBAL
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 79, 1, 129, 0, 239, 150, 1, 241, 0, 0, 4},_ 'TINCAN
{ 79, 1, 129, 0, 239, 150, 1, 241, 0, 0, 4},_ 'TINCAN
{ 7, 18, 79, 0, 242, 242, 96, 114, 0, 0, 8},_ 'BELLS
{ 7, 18, 79, 0, 242, 242, 96, 114, 0, 0, 8},_ 'BELLS
{ 6, 196, 0, 3, 240, 196, 240, 52, 0, 0, 14},_ 'SNARELNG
{ 6, 196, 0, 3, 240, 196, 240, 52, 0, 0, 14},_ 'SNARELNG
{ 225, 97, 39, 128, 83, 83, 138, 87, 0, 0, 4},_ 'FLUTE
{ 225, 97, 39, 128, 83, 83, 138, 87, 0, 0, 4},_ 'FLUTE
{ 100, 3, 2, 64, 178, 151, 162, 212, 2, 1, 14},_ 'HIHAT
{ 100, 3, 2, 64, 178, 151, 162, 212, 2, 1, 14},_ 'HIHAT
{ 100, 3, 2, 64, 178, 151, 162, 212, 2, 1, 14},_ 'HIHAT
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 1, 2, 0, 0, 251, 215, 191, 63, 0, 0, 8},_ 'TOM
{ 5, 1, 78, 0, 218, 249, 37, 21, 0, 0, 10},_ 'MARIMBA
{ 5, 1, 78, 0, 218, 249, 37, 21, 0, 0, 10},_ 'MARIMBA
{ 15, 15, 15, 15, 245, 245, 240, 240, 0, 0, 0},_ 'TRIANGLE
{ 15, 15, 15, 15, 245, 245, 240, 240, 0, 0, 0}} 'TRIANGLE
CONST BaseAddr = &H220 'Change if your sound card uses another base address
CONST RegAddr = BaseAddr + 8, DataAddr = BaseAddr + 9
DIM SHARED AS INTEGER Tune, chan, channel, NoTune, PolyPh, MPolyPh, Volume, drumset
DIM SHARED Vol(1 TO 16) AS INTEGER, RealVol(1 TO 16) AS INTEGER
DIM SHARED TrackXisOnCH(0 TO 16, 0 TO 127) AS INTEGER
DIM SHARED ChUse(0 TO 15) AS INTEGER
DIM SHARED voiceset(0 TO 127) AS INTEGER
SUB SetReg (Reg as integer, Value as integer)
dim X as integer
OUT RegAddr, Reg
FOR d as integer = 1 TO 6
X = INP(RegAddr)
NEXT
OUT DataAddr, Value
FOR d as integer = 1 TO 6
X = INP(RegAddr)
NEXT
END SUB
sub SetVoice (channel as integer, Selected as integer)
dim as integer ChanX = (Channel MOD 3) + 8 * INT(Channel / 3)
SetReg 32 + chanx ,Instruments(Selected, 0 )
SetReg 35 + chanx ,Instruments(Selected, 1 )
SetReg 64 + chanx ,Instruments(Selected, 2 )
SetReg 67 + chanx ,Instruments(Selected, 3 )
SetReg 96 + chanx ,Instruments(Selected, 4 )
SetReg 99 + chanx ,Instruments(Selected, 5 )
SetReg 128 + chanx ,Instruments(Selected, 6 )
SetReg 131 + chanx ,Instruments(Selected, 7 )
SetReg 224 + chanx ,Instruments(Selected, 8 )
SetReg 227 + chanx ,Instruments(Selected, 9 )
SetReg 192 + channel ,Instruments(Selected, 10 )
end sub
sub SetDrum (channel as integer, Selected as integer)
dim as integer ChanX = (Channel MOD 3) + 8 * INT(Channel / 3)
SetReg 32 + chanx ,DrumSetUp(Selected, 0 )
SetReg 35 + chanx ,DrumSetUp(Selected, 1 )
SetReg 64 + chanx ,DrumSetUp(Selected, 2 )
SetReg 67 + chanx ,DrumSetUp(Selected, 3 )
SetReg 96 + chanx ,DrumSetUp(Selected, 4 )
SetReg 99 + chanx ,DrumSetUp(Selected, 5 )
SetReg 128 + chanx ,DrumSetUp(Selected, 6 )
SetReg 131 + chanx ,DrumSetUp(Selected, 7 )
SetReg 224 + chanx ,DrumSetUp(Selected, 8 )
SetReg 227 + chanx ,DrumSetUp(Selected, 9 )
SetReg 192 + channel ,DrumSetUp(Selected, 10 )
end sub
FUNCTION DetectCard as integer
' Purpose: Detects an AdLib-compatible card.
' Returns -1 (true) if detected and 0 (false) if not.
' Variables: Nope
dim as integer a,b,c
SetReg &H4, &H60
SetReg &H4, &H80
B = INP(&H388)
SetReg &H2, &HFF
SetReg &H4, &H21
FOR x as integer = 0 TO 130
A = INP(&H388)
NEXT x
C = INP(&H388)
SetReg &H4, &H60
SetReg &H4, &H80
IF (B AND &HE0) = &H0 THEN
IF (C AND &HE0) = &HC0 THEN
return -1
END IF
END IF
return 0
END FUNCTION
SUB ResetFM
FOR n as integer = 0 TO &HF5
SetReg n, 0
NEXT
drumset=11
END SUB
SUB SetInstruments
' Searches a free FM-channel (0-8) and sets the instrument.
chan = channel
NoTune = 0
FOR An as integer = 0 TO 8 ' Detect, if the channel is free.
IF ChUse(An) = 0 THEN chan = An: GOTO selected:
NEXT An
FOR An as integer = 0 TO 8 ' If no free channel, "kill" one.
IF RealVol(An) < (Volume / 10) - 1 THEN
chan = An
GOTO selected:
END IF
NEXT An
NoTune = 1: EXIT SUB
selected:
RealVol(chan) = Volume / 10
SetVoice (chan, voiceset(channel))
IF channel = drumset - 1 THEN
IF Tune < 35 OR Tune > 81 THEN
SetDrum (chan, 36)
ELSE
SetDrum (chan, Tune)
END IF
END IF
END SUB
SUB MidiTune (Tune as integer, Volume as integer, channel as integer)
'Plays a Tune
DIM FRQ as integer
PolyPh = PolyPh + 1
IF PolyPh >= MPolyPh THEN MPolyPh = PolyPh
FRQ = (440 / 32) * (2 ^ ((Tune - 9) / 12)) ' Convert Tune to frequency.
Vol(channel + 1) = Volume / 10
SetInstruments
IF NoTune = 1 THEN EXIT SUB
dim as integer Freq = FRQ
dim as integer Octv = 5
TrackXisOnCH(channel, Tune) = chan
SetReg &HA0 + chan, 0
SetReg &HB0 + chan, 0
SetReg &HA0 + chan, Freq AND &HFF
SetReg &HB0 + chan, INT(Freq / 256) OR 32 OR (Octv * 4)
'IF channel% = drumset% - 1 THEN Drum
END SUB
sub MidiEvent (event as integer, param1 as integer, param2 as integer)
channel=event and &H0F
if (event and &HF0)=&H90 AndAlso b=0 then event=&H80
select case (event and &HF0)
case &H80
'Send: Tune Off
PolyPh = PolyPh - 1
Tune = param1
Volume = param2
IF channel <> drumset - 1 THEN
SetReg &HA0 + TrackXisOnCH(channel, Tune), 0
SetReg &HB0 + TrackXisOnCH(channel, Tune), 0
END IF
ChUse(TrackXisOnCH(channel, Tune)) = 0
case &H90
'Send: Tune On
Tune = param1
Volume = param2
MidiTune(Tune, Volume, channel)
ChUse(chan) = 1
case &HA0
'Key after-touch
case &HB0
case &HC0
' Change voice
voiceset(channel) = param1
case &HD0
case &HE0
case &HFE
case &HFF
case else
end select
end sub
ResetFm
midievent(&HC0, 0,80)
midievent(&H90, 90,80)
sleep
midievent(&H80, 90,80)
sleep