Giter Club home page Giter Club logo

picogus's Introduction

PicoGUS

PicoGUS Logo

Build Status

ISA sound card emulation on the Raspberry Pi Pico's RP2040 microcontroller. PicoGUS can emulate:

Current status: perpetual beta! See the main wiki page for current status and the 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:

Want to make your own PicoGUS? See the build guide. 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.

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 or Ko-Fi: ko-fi

PicoGUS 2.0 PCB

PicoGUS v1.1 beta PCB

See/hear PicoGUS in action on YouTube:

Videos by others:

My videos:

September 2022 update October 2022 update December 2022 update January 2023 update March 2023 update

Open Source Credits

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) are licensed under the GNU GPL version 2.

picogus's People

Contributors

maxgerhardt avatar polpo avatar smymm avatar terryfi avatar wbcbz7 avatar yyzkevin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

picogus's Issues

Can't program the PicoGUS using Amiga Bridgeboard PC

I'm using the PicoGUS in an Amiga 2000 using the A2286 bridgeboard (which is a full IBM AT class PC on a card, an 80286 at 8 MHz), I also have an XTIDE, and a VGA card on the ISA bus, but nothing else.

Prior to 1.0.2 the GUS sound didn't work, but I think fixing the timings for the 5170 has also fixed it for this. GUS sound seems to work perfectly now, as does adlib (I've tried Dune 2: The battle for Arrakis and Planet X-3 for adlib, and I've tried the Legend demo and The Good, Bad, and Ugly demos for GUS sound).

However programming the Gus with pgusinit /f <file> doesn't work. It prints a lot of garbled characters. I don't have a way to copy and paste them but you can see in the screenshot attached the garbled errors.

Even after the output in the screenshot the GUS still works, so I don't think it's actually managing to program it at all.

Screenshot 2024-03-18 at 11 06 57

If there's anything I can do to help debug this let me know and I will do my very best. It's absolutely incredible to me that this works at all in the Amiga, and thank you for such a brilliant project!

PGUSINIT Usage is wrong

The usage specifies "/b" as option to set the base address, the option parsing uses "/p" to scanf() port_override

Any chance to bring MIDI Input support?

Hi, great work and an amazing project!
Is there any chance to bring MPU-401 MIDI Input support in firmware?
Hopefully you have an extra pin for that. I can use an external optocoupler. Just wondering if it's possible at all in the current design. Thank you!

The FX sound is not coming out.

Hello!
I have finally completed your wonderful project by myself.
Although there was a minor issue during production, I was able to resolve it successfully.
Instead of using the 74CB3T3245PWR, I used the 74LVC244, and the card booted up well.

The card is recognized well in pgusinit and sounds great in adlib mode.
However, when I run Duke Nukem or Doom in GUS mode, the music plays well, but the FX sound doesn't come out.

Do you have any advice?
I've tried various jumper settings and experimented with different computers, but the symptoms are the same.
I also tried different settings such as "set ultrast=240,3,3,7" after using "set ultrast=240,1,1,5,5" (and, of course, I set the jumper on the board accordingly)."

Combined SB + MPU

I'm apologize if this has been asked before, but would it be theoretically possible to combine the SB and MPU firmwares/functionality?
I'm very impressed by how this project is progressing, and I'm considering trying to integrate it into another revision of my x86 SBC, the TinyLlama, possibly ditching the Crystal CS4237B altogether. I guess using two rp2040s each running its own firmware could be doable as well, just wanted to check! :)

Adding CDROM emulation support?

I know this is probably a long shot but I was wondering if you could get in touch with Kevin Moonlight and ask him if he can share his Panasonic CDROM emulation code for use with the PicoGUS?

He made a video about what he's done here -

https://www.youtube.com/watch?v=L59Bp61Je4Y

At present we don't really have a way of getting CDROM audio working in DOS on real hardware without a real CDROM drive, so working CDROM emulation would be nice to have.

Where am I going wrong?

Note: I don't have another motherboard with ISA on it, so I'm kind of stuck with this one.

I bought a PicoGUS a couple weeks ago, and just tonight I'm trying to get this thing rolling.

