VOGONS


First post, by mkarcher

User metadata
Rank l33t
Rank
l33t

This thread is supposed to cover sound cards based on the Ensoniq ODIE (ES5607) control chip, which connects a MC68000-family microprocessor, an Ensoniq OTTO wavetable synthesizer, some onboard RAM, a wavetable ROM and the ISA bus. You often see the name "Sequoia" associated with the ODIE chip, which is not surprising, as "Sequoia" is printed on that chip, while "ODIE" (which is the name of that chip according to the datasheet) is not printed on the chip! "Sequoia" refers to Sequoia Development Group, who designed the ES5706 chip and the "Mockingbird-OTTO" synthesizer firmware.

I know of these ODIE-based sound cards, most of them can be found on http://www.yjfy.com/museum/sound/Ensoniq.htm as well.

  • The original S-1000, as seen in Re: Found an Ensoniq Soundscape Elite... but it's corroded!. This card has an Yamaha OPL2 installed, while all later ODIE-based cards decided to use firmware-based OPL2 emulation (which is awful).
  • FCC ID KUIX-TECHSND001, as seen in Re: Found an Ensoniq Soundscape Elite... but it's corroded! . The FCC ID for this card is registered to a Taiwanese company called "X Technonolgy Co", and the product is named "X-TECHSND001" according the the registration document. I don't know where to find official software for that card.
  • Suk Jung Eled.Co. SJ-MS01, which seems to be similar the the X-TECHSND001, but it has SIMM sockets, which can be used to add sample RAM.
  • The Reveal SC600 (aka Reveal SoundFX Wave 32), which has FCC ID FODSWFX1000. The FCC ID belongs to Packard Bell, which is not surprising, as Reveal is a subsidiary of Packard Bell
  • The Ensoniq Soundscape S-2000, which has the FCC ID LF7SS2016.
  • The Ensoniq Soundscape Elite, which also uses the FCC ID LF7SS2016. This card is mostly the same as the S-2000, but it provides pin headers to connect a daugtherboard containing the Ensoniq ES5501. The Elite also has an IDE port, while the S-2000 only has the classic legacy CD interfaces.

There also is the later SoundScape Opus card, which again uses the FCC ID LF7SS2016. The OPUS chip on the Opus card likely integrates the ODIE and the OTTO into one chip, but I define the Opus as "out of scope" for this thread, because it does not use the original ODIE chip.

Furthermore, you might wonder why I didn't mention the V7 Spea MediaFX yet, especially as I am from Germany, and the Spea branded sound card was distributed by the budget PC retailer "Vobis", and had a significant market share in Germany. Actually, I met two people that owned a MediaFX, while I met no one that owned an Ensoniq-branded S-2000. The reason is that the MediaFX is just a slightly modified version of either the SC600, or the S-2000. As those cards are not identical, using the same name for both of them is unfortunate, as can be seen in this announcement by VOBIS for their distribution of driver updates. Currently, I assume, that the MediaFX cards behave identically to either the SC600 or the S-2000, and they will be treated in this thread.

The ODIE datasheet does not only describe the ODIE chip (to varying detail levels), but it also describes how to build a PC sound card around the ODIE chip, explicitly naming a lot of support components. Apart from the DAC, the support components match what's on the early cards, that's the S-1000, the X-TECHSND001 and the SJ-MS01. The ODIE datasheet names the Philips TDA1545A DAC(link to alldatasheet.com), while all ODIE cards I've looked at use the NEC µPD6376 (link to alldatasheet.com) instead. Both of these DACs are non-Sigma/Delta-16-bit DACs, if I understand the datasheets correctly, and use the same serial format to receive the samples. I thus assume that the X-TECHSND001 and the SJ-MS01 are cheap clones of the S-1000, which is already branded as "Ensoniq Soundscape" in the ODIE datasheet, and looking at document page 23 (PDF page 24), you actually see the name "S-1000". As I'm trying to look into the Firmware and MIDI stuff, and don't care about the OPL3, I will call both the S-1000 with the OPL3 chip and the clones that rely on firmware-based emulation S-1000.

This table contains a comparison of the ODIE cards:

                     S-1000          SC600          S-2000
Synth playback D/A µPD6376 µPD6376 µPD6376
Extra WSS codec no CS4248 AD1848
Wave playback via synth synth or WSS synth or WSS
Wave recording CXD2555Q WSS WSS
Analog mixer LMC835 WSS WSS
Tone control none (?) TDA8421 none

The difference between the CS4248 and the AD1848 seems to be negligible. The CS4248 datasheet explains some minor differences, but I don't think they matter for this thread, and they will collectively be named "WSS" (for "Windows Sound System") in this thread. My interpretation is that the original idea by Sequoia was that their firmware-based Sound Blaster Emulation is good enough for legacy software, and "serious software" will use native ODIE-based wave playback, which offers two pannable 16-bit stereo channels. It seems that this didn't work out (the Sound Blaster emulation was quite bad, by the way), and Reveal did the best thing to do to salvage the design: Put something that is kind of standard for wave playback alongside the ODIE/OTTO-based wave playback, which is an WSS chip, and it is jumperable to the standard WSS base addresses. DMA/IRQ of the WSS chip are routed through the CD interface channel of the ODIE chip (at least on the S-2000, likely on the SC600 as well.

It then seems that after seeing the success of the Reveal design, Ensoniq decided to copy the idea, but ditch the tone control chip, possibly for cost reasons. There are some technical differences between the cards I already know, possibly there are more.

  • The ODIE offers four IRQ pins, that need to be routed to the ISA bus. The ODIE datasheet suggests to connect them to IRQs 2, 7, 12 and 15. This actually seems to be how the IRQ lines are wired on the X-TECHSND001. As I don't have a photo of the SJ-MS01, I can only guess that they used the same IRQ assignments. When Reveal designed the SC600, the "standard" Sound Blaster IRQ was changing from 7 to 5, but the suggested ODIE setup did not include IRQ5, so Reveal substituted IRQ12 (which happens to collide with PS/2 mice, but I don't think that was a notable consideration in 1993) by IRQ5, yielding IRQs 2, 7, 5 and 15 (in that order!). The S-2000 offers more conventional Sound Card IRQs: IRQ 2, 5, 7, 10 (in this order!). This means that a tool meant for the Reveal card that tries to set up the card to use IRQ 5 or 7 assigns exactly the other IRQ if it is interfacing with an S-2000 card.
  • The Reveal cards connects the POWERDOWN line (which is also a RESET line) of the WSS CoDec to the RESET line of the MC68000 microcontroller, so the AD1848 automatically gets reset when the firmware gets loaded. The S-2000 connects the POWERDOWN line of the WSS CoDec to the CDRST (CD interface reset) line. I could not find a way to trigger a CD reset from software.

