[HN Gopher] PicoGUS: Emulate ISA Sound Cards (GUS, Adlib, MPU-40...
       ___________________________________________________________________
        
       PicoGUS: Emulate ISA Sound Cards (GUS, Adlib, MPU-401, Tandy, CMS)
       with a Pico
        
       Author : _Microft
       Score  : 73 points
       Date   : 2023-05-24 17:22 UTC (5 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | mewse-hn wrote:
       | 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.
        
       | polpo wrote:
       | 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.
        
         | npunt wrote:
         | 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.
        
           | polpo wrote:
           | 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.
        
             | bananaboy wrote:
             | That is incredibly cool!
        
         | jmole wrote:
         | 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.
        
           | ilyt wrote:
           | I think it is necessary purely because of relatively small
           | amount of pins on rp2040
        
           | polpo wrote:
           | 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.
        
       | csense wrote:
       | Very cool project. But Sound Blaster is conspicuously missing
       | from this list.
        
         | polpo wrote:
         | 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.
        
         | [deleted]
        
         | bryanlarsen wrote:
         | Which is odd, because the Sound Blaster is basically a Game
         | Blaster and an Adlib together on the same card.
        
           | TonyTrapp wrote:
           | 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.
        
             | pavlov wrote:
             | Gravis Ultrasounds really go for hundreds? Shoot. I think I
             | had two in box that I threw out when cleaning my old
             | office.
        
               | TonyTrapp wrote:
               | 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.
        
       | homarp wrote:
       | 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.
        
       | cbm-vic-20 wrote:
       | The red PCB is a must if you're going to properly emulate a
       | Gravis UltraSound.
        
       ___________________________________________________________________
       (page generated 2023-05-24 23:00 UTC)