PicoGUS: Emulate ISA Sound Cards (GUS, Adlib, MPU-401, Tandy, CMS) with a Pico
github.com
github.com
It's been really fun pushing the limits of the RP2040 microcontroller and learning how to use its PIO capabilities has been eye opening. I've created PIO code to handle the ISA bus and interface with SPI-based PSRAM at higher speed than I could with the RP2040's built-in SPI peripheral.
edit: looking at the schematic it looks like you have the address/data pins multiplexed on an 8-bit port: https://github.com/polpo/picogus/blob/main/hw/PicoGUS-schema...
Curious if you did the HW design first, or SW design first, or how you came up with this particular solution.
I went for an 8-bit mux/demux to multiplex the 8 data pins and lower 8 bits of the address because I thought it'd be faster, but I do have to delay quite a bit in the PIO program while I wait for the mux to switch. Given the very high speed that you can feed serial data into a PIO, a couple of high speed shift registers might have worked just as well and would have saved on GPIO pins which are a very precious resource.
Longer-term, I'd like to have multiple cores available in one firmware image for the ability to instantly enable/disable them. All code runs from RAM instead of flash for speed, so that's a potential limitation on the number of cores that can be loaded simultaneously.
For SPI that should mean a data rate of 140MBit/s, right?
The ALSA sound driver was originally written as a replacement for the Linux kernel sound for Gravis UltraSound (GUS) cards. As this GUS replacement proved to be a success, the author started the ALSA project for a generic driver for several sound chips, with fully modularized design.
That said, it's more likely that the project doesn't support it (yet) because it's still much easier and cheaper to obtain a Sound Blaster than any of the other cards, since it was ubiquitous. GUSes typically go for hundreds of Euros these days while SBs can be had for much less than hundred.
I'd adapt DOSBox's SB code but it's surprisingly complex - DSP support for the whole gamut of SB cards from the Sound Blaster 1.0 to the Sound Blaster 16 are in the same source file, and extracting the parts that I'd need would be more pain than I'm willing to deal with right now.
TonyTrapp's comment below raises a good point – I've tried to focus on emulating sound cards that are harder to find and are possible to do on the Pico. Old used Sound Blaster compatible cards are still relatively available and affordable, compared to the GUS or genuine MPU-401s with intelligent mode. CMS compatible boards are also hard to find, and Tandy compatible boards that you can plug into a normal non-Tandy PC are solely available via DIY projects.