System Stats:
486DX2-80
Trident 512k VGA Card
XT-IDE Board, configured at $D000 and $360, with an IDE2CF drive plugged in, 2Gig CF running MSDOS 6.22.
PicoGUS set to IRQ 5, DMA1, just as it was right out of the box. (Twin jumpers on DMA1)
Additional card for serial, IDE and FD, but, IDE is disabled via jumpers. This card is set to run at $C800.
100mbit D-Link DE (Or DF? Through way right at the bottom) 220T NIC, running at packet int 0x62, 0x300, IRQ3.

Software:

  • Downloaded the 1.2 package today, and extracted it to the CF
  • Downloaded the GUS software and extracted it to the CF

What I've seen since the initial plugin:

  • The yellow blinkie light shows up, and stays steady on when plugged into the motherboard.

Actions I've taken:

  • Plugged the GUS into my Win10 PC via USB, eventually found the RPI drive, initially copied the SB UF2 over (Since I want minimal SB)
  • After dragging the UF2 over, it seemed to have rebooted, noticed the LED on the GUS light up, drive mount went away.
  • Plugged the GUS into one of the 3 spare ISA slots, pgusinit didn't see a card.
  • Shut down the machine, moved the card to another slot, reran pgusinit, again no card.
  • Found instructions about setting the environment. Wrote a batch file to set the vars. Tried 220 and 240, still no go.
  • Plugged the GUS back into Win10 and put the pg-gus.uf2 on
  • Same results. LED turns on, drive goes away, plug it into another random ISA, still can't find a card.
  • Went minimalistic; Pulled all cards except video, the PicoGUS and the Floppy controller.
  • Booted to MSDOS 6.22 with no drivers
  • Switched to the v1.2.0 PicoGUS disk
  • Ran pgusinit, no parameters, still found no card.
  • For fun, entered the environment variable to set the address, and still no go (With the GUS UF2 installed)

I'm at a loss on where to go from here.

The card "seems" OK since I can put the firmware on the drive via USB and things do their things, but I'm not sure where to go from here now.

Combine all different firmwares in FLASH

Hi! I like your project! I noticed you have multiple firmware's which need to be reflashed to select the functionality. I have done some coding on the Pi Pico myself, and I made a tool to combine multiple firmware .bin files into one .uf2 file. A small "bootloader" will jump to the requested firmware. This way reprogramming to change functionality isn't needed anymore. If you are interested I can share some code parts with you.

New good chipsets tested

Hi, Ian!
Thank you so much for your amazing project! Just assembled and tested PicoGUS. I would like to share my results:

  1. KM-S4-1 motherboard (aka U6923, Rectron RT-4s3) SiS 85C496/497 chipset, am486DX4-100
    https://www.elhvb.com/webhq/models/486pci/km-s4-1.htm

  2. Asus CUV4X motherboard based on VIA Apollo Pro133A chipset, PIII-733
    http://hw-museum.cz/mb/46/asus-cuv4x
    excellent results but we have to setup a couple of settings in BIOS before:
    'Advanced'->'PCI/PNP ISA IRQ Resource Exclusion'->'IRQ 5 Used by ISA' set to 'Yes'
    'Advanced'->'PCI/PNP ISA DMA Resource Exclusion'->'DMA 1 Used by ISA' set to 'Yes'

Hope you will find some solution for SBOS and NMI issue someday somehow for all of us! )) Thanks again!!! Cheers!

RGB LED issue for YD-RP2040 VCC-GND Studio Board

Hi! I apologize in advance if this is a repeat question.
There is a cheap chinese RP2040 board developed by VCC-GND Studio known as "YD-RP2040":
e.g.: https://makerselectronics.com/product/yd-rp2040-vcc-gnd-studio-microcontroller-board
This board contains the RGB WS2812 LED controlled by GP23. When using this board with picogus firmware, this RGB LED is always on after the first sound output:
gQ4Ac80
Is there any way to fix this issue in future firmware? Thank you in advance!

Digital s/pdif out options

I am loving this project at the moment, and plan to build a board and do some of my own testing. Awesome work! I am wondering if there were any thoughts or plans to implement a digital output option? It seems it would be pretty easy to replace the PCM5102 with an I2C to spdif converter. But I am wondering if there were any thoughts for either building a dedicated option for spdif coax, or at least a pinout to allow connection to a PCI breakout board. The PCM5102 does a great job in my experience, but I try to use spdif out as much as possible to help reduce ground noise generated from the computer internally.

