The PSG works by sending wave type, frequency, and volume change messages over a USB connection to a Raspberry Pi Pico. The Pico then parses the commands read, and converts that into a message to send to a single PIC chip, which is selected by sending an interrupt using a shift register. The data is sent using an 8-bit parallel data connection over the Pico’s GPIO, with all of the input pins tied together.

I hooked it up to my Lua-based fantasy computer platform, CraftOS-PC, through a C++ plugin over serial, which exposes it with a simple API to set wave type, frequency, and volume for each channel. Then I made a tracker program that can play XM and S3M tracker modules through the API, and I also added sound functionality to Game Boy and NES emulators. It sounded great on the prototype (even with only 4 channels), and I can’t wait to hear what the 16-channel version will be like.

Besides being built on a PCB, version 1.1 switches to using MIDI commands using the MIDI support in TinyUSB, which is included in the Pico SDK. This means it can act as a full synthesizer, and I can’t wait to hook it up to my MIDI keyboard. It also adds support for adjustable clock frequencies, allowing any of the 16 channels to act as an LFO.