-
Notifications
You must be signed in to change notification settings - Fork 83
Midi
The MIST board can be equipped with a physical MidiAddon interface or it can redirect MIDI OUT through its on-board USB device interface.
In both cases the MIDI implementation looks like a genuine Atari ST MIDI port to the software and can be used without any further drivers.
Both interfaces can even be used at the same time (with the USB device interface only supporting MIDI out).
The physical MIDI interface requires a hardware MidiAddon and provides the same physical connectors a real Atari ST has typically on the left side.
The timing implemented with this is very close to the timing of a real Atari ST and the latency of these signals is on-par with that of the original machine.
Unfortunately the timing of the CPU core used on the MIST is not 100% perfect. While this doesn't effect MIDI timing in any way it does prevent many dongles from being implemented in the MISTs FPGA. This has been verified with the Cubase2 dongle.
A video of a synthesizer connected to the MIDI addon board:
The MIST board has a USB device port (the Micro USB one also used the power the board) which implements a CDC ACM interface. Under windows this shows up as a COM port (windows driver inf). Under Linux or MacOS X similar device file entries are created under /dev without any special driver being required.
This virtual COM port can be used for various purposes (e.g. debugging or redirecting printer or serial output). This can be selected using the "USB I/O" entry in the System submenu of the OSD. Select "midi" to redirect MIDI output to the CDC ACM interface.
This interface can be used by most standard terminal programs and e.g. using rufus on the ST side and Tera Term on the PC side it's possible to send data from the ST to the PC with the ST using it's MIDI port internally.
A Linux PC can be used to playback MIDI audio sent from a MIST board via its USB device port. This can be used with most MIDI enabled software like certain games (e.g. ECO) or sequencing software (like cubase lite).
Various MIDI software synthesizers exist for Linux. One popular example is the timidity program.
Unfortunately these programs are not designed to work on raw byte streams as MIDI input. This is due to the fact that PCs are inherently bad at sustaining a precise timing without help. Thus typical PC based setups include MIDI interfaces that take care of certain timing constraints. The simple CDC ACM interface does not support this.
To allow programs like timidity to operate on ordinary COM ports a additional software like ttymidi is required which feeds the raw byte stream coming from the CDC ACM interface into the MIDI channels of a typical Linux audio system.
A typical setup for this starts with the redirection of the raw bytes stream into a MIDI source:
ttymidi -s /dev/ttyACM0
Then synthesizer is need as a MIDI sink. Timidity can be used for this:
timidity -iA
as well as fluidsynth:
fluidsynth -a pulseaudio -m alsa_seq /usr/share/sounds/sf2/FluidR3_GM.sf2
Then the MIDI sources and sinks need to be logically wired up. The command
aconnect -iol
will list all MIDI channels and their connections like this:
client 0: 'System' [type=kernel]
0 'Timer '
1 'Announce '
Connecting To: 131:0
client 14: 'Midi Through' [type=kernel]
0 'Midi Through Port-0'
client 128: 'TiMidity' [type=user]
0 'TiMidity port 0 '
1 'TiMidity port 1 '
2 'TiMidity port 2 '
3 'TiMidity port 3 '
client 129: 'ttymidi' [type=user]
0 'MIDI out '
Connecting To: 130:0
1 'MIDI in '
client 130: 'FLUID Synth (4184)' [type=user]
0 'Synth input port (4184:0)'
Connected From: 129:0
In this case the MIDI out port of client 129 (the ttymidi program) is already connected to the input of client 130 (the FLUID Synth synthesizer).
If these were not already connected one could connect them using the command line:
aconnect 129:0 130:0
or alternally a graphical interface like qjackontrol:
Afterwards it's possible to play back MIDI music from the MIST Atari ST through the Linux PC acting as a synthesizer.
Tested with:
- Cubase Lite
- Cubase 3 (cracked version)
- Eco
- Karate Kid II
- Pirates
MiST FPGA - One Chip to Rule Them All
- What is it?
- FAQ
- Board overview
- Installing firmware
- Joystick mapping
- Peripherals
- Projects it is based on
- Rom Management
- Setting up a mist.ini file
- Using a custom font
- Tested Displays/Upscalers
- Troubleshooting
- Videos
- User Videos
- Getting Started
- Current core status
- Joy/Keyboard/On-board Shortcuts
- MIDI support
- SD card setup
- Startup menu
- Atari ST
- Atari ST/STe (mistery)
- Amiga
- Amstrad
- Amstrad - alternative
- Apogee/Radio86RK
- Apple I
- Apple II+
- Apple //e
- Apple Macintosh
- Acorn Archimedes
- Atari 800
- BBC Micro
- BK0011M
- Commodore PET
- Commodore VIC-20
- Commodore 64
- Commodore 16/Plus4
- Enterprise
- HT1080Z (TRS80 I clone)
- LM80C
- Mattel Aquarius
- Miles Gordon SAM Coupe
- MSX
- Ondra SPO 186
- Oric
- PC (Next186)
- PC (XT)
- Primo
- Sinclair ZX80/ZX81
- Sinclair ZX Spectrum
- Sinclair ZX Spectrum - alternative
- Sinclair ZX Spectrum Next
- Sinclair QL
- Texas Instruments TI-99/4A
- TSConf
- Vector-06C
- Videoton TVC
- Vtech Video Technology Laser 350/500/700
- Atari 2600
- Atari 5200
- Atari 7800
- Bally Astrocade
- Coleco ColecoVision
- GCE Vectrex
- Intellivision
- Nec PC Engine/TurboGrafx-16
- Nintendo Gameboy
- Nintendo NES
- Nintendo SNES
- Philips Videopac/Odyssey²
- Philips Videopac/Odyssey² - alternative
- Sega Genesis/Megadrive
- Sega Master System
- SNK Neo Geo MVS/AES