AMPLINEX U11

image
AMPLINEX issue U11 was published in May 1989. Each AMPLINEX magazine is stored as a 200K single-sided 80-track disk image file (.ssd file type). The image can be used to create disks for a BBC Micro or can be loaded into a BBC emulator. For the disks to run, the BBC (real or emulated) must have an AMPLE Nucleus ROM installed and be running the Hybrid Music System.

Music 5000 Instrument Library

T F Letocha
*|=INS-AB
*zx airshow INSLIB
*zx arcopiano INSLIB
*zx backsyn INSLIB
*zx bass4 INSLIB
*zx bassa INSLIB
*zx bassdrum INSLIB
*zx bassguit INSLIB
*zx bassins INSLIB
*zx bassinsa INSLIB
*zx bel INSLIB
*zx bigmoog16 INSLIB
*zx binatone INSLIB
*zx blast INSLIB
*zx bmoog INSLIB
*zx brassbow INSLIB
*zx brush INSLIB
*zx bubbly INSLIB
*ze
*|=INS-CD
*zx chime INSLIB
*zx church INSLIB
*zx click INSLIB
*zx clickins INSLIB
*zx clink4 INSLIB
*zx clunky4 INSLIB
*zx crackly INSLIB
*zx cymbal INSLIB
*zx deadbird INSLIB
*zx deathly16 INSLIB
*zx deephorn INSLIB
*zx desertsun INSLIB
*zx digisyn INSLIB
*zx diguitar INSLIB
*zx downpour8 INSLIB
*zx drip INSLIB
*zx drum INSLIB
*zx dualbass4 INSLIB
*zx dubatt INSLIB
*zx dx INSLIB
*zx dxbell4 INSLIB
*ze
*|=INS-EF
*zx echocrash INSLIB
*zx eeow INSLIB
*zx ekosnare INSLIB
*zx elbass INSLIB
*zx elecorgan INSLIB
*zx electom INSLIB
*zx elobass INSLIB
*zx explode16 INSLIB
*zx fasbass INSLIB
*zx fatsynth4 INSLIB
*zx flanger16 INSLIB
*zx flangit4 INSLIB
*zx flute INSLIB
*zx formants4 INSLIB
*zx frosty4 INSLIB
*zx fullreed INSLIB
*zx fuzzchime INSLIB
*zx fuzzklav4 INSLIB
*ze
*|=INS-GH
*zx gatebot INSLIB
*zx genesis4 INSLIB
*zx glister4 INSLIB
*zx glock INSLIB
*zx glocka INSLIB
*zx gritty16 INSLIB
*zx grow INSLIB
*zx guitar INSLIB
*zx hardsync INSLIB
*zx harmonia4 INSLIB
*zx harm4 INSLIB
*zx harps4 INSLIB
*zx harpsette INSLIB
*zx headache4 INSLIB
*zx heavenly INSLIB
*zx hello! INSLIB
*zx hihat INSLIB
*zx hongkong INSLIB
*zx honkytonk INSLIB
*zx hotbass4 INSLIB
*zx howling16 INSLIB
*ze
*|=INS-JKLM
*zx jungle4 INSLIB
*zx junophase INSLIB
*zx keyofsee4 INSLIB
*zx klavizing INSLIB
*zx la INSLIB
*zx la4 INSLIB
*zx leadins INSLIB
*zx leadguita INSLIB
*zx locusts16 INSLIB
*zx longpipe INSLIB
*zx lsnare INSLIB
*zx machinery INSLIB
*zx magicwand INSLIB
*zx magipiano INSLIB
*zx majik4 INSLIB
*zx maxos INSLIB
*zx mechania4 INSLIB
*zx medieval INSLIB
*zx megakey16 INSLIB
*zx megamoog INSLIB
*zx mellow INSLIB
*zx mellowa INSLIB
*zx metabass4 INSLIB
*zx metaorg4 INSLIB
*zx metphase INSLIB
*zx mexbass INSLIB
*zx midbell INSLIB
*zx minimoog INSLIB
*zx moog INSLIB
*zx mooog INSLIB
*zx mycym INSLIB
*zx myglock INSLIB
*ze
*|=INS-NOPQR
*zx newcym INSLIB
*zx newinst INSLIB
*zx orch4 INSLIB
*zx organ INSLIB
*zx oursynth INSLIB
*zx panbass INSLIB
*zx peaksynth INSLIB
*zx pedal INSLIB
*zx peep INSLIB
*zx pgwbins INSLIB
*zx pilsyn INSLIB
*zx pizzicato INSLIB
*zx pluck INSLIB
*zx pluckup4 INSLIB
*zx powero INSLIB
*zx pseudobagpipe INSLIB
*zx pshaa INSLIB
*zx pulseglock INSLIB
*zx purensim INSLIB
*zx purensima INSLIB
*zx pwmbass INSLIB
*zx res INSLIB
*zx ringsyn INSLIB
*zx ripeace4 INSLIB
*zx roadup16 INSLIB
*zx robovox INSLIB
*zx rocket16 INSLIB
*zx rufforgan INSLIB
*ze
*|=INS-S
*zx seacave INSLIB
*zx seqins INSLIB
*zx shortcym INSLIB
*zx singsaw INSLIB
*zx singsawa INSLIB
*zx sizzisoft INSLIB
*zx slapbass4 INSLIB
*zx slobass INSLIB
*zx snap INSLIB
*zx snare INSLIB
*zx softaura INSLIB
*zx softpipe INSLIB
*zx spaceout INSLIB
*zx splatter INSLIB
*zx stack8 INSLIB
*zx starbrite INSLIB
*zx stereosyn INSLIB
*zx strbassa INSLIB
*zx strbassb INSLIB
*zx strikesyn INSLIB
*zx string INSLIB
*zx strings INSLIB
*zx string4 INSLIB
*zx strings4 INSLIB
*zx stringsyn INSLIB
*zx supaglo4 INSLIB
*zx superbass INSLIB
*zx superins4 INSLIB
*zx swamp4 INSLIB
*zx sword INSLIB
*zx syn INSLIB
*zx synfex INSLIB
*zx synth INSLIB
*zx synverb INSLIB
*ze
*|=INS-TUVWXYZ
*zx tarimba INSLIB
*zx tinka INSLIB
*zx tinkb INSLIB
*zx tmoog INSLIB
*zx tonescan4 INSLIB
*zx trillbass INSLIB
*zx turbine16 INSLIB
*zx twister4 INSLIB
*zx tzz INSLIB
*zx upsync INSLIB
*zx vibgplus4 INSLIB
*zx vocoder INSLIB
*zx vowelclav INSLIB
*zx warmseq INSLIB
*zx warmsus INSLIB
*zx wave INSLIB
*zx whab INSLIB
*zx willywarble INSLIB
*zx wokblik INSLIB
*zx woodbash INSLIB
*zx wurlitzer INSLIB
*zx XDR INSLIB
*zx zang4 INSLIB
*zx zizzysyn8 INSLIB
*zx zumm4 INSLIB
*ze
*|=airshow
"airshow" [2 CHANS
1 CHAN
  ON RM
2 CHAN
    0 SHIFT    15 OFFSET   0 AMP
EVERY CHAN
 Bright      Wide        Soft
  ON PHSET
]
*ZEND
*|=arcopiano
"arcopiano" [2 CHANS
1 CHAN
 Round       Delvib      Verylong
  1 POS
2 CHAN
 Bright      Delvib      Verylong
  100 OFFSET 128 AMP     -1 POS
EVERY CHAN
]
*ZEND
*|=backsyn
"backsyn" [2 CHANS
1 CHAN
  ON RM
2 CHAN
    0 SHIFT   150 OFFSET 128 AMP
EVERY CHAN
 Bright      Delvib      Puff
]
*ZEND
*|=bass4
"bass4" [4 CHANS
ODD CHAN
 Bright      Flat        Strike
2 CHAN
 Bright      Delvib      Onoff
4 CHAN
 Metal       Flat        Percuss
1 CHAN
 100 OFFSET -2 POS
2 CHAN
 -192 SHIFT
3 CHAN
 -100 OFFSET 2 POS
EVERY CHAN
 ON PHSET 128 AMP
]
*ZEND
*|=bassa
"bassa" [2 CHANS
1 CHAN
  Hollow     Flat      Verylong
2 CHAN
  Metal       Flat        Short
   20 OFFSET
EVERY CHAN
  128 AMP  0 POS
]
*ZEND
*|=bassdrum
"bassdrum" [2 CHANS
1 CHAN
 Metal       Flat        Click
 255 FM     -310 OFFSET  OFF PSENS
2 CHAN
 Pure        Pow         Echohit
  -49 SHIFT  128 AMP
EVERY CHAN
 ON PHSET
]
*ZEND
*|=bassguit
"bassguit" [4 CHANS
ODD CHAN
 218 FM
EVEN CHAN
    70 OFFSET
1 PAIR CHAN
 1 SHIFT  ON RM
3 PAIR CHAN -1 SHIFT
EVERY CHAN
 Hard        Delvib      Verylong
  ON PHSET 128 AMP
]
*ZEND
*|=bassins
"bassins" [2 CHANS
1 CHAN
 Bright           Flat         Echohit
2 CHAN
 Metal            Flat         Echohit
  128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=bassinsa
"bassinsa" [2 CHANS
1 CHAN
 Bright      Flat        Onoff
2 CHAN
 Metal       Vibrato     Spike
 128 AMP 1 SHIFT
EVERY CHAN
  ON PHSET
]
*ZEND
*|=bel
"bel" [2 CHANS
1 CHAN
    0 OFFSET Verylong
2 CHAN
   -80 SHIFT Strike 100 AMP
EVERY CHAN
 High        Flat
 ON PHSET
]
*ZEND
*|=bigmoog16
"bigmoog16" [16 CHANS
16 FOR( COUNT CHAN COUNT 10 #* OFFSET
COUNT 7 #/ #12 #2 4 #- POS )FOR
4 FOR(INDEX 2 #* PAIR CHAN Onoff)FOR
4 FOR(INDEX 2#* 8#+ PAIR CHAN Tailed)FOR
ODD CHAN
 -3 POS
EVEN CHAN
 Onoff
  3 POS       ON PHSET
EVERY CHAN
 Flat        Sharp       
 -192 SHIFT  128 AMP
13 PAIR CHAN 
    0 SHIFT
15 PAIR CHAN     
  192 SHIFT
EVERY CHAN
]
*ZEND
*|=binatone
"binatone" [2 CHANS
1 CHAN
 Metal       Flat        Onoff
 -440 SHIFT   ON SYNC
2 CHAN
 Syncer      Vibrato     Puff
EVERY CHAN
]
*ZEND
*|=blast
"blast" [2 CHANS
1 CHAN
 High  Zap  Strike 1 POS
  ON FM OFF RM  ON SYNC
2 CHAN
 Syncer Pow  Strike -1 POS
  50 OFFSET  50 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=bmoog
"bmoog" [2 CHANS
2 CHAN
    0 SHIFT    40 OFFSET 128 AMP
EVERY CHAN
 Sharp       Bend        Verylong
 ON PHSET
]
*ZEND
*|=brassbow
"brassbow" [2 CHANS 
2 CHAN
  200 OFFSET 120 AMP
EVERY CHAN 
  Sharp      Soft       Delvib  
]
*ZEND
*|=brush
"brush" [2 CHANS1 CHAN
  -600 SHIFT  3 POS  ON RM
2 CHAN
 -1000 SHIFT -3 POS 128 AMP
EVERY CHAN
 Metal      Pow        Short
  24 PITCH
]
*ZEND
*|=bubbly
"bubbly" [2 CHANS
1 CHAN
 Sharp       Trill       Onoff
 -192 SHIFT
2 CHAN
 Sharp       Flat        Onoff
 128 AMP
EVERY CHAN
 OFF PHSET
]
*ZEND
*|=chime
"chime" [2 CHANS
1 CHAN
 Clear       Flat        Long
 -10 OFFSET -1 POS
2 CHAN
 High        Flat        Short
 10 OFFSET  1 POS
 128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=church
"church" [2 CHANS
  2 CHAN
   80 OFFSET  192 SHIFT  115 AMP
EVERY CHAN
   Pipes      Flat       Onoff
]
*ZEND
*|=click
"click" [2 CHANS
1 CHAN
 Click
  384 SHIFT ON RM
2 CHAN
 Click
  250 OFFSET 128 AMP
EVERY CHAN
 Metal
  ON PHSET
]
*ZEND
*|=clickins
"clickins" [2 CHANS
1 CHAN
 Click
  384 SHIFT ON RM
2 CHAN
 Click
  250 OFFSET 128 AMP
EVERY CHAN
 Metal
 -30 PITCH  ON PHSET
]
*ZEND
*|=clink4
"clink4" [4 CHANS
ODD CHAN
 Reedy       Flat        Click
  80 AMP
EVEN CHAN
 High        Flat        Echohit
 128 AMP        1 SHIFT
1 PAIR CHAN
 1000 OFFSET
2 CHAN
  2 POS
4 CHAN
 -2 POS
EVERY CHAN
  ON PHSET
]
*ZEND
*|=clunky4
"clunky4" [4 CHANS
1 CHAN
 Hollow      Drop        Long
  -92 SHIFT   ON SYNC
2 CHAN
 Syncer      Flat        Peaked
 -192 SHIFT
3 PAIR CHAN
 Metal       Flat        Short
 -192 SHIFT
4 CHAN
   20 OFFSET
EVERY CHAN
 128 AMP
]
*ZEND
*|=crackly
"crackly" [2 CHANS
1 CHAN
   0 PITCH 40 FM
   OFF PSENS
EVERY CHAN
 Broad       Flat        Long
  ON PHSET 128 AMP
]
*ZEND
*|=cymbal
"cymbal" [2 CHANS
1 CHAN
  ON RM                  100 AMP
2 CHAN
  110 SHIFT   -20 OFFSET 128 AMP
EVERY CHAN
 Metal       Flat        Percuss
  24 PITCH   OFF PSENS   ON PHSET
]
*ZEND
*|=deadbird
"deadbird" [2 CHANS
1 CHAN 100 OFFSET -3 POS
2 CHAN 128 AMP 3 POS
EVERY CHAN
 Pure Warble  Percuss
ON PSENS ON PHSET
]
*ZEND
*|=deathly16
"deathly16" [16 CHANS
16 FOR( COUNT CHAN COUNT 10 #* OFFSET
COUNT 7 #/ #12 #2 4 #- POS )FOR
ODD CHAN
  ON SYNC    192 FM
EVERY CHAN
 High        Flat        Tailed
 -384 SHIFT   ON PHSET   128 AMP
]
*ZEND
*|=deephorn
"deephorn" [2 CHANS
1 CHAN
  ON RM      112 SHIFT
2 CHAN
 128 AMP
EVERY CHAN
 Bright      Delvib      Soft
  ON PHSET
]
*ZEND
*|=desertsun
"desertsun" [2 CHANS
1 CHAN
  ON RM        10 OFFSET  ON INVERT
  3 POS
2 CHAN
 -3 POS      128 AMP
EVERY CHAN
 Sharp       Slowvib     Tailed
  ON PHSET
]
*ZEND
*|=digisyn
"digisyn" [2 CHANS
1 CHAN
 Short
  384 SHIFT   ON RM
2 CHAN
 Long
  250 OFFSET 128 AMP
EVERY CHAN
 Bright      Delvib
  ON PHSET
]
*ZEND
*|=diguitar
"diguitar" [2 CHANS
1 CHAN
  ON RM    300 OFFSET
2 CHAN
  128 AMP
EVERY CHAN
 Hard           Delvib          Short
]
*ZEND
*|=downpour8
"downpour8" [8 CHANS
ODD CHAN
 Metal       Warble      Tailed
  100 SHIFT   ON RM      128 AMP
EVEN CHAN
 Metal       Slowvib     Peaked
1 CHAN
 -290 SHIFT  -3 POS
3 CHAN
 -420 SHIFT  -2 POS
5 CHAN
 -540 SHIFT   2 POS
EVERY CHAN
  ON PHSET
]
*ZEND
*|=drip
"drip" [2 CHANS
1 CHAN
 High  Zap  Click 1 POS
  ON FM OFF RM  ON SYNC
2 CHAN
 Syncer Pow  Click -1 POS
  50 OFFSET  50 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=drum
"drum" [2 CHANS
1 CHAN
 Pure        Zap         Burst
 -20 16 #* SHIFT
2 CHAN
 Metal       Flat        Echohit
 0 SHIFT 128 AMP
EVERY CHAN
 ON PSENS   ON PHSET
]
*ZEND
*|=dualbass4
"dualbass4" [4 CHANS
1 CHAN
 Hollow      Delvib      Swell
 155 FM      -192 SHIFT   3 POS
2 CHAN
 Hollow      Deepvib     Tremolo
 -192 SHIFT  -100 OFFSET  3 POS
3 CHAN
 Reedy       Drop        Peaked
  -96 SHIFT   ON SYNC    -1 POS
4 CHAN
 Syncer      Vibrato     Peaked
 -192 SHIFT
EVERY CHAN
  ON PHSET   128 AMP
]
*ZEND
*|=dubatt
"dubatt" [2 CHANS
1 CHAN
 Bright      Delvib      Soft
 ON RM       ON INVERT    0 SHIFT
2 CHAN
 Sharp       Delvib      Puff
 128 AMP     50 OFFSET
EVERY CHAN
 ON PHSET
]
*ZEND
*|=dx
"dx" [2 CHANS
1 CHAN
  Bright       Delvib        Short
  384SHIFT     ON RM
2 CHAN
  Bright       Delvib        Onoff
  250 OFFSET   128 AMP
EVERY CHAN
ON PHSET
]
*ZEND
*|=dxbell4
"dxbell4" [4 CHANS
1 CHAN
 -192 SHIFT
1 PAIR CHAN
 Reedy      Flat       Spike
3 PAIR CHAN
 High       Flat       Strike
ODD CHAN
  ON INVERT 80 DETUNE 1 FM
EVERY CHAN
  ON PHSET
  128 AMP
]
*ZEND
*|=echocrash
"echocrash" [2 CHANS
1 CHAN
 -600 SHIFT 3 POS ON RM
2 CHAN
 -999 SHIFT -3 POS 128 AMP
EVERY CHAN
 Metal Pow Long
 12 PITCH OFF PSENS ON PHSET
]
*ZEND
*|=eeow
"eeow" [2 CHANS
1 CHAN
 High        Drop        Onoff
 -630 SHIFT   ON SYNC
2 CHAN
 Syncer      Vibrato     Peaked
EVERY CHAN
]
*ZEND
*|=ekosnare
"ekosnare" [  2 CHANS
1 CHAN
  -600 SHIFT  3 POS      ON RM
2 CHAN
 -1000 SHIFT -3 POS     128 AMP
EVERY CHAN
  Metal      Pow        Short
  12 PITCH
]
*ZEND
*|=elbass
"elbass" [2 CHANS
2 CHAN
  200 OFFSET
EVERY CHAN
  Round       Delvib      Strike
  128 AMP   ON PHSET
]
*ZEND
*|=elecorgan
"elecorgan" [2 CHANS
2 CHAN
  100 OFFSET 128 AMP
EVERY CHAN
  Pipes      Vibrato    Onoff
]
*ZEND
*|=electom
"electom" [2 CHANS
1 CHAN
  Metal      Flat        Click
  255 FM   -20 PITCH     OFF PSENS
2 CHAN
  Pure       Drop        Short
  -112 SHIFT   128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=elobass
"elobass" [2 CHANS
1 CHAN
 Sharp        Slowvib        Swell
 ON RM     80 OFFSET   ON INVERT -1 POS
2 CHAN
 Sharp        Slowvib        Swell
1 CHAN
 ON RM     40 OFFSET   ON INVERT  2 POS
2 CHAN
 128 AMP   -2 POS
EVERY CHAN
ON PHSET
]
*ZEND
*|=explode16
"explode16" [16 CHANS
ODD CHAN
  3 POS       ON RM
EVEN CHAN
 -3 POS      128 AMP
EVERY CHAN
 Metal       Rise        Long
  ON PHSET   16
8 FOR( COUNT 2 #* CHAN
#11 COUNT #*  -600 #+ SHIFT
COUNT 2 #* 1 #- CHAN
#11 COUNT #* -1000 #+ SHIFT )FOR #2
]
*ZEND
*|=fasbass
"fasbass" [2 CHANS
1 CHAN
 ON RM     80 OFFSET   ON INVERT  2 POS
2 CHAN
 128 AMP   -2 POS
EVERY CHAN
 Sharp Slowvib Percuss
 ON PHSET
]
*ZEND
*|=fatsynth4
"fatsynth4" [4 CHANS
1 CHAN
 Sharp       Flat        Tailed
   50 OFFSET
2 CHAN
 Hollow      Slowvib     Soft
 -192 SHIFT
3 CHAN
 Sharp       Flat        Tailed
  200 OFFSET
4 CHAN
 Round       Delvib      Soft
EVEN CHAN
  ON PHSET   128 AMP
EVERY CHAN
]
*ZEND
*|=flanger16
"flanger16" [16 CHANS
16 FOR( INDEX CHAN INDEX 10 #* OFFSET
INDEX 7 #/ #12 #2 4 #- POS )FOR
EVERY CHAN
 Reedy       Flat        Onoff 
  ON SYNC     ON PHSET   128 AMP
 -192 SHIFT
ODD CHAN
 Tailed
EVERY CHAN
]
*ZEND
*|=flangit4
"flangit4" [4 CHANS
ODD CHAN
 Broad       Wide        Onoff
  384 SHIFT   ON SYNC    128 AMP
EVEN CHAN
 Syncer      Flat        Onoff
1 CHAN
  2 POS
2 CHAN
  3 POS         1 SHIFT
3 CHAN
 -2 POS
4 CHAN
 -3 POS        -1 SHIFT
EVERY CHAN
  ON PHSET
]
*ZEND
*|=flute
"flute" [2 CHANS
1 CHAN
                       -3 POS
2 CHAN
  500 OFFSET 128 AMP    3 POS
EVERY CHAN
 Pure       Delvib     Strike
]
*ZEND
*|=formants4
"formants4" [4 CHANS
EVEN CHAN
 Syncer      Delvib      Peaked
1 CHAN
 High        Flat        Soft
 -360 SHIFT   ON SYNC     ON PSENS
3 CHAN
 High        Flat        Puff
 -490 SHIFT   ON SYNC     ON PSENS
EVERY CHAN
  ON PHSET   128 AMP
]
*ZEND
*|=frosty4
"frosty4" [4 CHANS
1 CHAN
 High        Flat        Percuss
  ON RM      192 SHIFT
2 CHAN
 Clear       Delvib      Verylong
3 CHAN
 Clear       Flat        Long
   -1 SHIFT  -3 POS
4 CHAN
 Clear       Delvib      Long
    1 SHIFT   3 POS
EVERY CHAN
  ON PHSET   128 AMP
]
*ZEND
*|=fullreed
"fullreed" [2 CHANS
1 CHAN
 Hollow      Flat        Soft
  450 SHIFT   ON SYNC
2 CHAN
 Hollow      Delvib      Soft
 128 AMP
EVERY CHAN
]
*ZEND
*|=fuzzchime
"fuzzchime" [2 CHANS
1 CHAN
  ON RM        80 SHIFT
2 CHAN
  140 OFFSET 120 AMP
EVERY CHAN
 Clear       Flat        Strike
  ON PHSET
]
*ZEND
*|=fuzzklav4
"fuzzklav4" [4 CHANS
1 CHAN
  ON RM
EVEN CHAN
   70 OFFSET
1 PAIR CHAN
    1 SHIFT
3 PAIR CHAN
   -1 SHIFT
EVERY CHAN
 Hard        Delvib      Verylong
  ON PHSET   128 AMP
]
*ZEND
*|=gatebot
"gatebot" [2 CHANS
1 CHAN
 Reedy       Flat        Click
    80 AMP
2 CHAN
 High        Flat        Click
    1 SHIFT   128 AMP
EVERY CHAN
  ON PSENS   ON PHSET
]
*ZEND
*|=genesis4
"genesis4" [4 CHANS
ODD CHAN
 Sharp       Wide 
 192 SHIFT    ON SYNC
EVEN CHAN
 Syncer      Flat
1 PAIR CHAN
  100 OFFSET -1 POS
3 PAIR CHAN
 -100 OFFSET  1 POS
EVERY CHAN
 Onoff 
 128 AMP
]
*ZEND
*|=glister4
"glister4" [4 CHANS
1 CHAN
 -140 SHIFT  Verylong
2 CHAN
  110 SHIFT  Long
3 CHAN
   90 SHIFT  Short
4 CHAN
  160 SHIFT  Percuss
EVERY CHAN
 High
  ON PHSET   128 AMP
]
*ZEND
*|=glock
"glock" [2 CHANS
1 CHAN
  Clear        Long        Delvib
2 CHAN
  High         Flat        Short
  128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=glocka
"glocka" [2 CHANS
1 CHAN
 Clear       Delvib      Long
2 CHAN
 High        Flat        Short
 128 AMP
EVERY CHAN
  ON PHSET  -192 SHIFT
]
*ZEND
*|=gritty16
"gritty16" [16 CHANS
16 FOR( COUNT CHAN COUNT 10 #* OFFSET
COUNT 7 #/ #12 #2 4 #- POS )FOR
EVEN CHAN
  193 SHIFT
15 CHAN
 -192 SHIFT
16 CHAN
 -384 SHIFT
EVERY CHAN
 Reedy       Flat        Onoff
  ON RM       ON PHSET
]
*ZEND
*|=grow
"grow" [2 CHANS
1 CHAN
 Wide  Sharp
 ON SYNC ON RM
 192 SHIFT  -1 POS
2 CHAN
 150 OFFSET 128 AMP
 Delvib Sharp
 1 POS
EVERY CHAN
 Puff
  ON PHSET
]
*ZEND
*|=guitar
"guitar" [2 CHANS
1 CHAN
   ON RM    300 OFFSET
2 CHAN
  128 AMP
EVERY CHAN
  Hard       Delvib       Long
]
*ZEND
*|=hardsync
"hardsync" [2 CHANS
1 CHAN
 Reedy       Drop        Peaked
   60 SHIFT   ON SYNC
2 CHAN
 Syncer      Vibrato     Peaked
EVERY CHAN
]
*ZEND
*|=harmonia4
"harmonia4" [4 CHANS
1 CHAN
   1 SHIFT    ON SYNC      3 FM
 Broad       Flat        Soft
 -1 POS      128 AMP
2 CHAN
 -192 SHIFT    0 AMP
 Reedy       Wow         Soft
3 CHAN
 Bright      Flat        Soft 
   20 OFFSET 128 AMP
4 CHAN
 Reedy       Flat        Soft 
  1 POS      128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=harm4
"harm4" [4 CHANS
1 CHAN
 -1 SHIFT 2 POS
2 CHAN
  64 SHIFT 96 AMP -1 POS
3 CHAN
  1 SHIFT 128 AMP -2 POS
4 CHAN
  -80 SHIFT 96 AMP 1 POS
EVERY CHAN
 Pipes Flat Onoff
]
*ZEND
*|=harps4
"harps4" [4 CHANS
1 PAIR CHAN
 Hard        Flat        Strike
3 PAIR CHAN
 High        Flat        Percuss
ODD CHAN
  ON RM
EVEN CHAN
  192 SHIFT  128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=harpsette
"harpsette" [2 CHANS
1 CHAN
 Hard        Flat        Strike
  ON RM
2 CHAN
 Hard        Flat        Percuss
  192 SHIFT  128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=headache4
"headache4" [4 CHANS
1 CHAN
 Wide         2 POS
2 CHAN
    8 SHIFT
3 CHAN
 Wide
   16 SHIFT  -2 POS
4 CHAN
   24 SHIFT
EVERY CHAN
 Watery      Onoff 
 128 AMP      ON RM
]
*ZEND
*|=heavenly
"heavenly" [2 CHANS
1 CHAN
 Broad       Delvib      Tailed
  384 SHIFT  -1 POS
2 CHAN
 Round       Vibrato     Swell
  200 OFFSET  1 POS      128 AMP
EVERY CHAN
 OFF PHSET
]
*ZEND
*|=hello!
"hello!" [2 CHANS
1 CHAN
   0 PITCH 40 FM
   OFF PSENS
EVERY CHAN
 Broad       Flat        Long
  ON PHSET 128 AMP
]
*ZEND
*|=hihat
"hihat" [2 CHANS
1 CHAN
  ON RM                  130 AMP
2 CHAN
  110 SHIFT    10 OFFSET 128 AMP
EVERY CHAN
 Metal       Flat        Echohit
  24 PITCH   OFF PSENS   ON PHSET
]
*ZEND
*|=hongkong
"hongkong" [2 CHANS
1 CHAN
  Round       Deepvib     Verylong
  1 POS
2 CHAN
  Bright      Deepvib     Verylong
  112 SHIFT
  100 OFFSET  128 AMP  -1 POS
EVERY CHAN
]
*ZEND
*|=honkytonk
"honkytonk" [2 CHANS
2 CHAN
    4 SHIFT  128 AMP
EVERY CHAN
 Round       Flat        Strike
  ON PHSET
]
*ZEND
*|=hotbass4
"hotbass4" [4 CHANS
1 CHAN
 Hollow        Drop           Long
  ON SYNC      100 SHIFT
2 CHAN
 Syncer
4 CHAN
    20 OFFSET
1 PAIR CHAN
             2 POS
3 PAIR CHAN
            -2 POS
 Metal         Flat           Short
  128 AMP
EVERY CHAN
]
*ZEND
*|=howling16
"howling16" [16 CHANS
16 FOR( INDEX CHAN INDEX 10 #* SHIFT
INDEX 7 #/ #12 #2 4 #- POS)FOR
ODD CHAN
  ON RM
EVEN CHAN
 Wide
15 CHAN
 Warble
EVERY CHAN
 Bright      Tailed
 128 AMP
]
*ZEND
*|=jungle4
"jungle4" [4 CHANS
ODD  CHAN
 Hollow      Wide        Reverse
 255 FM      128 AMP
EVEN CHAN
 Hollow      Flat        Peaked
1 PAIR CHAN
 -3 POS      710 SHIFT
3 PAIR CHAN
  3 POS      895 SHIFT
EVERY CHAN
]
*ZEND
*|=junophase
"junophase" [2 CHANS
1 CHAN
  ON RM      80 OFFSET    3 POS
2 CHAN
 -3 POS
EVERY CHAN
 Sharp       Slowvib      Swell
 128 AMP      ON PHSET
]
*ZEND
*|=keyofsee4
"keyofsee4" [4 CHANS
1 CHAN
   0 PITCH    40 FM
 OFF PSENS   128 AMP     -3 POS
3 CHAN
  12 PITCH    50 FM   
 OFF PSENS   128 AMP      3 POS
2 CHAN
 -100 OFFSET 128 AMP     -1 POS
4 CHAN
  100 OFFSET 128 AMP      1 POS
EVERY CHAN
 Sharp       Flat        Long
  ON PHSET
]
*ZEND
*|=klavizing
"klavizing" [2 CHANS
1 CHAN
 Broad       Delvib      Strike
  ON RM       192 SHIFT
2 CHAN
 Round       Flat        Long
   80 OFFSET 128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=la
"la" [2 CHANS
2 CHAN
 20 OFFSET
EVERY CHAN
 Reedy       Flat        Strike
  ON PHSET ON RM -1 POS 128 AMP
]
*ZEND
*|=la4
"la4" [4 CHANS
2 CHAN
 20 OFFSET
1 PAIR CHAN
 Round       Flat        Strike
  ON PHSET ON RM -1 POS 128 AMP
3 CHAN
 191 SHIFT 10 FM 128 AMP
 Reedy Deepvib
4 CHAN
 Round       Flat        Strike
 100 AMP
3 PAIR CHAN
 Tailed 1 POS
EVERY CHAN
]
*ZEND
*|=leadins
"leadins" [2 CHANS
1 CHAN
    3 POS
2 CHAN
   -3 POS         350 OFFSET
EVERY CHAN
 Sharp           Delvib         Long
  128 AMP
]
*ZEND
*|leadguit
"leadguit" [2 CHANS
1 CHAN
   0 PITCH 60 FM
   OFF PSENS
EVERY CHAN
 Broad       Delvib      Long
  ON PHSET 128 AMP
]
*ZEND
*|=leadguita
"leadguita" [2 CHANS
1 CHAN
   0 PITCH 40 FM
   OFF PSENS
EVERY CHAN
 Broad       Flat        Long
  ON PHSET 128 AMP
]
*ZEND
*|=locusts16
"locusts16" [16 CHANS
16 FOR(INDEX CHAN INDEX 100 #* OFFSET
INDEX 7 #/ #12 #2 3 #- POS)FOR
ODD CHAN
  ON RM      255 FM
EVERY CHAN
 Bright      Delvib      Onoff
  ON PHSET   128 AMP
]
*ZEND
*|=longpipe
"longpipe" [Ironpipe
ON CHANS
2 CHAN
 Tailed
EVERY CHAN
]
*ZEND
*|=lsnare
"lsnare" [2 CHANS
1 CHAN
 ON RM
2 CHAN
 -400 SHIFT
EVERY CHAN
 Metal Drop Long
 -24 PITCH OFF PSENS ON PHSET
]
*ZEND
*|=machinery
"machinery" [2 CHANS
1 CHAN
  ON RM      -3 POS
 Metal       Flat        Swell
2 CHAN
   40 OFFSET  3 POS
EVERY CHAN
 Metal       Flat        Swell
 -384 SHIFT  OFF PHSET   128 AMP
]
*ZEND
*|=magicwand
"magicwand" [2 CHANS
1 CHAN
 Clear       Deepvib     Long
2 CHAN
 High        Flat        Short
  112 SHIFT  128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=magipiano
"magipiano" [2 CHANS
1 CHAN
  ON SYNC
  Bright       Drop        Short
  150 OFFSET   -3 POS
2 CHAN
  Hollow       Flat        Short
EVERY CHAN
  128 AMP
]
*ZEND
*|=majik4
"majik4" [4 CHANS
1 CHAN
 -2 POS        10 OFFSET
2 CHAN
 -1 POS       -20 OFFSET
3 CHAN
  1 POS       -10 OFFSET
4 CHAN
  2 POS        20 OFFSET
EVERY CHAN
 High        Flat        Strike
 -384 SHIFT   ON PHSET   128 AMP
]
*ZEND
*|=maxos
"maxos" [2 CHANS
1 CHAN
 3 POS ON RM
2 CHAN
   -3 POS 200 OFFSET 128 AMP
EVERY CHAN
 Sharp       Flat        Soft
 ON PHSET
]
*ZEND
*|=mechania4
"mechania4" [4 CHANS
1 CHAN
 Hollow      Drop        Long
  ON SYNC    -280 SHIFT
2 CHAN
 Bright      -384 SHIFT
4 CHAN
   10 OFFSET
3 PAIR CHAN
 Metal       Flat        Swell
 128 AMP     -384 SHIFT
EVERY CHAN
  ON PHSET
]
*ZEND
*|=medieval
"medieval" [2 CHANS
1 CHAN
 High        Flat        Onoff
 -500 SHIFT   ON SYNC
2 CHAN
 Syncer      Flat        Puff
EVERY CHAN
  ON PHSET
]
*ZEND
*|=megakey16
"megakey16" [16 CHANS
16 FOR( COUNT CHAN COUNT 10 #* OFFSET
COUNT 7 #/ #12 #2 4 #- POS )FOR
5 FOR(INDEX 3#* 2#- CHAN
INDEX 2#- 192#* SHIFT Tailed)FOR
5 FOR(INDEX 3#* 1#- CHAN
INDEX 2#- 192#* 64#+ SHIFT Verylong)FOR
5 FOR(INDEX 3#* CHAN
INDEX 2#- 192#* 112#+ SHIFT
ON PHSET)FOR
EVERY CHAN
 Reedy       Delvib
]
*ZEND
*|=megamoog
"megamoog" [4 CHANS
ODD CHAN
 ON RM
1 CHAN
 -2 POS
2 CHAN
 -1 POS 1 SHIFT
3 CHAN
  1 POS -1 SHIFT
4 CHAN
  2 POS 200 OFFSET
EVERY CHAN
 ON PHSET 128 AMP
 Sharp       Delvib      Strike
]
*ZEND
*|=mellow
"mellow" [2 CHANS
1 CHAN
  -3 POS
2 CHAN
  500 OFFSET  128 AMP   3 POS
EVERY CHAN
  Pure        Delvib       Strike
]
*ZEND
*|=mellowa
"mellowa" [2 CHANS
1 CHAN
 Round   Soft Wide
  150 SHIFT   ON SYNC
2 CHAN
 Round   Peaked Delvib
EVERY CHAN
]
*ZEND
*|=metabass4
"metabass4" [4 CHANS
1 CHAN
 Hollow      Flat        Strike
 135 FM
2 CHAN
 Hollow      Flat        Peaked
  112 SHIFT
3 CHAN
 Clear       Flat        Short
 255 FM      128 AMP
4 CHAN
 Pure        Flat        Peaked
  112 SHIFT
EVERY CHAN
  ON PHSET
]
*ZEND
*|=metaorg4
"metaorg4" [4 CHANS
1 CHAN -2 POS
2 CHAN
  193 SHIFT  128 AMP -1 POS
3 CHAN 1 SHIFT 128 AMP 1 POS
4 CHAN 192 SHIFT 128 AMP 2 POS
EVERY CHAN
 Pipes       Flat        Peaked
 ON PHSET ON RM
]
*ZEND
*|=metphase
"metphase" [2 CHANS
2 CHAN
   20 OFFSET
EVERY CHAN
 Metal       Flat        Onoff
  -384 SHIFT 128 AMP
]
*ZEND
*|=mexbass
"mexbass" [2 CHANS
1 CHAN
  Round        Delvib       Verylong
  1 POS
2 CHAN
  Bright       Delvib       Verylong
  100 OFFSET   128 AMP   -1 POS
EVERY CHAN
]
*ZEND
*|=midbell
"midbell" [2 CHANS
1 CHAN
   90 SHIFT   80 FM
EVERY CHAN
 Pure        Flat        Percuss
  24 PITCH   ON PHSET
]
*ZEND
*|=minimoog
"minimoog" [2 CHANS
1 CHAN
  180 OFFSET
2 CHAN
  128 AMP
EVERY CHAN
  Sharp         Flat        Onoff
]
*ZEND
*|=moog
"moog" [2 CHANS
1 CHAN
  ON RM
2 CHAN
     60 OFFSET 128 AMP
EVERY CHAN
 Sharp       Zap         Onoff
  ON  PHSET
]
*ZEND
*|=mooog
"mooog" [4 CHANS
1 PAIR CHAN
 Sharp Flat   -1 POS
2 CHAN
   200 OFFSET 1 POS
3 PAIR CHAN
 -192 SHIFT ON PHSET Flat
 Sharp
3 CHAN
    10 OFFSET ON INVERT -2 POS
4 CHAN
   -30 OFFSET 2 POS
EVERY CHAN
 Onoff
 128 AMP
]
*ZEND
*|=mycym
"mycym" [2 CHANS
1 CHAN
  ON RM                  100 AMP
2 CHAN
  110 SHIFT   -20 OFFSET 128 AMP
EVERY CHAN
 Metal       Flat        Percuss
  24 PITCH   OFF PSENS   ON PHSET
]
*ZEND
*|=myglock
"myglock" [2 CHANS
1 CHAN
 Clear       Delvib      Strike
2 CHAN 80 SHIFT
 High        Flat        Short
 128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=newcym
"newcym" [2 CHANS
1 CHAN
  ON RM                  130 AMP
2 CHAN
  110 SHIFT    10 OFFSET 128 AMP
EVERY CHAN
 Metal       Flat        Long
  24 PITCH   OFF PSENS   ON PHSET
]
*ZEND
*|=newinst
"newinst" [4 CHANS
1 PAIR CHAN
 Sharp Flat   -1 POS
2 CHAN
   200 OFFSET 1 POS
3 PAIR CHAN
 -192 SHIFT ON PHSET Flat
 Sharp
3 CHAN
    10 OFFSET ON INVERT -2 POS
4 CHAN
   -30 OFFSET 2 POS
EVERY CHAN
 Onoff
 128 AMP
]
*ZEND
*|=orch4
"orch4" [4 CHANS
1 CHAN
 Broad       Delvib      Swell
  384 SHIFT   200 OFFSET
2 CHAN
 Broad       Slowvib     Swell
  192 SHIFT
3 CHAN
  Bright     Delvib      Tailed
  200 OFFSET
4 CHAN
  Bright     Vibrato     Soft
EVERY CHAN
 OFF PHSET   128 AMP
]
*ZEND
*|=organ
"organ" [2 CHANS
1 CHAN
 Swell
2 CHAN
  Tailed
  191 SHIFT  128 AMP
EVERY CHAN
 Pipes       Flat
]
*ZEND
*|=oursynth
"oursynth" [2 CHANS
1 CHAN
  ON RM
2 CHAN
  150 OFFSET  128 AMP
EVERY CHAN
  Bright      Delvib        Soft
]
*ZEND
*|=panbass
"panbass" [2 CHANS
1 CHAN -1 POS
 Bright      Flat        Strike
2 CHAN 1 POS
 Metal       Flat        Percuss
 128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=peaksynth
"peaksynth" [2 CHANS
1 CHAN
  200 OFFSET
2 CHAN
  128 AMP
EVERY CHAN
  Sharp        Flat         Spike
]
*ZEND
*|=pedal
"pedal" [2 CHANS
2 CHAN
  150 OFFSET 128 AMP
EVERY CHAN
 Round      Flat       Strike   
]
*ZEND
*|=peep
"peep" [2 CHANS
1 CHAN
 Clear       Delvib      Burst
 ON RM
2 CHAN
 Reedy       Flat        Short
 128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=pgwbins
"pgwbins" [2 CHANS
1 CHAN
 Reedy       Flat        Verylong
 ON RM
2 CHAN
 Pure        Delvib      Long
 128 AMP     20 OFFSET
EVERY CHAN
 -192 SHIFT
]
*ZEND
*|=pilsyn
"pilsyn" [2 CHANS
1 CHAN
 Reedy       Wow         Onoff
 ON RM ON SYNC 1 POS
 252 SHIFT
2 CHAN
 High        Delvib      Puff
 128 AMP     48 OFFSET -1 POS
EVERY CHAN
 ON PHSET
]
*ZEND
*|=pizzicato
"pizzicato" [2 CHANS
1 CHAN
    1 SHIFT    ON RM
2 CHAN
   -1 SHIFT   128 AMP
EVERY CHAN
 Hollow      Slowvib    Percuss
]
*ZEND
*|=pluck
"pluck" [2 CHANS
1 CHAN
  Short  ON FM          -3 POS
2 CHAN
  160 OFFSET 128 AMP     3 POS
  Long
EVERY CHAN
 Pure        Delvib
]
*ZEND
*|=pluckup4
"pluckup4" [4 CHANS
1 CHAN
 Hollow      Flat        Tailed
   0 FM
2 CHAN
 Round       Delvib      Strike
  ON RM      -3 POS
3 CHAN
 Hollow      Flat        Soft
    2 SHIFT  -300 OFFSET  3 POS
4 CHAN
 Reedy       Delvib      Percuss
 -150 OFFSET
EVERY CHAN
  ON PHSET   128 AMP
]
*ZEND
*|=powero
"powero" [2 CHANS
1 CHAN
 -1 POS 100 FM
2 CHAN
  193 SHIFT  128 AMP 1 POS
EVERY CHAN
 Pipes       Flat        Onoff
 ON PHSET
]
*ZEND
*|=pseudobagpipe
"pseudobagpipe" [2 CHANS
1 CHAN
  Broad Flat
  110 VOL
  OFF RM   3 FM OFF SYNC
2 CHAN
  Broad Slowvib
  540 OFFSET 110 AMP
EVERY CHAN
  Reverse
]
*ZEND
*|=pshaa
"pshaa" [2 CHANS
1 CHAN
 ON RM
2 CHAN
 -400 SHIFT
EVERY CHAN
 Metal Drop Verylong
 -22 PITCH OFF PSENS ON PHSET
]
*ZEND
*|=pulseglock
"pulseglock" [2 CHANS
1 CHAN -1 POS
 Clear       Flat        Burst
2 CHAN
 Metal       Zap        Click
 128 AMP 0 POS -192 SHIFT
EVERY CHAN
  ON PHSET
]
*ZEND
*|=purensim
"purensim" [2 CHANS
1 CHAN
 Peaked       1 POS
2 CHAN
 Tailed      -1 POS
    1 SHIFT
EVERY CHAN
 Pure        Flat
 128 AMP
]
*ZEND
*|=purensima
"purensima" [2 CHANS
1 CHAN
 Peaked  1 POS
 -1 SHIFT
2 CHAN
 Tailed -1 POS
 1 SHIFT
EVERY CHAN
 Pure Delvib
 128 AMP
]
*ZEND
*|=pwmbass
"pwmbass" [2 CHANS
1 CHAN
  Reedy         Drop        Peaked
   50 SHIFT   ON SYNC
2 CHAN
  Syncer        Vibrato     Peaked
EVERY CHAN
]
*ZEND
*|=res
"res" [2 CHANS
1 CHAN
 Bright      Delvib      Tailed
  ON INVERT    3 SHIFT
2 CHAN
 Reedy       Vibrato     Tailed
 128 AMP    120 OFFSET
EVERY CHAN
]
*ZEND
*|=ringsyn
"ringsyn" [2 CHANS
1 CHAN
  ON RM
2 CHAN
    0 SHIFT   150 OFFSET 128 AMP
EVERY CHAN
 Bright      Delvib      Tailed
  ON PHSET
]
*ZEND
*|=ripeace4
"ripeace4" [4 CHANS
1 CHAN
   -1 SHIFT   2 POS
2 CHAN
   64 SHIFT   96 AMP     -1 POS
3 CHAN
    1 SHIFT  128 AMP     -2 POS
4 CHAN
  -80 SHIFT   96 AMP      1 POS
EVERY CHAN
 Pipes       Flat        Onoff
]
*ZEND
*|=roadup16
"roadup16" [16 CHANS
16 FOR( COUNT CHAN COUNT 10 #* OFFSET
COUNT 7 #/ #12 #2 4 #- POS )FOR
ODD CHAN
 255 FM       ON RM
EVEN CHAN
 -40 PITCH
 OFF PSENS
EVERY CHAN
 Pipes       Flat        Onoff
 128 AMP
]
*ZEND
*|=robovox
"robovox" [2 CHANS
1 CHAN
 Hollow      Cycle       Puff
  450 SHIFT   ON SYNC
EVERY CHAN
]
*ZEND
*|=rocket16
"rocket16" [16 CHANS
ODD CHAN
  3 POS       ON RM
EVEN CHAN
 -3 POS      128 AMP
EVERY CHAN
 Metal       Rise        Long
  ON PHSET    1
8 FOR( COUNT 2 #* CHAN
#11 COUNT #*  -600 #+ SHIFT
COUNT 2 #* 1 #- CHAN
#11 COUNT #* -1000 #+ SHIFT )FOR #2
]
*ZEND
*|=rufforgan
"rufforgan" [2 CHANS
1 CHAN
 -1 POS      100 FM
2 CHAN
  193 SHIFT  128 AMP      1 POS
EVERY CHAN
 Pipes       Flat        Onoff
  ON PHSET
]
*ZEND
*|=seacave
"seacave" [2 CHANS
1 CHAN
 Broad       Delvib      Tailed
  384 SHIFT   60 FM
2 CHAN
 Bright      Slowvib     Soft
  200 OFFSET 128 AMP
EVERY CHAN
 OFF PHSET
]
*ZEND
*|=seqins
"seqins" [2 CHANS
1 CHAN
 Sharp           Flat          Spike
  200 OFFSET
2 CHAN
 Reedy           Flat          Spike
EVERY CHAN
  128 AMP
]
*ZEND
*|=shortcym
"shortcym" [2 CHANS
1 CHAN
  Metal        Flat        Short
    0 SHIFT   ON RM   120 AMP
2 CHAN
  Metal Flat Short
  110 SHIFT   -20 OFFSET   128 AMP
EVERY CHAN
  24 PITCH  OFF PSENS  ON PHSET
]
*ZEND
*|=singsaw
"singsaw" [2 CHANS
1 CHAN
  ON RM        30 OFFSET  ON INVERT
2 CHAN
 128 AMP
EVERY CHAN
 Sharp       Delvib      Swell
  ON PHSET
]
*ZEND
*|=singsawa
"singsawa" [2 CHANS
1 CHAN
  ON RM 30 OFFSET ON INVERT
2 CHAN
 128 AMP
EVERY CHAN
 Sharp Delvib Puff
ON PHSET
]
*ZEND
*|=sizzisoft
"sizzisoft" [2 CHANS
1 CHAN
 Hollow      Flat        Short
  ON RM
2 CHAN
 Hollow      Delvib      Strike
 128 AMP       20 OFFSET
EVERY CHAN
  ON PHSET
]
*ZEND
*|=slapbass4
"slapbass4" [4 CHANS
ODD CHAN
 Bright           Flat         Strike
EVEN CHAN
 Metal            Flat         Percuss
  128 AMP
1 PAIR CHAN
           -2 POS
3 PAIR CHAN
            2 POS    50 OFFSET
EVERY CHAN
]
*ZEND
*|=slobass
"slobass" [2 CHANS
1 CHAN
 ON RM     10 OFFSET   ON INVERT  2 POS
2 CHAN
 128 AMP   -2 POS
EVERY CHAN
 Sharp Slowvib Tailed
 ON PHSET
]
*ZEND
*|=snap
"snap" [2 CHANS
1 CHAN
 OFF RM
   0 FM
2 CHAN
  -90 SHIFT
EVERY CHAN
 Metal Flat Click
 -24 PITCH OFF PSENS ON PHSET
]
*ZEND
*|=snare
"snare" [2 CHANS
1 CHAN
   ON RM
2 CHAN
  -400 SHIFT
EVERY CHAN
  Metal       Drop        Short
  -24 PITCH  OFF PSENS  ON PHSET
]
*ZEND
*|=softaura
"softaura" [2 CHANS
1 CHAN
 Bright      Delvib      Strike
2 CHAN
  Round      Slowvib     Tailed
 110 AMP
EVERY CHAN
 OFF PHSET
]
*ZEND
*|=softpipe
"softpipe" [2 CHANS
1 CHAN
  -3 POS
2 CHAN
  500 OFFSET  128 AMP   3 POS
EVERY CHAN
  Pure         Delvib       Verylong
]
*ZEND
*|=spaceout
"spaceout" [2 CHANS
1 CHAN
 Metal       Wide        Soft
 -400 SHIFT   ON SYNC
2 CHAN
 Syncer      Pow         Puff
EVERY CHAN
  ON PHSET
]
*ZEND
*|=splatter
"splatter" [2 CHANS
1 CHAN
 Metal       Drop        Long
 -600 SHIFT   ON RM       3 POS
2 CHAN
 Metal       Pow         Long
 -720 SHIFT  128 AMP     -3 POS
EVERY CHAN
  ON PHSET
]
*ZEND
*|=stack8
"stack8" [8 CHANS
ON CHAN Syncer
1 CHAN
 Pure        Zap         Burst
 -38 PITCH
2 CHAN
 Metal       Flat        Click
 -20 PITCH   128 AMP
1 PAIR CHAN
 OFF PSENS    ON PHSET    2 POS
3 CHAN
 Bright      Flat        Strike
4 CHAN
 Metal       Flat        Percuss
 128 AMP
3 PAIR CHAN
  ON PHSET   -2 POS
5 CHAN
 Wide        Onoff
  ON SYNC
 384 SHIFT   -1 POS
6 CHAN
 Slowvib     Strike      1 POS
5 PAIR CHAN
 -384 SHIFT
 Hollow
7 CHAN
 Metal       Wide        Puff
 -608 SHIFT
 OFF SYNC     3 POS
8 CHAN
 Metal       Flat        Puff
 -320 SHIFT  128 AMP     -3 POS
7 PAIR CHAN
  ON PHSET
EVERY CHAN
]
*ZEND
*|=starbrite
"starbrite" [2 CHANS
1 CHAN
 Hollow      Flat        Verylong
  ON RM
2 CHAN
 Pure        Delvib      Long
 128 AMP       20 OFFSET
EVERY CHAN
]
*ZEND
*|=stereosyn
"stereosyn" [2 CHANS
1 CHAN
  3 POS
2 CHAN
 -3 POS       350 OFFSET
EVERY CHAN
 Sharp       Delvib      Long
 128 AMP
]
*ZEND
*|=strbassa
"strbassa" [2 CHANS
2 CHAN
  200 OFFSET
EVERY CHAN
 Round       Delvib     Strike
 128 AMP     ON PHSET
]
*ZEND
*|=strbassb
"strbassb" [2 CHANS
2 CHAN
    0 SHIFT   200 OFFSET 128 AMP
EVERY CHAN
 Round       Delvib      Echohit
  ON PHSET
]
*ZEND
*|=strikesyn
"strikesyn" [2 CHANS
1 CHAN
  ON RM       1 POS      102 FM
  -30 OFFSET
2 CHAN
   30 OFFSET -1 POS      128 AMP
EVERY CHAN
 Bright      Delvib      Verylong
  ON PHSET
]
*ZEND
*|=string
"string" [2 CHANS
1 CHAN
 Sharp         Delvib        Soft
   90 OFFSET    1 POS
2 CHAN
 Sharp         Delvib        Tailed
 110 AMP       -1 POS
EVERY CHAN
]
*ZEND
*|=strings
"strings" [2 CHANS
1 CHAN
  1 SHIFT     ON RM
2 CHAN
  -1 SHIFT
EVERY CHAN
 Hollow      Delvib     Tailed
 100 AMP
]
*ZEND
*|=string4
"string4" [4 CHANS
1 CHAN
 Sharp   Slowvib   Swell
2 CHAN
104 OFFSET  128 AMP 1 SHIFT
 Sharp   Delvib     Tailed
3 CHAN
168 OFFSET 128 AMP
 Sharp   Vibrato    Swell
4 CHAN
-70 OFFSET  128 AMP  -1 SHIFT
 Sharp   Delvib     Tailed
EVERY CHAN
]
*ZEND
*|=strings4
"strings4" [4 CHANS
1 CHAN
 Sharp       Slowvib     Swell
2 CHAN
 Sharp       Delvib      Tailed
  193 SHIFT   120 OFFSET
3 CHAN
 Sharp       Vibrato     Swell
  191 SHIFT   200 OFFSET
4 CHAN
 Sharp       Delvib      Tailed
   -1 SHIFT   -70 OFFSET
EVERY CHAN
 128 AMP
]
*ZEND
*|=stringsyn
"stringsyn" [2 CHANS
1 CHAN
 Sharp       Slowvib     Swell
2 CHAN
 Sharp       Vibrato     Soft
    1 SHIFT   120 OFFSET
EVERY CHAN
 128 AMP
]
*ZEND
*|=supaglo4
"supaglo4" [4 CHANS
1 CHAN
 High        Flat        Percuss
  192 SHIFT
2 CHAN
 High        Flat        Short
  111 SHIFT
3 CHAN
 Clear       Delvib      Long
    0 SHIFT  -3 POS
4 CHAN
 Clear       Delvib      Long
 -192 SHIFT   3 POS
EVERY CHAN
  ON PHSET   128 AMP
]
*ZEND
*|=superbass
"superbass" [4 CHANS
1 CHAN -2 POS Bright Strike
2 CHAN -1 POS Metal Short
3 CHAN  1 POS Metal Click
4 CHAN  2 POS Bright Short
1 PAIR CHAN 100 OFFSET
3 PAIR CHAN -100 OFFSET 192 SHIFT  ON RM
EVERY CHAN
  Flat  ON PHSET 128 AMP
]
*ZEND
*|=superins4
"superins4" [4 CHANS
ODD CHAN
 Broad Wide Onoff ON SYNC
 384 SHIFT 128 AMP
EVEN CHAN
 Syncer Flat Onoff
1 PAIR CHAN 2 POS
3 PAIR CHAN -2 POS 2 SHIFT
EVERY CHAN
 ON PHSET
]
*ZEND
*|=swamp4
"swamp4" [4 CHANS
ODD  CHAN
  ON RM      128 AMP
 Broad       Wide        Swell
EVEN CHAN
 Hollow      Flat        Peaked
1 PAIR CHAN
 -3 POS      710 SHIFT
3 PAIR CHAN
  3 POS      895 SHIFT
EVERY CHAN
]
*ZEND
*|=sword
"sword" [2 CHANS
1 CHAN
    Vibrato 2 POS
2 CHAN
    0 SHIFT     77 OFFSET 128 AMP
    Flat -2 POS
EVERY CHAN
 Reedy   Strike
  ON PHSET
]
*ZEND
*|=syn
"syn" [2 CHANS
1 CHAN -1 POS
 ON RM
2 CHAN  1 POS
    0 SHIFT   20 OFFSET 128 AMP
EVERY CHAN
 Reedy       Flat        Onoff
 ON PHSET
]
*ZEND
*|=synfex
"synfex" [2 CHANS
1 CHAN
 Bright      Flat        Onoff
2 CHAN
 Metal       Flat        Percuss
 128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=synth
"synth" [  2 CHANS
1 CHAN
  ON RM   300 OFFSET
2 CHAN
  128 AMP
EVERY CHAN
  Bright       Delvib      Verylong
]
*ZEND
*|=synverb
"synverb" [2 CHANS
1 CHAN
  200 OFFSET
EVERY CHAN
 Sharp      Vibrato    Strike
]
*ZEND
*|=tarimba
"tarimba" [2 CHANS
1 CHAN
 Hard        Vibrato     Long
2 CHAN
 Hard        Flat        Short
  192 SHIFT  128 AMP
EVERY CHAN
  ON PHSET
]
*ZEND
*|=tinka
"tinka" [2 CHANS
2 CHAN
   330 SHIFT
EVERY CHAN
   Pure         Flat         Short
   ON RM   26 PITCH   OFF PSENS
]
*ZEND
*|=tinkb
"tinkb" [2 CHANS
1 CHAN
  Pure         Flat        Short
  ON RM
2 CHAN
  330 SHIFT
EVERY CHAN
  7 PITCH
]
*ZEND
*|=tmoog
"tmoog" [2 CHANS
2 CHAN
    0 SHIFT    40 OFFSET 128 AMP
EVERY CHAN
 Sharp       Trill       Onoff
 ON PHSET
]
*ZEND
*|=tonescan4
"tonescan4" [4 CHANS
EVEN CHAN
 Syncer        Deepvib       Puff
    0 SHIFT
ODD CHAN
 High          Sweep         Soft
1 CHAN
  -390 SHIFT   ON SYNC      -3 POS
3 CHAN
  -400 SHIFT   ON SYNC       3 POS
EVERY CHAN
  ON PHSET     128 AMP
]
*ZEND
*|=trillbass
"trillbass" [2 CHANS
1 CHAN
 ON RM     10 OFFSET   ON INVERT  2 POS
2 CHAN
 128 AMP   -2 POS
EVERY CHAN
 Sharp Trill   Verylong
 ON PHSET
]
*ZEND
*|=turbine16
"turbine16" [16 CHANS
16 FOR( COUNT CHAN COUNT 10 #* OFFSET
COUNT 7 #/ #12 #2 4 #- POS )FOR
ODD CHAN
  10 FM       ON RM
 -1023 SHIFT
EVEN CHAN
   3 PITCH
 OFF PSENS     0 AMP
EVERY CHAN
 High        Flat        Onoff
 128 AMP
]
*ZEND
*|=twister4
"twister4" [4 CHANS
1 CHAN
 Rise        Tailed
  160 SHIFT
3 CHAN
 Drop        Onoff
ODD CHAN
 Sharp
  ON SYNC    383 SHIFT
EVEN CHAN
 Syncer      Onoff
EVERY CHAN
 128 AMP
]
*ZEND
*|=tzz
"tzz" [2 CHANS
1 CHAN
 -191 SHIFT -1 POS
2 CHAN
 1 POS 128 AMP
EVERY CHAN
 Pipes       Slowvib     Spike
 ON PHSET
]
*ZEND
*|=upsync
"upsync" [2 CHANS
1 CHAN
 Hollow  Soft Wide
  150 SHIFT   ON SYNC
2 CHAN
 Syncer  Peaked Wide
EVERY CHAN
]
*ZEND
*|=vibgplus4
"vibgplus4" [4 CHANS
ODD  CHAN
 Clear       Delvib      Long
EVEN CHAN
 High        Flat        Short
1 PAIR CHAN
    2 SHIFT  -3 POS
3 PAIR CHAN
              3 POS
EVERY CHAN
  ON PHSET   128 AMP
]
*ZEND
*|=vocoder
"vocoder" [2 CHANS
1 CHAN
 Bright      Delvib      Soft
  ON RM       ON INVERT     0 SHIFT
2 CHAN
 Sharp       Delvib      Puff
 128 AMP       50 OFFSET
EVERY CHAN
  ON PHSET
]
*ZEND
*|=vowelclav
"vowelclav" [2 CHANS
1 CHAN
  Hollow       Cycle       Strike
  450 SHIFT  ON SYNC
2 CHAN
  Pure         Vibrato     Onoff
EVERY CHAN
  128 AMP
]
*ZEND
*|=warmseq
"warmseq" [2 CHANS
2 CHAN
   50 OFFSET  128 AMP
EVERY CHAN
  Round       Delvib       Strike
]
*ZEND
*|=warmsus
"warmsus" [2 CHANS
2 CHAN
   50 OFFSET   128 AMP
EVERY CHAN
  Round        Delvib        Spike
]
*ZEND
*|=wave
"wave" [2 CHANS
1 CHAN
 ON RM ON PHSET
 Verylong
2 CHAN
 -400 SHIFT Soft
EVERY CHAN
 Metal Drop
 -24 PITCH OFF PSENS
]
*ZEND
*|=whab
"whab" [2 CHANS
1 CHAN
 Watery      Wow         Strike
  -96 SHIFT  ON SYNC
2 CHAN
 Syncer      Deepvib     Long
EVERY CHAN
]
*ZEND
*|=willywarble
"willywarble" [2 CHANS
1 CHAN
 Hollow Warble Peaked
2 CHAN
 Syncer Warble  Peaked
 128 AMP
EVERY CHAN
ON PHSET ON PSENS
]
*ZEND
*|=wokblik
"wokblik" [2 CHANS
1 CHAN
   -20 OFFSET 3 FM 1 POS
2 CHAN
   20 OFFSET  -1 POS
EVERY CHAN
 Reedy       Delvib     Strike
 128 AMP
 ON PHSET
]
*ZEND
*|=woodbash
"woodbash" [2 CHANS
1 CHAN
 Metal Flat Percuss
2 CHAN
 Hollow Flat Click
 128 AMP
EVERY CHAN
 ON PHSET ON RM ON FM
]
*ZEND
*|=wurlitzer
"wurlitzer" [2 CHANS
1 CHAN
 -1 PAN
 Vibrato
2 CHAN
  193 SHIFT  128 AMP      1 PAN
 Delvib
EVERY CHAN
 Pipes       Onoff
]
*ZEND
*|=XDR
"XDR" [DISPLAY
%          XDR recording system.
%
%    Each bit is especially examined
%   and polished up to maximum charge
%            before dispatch.
%
READY 1 VOICES 2 CHANS Pure
16,-5:C!C!C!C !C!C!C!C !C!C
0,^
REP(QTIME0#<)UNTIL(IDLE)REP
]
*ZEND
*|=zang4
"zang4" [4 CHANS
EVEN CHAN
 Syncer      Deepvib     Puff
    0 SHIFT
ODD CHAN
 Metal       Sweep       Soft
1 CHAN
 -350 SHIFT   ON SYNC    -3 POS
3 CHAN
 -400 SHIFT   ON SYNC     3 POS
EVERY CHAN
  ON PHSET   128 AMP
]
*ZEND
*|=zizzysyn8
"zizzysyn8" [8 CHANS 7 FOR( INDEX #11
CHAN 4 #- #11 POS 60 #* OFFSET )FOR
EVERY CHAN   -192 SHIFT
7 CHAN
 Wide        Reedy 
  ON SYNC     192 SHIFT
1 CHAN
 Wide        Reedy  
  ON SYNC       0 SHIFT
1 PAIR CHAN    
 Tailed
7 PAIR CHAN
 Tailed
EVERY CHAN
 Sharp
 ON PHSET     ON RM      128 AMP
]
*ZEND
*|=zumm4
"zumm4" [4 CHANS
1 CHAN
  384 SHIFT   3 POS
2 CHAN
 -384 SHIFT   3 POS
3 CHAN
  385 SHIFT  -3 POS
4 CHAN
 -383 SHIFT  -3 POS
ODD CHAN
 Pipes       Sweep       Swell
  ON SYNC    128 AMP
EVEN CHAN
 Pipes       Flat        Swell
EVERY CHAN
  ON PHSET
]
*ZEND

Published in AMPLINEX U11, May 1989

ZROM – The Library Manager

T F Letocha

Declaration

I, T F Letocha, hereby release ZROM and its documentation to AMPLINEX and its registered members for their personal, non-profit making use, free of charge. I prohibit the use of ZROM and its documentation in any form whatsoever by any third party for any purpose whatsoever. The penalty to any such third party for the use of ZROM and its documentation for any purpose whatsoever without my prior written consent will be 50 pounds (Sterling) or 20% of any profits made using ZROM and its documentation, whichever is greater. I hereby declare that I retain all rights (including copyright) over ZROM and its documentation.          

Disclaimer

While every effort has been taken to make ZROM and its documentation both useful and error-free, the author takes no responsibility for any loss or damage arising as a result of the use of ZROM and its documentation.

Introduction

What annoys you about instrument definitions in AMPLE? Is it the fact that to be of most use they are best kept as *EXEC files? Or is it that you can only get 31 of them on a standard DFS disc with no room for anything else (even though the disc is more than 90% empty)? It might even be the fact that it's difficult to remember where you saved that particularly good-sounding instrument?
With me, it was all of these and more. Wouldn't it be nice if I could somehow group together my instrument definitions in a single file - a library? Perhaps have different libraries for instruments belonging to my MIDI-controlled drum machine and my Casio keyboard? What about grouping instruments from many libraries into a library of ensembles, or bands? What about building up a library of percussion parts? Now what did that instrument definition look like? Just think - having libraries saved on different discs and not having to worry about where?
Imagine a utility to do all of this - then imagine ZROM!
ZROM lets you collect all of your EXEC-type files together as separate modules into one file which you can then use as a library. ZROM lets you call up any of the modules in the library and EXEC it automatically - with minimum effort from you. What's more, with ZROM you can have many libraries containing many different types of module spread over one or more disc sides all at your immediate disposal.

Installing ZROM

ZROM has been produced as a sideways ROM image so you can install and use it in two ways:

1 - As a sideways ROM 

To use ZROM this way, just use the file supplied called ZROM19 to program a 4, 8 or 16 K EPROM. Then install the EPROM in a spare sideways ROM socket in the normal way. Having done this ZROM will always be present in your machine ever ready to help you out!

2 - As a ROM image in sideways RAM 

The ZROM file (called ZROM19) is simply a ROM image and can be loaded directly into any spare bank of sideways RAM which you have available. For the Aries-B32 the command to achieve this is: 
*RLOAD ZROM19 14 
followed by a press of the Break key. After this ZROM will be available for your use!

Applications

Although ZROM was written for a specific application it is useful enough to be applied in many different areas. The specific application was for use with AMPLE - Hybrid Technology's Advanced Music Production Language and Environment.
AMPLE is an extremely powerful tool and one of its features allows you to define your own musical instruments which you can play through the synthesiser. The definition of a simple instrument typically consists of perhaps 10 lines of about 20 characters each: pretty small! The most useful way to keep an instrument definition for use within your own music compositions is in text form, so that they can then be *EXEC'd into the AMPLE environment. The problem here is that 31 files, each containing an instrument definition, leaves no more room in the catalogue for other files but only takes up maybe 2% of the total space on the disc. What a waste! Thus was born ZROM.
With ZROM, a library of 200 instrument definitions was quickly constructed - all held in a single file whose size was about 40000 bytes. Such an instrument library would have required 200 files spread over 7 disc sides using conventional methods! Furthermore, very soon a number of libraries had been constructed, each containing keystroke definitions relating to different musical peripherals controlled through AMPLE. For example, a drum machine library and an external synthesiser library. The fun really started, however, when an "ensemble" library had been built up: this contained definitions of ensembles, i.e. instruments grouped together to form a band. The definitions of these ensembles was simple - they just called up instrument definitions in other libraries!
This example of a ZROM application is typical of its use: wherever and whenever you need to repeat keystrokes you can use ZROM. A more basic example follows...
The three commands
*WORD
*TV 0,1
MODE 3
are a very commonly-used method for calling up the View word processor, and would normally appear in the !BOOT file on a word processing disc. By storing this in the default ZROM library UTILS under the name 'VIEW' say would allow you to use the following ZROM command:
*zx VIEW
which would have the effect of executing the above three commands. This idea can be applied in an almost unlimited number of ways!

Command Summary

ZROM offers the following commands:
ZSHOW     ZS    shows the module names in a library
ZXEC      ZX    executes a named module
ZEND      ZE    terminates the execution of a module
ZTYPE     ZT    displays the contents of a named module
ZLIB      ZL    displays/changes the default library name
ZCAT      ZC    displays the available libraries
ZPATH     ZP    displays/changes the disc drive search path
ZWAIT           pauses the execution of a module until a key is pressed
ZINIT           sets the default library to UTILS, and sets scroll mode
ZMAKE           compiles a library from a library source file
ZSCROLL         changes the display mode for some commands to scrolling
ZPAGED          changes the display mode for some commands to paged
Where a command has a two-letter companion, the two-letter version can be used instead of the full command. Naturally, commands can also be abbreviated with a full stop and can be in upper or lower case. Note that all commands must be prefixed by '*' to indicate an operating system command.
A list of all commands recognised by ZROM is given by the help facility, obtained by typing *HELP ZROM.
A full description of each command is given later - but first you need to know a bit about modules and libraries.

Modules

A module is simply a sequence of instructions - usually operating system commands or language-specific commands - which are grouped together under a name.
Every module which you can define will consist of a header part, the body of the module, and a trailer part.
The header part defines the name of the module and always takes the form:
*|=name
The '*|=' characters tell ZROM that this line is the start of a module; it also tells ZROM that whatever follows immediately after - on the same line - is the name of the module. The module name can be any combination of 1 to 32 printable characters (do not use the space character however).
The body of the module is the sequence of instructions which you want performed whenever the module is executed. So if you were trying to define a 4-channel bass instrument the body of the module might look like this:
"bass4" [4 CHANS
ODD CHAN
 Bright Flat Strike
2 CHAN
 Bright Delvib Onoff
4 CHAN
 Metal Flat Percuss
1 CHAN
 100 OFFSET -2 POS
2 CHAN
 -192 SHIFT
3 CHAN
 -100 OFFSET 2 POS
EVERY CHAN
ON PHSET 128 AMP
]
The trailer part of a module is always the same. It is:
*ze
although you can always add an optional comment at the end of the line.
So the complete definition of our 4-channel bass instrument "bass4", in module form, could look like:
*|=bass4
"bass4" [4 CHANS
ODD CHAN
 Bright Flat Strike
2 CHAN
 Bright Delvib Onoff
4 CHAN
 Metal Flat Percuss
1 CHAN
 100 OFFSET -2 POS
2 CHAN
 -192 SHIFT
3 CHAN
 -100 OFFSET 2 POS
EVERY CHAN
ON PHSET 128 AMP
]
*zend (bass4)
You'll recognise this as an ordinary instrument definition - so how does it help you? Well the real usefulness comes when you collect many different modules together in the same text file.

Libraries

A library is constructed from a "library source". The source is simply a text file containing the definitions of many modules, each one being like the one above in terms of structure. The library itself is constructed from the source by using the ZMAKE command (see later). An example library source called INSLIB is supplied on the disc. Have a look at it; it's rather large so it's best to *TYPE it after first pressing control-N, i.e. put the screen in paged mode first.
To turn INSLIB into a useable library, copy it to a disc and (assuming ZROM is installed as a ROM image in sideways RAM or as a sideways ROM) type the following
*zmake 20 INSLIB
ZROM will respond with:
Making index - please wait... INSLIB
At this stage ZROM actually scans the library source (in this case the file INSLIB) looking for lines beginning with '*|=' which marks the start of a module. Having found a line beginning thus ZROM stores the module name in a new file called X.INSLIB together with where in the library the module actually resides (its random access address). When it has scanned the whole library source, ZROM then just copies the source onto the end of the newly-created index and closes both files: the library source file and the new library file (which also contains the index).
The number 20, in the above example, tells ZROM to reserve up to 20 characters for each module name in the index. You can use any number from 1 to 32 - although I've found that the most useful values to use are 10 and 20. These make sure that when you do a *ZSHOW, the module names then displayed are all aligned nicely and look neat on the screen. Whatever value you do use in any case is also stored as part of the index so you never have to remember it again!
Note that ZROM will always try to create the library file on the same disc side as the one holding the library source - so make sure there's enough room on the disc before you start.

General ideas

In normal use, once you've made the library as described above, you should copy the library onto one of your working discs (such as the reverse side of your boot disc). You never need to keep the library and its source together. In fact I've found it very convenient to keep a library source 'master' disc containing all my different library sources. This means that when I need to modify a library, I go to the master disc, edit the library source there and then remake the library, after which I copy it to the work disc. Remember that when you're copying the library around, it must always reside in the 'X' directory, i.e. the library file is always called "X."-something.
If you look closely at INSLIB you'll notice that the modules are arranged in alphabetical order. This is not required - I've done this so that when you use the *ZSHOW command on the library the module names will be displayed in alphabetical order, because ZROM orders the index into the library by order of occurrence. However, you can alter this - as I have indeed done with INSLIB. Running the following command:
*zs * INSLIB
will result in the following display (or something similar):
INSLIB
INS-AB               INS-CD 
INS-EF               INS-GH 
INS-JKLM             INS-NOPQR
INS-S                INS-TUVWXYZ
airshow              arcopiano
backsyn              bass4 
bassa                bassdrum
bassguit             bassins 
bassinsa             bel 
bigmoog16            binatone
blast                bmoog 
brassbow             brush 
bubbly               chime 
church               click 
  :                    :
  :                    :
  :                    :
wave                 whab
willywarble          wokblik 
woodbash             wurlitzer
XDR                  zang4 
zizzysyn8            zumm4
You can see that all of the modules' names are listed in the same order as they are defined in the library source.
You might also notice the strange modules called, for example, INS-AB and INS-TUVWXYZ. What are they? Well, if you list one of them out with the command 
*ztype INS-AB INSLIB
you'll see: 
*zx airshow INSLIB
*zx arcopiano INSLIB
*zx backsyn INSLIB
*zx bass4 INSLIB
*zx bassa INSLIB
*zx bassdrum INSLIB
*zx bassguit INSLIB
*zx bassins INSLIB
*zx bassinsa INSLIB
*zx bel INSLIB
*zx bigmoog16 INSLIB
*zx binatone INSLIB
*zx blast INSLIB
*zx bmoog INSLIB
*zx brassbow INSLIB
*zx brush INSLIB
*zx bubbly INSLIB
Basically these "funny" modules let you load in many instruments in one go. So if you typed:
*zx INS-AB INSLIB
all instruments whose names begin with the letters A and B would be loaded into your AMPLE environment.
This is just an example of how you can make ZROM work for you. You can extend this idea quite easily by grouping instruments together into ensembles and having an ensemble library. Each module in such a library would consist of a number of *ZX calls to load in a number of different instruments - thereby making up your ensemble! The hard part is, of course, creating your ensemble library in the first place, but that's half the fun, isn't it!
The concept of the "default" or "current" library is a useful one to grasp. In all of the above ZROM commands I've written 
*Z<command> <1st parameter> <library name>
In other words I've always explicitly specified the name of the library which should be used. If instead I had written
*Z<command> <1st parameter>
then most ZROM commands would (where appropriate - see full command definitions later) actually implicitly assume a library which should be used. This library I variously call the "default" or "current" library. When your computer first runs up (after a hard break for example), type the following ZROM command: 
*ZLIB
You'll get a response of: 
UTILS
What this means is that whenever you use a ZROM command which requires a library to be specified - if you don't specify it on the command line then ZROM will use the UTILS library by default. If you use this form of the command: 
*ZLIB <library name>
then ZROM will set the default library to whatever you've specified - thus allowing you to type in nice short ZROM commands without the library tagged onto the end of each one!
If you've set up a default library by using *ZLIB you can still type ZROM commands with the library name specified - ZROM will still remember what your default library is called but, for the duration of the command, it will use the explicitly-mentioned library.
In the example of the INS-AB module above, you can see that each invocation of ZROM's *zx command has the library explicitly named. This is simply because firstly, not all of the modules need necessarily reside in the same library; and secondly, the default library which is current when you choose to run 
*ZXEC INS-AB INSLIB
might not actually be INSLIB. It is therefore wise within modules to always explicitly name libraries whenever you are "nesting" modules. This means that you can always *ZXEC any module with any library being the default one knowing that when the module has loaded the default library will remain unchanged.
Another feature which you can use to your advantage is this: ZROM lets you tell it on which disc sides libraries might be found and from then on always looks in those places whenever it is trying to find a specific library. Thsi feature is called the "drive search path" or simply "path".
You specify the path with the ZROM command *ZPATH. If you use it in this form: 
*ZPATH
ZROM will display what the current drive search path is. After a hard break, ZROM will print "*". This means that ZROM will search only the current drive for the library it needs. So, if you're on drive 0 ZROM will search the "X." directory for all libraries.
If you are lucky to have 2 double-sided drives then you have available to you drives 0, 1, 2 and 3. So if you typed the following command: 
*ZPATH 0231*
it would tell ZROM, from then on, to always search directory X on first drive 0, then drive 2, then drive 3, then drive 1 and finally the current drive for any specified library.
I normally use this command only once during any session. I have the convention whereby I store instrument libraries on the reverse side of my !BOOT disc (i.e. drive 2) and piece-related libraries on the reverse of my music discs which are always in drive 1. So my piece-related libraries are on drive 3. The path which I set up therefore in my !BOOT file is: 
*ZPATH 23*
I always include the "current drive" specifier '*' because occasionally I store libraries on my music disc - i.e. drive 1.
For descriptions of the other ZROM commands to manipulate modules etc. see the Command Definitions given later.

Compatability

ZROM was written on an Acorn BBC 'B' microcomputer fitted with a 1770 DFS disc interface, 2 double-sided 80-track disc drives, an Aries B32 sideways RAM expansion system, an Aries B12 sideways ROM expansion system, plus many other bits and pieces including Hybrid's Music 5000 (upgraded from 500), Music 4000 keyboard, and Music 2000 midi interface.
ZROM will only work on systems fitted with discs as it makes extensive use of random access techniques which cannot be provided by a cassette-based system.
ZROM uses only legal and documented OS calls and facilities and should therefore present no problems from that point of view.
ZROM requires and uses RAM workspace, but rather than claim workspace from main working RAM (and thereby even further reduce the amount of RAM available to you) it reuses RAM which would normally be used for other purposes. ZROM actually makes use of 2 areas of RAM as follows:
Firstly the area $90 to $9F: this is allocated to the Econet system.
Secondly the area $A00 to $AFF: this is normally used as an input buffer for cassette or RS423 input, and as a buffer for the Staff Editor within the Hybrid Music 5000 AMPLE environment.
Use of the first area should cause problems only on systems fitted with Econet.
As ZROM will only work on disc-based systems, the only real problem which AMPLE users will come across with respect to the usage of the second area of RAM will be with the Staff Editor. If you are using the Staff Editor and decide to then use any ZROM facility you will quickly discover that everything in the Staff Editor is lost! Don't worry too much, however: as long as you discipline yourself no disasters will result!
All you have to do is this: before using the Staff Editor use ZROM to load in all of the instruments you require; in this way you won't run the risk of having to use a ZROM facility to get another instrument while you are composing (i.e. plan your work!) Then after you start composing (or editing) with the Staff Editor, whenever you exit to do anything else ALWAYS issue a MAKE command to ensure that your composition is safe. Remember - ZROM can't affect AMPLE words! Then, even after using ZROM, you can go back to the Staff Editor to edit the AMPLE word which you created with the MAKE command.
The final problem which some AMPLE users will encounter comes through the use of a ZXEC call within the !BOOT file - one of which calls the C.PREPARE utility supplied as part of the MUSIC 5000 environment. This problem isn't so easy to understand - but suffice it to say that if you've a Model B with no shadow RAM expansion then you will notice the problem. All the rest of you - relax!
I only came across the problem because I was trying to be clever: I wanted to be able to load up my MUSIC 5000 with combinations of the M5, M4 and M2 modules. The reason behind this is that if I load up all three modules, then I can never load A.MPLINEX into the system. For "standard" loading I had a !BOOT file containing the command 
*ZX 245 BOOT
which basically caused modules M2, M4 and M5 to be loaded. My BOOT library contained the following module definitions: 
*|=5
*ZX COMMON BOOT
"M5" INSTALL
"EW" INSTALL
"MENU" INSTALL
"FX1A" INSTALL
"INS1" INSTALL
*ZE 
*|=245
*ZX COMMON BOOT
"M2" INSTALL
"M4" INSTALL
"M5" INSTALL
"EW" INSTALL
"MENU" INSTALL
"FX1A" INSTALL
"INS1" INSTALL
*ZE
*|=45
*ZX COMMON BOOT
"M4" INSTALL
"M5" INSTALL
"EW" INSTALL
"MENU" INSTALL
"FX1A" INSTALL
"INS1" INSTALL
*ZE 
*|=25
*ZX COMMON BOOT
"M2" INSTALL
"M5" INSTALL
"EW" INSTALL
"MENU" INSTALL
"FX1A" INSTALL
"INS1" INSTALL
*ZE 
*|=COMMON
*BASIC
*DR.0
*/C.PREPARE R S K C
*FX 202,48
*FX 118 *
AMPLE
% Release 3
":0.M." MPREFIX
*DRIVE 1
"INT" INSTALL
*ZINIT
*ZLIB INSLIB
*ZPATH 2
*ZPAGED
*DRIVE 1
*ZCAT
*ZE
If ever I started off my system with no shadow RAM at all, module 245 would start loading. Then it would continue by calling up module COMMON. As soon as execution got as far as calling C.PREPARE, some strange characters would appear on the screen, the bell would beep, and all I would then get would be "Syntax error"s.
The problem would appear to be linked to the fact that C.PREPARE sets PAGE to $1300 only if it is originally at $1900. Furthermore (cf. page 89 of MUSIC 5000 User Guide) this prevents you having more than one file open at a time.
Things get a little more puzzling when I explain that after loading up my BBC B using a normal !BOOT file (i.e. one that doesn't utilise ZROM calls), I can then happily load up "nested" modules with no errors at all!
The moral here is: don't make use of a ZXEC call in your !BOOT file if you're using a BBC B with no shadow RAM. Neither should you try to use "nested" modules.

Command definitions

All commands accepted by ZROM are detailed in the following pages. The description for each command is presented in a consistent way as follows:
Command: name of the command.
Usage: syntax of the command.
Parameters: a description of each parameter required by the command (if any), and an indication of its default value if the parameter is optional.
Function: brief description of the effects and purpose of the command.
Comments: miscellaneous comments regarding the command and its use.
Limitations: comments on any known limitations and bugs associated with the command.
In the "Usage:" section, the syntax of the command is presented using the following conventions:
[ ... ] indicates that the item enclosed by the brackets is optional
library represents the name of a library
module represents the name of a module within a library
path represents a drive search path, e.g. 02* means that drives 0 then 2 and then the current drive will be searched in any operation involving the discs.
Also the command name used is shown in lower case although ZROM is not case sensitive when it comes to the command name and library name. Whenever you specify the name of a module, however, be careful as ZROM is case-sensitive on module names.

Command: ZCAT ZC

Usage:
*zc
Parameters: None.
Function: To display the current (default) library, the disc drive search path, the current drive, and the libraries present on each drive in the search path.
Comments: Use of this command on a machine which has just been powered on will result in a response of the form: 
Current library: UTILS 
           Path: * 
          Drive: 0 
Drive 0: UTILS     INSLIB    MIDILIB 
This gives a convenient way to establish quickly your current set-up and the libraries available to you.
Limitations: None identified.

Command: ZEND ZE

Usage:
*ze [ comment text ]
Parameters: the comment text, if supplied, can be any text which you can use to place a comment at the end of a module; ZROM totally ignores the comment.
Function: This function is used in a module definition to mark the end of the module. For example, taking the earlier View boot-up module, this would be stored in the library as 
*|=VIEW 
*WORD 
*TV 0,1 
MODE 3 
*ze
Comments: None.
Limitations: None identified.

Command: ZINIT

Usage:
*zinit
Parameters: None.
Function: This command sets the current library to UTILS and sets the scrolling mode.
Comments: None.
Limitations: None identified.

Command: ZLIB ZL

Usage:
*zl [ library ]
Parameters: The name of a library.
Function: If the optional parameter is supplied, then the current default library will be set to that name.  If no parameter is supplied, then the name of the current default library will be displayed.
Comments: ZROM does not care whether you specify the library name in upper or lower case, or even a mixture of both!
Limitations: None identified.

Command: ZMAKE

Usage:
*zmake [ length [ library ] ]
Parameters: length represents the maximum number of characters which will be used for module names when creating the library; it defaults to the value of 10 if not supplied; length should be from 1 to 32. 
library represents the name of the file containing the library source; it defaults to the current library if omitted.
Function: This command is used to create a library file from a source library. It assumes that the source library file is called 'library' in the current directory. If a file of this name cannot be found, then an error message is displayed and the command terminated. Otherwise the source file is read and the library file is constructed; the library file will be called 'X.library' and should not be renamed. 
The module names within the library will be retained during the construction of the library up to the number of characters specified by the 'length' parameter. Module names longer than this are simply truncated.
Comments: This command does not alter the contents of the source library file. 
For the value of 'length', the default (10) and 20 seem to be the most useful from the point of view of displaying module names in 40- and 80- character width screen modes. 
Because of the nature of the library file, if you want to make changes to its content you should edit the source file and then reprocess it using this command.
Limitations: None identified.

Command: ZPAGED

Usage:
*zpaged
Parameters: None.
Function: This turns on the paged mode for ZROM displays.
Comments: After use of this command, subsequent ZROM commands will produce their displays in paged mode, i.e. the displayed output will pause after every screenful until you press the SHIFT key. This is particularly useful when using the ZS and ZT commands which, potentially, can produce a lot of output to the screen. 
This command has no effect on the display produced by use of the ZXEC command.
Limitations: None identified.

Command: ZPATH ZP

Usage:
*zp [ path ]
Parameters: path specifies the drive search path.
Function: This facility allows you to locate your library files on any disc surface in your system; it also allows you to specify to ZROM the order in which you want it to search your discs for libraries. 
If you specify the path, then the drive search path will be set to that value. 
If path is omitted, then ZROM will display the currently set-up drive search path.
Comments: Suppose that you had 2 double-sided disc drives on your computer. You would then have available to you drives 0, 1, 2 and 3 for the storage of data and programs. 
It may be that you have a BOOT disc containing your !BOOT file on what would normally be drive 0. Further you may use the second drive, with sides 1 and 3, to hold music files etc. It would be a sensible strategy, therefore, to store your libraries on your BOOT disc, but on drive 2. You might also find yourself storing piece-related libraries on drive 3, rather than clutter up your music files stored on drive 1. 
A sensible use of the ZPATH command would then be: 
*zp 23* 
This would tell ZROM that whenever you asked it to perform an operation involving a library, it would first look for that library on drive 2, then on drive 3, and finally on the current drive.
You would normally include the use of the ZPATH command in your !BOOT file and never use it again during your session with the computer.
Limitations: None identified.

Command: ZSCROLL

Usage:
*zscroll
Parameters: None.
Function: This turns on the scroll mode for ZROM displays.
Comments: This has basically the opposite effect to the ZPAGED command. After using it all subsequent displays to the screen produced by ZROM commands will not pause after every screenful. 
This command has no effect on the display produced by use of the ZXEC command.
Limitations: None identified.

Command: ZSHOW ZS

Usage:
*zs [ module [ library ] ]
Parameters: module is a character string which ZROM will use to match against the module names in the library; if omitted then ZROM will use the character string '*'. 
library is the name of the library which ZROM is to search; if omitted then the current default library will be used.
Function: This facility allows you to display on the screen which modules are present in a library.
Comments: If you want to see if a particular module is defined in a library then use the command and specify the full module name. For example, to see if the definition of the piano module exists in your instrument library you would type: 
*zs piano inslib 
This would result in the module name 'piano' being displayed on the screen - assuming that it is present in the library of course! 
If you want to see which modules whose names begin with the letter 'p' exist in your library, however, use this form of the command: 
*zs p* 
You can read this as "find the names of all modules in the library beginning with the letter 'p' and ending with zero or more characters". The use of the asterisk in this manner is called "wildcarding" and the asterisk itself is called the catch-all wildcard.
You can use the catch-all wildcard anywhere in the string which you supply to this command, so for example 
*zs *moog*4 
would show you all of the 4-channel moog-type instruments which are defined in the current default library. 
If you want to see a list of all modules within the current default library then just use the command on its own, i.e. 
*zs
Limitations: The wildcard function doesn't always work as you might expect it in complex cases. For example, ZROM would not match 'p*s*b*e' with 'possible'. This is an error in the algorithm but is of no great significance.

Command: ZTYPE ZT

Usage:
*zt [ module [ library ] ]
Parameters: module is a character string which ZROM will use to match against the module names in the library; if omitted then ZROM will use the character string '*'. 
library is the name of the library which ZROM is to search; if omitted then the current default library will be used.
Function: This facility allows you to display on the screen the contents of a particular module in a library.
Comments: If you want to see how a particular module is defined in a library then use this command and specify the full module name. For example, to see the definition of the piano module in your instrument library you would type: 
*zt piano inslib 
This would result in the contents of the module named 'piano' being displayed on the screen - assuming that it is present in the library of course! 
You can use the wildcard function described under the ZSHOW command to save on typing. For example, this command 
*zt p*o inslib 
would have the same effect as the one above. You can read this as "display the definition of the module whose name starts with a 'p', ends in an 'o' and has zero or more characters in between".
Because the ZHOW command can type out only one module definition at a time, using this form of the command: 
*zt p* 
would result in the first module whose name begins with the letter 'p' being displayed. 
Lastly, typing 
*zt 
would result in the very first module defined in the current default library being displayed!
Limitations: The wildcard function doesn't always work as you might expect it in complex cases. For example, ZROM would not match 'p*s*b*e' with 'possible'. This is an error in the algorithm but is of no great significance.

Command: ZWAIT

Usage:
*zwait [ comment text ]
Parameters: None.
Function: To cause the execution of the current module to be halted until a key is pressed.
Comments: Use of this command will result in the following message being displayed: 
Press any key to continue... 
To then resume execution of the module, you must press and release any key on the keyboard.
Limitations: Any key except the BREAK key can be pressed to resume execution of the module.

Command: ZXEC ZX

Usage:
*zx module [ library ]
Parameters: module is a character string which ZROM will use to match against the module names in the library. 
library is the name of the library which ZROM is to search; if omitted then the current default library will be used.
Function: This command results in the specified module being executed using the EXEC facility of the BBC microcomputer.
Comments: The module name can be specified using the widcard facility described under ZSHOW and ZTYPE. 
Any module can include uses of the ZXEC command itself to execute other modules. These calls to ZXEC are "nested" up to a maximum depth of 5. This means that a module can ZXEC another module which ZXECs another module etc. which is best illustrated as follows: 
*zx module_1 (typed at the keyboard)
 :  :  :  : 
    *zx module_2
       :  :  :  :
       *zx module_3
          :  :  :  : 
          *zx module_4 
             :  :  :  : 
             *zx module_5 
                :  :  :  :
                :  :  :  : 
             *zend (module_5)
             :  :  :  : 
          *zend (module_4) 
          :  :  :  :
       *zend (module_3)
       :  :  :  :
    *zend (module_2)
 :  :  :  :
*zend (module_1)
Limitations: When a module is executed from a !BOOT file, at the end of execution of the module control does NOT pass back to the !BOOT file; instead execution of the !BOOT file terminates.

Published in AMPLINEX U11, May 1989