Building an Arduino Chiptunes project inside an FPGA

From time to time we find ourselves in the mood for some Chiptunes. You know, the music that accompanied all of the best 8-bit console games? These days there are a lot of projects that use the audio chips of yore to recreate the sounds, but you’re always faced with the issue of sourcing those parts. [Jack Gassett] took some inspiration from one of those projects, but solved the rare hardware dilemma by building his own Chiptunes MIDI device in an FPGA.

He saw one of our features on an Arduino controlled YM2149 programmable sound generator. He realized that you can already find FPGA libraries out there that mimic this sound generation hardware, and he’s already done extensive work with an Arduino soft processor. Why not combine the two?

He’s using a Papilio FPGA with a wing that includes a MIDI connector and audio-out jack. As you can hear in the clip after the break this sounds just like the real thing. And he’s got plans to roll as many different types of sound generating chips into the mix as possible. You know, one FPGA synth to rule them all.

[Read more…]

Playing chiptunes with a YM2149 and optimizing an Arduino

[Oryx] grew up with the bleeps and bloops of an Atari ST, so it comes as no surprise he would want to relish in his nostalgia by playing with the YM2149 sound generator he recently picked up on eBay. Like most of us, [Oryx] went to his old standby, the Arduino, when it came to connect this bare chip to his computer. The first circuit didn’t work, so after a lot of poking around the firmware, [Oryx] discovered the benefits of hand-optimizing software.

There are a lot of sound files available for the YM2149 floating around on the Internet. These files are just dumps of the 16 registers at 50Hz, so it’s very easy to send these from a computer to an Arduino over a serial connection. Unfortunately, when [Oryx] got his breadboard set up nothing happened. After breaking out the ‘scope, he discovered the Arduino was switching pins 100 times slower than the YM2149 data sheet called for.

[Oryx] remembered seeing a great blog post going over the speed at which the digitalWrite() function changes pin states. We’ve seen this before, and the fastest way to change pin states on the Arduino is with the ugly bitwise manipulation. After changing a few lines of code, [Oryx] was switching two pins nearly simultaneously.

Now that the YM2149 chip is working correctly, [Oryx] is planning to make a MIDI synth out of his project. You can get an idea of how that will sound with the demo video he put up after the break.

[Read more…]