SID+Midi Music Player docs (1)
------------------------------
Intro:
------
This midi driver doesn't use a new midi tracker or require a particular tracker to work.  

It's converting the data being sent to the sid registers into midi data in realtime, with up 
to 9 midi channels addressable at once along with the SID chip. 

It's source based, but only requires editing some tables to produce music.

Files:
------
There are a couple of sub-folders containing the same source files but different demo songs.  These are:

[src_blanksetup]      - Blank midi config and a simple test tune written in Sid Wizard 3SID.  
                        This is a good starting point for writing your own song.

[src_instinctsong]    - The tune from the Instinct demo with the midi config used.  
                        This uses two songs: a mono GoatTracker 1 song and a stereo GoatTracker 2 song.

[src_threeplayersong] - This is a crazy setup that uses 3 GoatTracker 1 songs to get the 9 channels.
                        I don't recommend working like this, though it's not as bad as FMX's demo song which 
                        was written with 4(!) GoatTracker songs.

The assembler source files are:

midiwrapper.asm       - Frontend player with a BASIC header for your song.
mididriver_static.asm - The driver itself, compiles to $c000-$cfff and can be used standalone outside the player
                        if anyone finds a use for it.  (Instructions are in the comments)
mididata.asm          - Info specific to the song such as instrument patches, player addresses etc.
readme.prg            - The frontend splash screen in c64 screen format.

All folders also contain the source music files for loading into their editors.


Compiling:
----------
Source is in the DASM assembler format.  DASM is available for many systems.

To compile the standalone player you just need to type this from the command line:

DASM midiwrapper.asm

Because the driver is at a fixed position in memory the output file will be quite 
large, if you want to compress it set the CRUNCHER variable in midiwrapper.asm to 
1 before compiling.  The compiled file has a load address of $0801


SID chip & Midi Rules:
----------------------
Each frame, the driver reads 9 SID channels to figure out what to play next.  By 
default these channels are mapped to sid chips at $d400,$d420 and $d440 in the 
same way as a 3SID song is setup.

The first 3 channels always get sent to the SID chip and Midi device, the remaining 6
only get sent to midi.  You can also choose if the first three channels have Midi 
disabled on certain patches, and by changing the ADSR settings in your songs you can 
mute the SID side and leave the midi playing.

Having 9 SID channels doesn't mean you only have access to the first 9 midi channels
though, as each patch you make can send to any of the 16 available midi channels.

Each SID channel can control up to 8 different midi patches, by changing the waveform
that is playing on the channel between $10 (triangle) and $80. (noise) 

A midi note is played when a gate on effect happens on the SID channel, it then waits
until a gate off effect happens on the same channel before sending the note off.  So
you *must* send a gate off before playing a new note for it to be audible.  You can't
do tied notes on the midi side, each note must be off before a new note will be
acknowledged, though this gives some interesting options for patches that use both the
sid & midi together.

The midi-side supports Pitch, Velocity, Program Change, Modulation and Transpose only.
No pitch wheel support, as this would be difficult to calculate on the fly.  There is 
more info on these features in the Instruments section below.
