  This is a MPU401 MIDI board driver originally written for BSD/386.
But has been ported to NetBSD and Linux.  I've also included an
untested SVR4 port.

  Its features include:

  + the MPU401 is run in UART mode so the driver will (hopefully)
    work with MPU401 compatible cards that don't support
    the intelligent mode.

  + Reads/Writes data in Standard MIDI File event form.  Just
    grab an event from a Standard MIDI File and write(2) it
    to the device - the driver will do the right thing.

  + Supports open, close, read, write, ioctl and select
    system calls.

  + Supports an ASYNC mode.  The driver will send a SIGIO to the
    process group whenever data arrives or data can be written.

  + Automatic note off and controller reset on device close(2)

  The man page is written with the new mandoc macros as opposed
to the old man macros.  Berkeley is making this shift and
I'm following suit.  I don't know how available the mandoc
macros are, but groff comes with them.
  For porting purposes all the logic is correct (yeah right,
I've got a bridge you might be interested in too) as far as
I've been able to test it.


  This implementation of the driver uses long longs when
converting SMF ticks to/from kernel ticks.  This is to
preserve accuracy.  Without using long longs, a long value
will overflow, or accuracy will be lost be dividing early.
Unfortunately doing long long math is costly and impacts
the system.  If someone is good with numerics and has a
good way of doing these calculations without losing accuracy,
or overflowing, please let me know.

mike
durian@boogie.com
