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.
JackMacWindows
Matt Callow
volkan
Dilshan Jayakody