Cannot compile project

On Windows (from installer) or Linux it's the same thing: When I download

  • Pico SDK latest stable 1.5.1
  • Pico-Extras matching branch 1.5.1
  • Arm-none-eabi-gcc 10.3.1
  • CMake 3.25.1
  • Ninja 1.11.1

And compile the project, it fails to find a bunch of implementation for linker-wrapped functions at the end, specifically STDIO and Math ones

  • __wrap_puts
  • __wrap_printf
  • __wrap_remainder
  • some more..

Full log in https://github.com/maxgerhardt/picogus/actions/runs/6447661204

[ 96%] Building ASM object CMakeFiles/picogus.dir/home/runner/work/picogus/picogus/pico/pico-extras/src/common/pico_audio/audio_utils.S.obj
[ 97%] Building C object CMakeFiles/picogus.dir/home/runner/work/picogus/picogus/pico/pico-extras/src/common/pico_util_buffer/buffer.c.obj
[ 98%] Building C object CMakeFiles/picogus.dir/home/runner/work/picogus/picogus/pico/pico-sdk/src/rp2_common/hardware_flash/flash.c.obj
[100%] Linking CXX executable picogus.elf
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: /tmp/picogus.elf.RtR3fl.ltrans0.ltrans.o: in function `_out_char':
<artificial>:(.text+0x1f90): undefined reference to `__wrap_putchar'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: /tmp/picogus.elf.RtR3fl.ltrans0.ltrans.o: in function `panic':
<artificial>:(.text+0x2150): undefined reference to `__wrap_puts'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: <artificial>:(.text+0x2158): undefined reference to `__wrap_puts'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: <artificial>:(.text+0x215e): undefined reference to `__wrap_puts'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: /tmp/picogus.elf.RtR3fl.ltrans0.ltrans.o: in function `play_gus()':
<artificial>:(.text+0x2b40): undefined reference to `__wrap_puts'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: <artificial>:(.text+0x2bfc): undefined reference to `__wrap_puts'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: /tmp/picogus.elf.RtR3fl.ltrans0.ltrans.o:<artificial>:(.text+0x2f84): more undefined references to `__wrap_puts' follow
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: /tmp/picogus.elf.RtR3fl.ltrans0.ltrans.o: in function `play_gus()':
<artificial>:(.text+0x2ff8): undefined reference to `__wrap_printf'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: <artificial>:(.text+0x39aa): undefined reference to `__wrap_printf'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: /tmp/picogus.elf.RtR3fl.ltrans0.ltrans.o: in function `__wrap_remainder':
<artificial>:(.text+0x3bb8): undefined reference to `__wrap_remquo'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: /tmp/picogus.elf.RtR3fl.ltrans0.ltrans.o: in function `__wrap_remainderf':
<artificial>:(.text+0x3c34): undefined reference to `__wrap_remquof'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: /tmp/picogus.elf.RtR3fl.ltrans0.ltrans.o: in function `main':
<artificial>:(.text.startup+0x19a): undefined reference to `__wrap_puts'
/home/runner/gcc-arm-none-eabi-10.2020.4-linux/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld: <artificial>:(.text.startup+0x200): undefined reference to `__wrap_puts'

Which version of the SDK and compiler etc. are you using to build this project? The Wiki and README does not mention it.

Compatibility Report: PicoPower Redwood2 (PT86C718A2-B) Chipset

This chipset is used on some 486 SBCs. Not sure if anyone is working on or has considered working on a PC/104 version of the PicoGUS, but this info could be useful if so.

Fully compatible with everything i tried from the compatible software list (1 demo in GUS mode, 2 games in GUS mode, 1 game in adlib mode, 2 games in CMS mode). Don't have any MIDI devices to test. Only issue to report is notes will hang upon reboot (GUS, adlib, and CMS mode). Did not have this issue on 430VX chipset MB.

Let me know if you want me to test anything specific on this chipset.

-Chris

Chipset Compatibility

Tested with the same image on each motherboard with the same PicoGUS setting.
[OS]

  • DOS 6.22

[PicoGUS]

  • FW v0.6.1
  • IRQ 5
  • DMA 1
  • PCB v1.1.1

[Test Games]
DOOM/DUKE3D/DECENT/HERETIC/COMMAND AND CONQUER

