You may have never heard of the Texas Instruments SN76489, but if you are reading this article, there’s a good chance you have heard it.
The SN76489 is a sound chip which, according to the Wikipedia entry, was used in systems such as:
- ColecoVision (and it’s home computer counterpart, the Adam)
- Sega Game Gear portable (a clone chip)
- Sega Master System (a clone chip)
- Tandy 1000 (and the IBM PC jr?)
- Texas Instruments TI-99/4A (earlier variation)
…and in arcade games such as:
…and many more. I am just naming the machines and games I have heard of or seen/played.
Side Note: The Wikipedia entry also claims the Sega Genesis used one, but it had far fancier sound. A quick search shows the Genesis did not use this chip, so other systems may also be incorrect. Ah, Wikipedia…)
This chip is able to produce three tones and one white noise at a time, which sounds an awful lot like the audio capabilities of my first computer, the VIC-20.
The chip has none of the fancy synthesizer features found in other chips, such as the famous Commodore 64 SID chip. The only thing you can do is adjust the volume level of each channel of sound. Clever software uses this to produce bell sounds and other effects. (If Congo Bongo is really using this chip, it’s doing some fancy things to make those bongo sounds!)
Thanks to StrongWare‘s John Strong, I now have one of these chips to experiment with. It is wired up to an Arduino Nano clone. (NOTE: I had issues getting this clone recognized on my Mac, due to it using a different serial chip. I found the solution, and wrote about it earlier this week.)
John pointed me to this short tutorial on how to use the chip:
Using sample code there, I was able to get the device making tones, and then expanded it to play a sequence of tones to make a tune.
The next day I added more code so it could do a multitrack sequence.
I thought it might be fun to share what I have learned the first two days of playing with the device, and share the code I have come up with.
I will do a full article on the chip and how it works (summarizing some overly complex explanations I have been reading), but until then, here is my sample project:
It contains routines to poke bytes to the SN76489, plus a work-in-progress multitrack music sequence that currently plays the 2-voice intro music to Pac-Man :)
I’ve been fixing up the comments and squashing some bugs, so check back for the latest. I still have to add real/better support for the “noise” channel, but it works right now for playing simple tunes.
More to come…