https://github.com/polpo/picogus
Emulation of ISA sound cards on Raspberry Pi Pico (GUS, SB/Adlib, MPU-401, Tandy, CMS) with USB mouse/joystick support
https://github.com/polpo/picogus
demoscene gravis-ultrasound raspberry-pi-pico rp2040
Last synced: 5 months ago
JSON representation
Emulation of ISA sound cards on Raspberry Pi Pico (GUS, SB/Adlib, MPU-401, Tandy, CMS) with USB mouse/joystick support
- Host: GitHub
- URL: https://github.com/polpo/picogus
- Owner: polpo
- License: gpl-2.0
- Created: 2022-08-28T20:12:02.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2025-03-17T06:43:13.000Z (7 months ago)
- Last Synced: 2025-04-14T22:19:02.356Z (6 months ago)
- Topics: demoscene, gravis-ultrasound, raspberry-pi-pico, rp2040
- Language: C
- Homepage:
- Size: 40.7 MB
- Stars: 609
- Watchers: 32
- Forks: 50
- Open Issues: 47
-
Metadata Files:
- Readme: README.md
- Funding: FUNDING.yml
Awesome Lists containing this project
README
# PicoGUS

[](https://github.com/polpo/picogus/actions/workflows/build.yml)
ISA sound card emulation on the Raspberry Pi Pico's RP2040 microcontroller. PicoGUS can emulate:
* [Gravis Ultrasound (GUS)](https://en.wikipedia.org/wiki/Gravis_Ultrasound) - the primary focus of PicoGUS, hence the name
* [Sound Blaster 2.0](https://en.wikipedia.org/wiki/Sound_Blaster#Sound_Blaster_2.0,_CT1350) / [AdLib (OPL2)](https://en.wikipedia.org/wiki/Ad_Lib,_Inc.)
* [MPU-401 (with intelligent mode)](https://en.wikipedia.org/wiki/MPU-401) - outputs MIDI data on 3.5mm MIDI TRS connector
* [Tandy 3-voice](http://www.vgmpf.com/Wiki/index.php?title=Tandy_3_Voice)
* [CMS/Game Blaster](http://nerdlypleasures.blogspot.com/2012/10/all-you-ever-wanted-to-know-about.html)
* [Game port joystick](https://en.wikipedia.org/wiki/Game_port)Current status: perpetual beta! See the [main wiki page](https://github.com/polpo/picogus/wiki) for current status and the [compatibility list](https://github.com/polpo/picogus/wiki/Compatibility-list) for support status of various DOS programs and other system compatibility notes. This project has a heavy demoscene focus due to the GUS's history so that's what I've concentrated on, but GUS support in games is very good to excellent.
Want to buy a PicoGUS? Fully assembled PicoGUS 2.0 sound cards are available from these sources, all of whom ship worldwide:
* [Joe's Computer Museum Shop](https://jcm-1.com/product/picogus-v2/) - in US 🇺🇸
* [Serdashop](https://www.serdashop.com/PicoGUS) - in EU 🇪🇺
* [Flamelily IT](https://shop.flamelily.co.uk/picogus) - in UK 🇬🇧Want to make your own PicoGUS? See the [build guide](https://github.com/polpo/picogus/wiki/Building-your-PicoGUS). Note that the more DIY friendly v1.1.1 hardware has some documented issues with reset – a forthcoming v1.2 revision will fix these issues. **Important caveat**: due to the specs of the Pico, assumptions made by programs written to use the GUS, the imprecise nature of emulation, and the varying specs of retro DOS PC hardware, some things will likely never be perfect. **This is still a work in progress.**
Have a PicoGUS and want to use it? See the [configuring and using your PicoGUS guide](https://github.com/polpo/picogus/wiki/Configuring-and-using-your-PicoGUS).
Want to support PicoGUS? I have a limited number of machines to test PicoGUS in and donating either money or motherboards would be greatly appreciated and help increase the compatibility of PicoGUS.
You can donate via [PayPal](https://paypal.me/ianpolpo) or Ko-Fi: [](https://ko-fi.com/U7U6IZTCB)


See/hear PicoGUS in action on YouTube:
Videos by others:
[
](https://youtu.be/bBYUTwKRyNk)
[](https://youtu.be/oEHVB0FITqU)
[](https://youtu.be/aeejxbaAQ4g)
[](https://youtu.be/okSBZJwqVb8)
My videos:
[
](https://youtu.be/h4iWSnTc9Ag)
[](https://youtu.be/CkJvkJVRscQ)
[](https://youtu.be/F5Zk_hHHkTg)
[](https://youtu.be/sOHTagrWcIE)
[](https://youtu.be/2LBXzy4Fus0)
## Open Source Credits
* [Raspberry Pi Pico C/C++ SDK](https://github.com/raspberrypi/pico-sdk)
* `pico_audio_i2s` from [pico-extras](https://github.com/raspberrypi/pico-extras)
* `stdio_async_uart` from [PicoCart64](https://github.com/kbeckmann/PicoCart64)
* `gus-x.cpp` adapted from [DOSBox-X](https://github.com/joncampbell123/dosbox-x)
* OPL/AdLib emulation from [rp2040-doom](https://github.com/kilograham/rp2040-doom) (based on [emu8950](https://github.com/digital-sound-antiques/emu8950))
* MPU-401 emulation adapted from [HardMPU](https://github.com/ab0tj/HardMPU) and [DOSBox-X](https://github.com/joncampbell123/dosbox-x)
* Tandy 3-voice emulation based on code contributed by [Aaron Giles](https://aarongiles.com/), adapted from [DREAMM](https://aarongiles.com/dreamm/)
* CMS emulation based on code contributed by [Aaron Giles](https://aarongiles.com/), adapted from [DREAMM](https://aarongiles.com/dreamm/)
* USB joystick support uses [TinyUSB](https://github.com/hathach/tinyusb) and [tusb_xinput](https://github.com/Ryzee119/tusb_xinput)## License
The hardware portions of this repository (hw/ directory) are licensed under the CERN OHL version 2, permissive.
The software portions of this repository (sw/, pgusinit/ directories) as a collection are licensed under the GNU GPL version 2. Some files are individually dual-licensed under BSD or MIT licenses – see the license in the file headers for details.