Now, these difference are minor and likely insignificant, unless you want to write a driver for those cards. There is a reason why I am quite interested in them, though. There are two entirely different firmware variants for the S-2000 card. There is an addendum to the user manual released with software version 1.2 explaining all the differences. While I know someone who was using the pre-1.2 software with a (likely?) type-2 MediaFX, the pre-1.2 software for S-2000 cards seems to have vanished from the internet. But Horun kindly uploaded the pre-1.2 software for the Reveal SC600 card to vogonsdrivers. I am trying to get that software working with my S-2000 card, and ran into various difficulties. While I already knew about the different IRQ routings, I tried to use the "safe" IRQ2, just to hit a supposed mainboard BIOS bug of my Biostar MB-8433UUD (as this is a community-modded BIOS, I won't blame the vendor yet, although that bug is unlikely to be affected by the community mods, mostly modbin-like stuff). On AT computers, IRQ2 does not exist, but exists as IRQ9 instead. The BIOS installs an IRQ9 handler that forwards IRQ9 to IRQ2, which provides compatiblity with PC/XT software that expects IRQ2 to be invoked. The IRQ9 handler forwarding to IRQ2 obviously only gets invoked if IRQ9 is unmasked, but my BIOS boots DOS with IRQ9 masked, and a program (like the early Reveal SSINIT.EXE) that just hooks IRQ2 and unmasks IRQ2 will not get IRQ9, because that one is still masked.

The next post is this thread will describe how to patch the SC600 SSINIT to be compatible with the Ensoniq S-2000 card. (EDIT: Instead of patching the Reveal SC600 SSINIT, you should just use the Ensoniq S-2000 drivers found by Rawit further down in this thread!) If you were to convert the SC600 SSINIT into an S-2000 SSINIT program, you need to consider: The patch does not only involve changing the IRQ routing tables (which then can be patched to use "9" instead of "2" as well), but I also noticed that SSINIT only works one time after a cold boot. The second time it complains that the WSS CoDec is not responding correctly. This is because the SC600 SSINIT tool expects to find the AD1848/CS4248 in the state after reset after uploading the firmware. On the SC600, every firmware upload resets the WSS CoDec, so this works. On the S-2000, the WSS CoDec is only reset by the ISA RESET line, so on the second run, the CoDec does not respond as expected, which will cause an error message.

Interestingly, the SC600 SSINIT seems to be compiled targetting the 8086/8088 processor, so it might actually be interesting to test the S-2000 in an XT, but this will be for a later topic.

To end this post, I will explain shortly, why I consider the "old" firmware quite interesting: While the post-1.2 firmware is definitely better for gaming (it has a kind-of okay soundblaster emulation), it did away with some interesting features of the old firmware, which seems to be the "Mockingbird-OTTO firmware" mentioned in the datasheet. The Mockingbird firmware has two features that set it apart from the later firmware: For one, it supports two pannable stereo playback channels through the ODIE/OTTO system. On WSS-equipped cards (i.e. everything except the S-1000), this yields 3 independent stereo wave channels, which are acutally all usable with the Windows drivers in the SC600 package. The 1.2 software (and all later software) only offers the WSS playback channel in Windows. But the real kicker is: The Mockingbird firmware allows custom samples for the MIDI synthesizer. This obviously is quite lame for the SC600 or S-2000 as they only have 128K of RAM, which also contains the firmware, but you should be able to bodge a 2MB RAM chip to an S-2000, and get it supported. Even without extra RAM, being able to tune the synthesizer parameters might prove interesting.

I know I repeatedly overpromised stuff I wanted to do, but I really try to document how the synthesizer parameters on the Mockingbird firmware work, how to upload custom waveforms and how to (re)program instruments. So while I recommend you don't hold your breath till this stuff is delivered, there is some hope I will deliver.

Last edited by mkarcher on 2026-03-24, 20:38. Edited 2 times in total.

Reply 1 of 13, by Rawit

User metadata
Rank Oldbie
Rank
Oldbie

I'm totally not knowledgeable concerning Ensoniq cards but do like some soundcard history. One thing that caught my interest: "The Mockingbird firmware allows custom samples for the MIDI synthesizer".

The Turtle Beach Wavepatch documentation mentions the ICS Mockingbird sample format:

"The Replace Internal Sample command is used to replace an internal sample with an external sample file. It differs from the SampleStore command and the various Load Sample buttons in two ways:

1. It allows internal ROM samples to be replaced, and
2. it allows samples in the proprietary ICS Mockingbird format to be loaded."

Seeing how the ICS WaveFront is clearly inspired by the GF1 and the GF1 is related to Ensoniq it makes me wonder if it's related.

YouTube

Reply 2 of 13, by Rawit

User metadata
Rank Oldbie
Rank
Oldbie

From WFGATAPI.H (part of the WaveFront SDK):

// WFGATAPI.H
// Interface API for WaveFront Gatekeeper DLL (WFGATE.DLL)
// 2/1/94 J. Johnson
// Copyright ⌐ 1994 Turtle Beach Systems, Inc. All Rights Reserved

// Modified
// 7/18/95 Mark Otto - added functions for use in Tropez PnP for effects
// - Gate(Set/Get)ReverbType
// - Gate(Set/Get)ReverbDepth
// - Gate(Set/Get)ChorusType
// - Gate(Set/Get)ChorusDepth
// - Gate(Set/Get)OtherFXType
// - Gate(Set/Get)OtherFXDepth

#ifndef WFGATAPI_H
#define WFGATAPI_H

// Structures used by the API. These are exact representations of the
// structures specified in the Mockingbird docs.

YouTube

Reply 3 of 13, by mkarcher

User metadata
Rank l33t
Rank
l33t

The name "Mockingbird" is possibly used multiple times independently in the music synthesis business, so there may be a relation, but there need not be one.

The instrument data used by the Mockingbird-OTTO firmware is mentioned in https://www.os2museum.com/wp/dumping-ensoniq- … oundscape-roms/ , and https://gitlab.com/dmo2118/sdgi2sf2 contains a project that can read ROM dumps of the Soundscape cards and produce (approximately?) equivalent SoundFonts from it. This is definitely a valuable resource in understanding the data format.

Reply 4 of 13, by Rawit

User metadata
Rank Oldbie
Rank
Oldbie

That's true but seeing Mockingbird mentioned and modifications to code by someone with last name Otto does make you scratch your head. Is there a file date known for the pre-1.2 software? The Reveal package is a mixture of 1993 and 1994 dates, 1994 being the drivers and 1993 being software package? I'm trying to dig up old Turtle Beach stuff, can have a look at Ensoniq stuff as well.

YouTube

Reply 5 of 13, by mkarcher

User metadata
Rank l33t
Rank
l33t
Rawit wrote on 2026-03-24, 08:05:

Is there a file date known for the pre-1.2 software?

Yes, there is. The VOBIS MediaFX update announcement I linked in my initial post (I know, there are a lot of links, I can't expect anyone to follow them all) mentions these pre-1.2 releases:

  • Releases dated November 1993, December 1993 and June 1994 for the rebranded SC600 ("MediaFX type 1")
  • Relesaes dated April 1994 and June 1994 for the rebranded S-2000 ("MediaFX type 2")

The 1.2 release is dated March 1995.

I don't know about the dates of the files included, but recognizing old vs. new is likely quite easy: The old release only came with one firmware file named "SNDSCAPE.COD", while the 1.2 release started to include firmware files with different extensions for different cards (at some time, SSINIT learned to deal with both the SC600 and the S-2000, but that was not in the original 1.2). The firmware files from the 1.2 release are named "SNDSCAPE.COx" where x is a digit. AFAIK the firmware file for the S-2000 is named SNDSCAPE.CO0 which includes metadata for the sample set in 135-09-016-01 ROM, the usual ROM shipped with S-2000 cards.

Reply 7 of 13, by mkarcher

User metadata
Rank l33t
Rank
l33t
Rawit wrote on 2026-03-24, 10:22:

Probably that's the driver package I am missing. How did you find it? Did you know discmaster.textfiles.com before, or did some search engine lead you to that host? I never heard of it yet, but it seems to have a very nice file browser supporting nested archives. Most likely, using SSINIT.EXE from that package removes the need to patch the SC600 SSINIT.EXE which is incompatible with the S-2000.

Thank you very much! I will look into it shortly.

Reply 8 of 13, by Rawit

User metadata
Rank Oldbie
Rank
Oldbie

I do a lot of searching there, basically a search engine that goes through the Archive.org uploads. Since I discovered it a few years back it's my goto to dig up old stuff. I hope the driver is something useful!

YouTube

Reply 9 of 13, by mkarcher

User metadata
Rank l33t
Rank
l33t
Rawit wrote on 2026-03-24, 13:21:

I do a lot of searching there, basically a search engine that goes through the Archive.org uploads. Since I discovered it a few years back it's my goto to dig up old stuff. I hope the driver is something useful!

I just tested the driver pack with my Spea/V7-branded S-2000, and they worked out of the box, so this driver set removes the need to modify the SC600 driver set to suport the S-2000 instead.

The S-2000 package you linked has a README that contains a change log, with the newest version mentioned being 1.03. SSINIT claims to be version 1.21.

The SC600 package on vogonsdriver does not have a README, and SSINIT claims to be version 2.21.

I suppose that the different major version is just a renumbering. The user interface looks mostly identical, except that the Reveal SSINIT has controls for the TDA8421 bass, treble and stereo enhancement features, while the Ensoniq one doesn't (the Ensoniq card also doesn't have that chip). I also compared the firmware files, which are different as well. Possibly, the TDA8421 support has been removed from the Ensoniq variant of the firmware.

Nevertheless, this is exactly the driver package I assumed to be lost in time, so thanks again for finding it.

Reply 10 of 13, by mkarcher

User metadata
Rank l33t
Rank
l33t

So, XT test results are in. With a V20 processor (can execute 286 real mode opcodes), I can initialize the card, and play back MIDI using the DOS drivers/tools delivered with that card. With an 8088, ssinit still works, but the DOS driver for sound/midi playback crashes.

I had issues with digital sound, but I also had issues with digital sound in the computer I tried the card in before, so this might be a general problem with either that driver or my hardware. Furthermore, my XT is acting up, seems the 64k x 1 parity RAM chips are dying and the replacements I ordered from AliExpress are dead on arrival. I tried downgrading to 512K RAM using 256k x 1 chips only, which seems to have cured the problem. Digital sound with V20 does not play back anything and the 8088 still crashes. So I don't think it's my XT hardware, but possibly some issues are in fact due to the XT hardware anyway.

Reply 12 of 13, by mkarcher

User metadata
Rank l33t
Rank
l33t

So, this is some intermediate post regarding technical details of the interface between the Mockingbird-OTTO firmware and the host PC. Much of the information contained in this post can also be obtained from the ODIE datasheet, but I'm trying to describe the stuff in more detail with more background and application information.

The ODIE chip provides two bidirectional 8-bit wide communication ports between the ISA bus and the on-board processor (OBP). Each bidirectional port has two 8-bit latches, one for the PC-to-firmware and one for the firmware-to-PC direction. This is a very typical microcontroller interface, and it can be found in a similar way on the Intel 8042 (used for the keyboard controller in the AT) and the Creative Labs SoundBlaster (the SB 1.0 actually did have dedicated latch chips for that). The PC-side of these ports support two modes. One mode is called "6850 emulation", while the other mode is called "MPU401 emulation" mode. It seems the "6850 emulation" mode is closer to the metal, and more flexible, and the MPU401-compatible interface has been added on-top of it due to the sheer amount of MPU401-compatible software. Both modes require 2 I/O ports per communication channel.

So lets get into the basics of the 6850-compatible mode first: In that mode, the first I/O port is the status/control port, while the second I/O port is the data port. The data port is quite straightforward: Reading the data port yields the current content of the firmware-to-PC latch, and resets the "firmware-to-PC latch filled" status bit. Writing the data port updates the PC-to-firmware latch, and set the "PC-to-firmware latch filled" status bit. The control and status port mimick the layout of the 6850 ports, with a slight extension. The "6850" refers to the Motorola MC6850, a common UART chip originally designed for the 6800-series 8-bit microprocessor series.

The control port has this layout

  • Bits 0&1: On the MC6850, these bits set the clock divider, allowing 3 different choices, and if both bits are set, the MC6850 including the divider enters reset. On the ODIE chip, only 11b (both bits set) is recognized. The OBP firmware has access to a status bit indicating whether the port is in reset mode or not.
  • Bit 2: This bit is entirely different from its use on the MC6850. This bit is just mirrored to the OBP side and can be seen as a "9th data bit" associated with the byte currently in the latch. It is used to provide two logical channels over one port: If this bit is clear, the data byte is intended to be sent to the "command stream"; if this bit is set, the data byte is to the "data stream". The meaning of "command stream" and "data stream" as assigned by the Mockingbird-OTTO firmware is described later.
  • Bit 3/4: Ignored
  • Bit 5/6: Transmit mode. The MC6850 allows multiple choices, including generating a BREAK condition. ODIE just recognizes 01b as "Transmit interrupt enabled" and all other combinations as "Transmit interrupt disabled". This matches the interrupt enabling behaviour of the MC6850. If set, an interrupt is requested if the firmware-to-PC buffer is empty.
  • Bit 7: Recevie interrupt enable: If set, enable interrupt generation if the firmware-to-PC buffer is filled.

The status port on the other hand has this layout:

  • Bit 0: Just like on the 6850: Set if the firmware-to-PC buffer is filled, i.e. a data byte is available to be read from the data port
  • Bit 1: Just like on the 6850: Set if the PC-to-firmware buffer is empty, i.e. a data byte may be written to the data port
  • Bit 2: Just like bit 2 of the control port, this bit mirrors a bit writeable by the firmware, which indicates whether the byte currently available on the data port is part of the "command stream" or the "data stream".
  • Bits 3-6: Documented to be always 0 on the ODIE. They indicate various serial port status bits on the 6850.
  • Bit 7: Interrupt status bit: This bit is set if an interrupt request is currently active. This is the case if bit 0 of the status port is set and bit 7 of the control port is set, or if bit 1 of the status port is set and bits 5-6 of the control port are 01b (or both conditions apply).

That's basically all there is to say about the hardware interface of that communication channel. The idea of the command/data distinction might be inspired by the host interface of the Intel 8042, which provides two different 8-bit ports the host might write to, and allows the 8042 firmware to look up which port the data was written to. To avoid any confusion: While this command/data distinction is similar to the MIDI protocol, in which bytes less than 128 are data bytes and bytes of 128 or bigger are command bytes, this distinction happens on a lower layer and is not used to distinguish MIDI data bytes from MIDI command bytes. Instead, the Mockingbird-OTTO firmware uses this command/data distinction to multiplex two logical communication channels over the same port (of which there are also two). This means there is support for up to four streams: The data stream on the first communication port, the command stream on the first communication port, the data stream on the second communication port and the command stream on the second communication port. A later part of this post will explain how these streams are used by the firmware.

For compatibility with MPU401 software, the communication ports can be switched into an MPU401-compatible mode. In that mode, there no longer is a control port. Instead, writing to the first I/O port populates the PC-to-host latch and sets the command/data indication to "data", while writing to the second I/O port also populates the PC-to-host latch, but it sets the command/data indication to "command". This is very much like the Intel 8042 operates as well. The contents of the data latch is available on the first I/O port in MPU401 mode, which behaves on read just like the second I/O port does in 6850 mode. On read, the second I/O port is the MPU401 status port:

  • Bits 0..5 are always set
  • Bit 6 is clear if the PC-to-firmware buffer is empty, i.e. you may write data to the data I/O port or the command I/O port
  • Bit 7 is clear if the firmware-to-PC buffer is filled, i.e. you can read (new) data from the data I/O port.

Note that there is not command/data distinguishing bit in the MPU401 status port (for compatibility with the MPU401, which also doesn't have a bit like this), and there are no interrupt enable control bits. The missing command/data bit in the MPU401 status means that the PC software is unable to tell whether the firmware tagged a byte as being part of the "command stream" or the "data stream". In the other direction, tagging still works, because the MPU/6850 mode toggle only affects how the PC/ISA side sees the communication port, but does not change how the OBP sees the communication port. The PC-side interrupt enable bits are fixed: The interrupt indicating an empty PC-to-firmware buffer is always disabled, while the interrupt indicating a filled firmware-to-PC buffer is always enabled. The datasheet stresses this point, because it means that the interrupt is stuck active while a data byte from the firmware to the PC software is pending to be read. On a system like the IBM PC/XT/AT with edged triggered interrupts, this means no further interrupts can be triggered on that line, on a system with level triggered interrupts (e.g. MCA), this would mean the host interrupt will be invoked in an inifinite loop if it does not read the data byte.

The ODIE architecture including the MPU-compatible mode is quite smart for the target application: The ODIE has a dedicated IRQ line associated only with the first communication port, allowing the first communication port including its IRQ to be handled by different software than the remaining SoundScape stuff which can use the second communication port and its own interrupt. For example, this might mean in Windows 3.1, a DOS program can interface the MPU401-compatible port, while at the same time the Windows driver can talk to the firmware to adjust mixer settings (especially on the S-1000 with the firmware-controlled LMC385 chip, but also on the SC600 with the firmware-controller TDA8421) or wave playback.

The mode (MPU401 vs. 6850) is controlled by the firmware, and because unread bytes can cause stuck IRQs in MPU401 mode, MPU401 mode is only recommended for application compatibility (on the first communication port), but warned agains on the second communication port. The Mockingbird-OTTO firmware actually implements two different mode settings, which can be switched using a firmware command.

In 6850 emulation mode, both communication ports (the primary one at 330/331, the secondary one at 332/333) are set up in 6850 emulation mode. This mode is not MPU401 compatible. The stream assignment is

  • data stream on primary port: MIDI in/out at the game port.
  • command stream on the primary port: not used (actually, MPU401 commands are processed there, but this is likely not intended usage)
  • data stream on the secondary port: MIDI data for the internal synthesizer, responses to MIDI SysEx commands from the internal synthesizer.
  • command stream on the secondary port: firmware control commands and their replies; wave playback status notification ("unsolicited replies")

On the other hand, in MPU401 mode, the primary port is switched to MPU401 emulation mode, allowing compatiblity with MT32/GM games. The stream assignment also changes:

  • data stream on primary port: MIDI data. MIDI sent to the card is sent to the internal synthesizer and/or the game port depending on configuration. MIDI input is an uncoordinate mix of MIDI in data and SysEx replies from the internal synthesizer. This means that using SysEx commands to interrogate the synthesizer status does not work reliably if MIDI in on the game port is used at the same time. This typically is no issue in practice.
  • command stream on the primary port: As discussed above, for data flowing from the firmware to the PC, there is no distinction between command and data stream bytes in MPU401 mode, so the command stream on the primary port can be seen as unidirectional stream. That stream is used for MPU401 commands.
  • data stream on the secondary port: unused (actually, MIDI data written to it get forwarded to the external game port)
  • command stream on the secondary port: firmware control commands and their replies; wave playback status notification ("unsolicited replies")

In summary, this means that 6850 mode provides easier control over the two MIDI devices (the internal synthsizer and the external MIDI at the game port), while MPU401 mode provides better application compatiblity. You can get full control over both MIDI out channels by configuring the MPU401 to "internal synth only" and using the data stream of the second port to address the external game port, even though I assume the possiblity to output data to the game port via the data stream of the second port in MPU401 mode is just an artifact because this is a desired feature in 6850 mode.

In MPU401 mode, the target MIDI port is selected by writing 00 to 03 to the MPU command port. Using the command port while in UART mode is not supported on a physical MPU401, these commands work on the Mockingbird-OTTO firmware even after "enter UART mode" has been sent. The low two bits are enable bits: Bit 0 if set enables playback using the internal synthesizer, while Bit 1 enables forwarding the MIDI data to the game port.

Reply 13 of 13, by mkarcher

User metadata
Rank l33t
Rank
l33t

The first release (consider it more like a tech demo and proof that the project setup works) is ready, see

https://github.com/karcherm/mockbird/releases/tag/v0.1

You can use that tool to reconfigure which patches are used for a melodic program. Look at https://karcherm.github.io/mockbird/v0.1/ for some documentation what "patch" means in this context.