Change History
--------------
03/12/25
                   
Midi Support Releases
---------------------
Releases have a version number and date. The number doesn't appear
in any of the component programs as they have their own versions. This
file hopes to tie it all together.

A '*' by a module or App entry indicates that it has changed since
the previous release. Two stars '**' indicate it is new.

  filename   module report
  ---------  -------------------------
0.01 230406:
  --- release 0.01 06/04/23 --- 
  MIDIS      MIDISupport 0.01 14/03/23
  MIDI4      MIDI        0.01 14/03/23
  USBMIDI    USBMidi     0.01 04/04/23
  MPLAY      MIDIPlay    0.18 31/03/23
  MIDISynth  MIDISynth   0.21 14/03/23
  !MidiMan   (app)       0.02 06/04/23
  !MidiMon   (app)       0.02 02/04/23

0.02 230619:
  --- release 0.02 19/06/23 ---
  MTIMER     MTimer      0.01 07/06/23 **
  MIDIS      MIDISupport 0.03 07/06/23 *
  MIDI4      MIDI        0.02 13/04/23 *
  USBMIDI    USBMidi     0.04 05/05/23 *
  MPLAY      MIDIPlay    0.20 26/05/23 *
  MIDISynth  MIDISynth   0.22 28/05/23 *
  !MidiMan   (app)       0.03 30/05/23 *
  !MidiMon   (app)       0.02 02/04/23

0.03 230901:
  --- release 0.03 01/09/23 --- 
  MTIMER     MTimer      0.02 27/06/23 *
  MIDIS      MIDISupport 0.04 09/07/23 *
  MIDI4      MIDI        0.04 30/08/23 *
  USBMIDI    USBMidi     0.05 09/07/23 *
  SerialMidi SerialMIDI  0.01 01/07/23 **
  MPLAY      MIDIPlay    0.21 31/08/23 *
  MIDISynth  MIDISynth   0.23 31/08/23 *
  !MidiMan   (app)       0.04 01/07/23 *
  !MidiSMon  (app)       0.03 30/08/23 *
  
0.04 230906:
  --- release 0.04 06/09/23 --- 
  MTIMER     MTimer      0.02 27/06/23
  MIDIS      MIDISupport 0.04 09/07/23
  MIDI4      MIDI        0.04 30/08/23
  USBMIDI    USBMidi     0.05 09/07/23
  SerialMidi SerialMIDI  0.01 01/07/23
  MPLAY      MIDIPlay    0.21 31/08/23
  MIDISynth  MIDISynth   0.23 31/08/23
  !MidiMan   (app)       0.05 06/09/23 *
  !MidiSMon  (app)       0.03 30/08/23
  
0.05 231007:
  --- release 0.05 07/10/23 ---
  MTIMER     MTimer      0.02 27/06/23
  MIDIS      MIDISupport 0.04 09/07/23
  MIDI4      MIDI        0.05 04/10/23 *
  USBMIDI    USBMidi     0.06 08/09/23 *
  SerialMidi SerialMIDI  0.01 01/07/23
  MPLAY      MIDIPlay    0.21 31/08/23
  MIDISynth  MIDISynth   0.23 31/08/23
  !MidiMan   (app)       0.05 06/09/23 
  !MidiSMon  (app)       0.03 30/08/23
  
0.06 250303:
  --- release 0.06 03/03/25 ---
  MTIMER     MTimer      0.03 03/03/25 *
  MIDIS      MIDISupport 0.05 18/09/24 *
  MIDI4      MIDI        0.06 30/10/23 *
  USBMIDI    USBMidi     0.06 08/09/23
  SerialMidi SerialMIDI  0.02 04/01/24 *
  MPLAY      MIDIPlay    3.22 19/10/24 *
  MIDISynth  MIDISynth   0.25 20/11/24 *
  !MidiMan   (app)       0.06 08/03/24 *
  !MidiKey   (app)       0.06 31/10/24 *  (was !MidiSMon)
  !MidiSyn   (app)       0.03 20/11/24 **
  !Lyrics    (app)       0.01 17/02/24 **
  