[Socket | Chipset | Motherboard | Notes]
[Perfect]

[Works With Issues]

[Does Not Work]

  • Socket 5 - PCISet SB82371FB - UNKNOWN - PGUSINIT causes hang

Compatibility report: Slot-A AMD 750 (Irongate)

Chipset: AMD 750 (Irongate)
Motherboard: MSI MS-6167

Running Athlon 600 + 384 MB RAM
Tested firmware: 1.0.2
OS: DOS 7 (Windows 98)
Settings used on PicoGUS: port 240, IRQ 7, DMA 3

As far as I can tell, all demo's, games and trackers I tried work (that includes most demo's on the list). Dope works without workarounds, Impulse Tracker didn't seem to glitch when changing the number of allocated channels etc., Cubic Player works just fine too. So to me it seems compatibility is pretty much 100%.
Only note (but maybe it is a known thing) is that Tyrian doesn't seem to work with ULTRAMID when I load UMBPCI.SYS and/or XMGR.SYS (they are alternative memory managers and work together; the benefit being that it doesn't put the CPU in protected mode which demo's sometimes don't like but still offers a lot of conventional memory). DOOM works fine with those memory managers and ULTRAMID.

Instruments bug with Doom-based games

Hi,

This isn't a bug with PicoGUS but it's something you might want to add to your compatibility list wiki page (I don't have permission to edit it). Doom uses the DMX sound library which has a bug that causes it to play the wrong patches for some instruments. There's a PWAD I made that fixes the bug.

A demo video is here that shows the difference it makes. The same WAD should also work for other Doom engine games: Heretic, Hexen, Strife, Chex Quest.

I have no knowledge of electronic circuits, but I would like to make your project.

Firstly, thanks for sharing your awesome project.

I have no knowledge of electronic circuits, but I enjoy soldering.

I would like to give your project as a gift for my homemade retro PC, but some IC chips are hard to find in my country.

74CB3T3257PWR
74CB3T3245PWR

Is there a replacement for the above two chips?

If there are compatible chips, please advise.

Thank you.

Joystick input affected by GUS utilization

In certain games, the joystick input is affected by the utilization of the soundcard. For example, in Super Street Fighter 2 Turbo, if GUS firmware is loaded with joystick support turned on (/j) AND the card is used by the game for music and sfx, the joystick will exhibit random inputs. If the game instead is directed to utilize another soundcard within the system for music and sfx (in this case, an ESS Audiodrive), the joystick behaves normally.

As an aside, it would be great to be able to use more than four buttons. Loving my PicoGUS otherwise!

Tested a few more demos

I've tested a few unverified demos.

Seem perfect:

  • Stash by The Black Lotus
  • Fluid Motion by Valhalla
  • Heartquake by Iguana
  • DX Project by RealTech
  • My Summer Demo by Byterapers
  • Solstice by Valhalla
  • Caero by Plant and EMF
  • Aquaphobia by RealTech
  • Contrast by Oxygene
  • Machines of Madness by Cubic Team
  • Lasse Reinbøng by Cubic Team & $eeN
  • Genocyd by GMF
  • Mindtrap by Trauma
  • Jizz by The Black Lotus
  • Robotnik by Rage
  • Boost by Doomsday

Imperfect:

  • Disgust by Camorra (credits at the end have strange timing)

Possibly problematic (I did not try very hard to run them):

  • Sunflower by Pulse (hangs at the beginning)
  • Pump by Iguana (hangs in the middle)

Can't init femto with ISA adapter

Hi, trying to init and get an error;

ERROR: PicoGUS card using protocal 221, needs 2

Using a femto with ISA adapter from Tindie https://www.tindie.com/products/polpo/picogus-femto-edition-for-pocket-386-and-isa/

Programmed the Pico by holding BOOTSEL and dropping pg-gus.uf2 from picogus-v1.2.0 release (unplugged from femto).

Stuck it in my 486 using the ISA adapter, but no joy. Will try it in the book 8088 when I find the power adapter :)

A standard PicoGUS v2 works fine in the 486

IMG_6363

Compatibility Report: Intel i430NX, Intergraph TD-30 (Dual Socket 5)

