Calgary Alberta 93/08/28

This is the documentation for Yet Another Tiny Dos MPU Utility.  The program
is easy to use, just type YATDMPUU from a dos prompt to get a list of 
commands.

These commands (case insensitive) are:

        H = help menu
        R = MPU-401 system Reset
        E = system Exclusive thru on (must reset to recover)
        L = real time cLock disabled (must reset to recover)
        A = All thru off, (must reset to recover)
        F = thru oFf on active channels
        O = thru On on active channels
        T = set default Tempo of 100 bpm
        Txxx = set Tempo of xxx bpm in decimal
        Cxx = send special Command of xx in hex
        Dxx = send special Data of xx in hex

The commands can be strung together in any order (without spaces even!) but
when entering multiple commands, the R option will reset the effects of
previous commands.  The C and D commands allow you to send custom messages
to the MPU.  Any bad effects of this can be recovered with an R command.  For
instance; to reset, turn off MIDI thru on both ports of an MQX-32 and set
the MIDI clock tempo to 120bpm the command is: YATDMPUU R CEB D90 T120 or
YATDMPUU RCeBd90T120.  I have included two thru off commands because one; 'F'
is reversable but is not as all inclusive as the 'A'.  However, the 'F'
command will let data from inactive channels thru, but since the power on
default has all channels active and will be rarely changed, it is an accept-
able and reversable thru-off.

I rewrote Larry Leanarts DOS-MPU program in MS Quick Assembler to include
some special stuff I wanted to do, like send out changed tempo commands to
my QY-10 without running a sequencer and to monkey around with MQX-32m
special commands. The default port address is 330h but I have included source
code if you wish to make any changes.

I hereby place my portion of the program into the public domain.


Gary D. Fisher


