home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 2
/
crawlyvol2.bin
/
sound
/
psslib2
/
psslib.doc
< prev
next >
Wrap
Text File
|
1994-05-08
|
29KB
|
586 lines
YAMAHA PATCH EDITOR/LIBRARIAN FOR THE PSS SERIES
VERSION 2.0
copyright 1991, 1993, 1994 by Mike Silverstein
Well, here goes! About 5 years ago I purchased a Yamaha PSS-480
keyboard synthesizer to accompany my new Atari 1040 ST. I was amazed
at the MIDI capability of this synthesizer which, at the time, cost me
a mere 150 bucks. Six months later, I purchased a modem, joined
GEnie, and searched for anything that would support this synth in both
the Atari ST and MIDI Roundtables. I found an excellent PD program
which would allow you to send a bulk dump from the synth to the
program and it would successfully capture all the System Exclusive
Data (SYSEX) to disk which includes all the voice banks, memory/chord
banks, and custom drummer (somewhere around 13K of MIDI data).
It was at this point where I became very intrigued in SYSEX stuff and
I began searching for other SYSEX programs, but I could only find
demos of 'Universal' programs like Dr. T's XOR, Hybrid Arts GenEdit,
etc. I even purchased PixelPro's Superlibrarian which claimed to let
you write your own library routines through a 'simple' interface. If
you ask me, this was 200 dollars worth of nothing but pain and
turmoil. You see, these commercial universal SYSEX programs are
geared towards more expensive synths. And even so, what you pay for,
you only use about 10% because your setup probably uses no more than a
couple of synths and a drum machine. None of these programs support
this 'KMART' type of synthesizer (i.e. profiles) and you would have
to go through a lot of nonsense to attempt to write your own profile.
Well, I eventually joined an IEMUG board and found a European import
which supported the Yamaha PSS series called PSSED. It worked in ST
LOW rez only and had a real nice graphic interface. Unfortunately,
the 'Quit' function and the librarian feature didn't seem to work.
The only possible thing to do was receive the five patch banks and
save them all as a set. Well, now I was REALLY intrigued. I'm not
sure if these features didn't work because it's from Europe and the
ST's there are different or what. No way was I able to contact the
author so I finally realized that it was time to say, "The heck with
it!" I'll write my own." Thus, PSSLIB was born (but much inspired by
PSSED).
I was amazed to learn that (only thru software) there's 3 times more
parameters you can edit when building patches. And having the ST
accompanying you for MIDI work is practically a must have! After
reading this doc, I hope you enjoy this program as much as I had
writing it and using it!
The original version of PSSLIB goes back to late 1990/early 1991 when
the Yamaha PortaSounds were more popular. But even now (1994), I
still enjoy the original AM/FM tone generaration/synthesis sounds vs.
what the newer synths offer via Pulse Code modulation. Although these
synths are outdated, there are still many in use today and I still
believe that they are good MIDI synthesizers, especially for beginners
to the MIDI arena who don't want a lot of fancy controls/gizmos.
=========================================================================
NEW IN VERSION 1.1 (DEC 1991)
Since 2 years have gone by since the original release, I haven't
really done anything exciting since I've been using my ST on other
ventures. However, I have added Active Sensing capability and you'll
notice that if your MIDI cables are not hooked up right or your PSS is
turned off, you will not be able to send or receive MIDI data (makes
sense, doesn't it??). I haven't come across one MIDI program which
uses this feature and since it is in the MIDI spec, why not be the
first person to implement it (GEMwise, that is!).
I have also deleted the necessity of the OLDMIDI/NEWMIDI external
files which expanded the system MIDI buffer; this is now done in the
GFA source code.
I have also "channelized" the 5 banks whenever a program change is
performed as opposed to Version 1.0 which just sent all patches on
channel 1. Now, Bank 4 will be transmitted on Channel 4. This works
for both sending and receiving and adds some MIDI mechanization when
sequencing.
Finally, I have made the LZH archive capability more versatile when
other Accessories or programs are running simultaneously. Thanx to
help from GEnie members in the GFA Basic topic, I have learned how to
be more efficient with memory mangement and have gotten rid of the
RESERVE command when performing an EXEC call to the LHA.TTP program.
I have used the $m command and reserved 50K bytes which handles the
PSSLIB and LHA applications with no problems. I have also tested this
with a Falcon030 and it runs fine (and no, I don't own one yet -
uggh!)
The most important thing is that I have decided to let this program
package be freeware although you are still encouraged to send the
donation. I have also included the Source Code and all programmers
can feel free to see the internals of the patch editor/librarian
features. It is heavily commented and very straightforward
programming. I have also included the source to the PSSKEY and you
can see how the code word was implemented. Basically, if you modify
the source, you need to use a hex editor (i.e. LookIt from Codehead or
Edhak from Clear Thinking) to find the keyword and then use the 2
decimal offsets and replace them in the PSSKEY source (this is on the
actual executable PSSLIB.PRG - make sure it is unsquished or unpacked
when you perform the search). Oh, BTW, the key word is 'midilation'.
========================================================================
NEW IN VERSION 1.5 (FEB 1993)
It was discovered that the 50K used in the $m compiler command was
slightly lower than I originally tested. After receiving SYSEX data,
certain help dialog boxes would not operate and certain file
functions (i.e. save patch) would not work. A GFA Error 8 would occur
which indicates memory is full. I've increased this size to 100K
which means other programs and DA's will have 50K less memory than
before. The current version now takes about 220K of memory which is
still better than the original which sucked up everything it could
grab.
I have also compiled the PRG with the Interrupts Option flag (I+) set.
This has eliminated some checksum errors involved when receiving MIDI
and assists with the system overhead when many TSR applications are
loaded in the ST AUTO folder. I used to have these checksum errors
with both Codekeys and Hotwire from Codehead Technologies and this
option appears to eliminate the checksum errors (we're talking maybe 1
bit of 1 byte of data would be incorrect.)
==========================================================================
USING CODEHEAD'S MIDI SPY WITH PSSLIB
Note for all ST MIDI people: I have recently purchased the MIDI Spy
/ MIDIMAX package from the Codehead's and, I must say, is an excellent
addition to your software collection. MIDI Spy's SYSEX capabilities
compliment PSSLIB giving you the capability to send all patches to the
PSS in MIDI Spy's MIDIMAX Mode. I don't have to worry about writing a
separate Desk Accessory since MIDI Spy does this already! For those
interested, I wrote a very commendable review in the December 1993
issue of ST Informer (hey, I finally made the big time!) so feel free
to read about it there.
With MIDI Spy running in the background, you will be able to load
patches and send them to a bank on the synthesizer and MIDI Spy will
capture this (as a Song) in it's internal buffer. It is a requirement
to have the MIDIMAX button enabled in MIDI Spy's configuration,
otherwise, PSSLIB will not be able to send any data since MIDI Spy
disregards Active Sensing, thus, PSSLIB's MIDI functions will be
disabled. To conclude, the MIDIMAX button in MIDI Spy may be
considered as 'Communicate with PSSLIB' (or other MIDI programs as
well). If you don't want to capture ala MIDI Spy but it just happens
to be there, you can always disable the MIDI IN button in MIDI Spy
which will allow the active sensing to turn on.
Once SYSEX data is captured to MIDI Spy, you can do all sorts of
things. Disable the MIDIMAX button and start recording stuff (with
'Thru' on and the Yamaha PSS in MIDI mode [c.99 - sound source].
Assign the voice/channel via the bank number of what you sent via
PSSLIB. (i.e. bank 3 would be voice 102, channel 3). After you've
recorded your song and save it, the SYSEX transmission to send the
patch is embedded in the song file! This is a convenient way to save
your SYSEX patches as .MID Standard MIDI files to be used with other
ST sequencers (i.e. Omega 2 from Dr. T, Cubase from Steinberg, etc.).
It is best to place all your embedded patches at the beginning (as
opposed to within a song). For some bizarre reason, although the
SYSEX transmission is usually successful, there is a 3-4 second delay
requirement between each SYSEX message so you'll need to embed this
with your sequencer. The Yamaha's internal processor must need this
time to properly set the tone generator's correctly.
I have also noticed that PSSLIB MIDI receive functions do not work
well with MIDI Spy running in the background due to MIDI Spy's
overhead in the system. You usually will get checksum error's so its
best to not use MIDI Spy with PSSLIB if you plan on receiving patches.
The same thing applies to other programs like MultiTOS, Geneva. Bear
in mind that I use a standard 8 Mhz 1040 STfm 4 Meg system. Perhaps the
receive functions work with an accelerated ST/STe/TT or Falcon030.
Both MIDI Spy/MIDIMAX may be purchased from Codehead Technologies for
$99.95 or MIDI Spy (alone) for $79.95. Believe me, they're well
worth the price. Here's how to order:
CodeHead Technologies
P.O. Box 74090
Los Angeles, CA 90004
Voice: (213) 386-5735
Fax: (213) 386-5789
BBS: (213) 461-2095
==========================================================================
NEW IN VERSION 2.0 (APRIL 1994)
SYSEX FILES
I've added a lot of new features to PSSLIB. The 1st feature is the
ability to IMPORT/EXPORT a SYSEX file. I've decided to include this
because I've noticed that there are other programs available which
deal with SYSEX stuff and it wasn't too painful to implement this. I
still promote the internal LZH archive method since patch files are
so small and don't need to be considered 1K in size to the system,
wasting "valuable" disk space. However, storage is getting cheap
nowadays and I've reasoned that there are practical uses in keeping a
patch as a separate file.
I know of 2 programs which use embedded SYSEX files: The newest
version of Dave Henry's shareware MIDI Music Maker (MMM) and ST MIDIEX
by Harry Wootan of Polk Products (both GFA programs I might add). I
have added these functions to PSSLIB's online help to learn more about
them. I have also included several SYSEX (.SYX) in a separate PATCHES
Directory. The number in the file corresponds to the synth bank
embedded within the file.
Note that when you save a patch, one gets saved (with comments) to the
LZH archive and you are given a choice as to export a new .SYX file
with the same name you provided for the patch.
You must also realize that PSSLIB's buffer only represents current
data from the LZH archive only and that import/export bypasses this.
I've made sure that if you use the 'Load Patch' selection and enter a
.SYX file in the file selector, an error message alerts you of your
mistake. At this point if you View the Buffer as Hex data, you will
see that the box looks funny and some bytes have 3 characters which is
a definite suggestion that the data is bad. Doing a 'Send Bank'
selection will always cause a transmission error (Hey, this is a good
way to check that your 'ERR' display function is working on your PSS).
It is also important to explain the difference between the MIDI data
in PSSLIB's buffer vs. the data in a .SYX patch file. The buffer
contains 64 bytes which does not include any SYSEX header/trailer
information. The .SYX file contains 72 bytes which includes the Start
of Sysex (F0 hex), followed by the MIDI Instument ID for Yamaha (43
hex), followed by the Instrument Class (76 hex), followed by the
SYSEX mode (00 hex for patches), followed by the bank number. The
trailer information includes an embedded checksum and the End of
SYSEX message (F7 hex). At the time you load an existing patch from
the archive, you are given a choice of 5 banks to send the data.
Therefore, to save (export) to a SYSEX file you must first send it to
the desired bank and then receive from that same bank. Here's an
example:
Let's say you want to have the WIRY2 patch (bank 2/channel 2)to be
used on bank 4/ channel 4 (WIRY4). You would:
a) Load Patch and enter WIRY2 in File Selector
b) Send to Bank 4
c) Receive from Bank 4
d) Save Patch as WIRY4 and export it.
If you disregard steps b and c (that is, don't send and receive), the
patch you save/export will include the wrong bank and no embedded
checksum, therefore, you will definitely get a MIDI Transmission
error when using this .SYX file, elsewhere.
CUSTOM DRUMMER
PSSLIB now supports the programmable CUSTOM DRUMMER which is part of
the Yamaha PortaSound's internal drum machine. To review how to use
it: make sure the PSS is in MIDI mode [c.00 - keyboard assign mode],
pick 1 of the 100 internal Styles and press the 'Program/End' button
underneath 'Custom Drummer' on the PSS. You can now edit the style by
Clearing/Accenting/Rolling with the MIDI C1/D1/E1 keys (at the very
left) and selecting the drum note with the MIDI keys (E4 - C5) at the
very right of the keyboard. (Note - this may not be the same for the
PSS-680 but I don't own that so you'll have to consult your manual).
After editing, you can always play it back via the green button 'Play
On/Off'. To save it to disk, use the Export Drummer selection and it
will be saved as a .SYX file. Since the Custom Drummer SYSEX Message
is the very last message defined for the PSS, the internal MIDI
receive buffer is temporarily adjusted to 13.8 Kbytes, therefore,
taking a lot more time to receive the data. They should have put it
after the Patch SYSEX messages at the beginning.
You can load the Drummer SYSEX data back via Import .SYX just like
patches (and/or use it with other MIDI compatible programs). I have
included several modified Styles in a separate DRUMMER directory. As
long as you're in mode [c.00] and the Custom Drummer 'Play On/Off'
button is enabled, you can cycle thru the various drum creations you
saved since PSSLIB automatically sends MIDI Start/Stop commands when
interfacing to the drum machine.
Once again, a reminder: don't use 'Load Patch' for loading SYSEX drum
files (690 bytes). Sending this data will cause transmission errors.
AUDITION MODE
As promised, I have implemented an audition mode feature when either
sending data to a bank or importing a .SYX file. It will always cause
three MIDI notes to play, thus, allowing you to hear your patch
creations to get it to sound the way you like before saving them to
disk. Initially selecting this mode via the mouse/menu will cause a
new dialog to allow you to enter 4 possible DELAY intervals between
notes. You would use short delays for patches whose envelope
parameters contain high attack rates, decay rates, and sustain rates.
You would use longer delays for patches with lower envelope values. I
have chosen MIDI notes C1, C3 and C5 so that 3 distinct octaves may
be heard, thus, aiding you in defining LKS/RKS (Level/Rate Key
Scaling) patch parameters. To disable Audition Mode, you may uncheck
it again. Once again, I have added this to the on-line help.
Because the dialog box may be awkward to some users, I have provided
a keyboard equivalent approach to the audition mode as well. Note
that a Custom Drummer file is always "auditioned" regardless of the
mode as long as your PSS is in MIDI mode [c.00].
OTHER STUFF
Other changes to PSSLIB:
- increased the memory allocation to allow for all the new features.
PSSLIB now consumes about 280K of memory.
- Active sensing now uses the AES libraries to pause for the required
300 milliseconds. This speeds up all the commands, especially,
using the mouse/menus.
- provided key equivalents to all new features. Selecting 'K' will
display a summary of all new key commands.
- adjusted hi rez help screens for monochrome users. The text should
be more readable now.
- PSSLIB will no longer exit if you type in an incorrect patch file
when loading a patch. You will get a 'File Doesn't Exist' message
and the File Selector will allow you to re-enter the correct name.
Use the Verbose command to find the right name. This works for
importing SYSEX files, as well.
==========================================================================
ARCHIVE CONTENTS
You should have the following files in the same directory:
PSSLIB.PRG - the PSS Patch Editor/Librarian program
PSSLIB.LST - source code in GFA BASIC
PATCHES.LZH - system archive file used to store and load all work
PSSKEY.PRG - key program to unlock the 'Save' feature
PSSKEY.LST - source code in GFA BASIC
PSSLIB.DOC - this file
LHA.TTP
WHATS.NEW
LHA.MAN
README.1ST - LZH utility + support files
A sub-directory (PATCHES) containing several .SYX patch files.
A sub-directory (DRUMMER) containing several .SYX drummer files.
==========================================================================
FEATURES
This program was written in GFA BASIC 3.07. The program is completely
GEM driven and includes online help for basic definitions and patch
editing concepts.
Runs in both medium and high resolution on any STf/STe/Falcon030 (1Meg
minimum). Not sure about TT030.
There are 2 view modes - displaying the buffer in its 'English form'
where everything you edit is summed up in 1 screen display. The other
is viewing the buffer in hexadecimal form which is what is sent thru
the MIDI ports.
MIDI Receive Capability - you can receive any sound stored within the
5 banks. This can be used for obtaining any of the 100 built-in
voices and modifying it with your own additions.
Keyboard Equivalents for every GEM menu drop-down with the exception
of Editing all patch parameters. The mouse is used extensively here.
The left button will increase and the right button will decrease a
patch parameter. Both Buttons will always bring you back to the GEM
Menus.
LZH Archive storage and retrieval support. This saves a lot of disk
storage space since each patch need only be 64 bytes. Since TOS (like
MSDOS) makes a file a minimum of 1024 bytes, this was a logical
approach. You can also add comments to your patch when saving which
will also be saved within the archive.
==========================================================================
OTHER CONSIDERATIONS
I'm not really gonna go into a 'how to run this program' deal. That's
what the online help is for. I am going to point out that if you just
have a floppy drive only, the program will run a lot slower so may I
suggest a 300K - 400K RAM disk??
I chose GFA BASIC because it was simple and straight forward. The
only thing I had a hard time with was dealing with the MIDI overrun
error when receiving a memory bulk dump from the synth. Yamaha was
nice enough to put the 5 bank patch stuff at the beginning so I made
the buffer 512 bytes which is enough and speeds up the MIDI interrupt
service routine.
I hope to have provided as much error checking as possible. If
support files are missing, there should be enough alert boxes that
handles each situation. In the case of receiving MIDI data, once the
program is waiting for MIDI data, that's it! If you don't do the bulk
dump, you'll have to reboot. However, you will not get to this point
unless your MIDI connections are valid and your PSS is powered on.
The purpose of turning off and on some Menu Items was more
experimentation on my part. Logically, when you start the program,
you wouldn't want to save anything, just like you wouldn't want to
load anything after you've just edited because you haven't heard it
yet. However, you can always choose 'View' if you always want to be
able to select something. I hope this is not an annoyance but more of
an aid.
All of the key equivalents override the toggling of menu items, that
is, you can do anything with keys (some have alert boxes to start you
off). I've done this because I'm a firm believer that it is an
absolute necessity to have key equivalents if you're forced to use the
keyboard within a program. I originally wanted the program to be 100
% mouse driven. However, since I decided to go with archiving files,
this does force you to use the keyboard. This was a tradeoff but I
felt it more necessary to go with archives to save as much disk space
possible (I'm kind of a miser in that respect). I may experiment and
see if I can get the patch file into a box graphic to allow 100 %
mouse capability. But then again....................
The MIDI specs in the Yamaha PSS manual can be pretty confusing.
However, it didn't take long to figure out how to convert the decimal
parameters to binary nibbles (that's 4 bits or half a byte) and vice
versa. GFA's powerful bit manipulation instructions were a big aid in
this effort. In fact, I can't recall another BASIC language on any
platform that allows bit testing, bit shifting, etc. It's the next
best thing to C but a whole lot easier to program!
Since there is a 50 character limitation when providing comments to
your saved patch, here is a short glossary of SYSEX acronyms which I
use which you can use as a reference:
atk - attack rate
dcr - decay rate
dcl - decay level
mod - modulator
car - carrier
freq - frequency
LKS - Level Key Scaling
RKS - Rate Key Scaling
rr - release rate
ss - sustain rate
Feel free to use your own nomenclature to your own preferences when
describing your patch sounds.
There has been some confusion concerning the 2 distinct MIDI modes on
the Yamaha Portasound. You would use Mode [c.00 - Keyboard Assign
Mode] to play the synth by itself, rhythm machine and all. You select
a voice or bank and it plays - simple. Mode [c.99 - Sound Source] is
used only with a Program supporting MIDI Echo or MIDI Thru capability,
turning the PSS into a 12 note polyphonic multitimbral keyboard so you
can hear many voices/banks simultaneously (so long as there are no
more than 12 on together). For all intent purposes, you should use
Mode [c.00] with PSSLIB since we're assigning and playing back one
sound at a time. It is also the only way to deal with the Custom
Drummer and the audition feature will not adjust to the right sound
unless mode [c.00] is used.
Note that with the Audition mode turned on, if you don't happen to be
looking at the PSS when sending MIDI data and there is a transmission
error, the sound you'll hear we'll be one of the first five default
voices (00 - 04) depending on the bank that was sent.
==========================================================================
QUIRKS AND BUGS
I only own a color system but I handled monochrome via an emulator.
I'm not sure if some displays may come up messy but I did the best I
could. I'm pretty convinced the program is totally runnable in high
rez.
Codekeys from Codehead Software, when installed, interferes with MIDI
reception in that there are usually checksum errors encountered when
attempting to receive a bank from the Yamaha instrument. I was told
they use the same Keyboard/MIDI interrupt coming from the ACIA chip
which was an Atari design flaw. Hey! It's nice to see those error
checking routines doing their thing! And if you look closely at what
was received, 1 or 2 MIDI parameters hold the wrong value. This same
concept applies to Geneva/MultiTOS or if there is a lot of system
overhead due to Desk Accessories. It is for this reason that I
personally prefer Hotwire from the Codeheads as my shell/desktop
since running stuff from Hotwire seems to eliminate these overhead
problems.
When you choose 'Build Patch', bear in mind that certain parameters
are stuck with some of the Envelope parameters (i.e. Course detune
goes with am enable, decay 1 rate). Don't know why Yamaha implemented
it like that - there's plenty of 'don't cares' which could have
avoided this. At any rate, the idea of 'building' is mainly to learn
how a patch sound is formed.
When using both mouse buttons to exit Help or Editing Parameters, you
don't necessarily have to press them both simulataneously, but rather
press 1, then the other easily. Occasionally, the GEM pull-down items
will get 'stuck'. In this situation, just press either button and
they will reappear.
==========================================================================
FINAL NOTES
I hope you use this program to your enjoyment. Your Yamaha synth is
nothing fancy and that is why this program is not fancy, but it gets
the job done. I have included a handful of patches in the archive to
get you started with. The only thing left is your creativity. You
will find through experimentation and trial and error that this synth
is capable of producing some pretty nifty sounds. Some of the more
'eerie' ones sound pretty neat through your stereo system. My setup
includes a 'Y' stereo adapter cable attached to the Headphone input
of the PSS with an RCA stereo splitter on the other end. These are
connected to the Left/Right Plugs on my stereo receiver. Although
only the drums are "stereoized", I can still record to my tape deck to
hear my MIDI creations in the car/on the road!
A special thanks goes to Roger Burrows for his LHA archiving utility.
Please support him by registering LHA130.
Another special thanks goes to Steve Johns of Johnson Software for his
interesting MIDI Programming Tips in START Magazine.
Still another round of applause goes to several GEnie members in the
GFA topic who have countlessly explained to me the internals of ST
programming and helping me fix bugs.
And finally, to my darling wife Carrie and 4 yr. old daughter
Brittany, who have put up with me these past months while undergoing
this 'MIDI obsession.'
Remember to run the PSSKEY program and enter 'midilation' to change
the patch editor from DEMO to Registered mode. This will allow you to
save your patches with a description, as well as export a .SYX file if
you desire. I have included the source code for your enjoyment.
At this point, I can't think of anything new to add to PSSLIB. Sure,
I could support the Song Memory SYSEX features which include 5 Melody
Banks and 5 Chord Banks, however, since this represents about 92 % of
the entire SYSEX data, there are other programs around which will do
the job. STMIDIEX (shareware) has the ability to save any SYSEX
message as a separate file. YAMA_PSS is a quick utility which saves
an entire bulk dump of all supported PSS SYSEX messages into 1 file.
For now, unless there are severe problems with this new version
(2.0), you can probably expect that this is it!
This program is freeware and copyrighted! Please feel free to
distribute it so long as all support documentation is included (that
means all of the LHA documentation as well).
Don't forget to download the freeware program:
YAMV_ED Voice and Style Selector - This program lets you select any
voice or rhythm via color menu displays. It also remembers what
you've selected and auto-switches each voice and rhythm in 'pseudo'
real time when playing the Yamaha synthesizer. Search for PSS,PSS480
on GEnie to get the file (it's in the ST Library as well as the MIDI
library.)
For MIDI Spy Owners, I have written a quick & dirty Jukebox creator
utility (MAKEJUKE.ZIP), which uses the Tomshell Command Line
Interpreter to allow for days and days (or another word for unlimited
amounts) of constant music!.
Please address all comments and concerns to M.SILVERSTE3 here on GEnie
EMAIL. You may freely distribute this program on any BBS, however,
everything in the archive should be included. I encourage everybody
to create their own sounds and upload them as well for others to share
with.
If anyone's interested, I have a massive collection of Standard MIDI
files (type 0, 1 track) which consist of some great sounding tunes
ranging from the Beatles to Pink Floyd, Jazz, POP, Hard Rock, Steely
Dan, Oldies, etc, etc. They are all configured for Yamaha
Portasounds and sound really good. I do this as a hobby, that is,
download them here from GEnie and rechannel/revoice all of the tracks,
as well as play with the velocities and pitch bends. Leave EMAIL if
you're interested in getting a floppy full of tunes!
Enjoy!
Mike Silverstein 05/07/94