Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
PicoGUS: Emulate ISA Sound Cards (GUS, Adlib, MPU-401, Tandy, CMS) with a Pico (github.com/polpo)
126 points by _Microft on May 24, 2023 | hide | past | favorite | 25 comments


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.


are the PIO blocks wide enough to handle an ISA bus? Or are you using a shift register or another port on the pico to interface with the bus?

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.


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.


I think it is necessary purely because of relatively small amount of pins on rp2040


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.


That is incredibly cool!


Firstly: this is rad AF. Second, I'd love to see more details about putting a modern MC into an old bus in general, if you've got any pointers.


Interesting. What is the maximum SPI data rate you achieved with PIO?


"These chips have been tested as stable up to an RP2040 clock speed of 280MHz, creating an effecitve SPI clock speed of 140MHz.", [0]

For SPI that should mean a data rate of 140MBit/s, right?

[0] https://github.com/polpo/rp2040-psram


Thanks for making this!


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 Gravis Ultrasound has a linux history:

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.


The red PCB is a must if you're going to properly emulate a Gravis UltraSound.


Very cool project. But Sound Blaster is conspicuously missing from this list.


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.


Which is odd, because the Sound Blaster is basically a Game Blaster and an Adlib together on the same card.


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.


Gravis Ultrasounds really go for hundreds? Shoot. I think I had two in box that I threw out when cleaning my old office.


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.


I threw away a Gravis Ultrasound with the 16-bit daughter board and a Terratec EWS64 XL a few years ago when we moved. .. oops ...


Many, many hundreds.


I am amazed by the amount of limits the community is pushing with a pico. If only the rp2040 had an integrated DAC...


I have built a couple of these PicoGUS cards to use in my retro PCs, and they are very good indeed.


Geez!!! This is a major milestone




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: