The mini-MPI that I designed earlier has been available for a while now, and finding a place with quite a few Color Computer enthusiasts out there. I had been thinking for a while about doing something with more slots as well, because there just aren’t enough original 4-slot MPIs out there. As of this writing they go for $150-$200 each, when they are available, which certainly isn’t all the time.
The point is, the community needs more MPI options… I felt the time was right to produce another design to offer alongside the mini. About the time I was starting the design, I happened to catch an episode of CoCo Talk, where sound chips and other expansions were being discussed.
During the discussion, the idea of the ultimate CoCo expansion started to take some shape. It would be a multi-slot MPI with a sound chip and serial ports. This fit in nicely with the project I was beginning, and if that’s what the group wanted, then I’d try to do just that.
The MPI portion of the design was straightforward enough, given my previous experience on the mini-MPI, which left selection of components for the extended features.
Earlier Facebook group discussions on sound chips had steered me to the Yamaha YMF-262M (OPL3) as a possibility. The ‘262 seemed a good fit for the project, and offered a lot of capability for our 8-bit CPUs to work with. Listening to the quality of sound that can be reproduced using this chip on YouTube videos and the like was enough for me. Especially once I discovered the required chips were available, and in fact, relatively cheap. I was sold on the YMF-262, or at least on trying it.
Next, selection of the serial interface components…
I had a few criteria here; it needed to be an actual serial UART, it needed to be current production, and it needed to be SMT. Researching this, it became apparent pretty quickly that of the original UART lines that existed in the past had pretty well died out except for the 16550, several examples of which are in current production in SMT quad flat packs. Price and performance pointed me straight at the NXP SC16C550B, a capable current incarnation of the 16550 rated for higher speeds and with 16-byte FIFO buffers. Two of these would offer a decent serial expansion without getting crazy on cost or board space. Selection made…
Buffers would remain the same as the mini-MPI, 74ABT16245’s, perfect for this application. For the CPLD, I decided to step up from the XC9572XL used in the the mini to the XC95144XL, just to be on the safe side capacity-wise. The 100-pin QFP was selected as sufficient IO for the project.
On to the form factor… I knew I wanted to keep this MPI as small and unobtrusive as possible while still providing four slots. After some thinking, measuring, and note taking, I had some basic dimensions. John Strong had agreed to make the cases, as he does for the mini. Giving him an outline of the basic design yielded a test print, letting me see a little more effectively just what we had so far.
Test print with original MPI and carts for comparison
As can be seen, this design will be quite a bit more compact than the originals. I made sure however to leave the same amount of space between carts for ‘ribs’ in the case top plate. This should allow for carts to be held securely in place, even longer ones with cables on the end, hopefully.
So far, this all looked good, so the next step was designing the PCB with the dimensions I had established. A few days later, I had the design files for a prototype.
Initial PCB design
A couple of weeks later, and I’ve got the parts and PCBs to build that prototype.
Initial test PCBs
We need a prototype case!
After working up the CPLD programming for the basic MPI functionality and the sound chip, it was time for some testing. MPI functionality with all the carts I had close to hand looked good after a few tweaks, and the logic was in for the OPL3 interface. Let’s try to make some sound!
Initial sound test
I tested the interface initially with a quick BASIC program that sets up 2 FM operators to produce a tone, and steps up and down in frequency to vary it a bit. Rudimentary, but we have sound!
Well, now I have to hear something better, so I hacked a quick ML player for VGM files onto some existing menu code I had for browsing and mounting files on the CoCo SDC. VGM files consist of a stream of commands; sound chip register writes, wait periods, etc., and are specific to a certain sound chip or platform. So it was fairly quick to write. I used the prototype MPI board with the CoCo SDC and one of my CoCo PSG carts installed. I used only the 512KB RAM chip on the PSG, to hold the data for streaming to the chip. It sounds terrific! Here are a couple of sample tunes played on the MPI prototype, recorded on my MacBook Pro through a direct line-in connection.
‘FM house’ an OPL3 chiptune
‘What’s love’ another OPL3 chiptune
The YMF-262M (OPL3) is also OPL2 compatible. A bit in one of the registers is set to enable OPL3 features. So of course I had to write an OPL2 player routine to see what that sounded like. Here’s an example.
‘Dune’ an OPL2 chiptune
So, this brings us up to date on the project status as of 5/9/18. The MPI functionality is done, the sound chip works, the CPLD interface for the serial UARTs is implemented (needs testing). Left to do is to build an interrupt system using the /CART (FIRQ) line, make any needed revisions to the PCB, and build a final version of the board. After that, once John has a case design, we should be good to go.
Since the last update, I’ve had a chance to test the UARTs, which provide high-speed TTL level serial communications for the MPI. I wrote some transfer code on both ends (my MacBook, and the CoCo) adding a serial load option to my chiptunes player. Here’s a couple of videos…
Initial UART tests
UART speed test
I’m very pleased with the performance of the UARTs. I was able to achieve a transfer rate of over 50Kbytes per second using a .89MHz CoCo2 and a USB to serial bridge connected to my MacBook without much trouble. 100Kbytes+ per second should be possible with a double speed CoCo3.
During development, and while using multiple sound carts, I discovered an issue I hadn’t foreseen. Cartridges that output sound on the CoCo typically use the sound_in line at the cart port in addition to any separate outputs they might include, in order for the sound to be available to the computer for use with the RF modulator, etc.
This signal is supposed to be AC coupled to this sound_in line by any sound carts. This is explicitly stated in some of the documentation, the service manual I believe, for CoCo2’s.
It apparently wasn’t a consideration that more than one or two carts might be coupled to the line simultaneously, as I’ve found that excessive loading of the line degrades sound quality considerably. This might not seem much of an issue, but I wanted to build kind of a ‘CoCo sound system’ using the MPI personally, and would want multiple sound carts connected at once. So I decided to do something about it.
My solution to this problem on the MEGA mini is to add a software controllable analog switch to the board. This switch takes the sound line from each cartridge slot, as well as the built in OPL3 circuit as a separate input, and routes only one of them to the CoCo cart port. In this way, the lines are isolated from each other, and the problem is solved!
You can see the analog switch IC in the middle of the board below, to the right of the cartridge slots on the REV03 board.
REV03 board, bottom
Speaking of software control, a brief overview of the general operation of this MPI is as follows…
Like any MPI, at the heart of the system lies the MPI register. This is an 8-bit register whose purpose is to switch the bus arbitration signals; /CTS and /SCS, as well as /CART (the cartridge interrupt), to the appropriate slot under software control.
The upper four bits of the register are the slot number (in binary) that will be connected to /CTS and /CART (these two are bundled together). The lower four bits indicate the slot that is to receive /SCS.
As you can see, although Tandy only produced MPI’s with four slots, the system will accommodate up to sixteen. This is great, because it allows us an easy way to extend MPI functionality and avoid address conflicts by assigning additional hardware to a ‘virtual slot’ somewhere above the usual four.
This is what I’ve done with the additional features available on the MEGA-mini. The YMF-262 (OPL3) sound chip is found at virtual slot 5, the UARTs occupy slot 6, and additional MEGA mini features are found at slot 16 (enhanced IRQ system, analog switch, and programmable timer).
Specific details on hardware addresses and other programming information will be available in the MEGA mini user manual which is currently in progress.
I recently received a prototype 3d printed case from John Strong for this MPI, as he will be producing the cases for me once I get production of this item underway. His design is just what I had in mind when I started this project with the aim of a compact four slot MPI. Here are a few pictures of what we have so far…
MEGA mini, prototype case
Here’s a short overview of the MEGA mini in video form…
And here is the manual (WIP)… MEGAmini manual