This board is very much an edge case, given that it has dual CPU mode, limited IRQs (due to the sheer number of onboard devices, this was not a cheap system), and an onboard Sound Blaster Vibra 16 competing with the classic IRQ 5/DMA 1 combo. This took a while, but once I gave the sound card DMA 3 properly everything began to work. Unfortunately "two jumpers for DMA 3" wasn't explained too well as I was thinking it worked like SCSI "add the number up" jumpers.

Anyways Duke Nukem 3d, Crystal Dream 2, Doom 1/2, and Xaos and Xaos 2 work just fine. The Windows 95 drivers reported an IRQ conflict with the onboard Vibra 16, but I will try to mess with that later to see if I can give it the right IRQ/DMA combo.

When flashing from PG-GUS.UF2 0.6.1, I get: ERROR: Card is not in firmware writing mode?

Hi, thank you for this very cool project!

When I try to flash from PG-GUS.UF2 0.6.1 to any different firmware in DOS, I get "Programming........ ERROR: Card is not in firmware writing mode?" and after that the card is "bricked". If I run pgusinit again, I get: "ERROR: no PicoGUS detected!"

If I copy a firmware from USB that is not PG-GUS 0.6.1, flashing from firmware to firmware works from DOS without any problems, unless it is PG-GUS.UF2 0.6.1...

Can you please take a look? Thanks.

Compatibility list

New entries:

  • HardBall 5 // Fully compatible
  • Star Wars Rebel Assault // No sound
  • HardBall 4 // Fully compatible (slowdowns)
  • Asterix & Obelix // Fully compatible

Weird stuff:

  • ROTT // crashes after 5 minutes when using PicoGus for both music and sfx. Music alone works no problem.
  • Wacky Wheels // same as ROTT where the game crashes when using PicoGus for both music and sfx. Just like ROTT that is also an Apogee game, PicoGus works great for music alone.
  • Doom // I had to download the packages from Vogons to have Ultrinit working (v2.31). It was the only way to get music working.

Specs:
P1 233 MMX
430TX Mobo
PicoGus P240, D3, I7
SB32 P220,D1,H5, I5

Freezing with System Shock 1, Descent (And various other games)

System Shock

I am trying to run System Shock 1 with the picogus and it oftentimes freezes up, forcing me to reboot my computer. This is a game which utilizes a bat file (shockgus.bat) to actually load the patches before playing. The card works fine for other games like DOOM, Epic Pinball, and Jazz Jackrabbit with no freezes.

When I use the Soundblaster 2.0 firmware and delete the SET commands (With blaster variables) it detects fine within the setup program and the main menu, but it freezes up when I load up a game. Sometimes when using the GUS version of the card it will lock up after a while of playing around. In both cases the system eventually locks up. If I set up Soundblaster as both in the install menu the game will run up until I change volume or just keep on playing - it will also end up freezing or seriously lagging.

I don't know if it's a resource conflict, I have a networking card which is disabled within the autoexec sometimes and it has no issues when working with other games (for instance, IPX-multiplayer DOOM). I'm guessing it's some sort of issue with System Shock and the Gravis Ultrasound, would it be a good idea to install another sound card just for this game?

Here are my specs:

Video Card: Trio64v
Motherboard: Supermicro P5StE (American Megatrends, Intel 430HX)
CPU: Pentium 133 (non-mmx)
Sound Card: PicoGUS configured at IRQ5, Port 240, IRQ 5 and DMA 1
Networking Card: 3COM Etherlink Combo ISA card

My Autoexec for the ultrasound is:

SET ULTRASND=240,1,1,5,5 (Now changed to IRQ 7)
SET ULTRADIR=C:\ULTRASND
C:\PICOGUS\PGUSINIT.EXE

My soundblaster is set at 220 with IRQ 7 and DMA 1. It works fine with other games (With no 32 in)

Descent

The card also seems to freeze on Descent, same specs and I did some trial and error with other cards pulled in and out. Descent appears to crash on level 3 after a few seconds, giving a dump error starting with:

USE32, byte granular limit, FFFFFFFF, base 0, acc CF93
(error continues with similar messages until it ends with a C:\Descent>)

AUTOEXEC
SET ULTRASND=240,1,1,5,5
SET ULTRADIR=C:\ULTRASND
C:\PICOGUS\PGUSINIT.EXE
prompt $p$g
path c:\dos;