0.07 250309:
  --- release 0.07 09/03/25 ---
  MTIMER     MTimer      0.04 05/03/25 *
  MIDIS      MIDISupport 0.05 18/09/24
  MIDI4      MIDI        0.06 30/10/23
  USBMIDI    USBMidi     0.06 08/09/23
  SerialMidi SerialMIDI  0.02 04/01/24
  MPLAY      MIDIPlay    3.23 08/03/25 *
  MIDISynth  MIDISynth   0.25 20/11/24
  !MidiMan   (app)       0.06 08/03/24
  !MidiKey   (app)       0.06 31/10/24
  !MidiSyn   (app)       0.03 20/11/24
  !Lyrics    (app)       0.01 17/02/24
  
0.08 251203:
  --- release 0.08 03/12/25 ---
  MTIMER     MTimer      0.04 05/03/25
  MIDIS      MIDISupport 0.06 02/11/25 *
  MIDI4      MIDI        0.06 30/10/23
  USBMIDI    USBMidi     0.06 08/09/23
  SerialMidi SerialMIDI  0.02 04/01/24
  MPLAY      MIDIPlay    3.23 08/03/25
  MIDISynth  MIDISynth   0.26 25/11/25 *
  !MidiMan   (app)       0.08 02/11/25 *
  !MidiKey   (app)       0.06 31/10/24
  !MidiSyn   (app)       0.04 07/10/25 *
  !Lyrics    (app)       0.01 17/02/24
  !MidiCon   (app)       0.02 25/11/25 **
  !Activity  (app)       0.01 29/10/25 **
  
