Thanks for posting this! I'm the author of the project and I've seen it pop up here on HN a few times when searching but I haven't seen it make it the front page until now.
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.
Hardware design came first but the design did have to take into account some of the constraints of programming PIO. I had to make sure certain signals were on adjacent pins, since the range of pins you must set for in, out, set, or sideset pins in a PIO program must be contiguous. I did have to do another board spin when I realized an error I made with some of my pin orderings.
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.
This is a really cool project! Is it possible to run a program in DOS to switch the sound card being emulated? I could see creating the ideal RX (Retro eXperience, you heard it here first) with .bat files for each different game/program with the desired sound settings.
Yes, to switch the card being emulated, you can flash new firmware images directly from DOS using the pgusinit.exe program that ships in the release package. It takes about 5 seconds to load the firmware and the new emulation is available to use right away without needing to reboot the machine.
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.
If this interests you, there's a new bit of software called SBEMU that is able to emulate old sound blasters on modern intel HDA sound hardware - I was able to run freedos on an old netbook and get audio in dos games.
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.
It's on the list of things I want to support eventually. A friend I collaborate with on Discord is working on Sound Blaster support for his Pico-based retro PCMCIA project and I plan on using his code.
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.
Not really, the Game Blaster had no sample playback and was based on two Philips SAA1099 synthesizer chip; those chips and thus Game Blaster compatibility was removed already in the Sound Blaster 1.5 cards. A Sound Blaster as it is known today has nothing in common with the Game Blaster.
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.
Yep, just look on ebay. It's completely crazy. And people actually buy them for that price, too, it's just not offers sitting there for years without a taker.
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.