MEGA-mini MPI

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

First build

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, BOTTOM

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.

MPI_register

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

15 thoughts on “MEGA-mini MPI”

  1. Will the serial ports work with existing terminal software, e.g. as an RS-232 Pak? Curious if new software will need to be written entirely.

    1. In most cases I believe new software will have to be written or old software patched. Although supposedly a 16550 driver already exists for OS9, though I’m not sure what uses it.

      1. I thought the 16550s were backwards compatible with the older UARTs?

  2. Hello,
    For the old MPI, the cartridges are placed in the MPI slot, top face away from the operator.
    Physically, you can also do it the other way, but then you can say goodby to your coco, and cartridge.

    For the “MEGA-mini MPI”, do the cartridges use the same orientation as the old MPI ?

    If not, are you not afraid that someone by accident places his cartridge the wrong way, and damage his system.

    Mark

    1. Hi Mark, the connectors are significantly offset in each slot. It’s not really possible to put carts in with the wrong orientation.

  3. I know this is late to the party, but any thoughts as to moving the cable connectors so they would face the back of the CoCo? This way all the cables face the same way and the desk space you freed up by making a smaller unit remains free from dangling cables.

    1. Hi John. I wanted to keep the MPI lower and further back from the keyboard area as much as possible. Having the ports in the back would have added about an inch or so of width from front to back.

      I will be supplying right angle cables for audio and power which will keep it tighter to mitigate stuff hanging out the side somewhat.

  4. This is awesome! I just found out about this and want to buy one from the next run. What is the best way to stay informed of that?

    Have you considered adding an audio mixer, so that one of more carts’ audio outputs could be mixed with the built-in OPL3 output? Then would could write software (I’m a retro game dev) that uses more than one sound chip at the same time (esp. for music and sfx and speech synth all at once). It would also mean never having to switch which cart’s, or the built-in, sound was active.

    1. I haven’t really thought of that. I’ll keep that idea in mind if I revisit the design though.

      The best way is probably just to check the site from time to time. I have to bounce around from
      project to project on production, so availability varies.

Leave a Reply