CONFIG.SYS
DEVICE=C:\dos\himem.sys
DEVICE=C:\DOS\EMM386.EXE
DOS=HIGH
BUFFERS = 30
files = 30

I'm guessing this is because the game runs out of memory with the Gravis Ultrasound, I did try a clean bootdisk (shown above) and it gives the same problem. Not sure what's up here, happens with and without the soundblaster 32 and 3com card inside. The card also seems to exhibit the same issues on other levels, some more frequently, and other levels have their instruments removed (Level 1 of Descent has no strings during the main part of the song). I have tried switching DMAs and addresses to no avail.

EDIT: Upon opening descent's MIDI files, I find that they crash at around the same areas using a midi player, so I'm curious if this is a descent issue and not a card issue. If anyone has a legitimate gravis card and wants to try out various levels lmk

Other Games

Other games like TIE fighter, ROTT, and TES: Arena will work for a bit but then freeze, I have two cards set up, the SB32 is for a gamepad controller and AWE32 support when I'd like it, nothing much.

Soundblaster 32 at 220H, IRQ 5, DMA 0, 5
PicoGUS as 240H, IRQ 7, DMA 1
PicoGUS SB at 220H, IRQ7, DMA 1 (Yes I am aware of the conflict with the SB32)

I'm guessing this is just because those games are dodgy with GUS support (Which is understandable) but I'll just list them here. I would like confirmation on TES and TIE because those aren't on the compatibility list. These games still have issues without the SB32 installed as well, with some exceptions (Descent and ROTT have perfect SB accuracy)

AC97 or HD Audio header?

I would appreciate the addition of AC97 or HDA headers in the latest PC cases to fully utilize the functionality of this card.

adding instructions for other DMA configurations to the wiki

Hi, it seems like a basic thing that I cant find anywhere, but can you add instructions on how to set the jumpers to other DMA settings. This is useful when trying to get it setup in a system that also has another soundcard in it.

Thanks

New RP2350B

Will you plan to evolve the hw of board with new chip? 48 I/O 5V tollerant....

Screen tearing using GUS music in Tyrian 2000

When using GUS music mode in Tyrian 2000 (which requires loading Ultramid) I encounter screen tearing that is not present in any other playback mode. Can anyone verify if this occurs on a real GUS?

486DX4/100 16MB RAM, using SB16 for digital audio. CLGD5428 integrated 1MB video. MS-DOS 6.22 as well as PC-DOS 2000. PicoGUS on latest (as of today) firmware.

The game is still perfectly playable.

Comparison of PicoGUS vs. a real GUS "May be a little higher pitch on picoGus"

@JorgeCarvalho_web_dev left "May be a little higher pitch on picoGus" message under https://www.youtube.com/watch?v=UJcPF2gYWE4 and I think I also heard this difference. I wrote a comment:

"spectrogram would be ideal for quick glance testing, Linux Baudline produces spectacular results and is free. Audacity can also genereate them, so does Jaaa, sox, etc etc. Pretty much what people doing software defined radio are using."

but then I found something absolutely perfect for the job: https://junkerhq.net/MDFourier/ "MDFourier is an open source software solution created to compare audio signatures and generate a series of graphs that show how they differ."

Through-Holes for LED

I was just looking at my case, and there are three LEDs on there. I then looked at the PicoGUS and thought about running the LED wire from one of the unused LEDs back to the Pico so I could see the LED flash on the front of the case when the case cover was on. But alas, there isn't a header, or anything I could easily tie into.

My request is to put an unpopulated through-hole so I can put my own header on, and run the wires up to the front. Make it completely optional for the people that want to put that effort in. Or, throw an extra $10 for that header.. ahem.

The other option is I attempt to solder wires to the existing LED, but... yeah.. no.. ;)

2508051027Y1 (L1/L2) substitute?

I have serious trouble finding 2508051027Y1 ferrite beads where I live, and I have no option of ordering from Mouser. Can I use BLM21SP102SN1D instead? It has maximum DC Resistance of 120 mOhms instead of 300 mOhms. Will it do?

SCK Short to Ground - I2S DAC Questions

