
1.  Merge some of the common code in decode_note()
2.  Use a jump table for the two switch() statements in decode_note()
3.  Make the frequency and volume table lookups use self-modify code
    instead of checking which table to use at runtime
4.  The time-length calculation can be much faster, it only needs to find
        the length of one channel (not all three, right now re-using code)
5.  I also should run some more PT3 files through to verify correctness,
    I've only validated 3 so far.
6.  Merge mockingboard output to register calc, instead of setting
	all 13 registers then walking through and outputting them
7.  Clear out the channel data with a memset() instead of explicitly
	setting values?
8.  Self modify the 1MHz vs 1.7MHz change
9.  Align the volume/frequency tables.  Save a few cycles on the reads?


some further out things

1.  I think the z80 assembly version generates the lookup tables at startup,
    potentially saving a lot of space
2.  Each channel uses roughly 40 bytes of state, so 120 bytes total.
    Putting that in the zero page will save a lot of space in the executable
    (though wouldn't really help speed that much if I keep using index-X
    addressing mode).  I don't think game/demo authors would be excited
    about giving up half the zero page though.


Player:
1.  Loop support
2.  Keys to increase/decrease pattern
3.  Handle LZ4 compressed files?
4.  Have RTS code exit with error if file not found
5.  Center the title/author? 

Bugs:
Sometimes when using arrows, the next song will have channels out
of synch?