--------------------------------------------------------------------------
  MTIMER - Midi Timer
  ------
  
  0.01 07/06/23: Initial coding. Timer1 used to provide a 1ms timer for use by
                 any of the support driver modules.

  --- release 0.02 19/06/23 ---
  
  0.02 27/06/23:  GPIO timing debug disabled.
  
  --- release 0.03 01/09/23 --- 
  --- release 0.04 06/09/23 --- 
  --- release 0.05 02/10/23 ---
  
  0.03 07/12/23: Corrected error in readme file, reference to r0 was wrongly r1,
                 "r2 = milliseconds since last call (normally = r0)."
                 
       27/02/24: Added code to detect if the timer is running at half speed
                 as this happens when running on the RPCEmu. It seems to
                 have a top speed of 2ms period. The ticker increment is now
                 a variable calculated from the period relative to the
                 system ticker. Increment is normally 1, but 2 for the RPCEmu.
                 
       03/03/25: Corrected error detection during initialisation.
                 
  --- release 0.06 03/03/25 ---
  
  0.04 05/05/25: Will now use the system ticker if timer 1 is not available or
                 for any reason is not working. Clients are notified of the
                 tick increment so they can cope more efficiently with the
                 ticker being used.
                 
                 !MidiSupp !Run file modified to alter the order that modules
                 are replaced.

  --- release 0.07 09/03/25 ---
  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  MIDIS -  Midi Support
  -----
    
  0.01 14/03/23:  Initial coding.
  
  --- release 0.01 06/04/23 --- 

  0.02 13/04/23: Added full support for remainder of swi's
                   
  0.03 05/05/23: Timer1 used to provide a 1ms timer for use by any of the support
                 driver modules, now moved to MTimer module.

  --- release 0.02 19/06/23 ---
    
  0.04 09/07/23: midi.c - Removed check for system common messages without a
                 3rd message byte
  
  --- release 0.03 01/09/23 --- 
  --- release 0.04 06/09/23 --- 
  --- release 0.05 07/10/23 ---
  
  0.05 18/09/24: module.c - received buffer size increased
  
  --- release 0.06 03/03/25 ---
  --- release 0.07 09/03/25 ---
  
  0.06 02/11/25: Activity count added, for use by MidiMan.
  
  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  MPLAY - Midi file player
  -----
  
  0.18 31/03/23: Initial support for Midi Support

  --- release 0.01 06/04/23 --- 

  0.19 13/04/23: Addition of midisupport interface. This is selected on startup
                 if the support module is running, otherwise the standard MIDI
                 interface is used.
                 stopped pitch command reporting error when inputing negative
                 values
                   
  0.20 09/05/23: Timing changed to use 1ms timer instead of system ticker.
  
       24/05/23: Corrected error in tempo swi when used with the !Player
                 application. (needed to patch !Player's !RunImage and
                 !CheckSound so they didn't expect version 2.24 of MPlay and
                 would be happy with my 0.20)
                   
  --- release 0.02 19/06/23 ---
  
  0.21 07/07/23: All Notes Off command now 3 byte instead of 2.
  
       31/08/23: *midiplayer -i+ now provides additional information.
  
  --- release 0.03 01/09/23 --- 
  --- release 0.04 06/09/23 --- 
  --- release 0.05 07/10/23 ---
  
  3.22 18/02/24: Version number bumped up to 3.22 so it works with !Player without
                 having to patch !Player.
                 Added support for both my Lyrics display and !Player's.
                 
       19/10/24: Added Hold Pedal to list of controls stored whilst seeking.
                   
  --- release 0.06 03/03/25 ---
  
  3.23 08/03/25: Copes more efficiently with MTimer using the ticker instead
                 of timer 1.

  --- release 0.07 09/03/25 ---
  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  MIDISynth - Midi Synthesiser
  ---------

  0.20 05/03/23: Channel mode messages with no associated data are now actioned
                 for message lengths of 2 or 3.
                   
  0.21 14/03/23: Version for midi support
  
  --- release 0.01 06/04/23 --- 

  0.22 09/05/23: Timing changed to use 1ms timer instead of system ticker.
                   
  --- release 0.02 19/06/23 ---
  
  0.23 28/06/23: Comments corrected for timer settings
                 Sleep timeout command corrected to use 1kHz rate instead of 500Hz
                   
       31/08/23: *midisynth -i+ now provides additional information.
                   
  --- release 0.03 1/9/23 --- 
  --- release 0.04 6/9/23 --- 
  --- release 0.05 7/10/23 ---
  
  0.24 30/10/23: Registered parameter default set to zero instead of "unassigned"
                 to cope with malformed midi files that do not send all setup
                 commands in the correct order.
                   
       09/12/23: store.c - corrected typo in comments for TimestampToDate()

       20/12/23: kbd.c pol_action_key - if all gens in use was using the newest
                 not oldest.

       29/12/23: synth.s - optimised filter code to remove 3 cmp's
         
       21/01/24: Instrument editing support.
                 store.c - added patch list code and store functions
                 kbd.c - added load_instrument
                 module.c - added new swi's
                  
       25/01/24: Module now resides in <MIDISupport$Dir>.Drivers and not
                 <MIDISupport$Dir>.Drivers.MIDISynth. It no longer needs its
                 own directory because the SoundSet is now stored in the
                 system Choices area.

                 note. Any driver can be inside a directory tree. The drivers
                 directory is searched recursively by !Midiman for modules.
                 The MIDISynth sub directory was only to be neat anyway.
                  
       04/02/24: Changes to support instrument editing. Importing of csv bank
                 map files, an swi for edit control, and an swi for note on/off
                 to the edit instrument. Synth control added, now not needed to
                 be done in !MidiMan.
                  
       15/02/24: portamento properly disabled when the scale factor = 0
       
       25/02/24: Changed order of initialisation to avoid very bad things
                 happening if no Choices file.
                 
       01/03/24: Options for selection of rhythm channel and "Program actions
                 Banks".
                 
       04/03/24: Option for saving a text instrument list for use with the
                 editor. On startup checks Choices first then MidiSupport.Drivers
                 for a soundset file.
                 
       09/03/24: Corrected error in "Save New" option that crept in when importing
                 the function from MidiPlay code. Extra checks when saving
                 instruments.
                 
       28/06/24: Added option to exclude instrument numbers from the CSV bank map
                 file. Default is to include them to enable the sound set to be
                 recreated when the CSV file is loaded back in.
                 
       17/07/24: Added more options for Patch list format.
       
       20/09/24: Support for, Master Balance, Master Coarse and Fine Tuning,
                 and Improved support for Master Volume.
                 
       04/10/24: Sound Set name length increased to 24, 4 spare bytes also
                 included for future use. Old sound sets can be used by
                 inserting 16 zero bytes after the name
                 
  0.25 15/11/24: Waveforms now stored as harmonic tables. This means old sound
                 sets cannot now be loaded so I have a utility to convert them.
                 
       20/11/24: Support for waveform editor.
  
  --- release 0.06 03/03/25 ---
  --- release 0.07 09/03/25 ---
  
  0.26 10/05/25: instrument.h: Deleted unused typedef for default wavetable type.
                 kbd.c: midiSynth_term, free patch list. 

       07/10/25: Inactive generators are not processed, to reduce cpu load
                 Master envelope control and storage added.
                 Maximum polyphony increased to 128.
                 
       25/11/25: Assembler code used for 64bit multiply functions in the time
                 sensitive envelope and synth control filters.  

  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  MIDI - Midi interface for Apps
  ----
  
  0.01 14/03/23: MIDI port code extracted from synth module for use with midi
                 support.
                   
  --- release 0.01 06/04/23 --- 

  0.02 13/04/23: Timing changed to use 1ms timer instead of system ticker.
                   
  --- release 0.02 19/06/23 ---
  
  0.03 09/07/23: midi.c - Removed check for system common messages without a
                 3rd message byte
                   
  0.04 30/08/23: Replies to USBMidi module specific SWI's. This is to provide
                 compatibility with App's that are expecting to be using the
                 USBMidi module, not a standard MIDI module.
                 Added event generation for received data.
  
  --- release 0.03 01/09/23 --- 
  --- release 0.04 06/09/23 --- 
  
  0.05 08/09/23: MIDI_Init now supports all applicable options.
                    
       14/09/23: Timestamp received commands before storing.
                 Report Rx Buffer overflow error.
                 Event generated for command queue becomming empty.
                 Active sensing for Rx and Tx with error set and event sent for
                 loss of Rx.
                 Timing clock, Start, Continue, Stop, implemented for Rx and Tx.
                   
       27/09/23: Support for Sound System beat and bar/beat timestamp.
         
       04/10/23: Setting "ignore real time" also disables ext timing.

  --- release 0.05 07/10/23 ---
  
  0.06 30/10/23: MIDI_SetBufferSize now reports the Tx buffer as 512 and
                 the Rx buffer as (RXBUFF_SIZE-1), but does not support
                 changing the sizes.
                 RXBUFF_SIZE increased by 1 to 513.
                 MIDI_InqBufferSize now reports Rx buffer free locations and
                 not free bytes, i.e. empty buffer = 512.
                 MIDI_USBInfo now reports the module id by replying to r0=-1
                 with r0=*(int*)"Pete".
  
  --- release 0.06 03/03/25 ---
  --- release 0.07 09/03/25 ---
  --- release 0.08 03/12/25 ---

