This is a daemon for the MiSTer DE10-nano FPGA to allow ALSA supported USB MIDI adapters to be used with the Minimig and ao486 cores.
MidiLink 2.0 is now included in MiSTer general and incudes MUNT and FluidSynth support running on the HPS ARM core!
Use MUNT softSynth:
UartMODE : Connection : MIDI
MidiLink : Local
TYPE : MUNT
Roland MT-32/CM-32 roms need to be placed in '/media/fat/linux/mt32-rom-data'
Additional MUNT parameters can be specified in MidiLink.INI
MUNT_OPTIONS =
Use FluidSynth softSynth:
UartMODE : Connection : MIDI
MidiLink : Local
TYPE : FSYNTH
FluidSynth soundfont is defined in MidiLink.INI
FSYNTH_SOUNDFONT = /media/fat/linux/SOUNDFONT/sc-55.sf2
Use modem emulation:
UartMODE : CONNECTION : MODEM
LINK : TCP
Modem mode supporting a small subset of common Hayes 'AT' Commands. Default speed for this mode is 115200 BPS
Direct connect to another MiSTer or other computer:
UartMODE : CONNECTION : MODEM
LINK : UDP
Many Amiga applications and most games don’t require any additional drivers for MIDI. Some “newer” applications may require the CAMD driver.
http://aminet.net/package/mus/edit/camd
While some sequencer applications may support MIDI on the serial port, DOS games typically require a MPU-401 interface which ao486 unfortunately lacks. In lieu of hardware MPU-401 capability the SoftMPU TSR can be used with a good degree of success.
http://bjt42.github.io/softmpu/
SoftMPU requires the EMM386 or QEMM memory manager be installed. For testing QEMM 8.03 was used. QEMM “stealth” option seems to be incompatible with ao486 so it is advisable to skip that part of the optimize process. It’s a good idea to run the QEMM optimize application again after installing SoftMPU (in the AUTOEXEC.BAT) to get as much of the lower 640K conventional RAM free as possible.
Although less common, some DOS games and applications require MPU-401 interrupts. This option can break compatibility with others software not requiring interrupts.
Starting SoftMPU without MPU-401 interrupts:
SOFTMPU.EXE /MPU:330 /OUTPUT:COM1
Starting SoftMPU with MPU-401 interrupts:
SOFTMPU.EXE /SB:220 /IRQ:5 /MPU:330 /OUTPUT:COM1
The Rev.0 Roland MT-32 used in testing required the ‘DELAYSYSEX’ switch to prevent buffer overflow for certain games but made Sierra games upload sysex commands excessively slowly.
SOFTMPU.EXE /MPU:330 /DELAYSYSEX /OUTPUT:COM1
The 'midilink' daemon currently supports following switches / options:
TESTMIDI - this option sends a middle 'c' note to the MIDI device
once the daemon is started.
BAUD - Specify BAUD rate...
QUIET - this option suppresses MIDI debug output.
MUNT - Use MUNT SoftSynth (no USB MIDI adapter
required)
FSYNTH - Use FluidSynth SoftSynth (no USB MIDI adapter
required)
CSSW10 - Use Casio SW-10 SoftSynth (no USB MIDI adapter
required)
UDP - Send MIDI to UDP Port (INI setting MIDI_SERVER /
MIDI_SERVER_PORT)
UDPMUNT - Listen on UDP port and send to MUNT
UDPMUNTGM - Listen on UDP port and send to MUNT (GM mapping)
UDPFSYNTH - Listen on UDP port and send to FluidSynth
UDPCSSW10 - Listen on UDP port and send to Casio SW-10 synth
TCP - Works like a modem with AT commands:
(ATDT, ATBAUD, ATIPADDR, +++ATH)
USBSER - Connect to USB serial converter
USBMIDI - Use USB MIDI adapter such as Roland UM-ONE MK2 (Default)
SERMIDI - Use USB Serial adapter such as FT232R for MIDI
(Fail-over if no USB MIDI adapter found)
MENU - starts based on /tmp/ML_MUNT, /tmp/ML_UDP,
/tmp/ML_FSYNTH, /tmp/ML_TCP /tmp/ML_USBSER
used with MiSTer Menu to set mode of operation.
The MidiLink.INI file:
#This is a sample MidiLink.INI FILE _[DESCRIPTION]_
#SERIAL_DEVICE = /dev/ttyS1 --> Specify alternate serial sevice.
MIDILINK_PRIORITY = -20 --> Sets the task priority of MidiLink
MUNT_OPTIONS = --> Optional parameters for MUNT
MUNT_ROM_PATH = /media/fat/mt32-rom-data
CSSW10_ROM_PATH = /media/fat/linux/css10-rom-data/ROMSXGM.BIN
--> Path to MT-32/CM-32 ROM files
MP3_VOLUME = 100 --> Volume for MP3 Player (0 - 100)
MUNT_VOLUME = 90 --> Volume for MUNT (0 - 100)
FSYNTH_VOLUME = 100 --> Volume for FluidSynth (0 - 100)
MODEM_VOLUME = 100 --> Volume for modem emulation
FSYNTH_SOUNDFONT = /media/fat/SOUNDFONT/default.sf2
--> This is the soundfont For
FluidSynth.
MIXER_CONTROL = Master --> Name of Mixer control (leave
Master!)
UDP_SERVER = 192.168.1.52 --> MIDI server for UDP
UDP_SERVER_PORT = 1999 --> Port for UDP SERVER and local
listening port
UDP_BAUD = 2400 --> Set a different BPS for socket
connection (this is useful
this for serial connection
for gaming (Populous)). This
overrides arg '38400' (UDP only)
UDP_FLOW = 0 --> This sets the default Flow
Control for UDP option
0 = none 3 = CTS/RTS
4 = XON/XOFF
UDP_SERVER_FILTER = FALSE --> Only accept Socket data from
MIDI_SERVER IP (UDP only)
TCP_SERVER_PORT = 23 --> Port for TCP Listener
TCP_TERM_ROWS = 23 --> Number of default rows for
file picker.
--> Directories for:
TCP_TERM_UPLOAD = /media/fat/UPLOAD --> TCP 'ATRZ' Zmodem Uploads
TCP_TERM_DOWNLOAD = /media/fat/ --> TCP 'ATSZ' Zmodem Downloads
TCP_TERM_MP3 = /mdia/fat/MP3 --> TCP 'ATMP3' MP3 player
TCP_TERM_MIDI = /media/fat/MIDI --> TCP 'ATMID' MIDI player
TCP_TERM_SYNTH = FluidSynth --> Default synth for TCP 'ATMID'
TCP_TERM_TRANS = PETSKII --> Optionl ASCII translation
(for Commodore 64 / Atari 8-bit)
Options: NONE, PETSKII, ATASCII
Default : NONE
TCP_BAUD = 9600 --> Set a different BPS for socket
connection (this is useful
this for serial connection
for gaming (Populous)). This
overrides arg '38400' but only
when used with arg 'TCP'
TCP_ATH_DELAY = 900 --> set to 0 for no delay between
+++ and ATH for modem hang-up
CCGMS on C64 core needs this
MIDI_BAUD = 38400 --> Set MIDI baud to 38400
this is for [A0486]
TCP_DTR = 1 --> This sets the DTR behavior
1 = Normal
2 = DTR drop cause hangup
TCP_FLOW = 0 --> This sets the default Flow
Control for TCP option
0 = none 3 = CTS/RTS
4 = XON/XOFF
TCP_SOUND = TRUE --> TCP option:
Play /media/fat/SOUNDS/dial.wav
Play /media/fat/SOUNDS/connect.wav
#TCP_SOUND_RING = --> optional WAV file for TCP modem
ring
#TCP_SOUND_DIAL = --> optional WAV file for TCP modem
dial
#TCP_SOUND_CONNECT = --> optional WAV file for TCP modem
connect
#TCP_TERM_DIR = /media/fat/linux/MidiLink.INI
--> Spefify alternate directory per
core
USB_SERIAL_BAUD = 9600 --> Set USB serial baud to 9600
DELAYSYSEX = TRUE --> This option fixes "Buffer Overflow"
error on Roland MT-32 Rev0.
MT32_LCD_MSG = MiSTer MIDI! --> This shows a custom message on
the MT-32 LCD Screen. Max 20!
MidiLink : TCP The TCP option works like a WiFi232 adapter supporting a small subset of the Hayes "AT" command set and some additionl stuff
AT - Attention
ATBAUD# - Set baud rate (can't auto-detect yet) --> ATBAUD9600 or ATBAUD6 (#6 from menu)
ATBAUD - Show baud rate menu.
ATDIR - Show dialing Directory (/media/fat/linux/MidiLink.DIR)
ATE0 - Disable command echo
ATE1 - Enable command echo
ATDT - Dial --> ATDT192.168.1.131:23 or ATDTBBS.DOMAIN.COM:31337 ( '*' can also be used in place of ':')
ATINI - Show MidiLink.INI (/media/fat/linux/MidiLink.INI)
ATIP - Show IP address --> ATIP
ATMID1 - Switch soft-synth to FluidSynth
ATMID2 - Switch soft-synth to MUNT
ATMID - Play MIDI file (see file picker)
ATMIDSF - Select FluidSynth SoundFont (Change MidiLink.INI)
ATMID! - Stop currently playing MIDI
ATM0 - Disable modem sounds
ATM1 - Enable modem sounds
ATM##% - Set modem volume to 0% - 100%
ATMP3 - Play MP3 file (see file picker)
ATMP3! - Stop currently playing MP3 File
ATROWS - Do terminal row test
ATROWS## - Set number of terminal rows for MIDI, MP3 and Zmodem file picker (0 for continious list - no pause between p
ATRZ - Receive a file using Zmodem
ATSZ - Send a file via Zmodem (see file Picker)
ATTEL0 - Disable basic telnet negotiation
ATTEL1 - Enable basic telnet negotiation (default)
ATTRANS# - Set ASCII translation (0-NONE, 1-PETSKII, 2-ATASCII)
ATQ0 - Verbose result codes (default)
ATQ1 - Suppress result codes (such as RING/CONNECT/OK)
ATVER - Show MidiLink version
ATZ - Reset modem
AT&D0 - DTR Mode normal (default)
AT&D2 - DTR drop causes modem to hangup
AT&K0 - Disable local flow control
AT&K3 - RTS/CTS bidirectional hardware flow control
AT&K4 - XON/XOFF bidirectional software flow control
+++ATH - Hang-up
Navigation within the file picker - ATSZ, ATMIDI and ATMP3
[RETURN] / [SPACE] - Next page of results
"P" - Return to pervious page of results
"Q" - Quit without making selection
"-" - change to parent directory
File picker prompts:
MORE ##? --> Indicates at least one additional page of results
END ##? --> Indicateds end of the list