PS.
The following table is a summary of some commands that MPU-401's accept
and some special commands that only an MQX-32 will accept.  Have fun!

 

  01h  MIDI stop command sent out
  02h  MIDI start command sent out
  03h  MIDI continue command sent out
  05h  stop playing back tracks and send MIDI stop command
  0Ah  start playing back tracks and send MIDI start command
  0Bh  continue playing back tracks and send MIDI continue command
  0Ch  enable SMPTE/MTC to MIDI sync clocking conversion (MQX-32)
  0Dh  enable SMPTE/MTC time stamping mode (MQX-32)
  11h  stop recording and send MIDI stop command
  15h  stop recording, stop playback and send MIDI stop command
  1Ch  stop sending SMPTE data to tape-out (MQX-32)
  1Dh  stop reading of SMPTE data from tape-in (MQX-32)
  20h  prepare to record on receipt of MIDI start or continue commands
  22h  commence recording and send MIDI start command
  23h  continue recording and send MIDI continue command
  28h  start playing back tracks and record on receipt of MIDI start/continue
  2Ah  start playing back tracks, recording and send MIDI start command
  2Ch  start sending SMPTE data to tape-out (MQX-32)
  2Dh  start reading of SMPTE data from tape-in (MQX-32)
  30h  disable automatic "ALL NOTES OFF" 
  31h  disable MTC messages (MQX-32)
  32h  disable automatic real time msgs (MIDI clock, start, stop & continue)
  33h  disable "thru" function (not on both ports on MQX-32)
  34h  add timing bytes in "data in stop" mode 
  35h  pass mode messages to host 
  37h  pass exclusive msgs from in to out 
  38h  pass common messages to host 
  39h  pass real time messages to host 
  3Ah  disable SMPTE frame position messages to host (MQX-32)
  3Bh  enable SMPTE frame position messages to host (MQX-32)
  3Ch  set to chase lock sync mode (MQX-32)
  3Dh  set to SMPTE mode (MQX-32)
  3Fh  become a dumb uart 
  40h  Set channel for reference table A
  50h  Set channel for reference table B
  60h  Set channel for reference table C
  70h  Set channel for reference table D
  80h  MPU is master clock 
  81h  enable FSK input/output & sync to it 
  82h  master clock is not MPU 
  83h  metronome on - no accents 
  84h  metronome off 
  85h  metronome on - w/accents 
  86h  disable continuous controller to host 
  87h  enable continuous controller msgs 
  88h  disable voice "thru" function on acceptable channels
  89h  enable voice "thru" function on acceptable channels
  8Ah  disable "data in stop" mode 
  8Bh  enable "data in stop" mode 
  8Ch  disable "measure end" to host 
  8Dh  enable "measure end" to host 
  8Eh  disable conductor function 
  8Fh  enable conductor function 
  90h  disable real time affection 
  91h  enable real time affection 
  92h  set FSK sync res. to internal sync res. 
  93h  set FSK sync res. to MIDI sync res. 
  94h  disable "clock to host" msgs 
  95h  enable "clock to host" msgs 
  96h  don't pass system exclusives to host 
  97h  pass system exclusives to host 
  98h  channel reference table A off 
  99h  channel reference table A on 
  9Ah  channel reference table B off 
  9Bh  channel reference table B on 
  9Ch  channel reference table C off 
  9Dh  channel reference table C on 
  9Eh  channel reference table D off 
  9Fh  channel reference table D on 
  A0h  get play counter for track 1 
  A1h  get play counter for track 2 
  A2h  get play counter for track 3 
  A3h  get play counter for track 4 
  A4h  get play counter for track 5 
  A5h  get play counter for track 6 
  A6h  get play counter for track 7 
  A7h  get play counter for track 8 
  AAh  return last read SMPTE user bits (MQX-32)
  ABh  get record counter (& clear it) 
  ACh  get firmware version 
  ADh  get firmware revision 
  AEh  get installed MIDI paths (MQX-32)
  AFh  get the tempo value
  B1h  sets relative tempo to 1/1 
  B8h  clears all play counters 
  B9h  clears all channel reference tables 
  BAh  clear the record counter 
  C2h  set timebase to 48 clocks/beat 
  C3h  set timebase to 72 clocks/beat 
  C4h  set timebase to 96 clocks/beat 
  C5h  set timebase to 120 clocks/beat 
  C6h  set timebase to 144 clocks/beat 
  C7h  set timebase to 168 clocks/beat 
  C8h  set timebase to 192 clocks/beat 
  D0h  want to send data on track 0 
  D1h  want to send data on track 1 
  D2h  want to send data on track 2 
  D3h  want to send data on track 3 
  D4h  want to send data on track 4 
  D5h  want to send data on track 5 
  D6h  want to send data on track 6 
  D7h  want to send data on track 7 
  DFh  want to send system message 
  E0h  set tempo
  E1h  set relative tempo 
  E2h  set tempo graduation 
  E4h  set # MIDI clocks / metronome beat 
  E6h  set # metronome beats / measure 
  E7h  set # internal clocks (x4) / clock to host 
  E8h  set channel remap for MIDI in port 1 & 2 (MQX-32)
  E9h  set channel remap for MIDI in port 2 (MQX-32M)
  EAh  set CLS delay time (MQX-32)
  EBh  set MIDI path mask where the following data byte is: (MQX-32)
       7 6 5 4 x x 1 0
       Operand     \ \Port 1
                    \Port 2

       Ports are specified by bits 1 & 0 ie. 0 is no port, 1 is port 1, 2 is
       port 2 and 3 is both ports.
       
       If the operand is 0h - 7h playtrack messages from track 0-7 will be
       sent to the ports specified by bits 1 & 0.

       If the operand is 8h then UART MIDI messages will go out the specified
       ports.

       If the operand is 9h then MIDI in is echoed at ports specified.
        (Example: YATDMPUU CEB D90 will turn off Midi through for both ports.)

       If the operand is Ah then real time messages will be sent to the ports
       specified.

       If the operand is Fh then system messages will be sent to the ports
       scpecified.

  ECh  set active tracks bitmap 
  EDh  set play counter bitmap 
  EEh  set lo acceptable tracks bitmap 
  EFh  set hi acceptable tracks bitmap 
  F4h  set SMPTE control data (MQX-32)
  FFh  reset to default state 