--------------------------------------------------------------------------
  USBMIDI - Midi using usb
  -------
  
  0.01 04/04/23: Dummy version for midi support, no usb interface.
  
  --- release 0.01 06/04/23 --- 

  0.02 18/04/23: Added USB interface.
  
  0.03 30/04/23: Added support for device hot pluging/removing.
  
  0.04 09/05/23: Limitation set on number of events sent per frame. Requires
                 a 1ms timer so MTimer module created.
  
  --- release 0.02 19/06/23 ---
  
  0.05 09/07/23: midi.c - Removed check for system common messages without a
                 3rd message byte
  
  --- release 0.03 01/09/23 --- 
  --- release 0.04 06/09/23 ---
  
  0.06 08/09/23: usb.c usb_open: String descriptor fetch moved from inside
                 endpoint loop to avoid fetching them twice.

  --- release 0.05 07/10/23 ---
  --- release 0.06 03/03/25 ---
  --- release 0.07 09/03/25 ---
  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  !MidiMan - MIDI driver manager
  --------
  
  0.01 01/04/23: Initial coding.
  
  0.02 29/05/23: Module window added
  
  --- release 0.01 06/04/23 --- 
  
  0.03 27/06/23: Added support for USBMidi driver.
  
  --- release 0.02 19/06/23 ---
  
  0.04 01/07/23: Added support for SerialMidi driver.
  
  --- release 0.03 01/09/23 ---
  
  0.05 06/09/23: Default error message improved.
                 Messages and !Run files updated.  

  --- release 0.04 06/09/23 --- 
  --- release 0.05 07/10/23 ---
  
  0.06 08/02/24: Removed synth setup code and window as now handled by the
                 synth module and !MidiSyn.

       01/03/24: Message_menusDeleted used to cancel driver name highlighting
       
       08/03/24: In MIDI Driver Info window, Rx unbuffered icon state inverted
                  
  --- release 0.06 03/03/25 ---
  --- release 0.07 09/03/25 ---
  
  0.07 23/10/25: Menu option to switch hotspots on/off, saved in config.
                 Additional ability to connect and remove drivers by draging
                 a source (or destination) number field to a destination
                 (or source) number field. Select drag the green tick to connect
                 and Adjust drag the red cross to disconnect.
                 Routing window menu added to avoid having to go to the iconbar
                 menu for the some items.
  
  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  !MidiKey - MIDI Keyboard & Monitor
  --------
  
  0.02 02/04/23: Extracted code from the MidiPlay application to use with
                 midi support.

  --- release 0.02 19/06/23 ---
  
  0.03 30/08/23: Name changed to !MidiSMon to avoid problems with other
                 very similarly named apps. 
  
  --- release 0.03 01/09/23 --- 
  --- release 0.04 06/09/23 --- 
  --- release 0.05 07/10/23 ---
  
  0.04 25/10/23: Version/date report to midi support corrected to agree
                 with the program info window.
  
  0.05 21/12/23: keyboard,c - key up/down gate pulse for timing tests added.
  
       22/01/24: keyboard.c - support for instrument editor added.
       
       23/02/24: keyboard.c - improvements to video plot selection. support
                 for 4K video modes.
                 
       14/03/24: Name changed from the rather temporary MidiSMon to MidiKey
                 as the music keyboard facility is it's main function.
                 
  0.06 28/08/24: Config window removed. Controls now in the keyboard window.
                 Additional controls in keyboard window for Banks, Program,
                 and octave shift.
                 Two Instances of the program now allowed so 2 separate MIDI
                 devices can be controlled.
                 
       28/09/24: Expression and Pitch Wheel added to channels window.
       
       31/10/24: Bank Lo added to channels window.

  --- release 0.06 03/03/25 ---
  --- release 0.07 09/03/25 ---
  
       26/07/25: Corrected error in user guide. "is" should have been "are".
                 User Guide now 0.06a.
  
  --- release 0.08 03/12/25 ---