I am having issues with my PicoGUS detection whenever I insert the 3.5mm line into the I2S DAC module. This is consistent so I have been looking for problems in that area. The SCK line seems to be shorting to ground. All of the joints look clean, but it makes me wonder if I should have left out soldering certain pins that were undefined in the build guide. I will continue to troubleshoot and will probably pull the I2S DAC out to get a better look at things.

I question whether it was incorrect of me to solder in these extra pads along the length of the module? I had an extra pin header to that length and thought it wouldn't hurt to solder them down for extra support, but maybe I should have only soldered LGRG or finished soldering the whole row down?

signal-2023-11-03-080840

LSI/Headland HTK340 support

Not an issue, but you can add the LSI/Headland HTK340 chipset to the list of compatible chipsets. This is a socket 3 486 chipset.

Troubleshooting PicoGUS Star Control 2 issues

Greeting from Adrian's Digital Basement!

I noticed on his recent video that you have a "compatibility" issue with Star Control 2.

I very distinctly remember having a weirdo bizarro random sounds constantly playing issue with Star Control 2 on my Ultrasound back when I first installed the game back in the day. There was a fix or patch that cleared that up, but I have no recollection of where I got that, or exactly what form it took.

Can I ask for details on the testing you've done? Are you testing with the initial floppy-disc release of the game, and have you verified this misbehavior only occurs only on PicoGUS and not on real original hardware?

SB opl2 emulation missing certain notes

In Prince of Persia, the intro music missing some piano notes. Also when games starts "Danger" music piece missing a lot of notes in the piano chord.
Issue also present in other emu8905 project, verified by playing VGM of the game in emu8905 based VGM player.
Narrowed it down to a bug in attack rate calculation of emu8950.

Psuedocode for doing fast cubic spline interpolation (for better resampling quality)

So I saw the talk about a possible cubic spline interpolator mode for PicoGUS, which would result in crisper audio with less treble being cut off from linear interpolation.

Here's some code I wrote that should work: https://pastebin.com/raw/Yvyh63VP

The only problem is that you need to input the correct sample points for the s0..s3 function parameters. This is slightly tricker than having to deal with just one extra sample (like with linear interpolation).

Here's what s0..s3 should be based on a few conditions (could be off, but something like this anyway).

Some notes first:

  • Pos is the current integer sampling position
  • End is the end point for a non-looping sample
  • s is a pointer to the sample data (either 8-bit or 16-bit samples)
  • HasLooped is a flag for having reached the end of a loop on a looping sample. Set it to false when a voice is starting to play a sample (sample trigger), and set it to true when you have looped at least once (sample is looping its loop now). I'm sure it has to be set to false in other situations as well.

Non-looping sample:

  • s0 = if (Pos == 0) s[0] else s[Pos-1];
  • s1 = s[Pos]
  • s2 = if (Pos+1 >= End) s[End-1] else s[Pos+1]; (yes, End-1. As in the last sample point)
  • s3 = if (Pos+2 >= End) s[End-1] else s[Pos+2];

Forward-looping sample:

  • s0 = if (HasLooped) { if (Pos == LoopStart) s[LoopEnd-1] else s[Pos-1]; } else if (Pos == 0) s[0] else s[Pos-1]; }
  • s1 = s[Pos]
  • s2 = if (Pos+1 >= LoopEnd) s[LoopStart+((Pos+1)-LoopEnd)] else s[Pos+1];
  • s3 = if (Pos+2 >= LoopEnd) s[LoopStart+((Pos+2)-LoopEnd)] else s[Pos+2];

Bidirectional-looping sample:

  • s0 = if (HasLooped) { if (Pos == LoopStart) s[LoopStart+1] else s[Pos-1]; } else if (Pos == 0) s[0] else s[Pos-1]; }
  • s1 = s[Pos]
  • s2 = if (Pos+1 >= LoopEnd) s[LoopEnd-((Pos+2)-LoopEnd)] else s[Pos+1]; (do Pos+2/Pos+3 for an extra -1)
  • s3 = if (Pos+2 >= LoopEnd) s[LoopEnd-((Pos+3)-LoopEnd)] else s[Pos+2];

There could be some off-by-one (or bigger) errors here, so do experiment with it. If it's possible to sample backwards in "forward loop" mode, then it would also need more logic.

PS: I totally understand if this is too bothersome to implement, and that's fine. :-)

FW 070

