I'm building an audio circuit that will play VGM files (Video Game Music).

I have it working with two different "vintage" IC's such as the SN76489 and the AY-3-8912.

Currently, my design is using an Arduino Micro and two shift registers for the data buses and direct pins for the control pins on the audio IC's.

On average, an audio IC has 8 pins for the data bus and 4 pins for the control or address bus. This varies per IC. Some might be 3, some 4, some 6, etc.

Bottom line, even with the 20 IO pins on the Arduino, I will quickly run out of pins. I thought about serializing many shift registers and basically pass 64 or 128 bit numbers to spread out to the multiple IC's but this sounds ugly.

I'd like to be able to support maybe 6 IC's which could be 60-80 pins.

I also have an Arduino DUE which has many more IO pins. But then I have to deal with the 3.3v limit and I only have 4 level shifters (16 pins).

Any suggestions on how to handle this?


  • Get a ATmega128A and learn how to do MMIO. Feb 27 '15 at 3:46
  • A quick search reveals that MMIO "seems" to be very similar to how the Apple IIe handled the 7 slots. Each slot has a /IOSEL pin that is normally HIGH. When you access an address like $CNXX where N is the slot number, /IOSEL goes low and the slot becomes active. Each slot has a 16bit address bus and 8bit data bus. Is MMIO a similar technique? So basically all IC's would be on the same address/data bus but different addresses would activate them separately? If so, where can I find some info for doing this with Arduino?
    – cbmeeks
    Feb 27 '15 at 3:55
  • Also, I should note that many of the IC's would not need to be disabled as they could be playing a note at the time. So, I'm thinking that they all would share a common data bus. Then, the address bus would be mapped to each IC so that certain ranges would turn the data bus on/off for them. Would this be the job of an octal bus transceiver?
    – cbmeeks
    Feb 27 '15 at 4:03
  • Neither the Atmega328P, ATmega1280, nor ATmega2560 have an external memory bus, so you'd have to look at something like the ATmega64A or ATmega128A. Many chips have a "select" or "enable" line as well as their data and command buses; if all of yours do then all you need to do is make sure that only one chip is enabled per address or range of addresses. Feb 27 '15 at 4:09
  • Thanks, that was an initial thought I had but I'm not sure yet how each IC will respond to being disabled while it's playing a note. The AY-3-8912, for example, can be set to INACTIVE so I will have to see what that does. I think it puts the address/data bus in high impedance mode. But I don't know, yet, what that will do to the note(s) playing.
    – cbmeeks
    Feb 27 '15 at 4:18

There are other ways,but for a brute force many pin driver solution:

Back at the beginning of time when steam driven IC's were all the vogue there was the awesome MM5450. 40 pin DIP. 34 on/off outputs. 3 pin control. Or the really keen could do it with 1` pin control and some basic RC timing. I was. I did.

Its day has passed. but, fortunately. neither Micrel or Digikey know this.

MM5450 datasheet
In stock Digikey $5.46/1

It's a very benign beat to drive once you get to know it. There is no reset (inless you buy bare dies) so you have to start off getting it synchronised - it's not hard, just not quite usual. Works well.

For single GPIO pin control the pin acts as data out and clock with some RC timing.
Fot ICs with clock/data/load you can do all 3 with RC timing on one pin.

And there is a 44 pin PLCC pkg version available.


SN74LS673 16 bit SR, 24 pins http://www.ti.com/product/sn74ls673

ICM7243 http://www.ebay.com/itm/ICM7243BIPL-HARRIS-40-Pin-DIP-LED-DISPLAY-DRIVER-ICM7243-7243A-/390402848376

And others http://www.ebay.tv/sch/i.html?_sop=7&_nkw=led+driver+ic&_frs=1


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.