[AH] RE: MKS-80 and MKS-70 midi latency

Moderators: Thirteen, rick, Mark Bassett

[AH] RE: MKS-80 and MKS-70 midi latency

Postby innerclock » Thu Mar 18, 2010 6:45 am

Interesting thread/info from the Analogue Heaven Mail List received yesterday....:)

"I can't say for sure about the MKS70/80, but I have reverse-engineered the appallingly sloppy JX10 OS. The software EGs have a relatively low refresh rate, which limits the granularity of short attack times, and they have linear slopes rather than RC curves, but they are not the main cause of the latency.

In order to translate a MIDI note-on message into a note playing on a voice, a synth has to receive the MIDI message, update a table that tracks which notes are currently being held, choose a voice to play the newly arrived note, then tell that voice to play the note. The MIDI note arriving will trigger a CPU interrupt, so the best approach would be to handle the playing of the note within the interrupt routine. On an old synth like the JX, there isn't enough time to do that. An interrupt routine receiving a MIDI byte only has 320 microseconds to complete whatever it might do before another byte may arrive. Allowing for the fact the interrupt routine can't take up all the CPU time, you may only have 200 microseconds or so. Which is only enough time to execute a hundred or so instructions on old 8-bit CPUs, which are usually clocked at under 10MHz, and may need anywhere between 4 and 12 clock ticks for every instruction cycle. To get round this problem on the JX10, the interrupt routine receives the MIDI bytes, and updates the note status table. Another routine which is regularly called in the main program loop checks for any changes to the note status table, performs the voice allocation and starts the note playing. The main program loop on the JX is doing *everything* except for the reception of MIDI bytes and key events from the keyboard scanner. It scans all the front panel switches, refreshes the VFD display, polls the PG800, reads the ADC inputs from the pitch bend, etc. It takes somewhere around 20 - 30ms to complete. So if a MIDI note arrives just *after* the routine that checks for new notes, it could be more than 20ms before the next time the routine runs. Giving you variable latency roughly equal to the time of one pass of the main program loop.

Modern CPUs (of the sort no doubt used in the JP4 interface) are much faster, and there's no reason why you can't handle voice allocation in the interrupt routine. This guarantees note-on latency better than the 320us time taken by a single MIDI byte."

Colin f
User avatar
Registered User
Registered User
Posts: 25
Joined: Sat Jan 19, 2008 8:26 am
Location: Sydney

Return to Vintage Synth Forum

Who is online

Users browsing this forum: No registered users and 1 guest