Removed picoGus from slot and programmed directly from usb port, card inserted in isa slot and using the provided pgusinit it reports good, picogus initialized with success but no sound on cmod or second reality.
reflashing it on isa slot using pgusinit with /f option I can ear a beep for each dot on screen while flashing FW
CPU Via c3@800
256MB RAM
Board MSI MS-6153 Ver 2.1

Was working good with FW 0.6.1

Compatibility Report: 5150 and 5160

I tried the latest picogus 2 which I obtained from polpo earlier this year in my 5150 and 5160 motherboards.

On the 5150 as half expected it was not detected at all.

  • 64kb-256kb motherboard
  • ROM: 10/27/82
  • RAM fully populated to 256kb
  • Other cards: PEGA1A EGA card, Quad flop floppy adapter with no floppy bios. (only EGA ROM)
  • Soundblaster firmware installed on picogus (v1.2)
  • Booted with 360kb disk and ran pgusinit.exe (v1.2) -> no picogus detected.

On the 5160 it seems to work fine

  • 256kb-640kb motherboard
  • ROM: 05/09/86
  • RAM fully populated to 640kb
  • Other cards: CGA, adaptec scsi jumpered to floppy only mode. (no ROMS)
  • Soundblaster firmware installed on picogus (v1.2)
  • Booted with 360kb disk and ran pgusinit.exe (v1.2) -> picogus detected no problems
  • I've also previously tested this motherboard a few months ago
    in a more complete configuration with an xtide and various games
    seemed to work fine in the old version's adlib mode (haven't tested anything more fancy)

Thanks for an awesome product!

Maybe update Impulse Tracker and Cubic Player compatibility?

In the compatibility list it states that both Impulse Tracker and Cubic Player have issues. I think with the latest firmware, at least with my systems and also when I saw video's online using Cubic Player, they seem to work just fine. With the latest firmware (1.2.0) I don't hear glitches with the changing of sample rate, and Cubic Player also just works. Cubic Player is a complex topic however, because there are many versions circulating online and they all have their issues off their own, not related to the PicoGUS. Maybe you could suggest using the latest version (Open Cubic Player 2.6.0 pre 6) to have a common testing environment. That one is most compatible in my experience, some other beta version may have stability issues.
So, maybe you could update those entries, it might put people off to use the PicoGUS if it states that is it not compatible, because they are (were) very popular pieces of software that people might want to use with the PicoGUS.

GUS Emulation - Sound Effects in some games, but no Music. Other games crash

So I ordered a couple of the 2.0 models, and put one in a 486, with another in a Pentium 2. They're both giving me similar interesting results, in that I can't get any GUS music to work. I'm pretty sure the hardware is fine, as MPU-401 worked great for Day of the Tentacle, X-Com, and Loom on my old 486. The ultimate talkie edition of monkey island 1 had some problematic music, but since that isn't really official, I don't think its as big a deal as GUS Music for me.

For GUS, I've tried Rise of the Triad (Shareware and Dark War), Raptor, Tyrian, and Jazz Jackrabbit (+ both Holiday Hare 94 and 95).

For Rise of the Triad:

  • Choosing Ultrasound for SFX appears to work, although I get no audio
  • Choosing Ultrasound for Music crashes

For Raptor (full and shareware):

  • Running setup causes no issues. On the Pentium 2, running the full game crashes on Music initialization, while on the 486 it launches, with no music or SFX.

For Tyrian:

  • Running ultramid prior to, launching setup, and then choosing Gravis-MIDI causes a runtime error (I can get a screenshot if it's helpful)

For Jazz Jackrabbit (HH94/HH95/CD):

  • Setup indicates it picks up the ULTRASND settings ('set ultrasnd=240,1,1,5,5' used, but I've also tried 3 for DMA on both systems).
  • Launching the game gives no errors, and sound effects play, but music will not.

I don't know the chipset of the 486 off-hand, but the Pentium 2 is a a socket 1 / ASUS P2L97 (intel 440lx chipset).

Anything else I should try/you'd like to know? I'm pretty new to GUS, so I'm not sure if I missed a step. I did run on both with the latest picogus release and the ultrasnd drivers/patches from the wiki.

I know this was tested heavily with demos, not sure where to go about getting one, but I'd be happy to try/post results. I can stream from either system with a little work, so video/audio capture is possible, too.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.