--------------------------------------------------------------------------
  SerialMIDI - Midi using serial uarts
  ----------
  
  0.01 01/07/23: Initial coding supporting up to 2 uarts (2nd untested)

  --- release 0.03 01/09/23 --- 
  --- release 0.04 06/09/23 ---
  --- release 0.05 07/10/23 ---
  
  0.02 04/01/24: serial.c serial_open(): set no handshake whatever the port,
                 not just for port 0.

  --- release 0.06 03/03/25 ---
  --- release 0.07 09/03/25 ---
  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  !Midisyn - Synth control & instrument editor
  --------
  
  0.01 22/01/24: Initial build
  
       08/02/24: Addition of synth control and setup. Synth choices file now
                 saved in Choices area and not within MidiSupport.
                 
       12/02/24: Added synth control window pane which was previously 
                 provided by midiman.

  0.02 11/03/24: Control pane now a separate window. To better split the
                 editor and control functions.
                 
  0.03 28/05/24: Changes to editor control function layout to make it more
                 logical.
                 
       28/06/24: Added option to exclude instrument numbers from the CSV bank map
                 file. Default is to include them to enable the synth module to
                 recreate sound sets when the CSV file is loaded back in.
  
       17/07/24: Added more options for Patch list format.
       
       26/09/24: Control of system exclusive's Master Volume, Balance, Coarse
                 and Fine Tuning.
  
       04/10/24: Sound Set name length increased to 24
       
       20/11/24: Waveform editor added.
  
  --- release 0.06 03/03/25 ---
  --- release 0.07 09/03/25 ---
  
  0.04 07/10/25: Display of active voices added
                 Added selection of master envelope to editor
  
  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  !Lyrics - Midi file text and lyrics display
  -------
  
  0.01 17/02/24: Initial build
  
  --- release 0.06 03/03/25 ---
  --- release 0.07 09/03/25 ---
  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  !MidiCon - Converts Midi files to Wav or MP3 audio files
  --------
  
  0.01 08/09/25: Initial build, found it in dark corner of the SD card from
                 2021. Updated with the latest player and synth components
                 and made it work.
  
  0.02 14/09/25: Conversion to MP3 added
       
       07/10/25: Inactive generators are not processed, reducing the conversion
                 time.
                 Player tempo scaler provided as an option. 

       25/11/25: Assembler code used for 64bit multiply functions in the time
                 sensitive envelope and synth control filters.  

  --- release 0.08 03/12/25 ---
  
--------------------------------------------------------------------------
  !Activity - Monitors channel activity
  ---------
  
  0.01 29/10/25: Initial build.
  
  --- release 0.08 03/12/25 ---

--------------------------------------------------------------------------
Contact: Pete Everett, peverett33@gmail.com
 
  
