Releases: polpo/picogus
v2.1.0
New features/changes
MPU-401 simultaneous with all modes
MPU-401 emulation is now available in all modes. This can enable simultaneous digital sound effects in SB or GUS modes with MIDI output. If you have another MPU-401 card in the system, to prevent conflicts this can be disabled or moved to a different port with the /mpuport
option to pgusinit.
The original MPU mode is still available for titles that require MPU interrupts (titles on this list marked with a 1 require MPU interrupts).
v2.0.0
New features/changes
Serial mouse emulation
Now you can use a USB mouse as a serial mouse on your PC. Features a configurable report rate defaulting to 60Hz so the emulated serial mouse is much smoother and more responsive than a real serial mouse. Also supports configurable sensitivity and protocol support, including Microsoft, Logitech, Mouse Systems, and Intellimouse with wheel support. Note that being a serial port, this does use an IRQ so the IRQ jumper on the PicoGUS must be set to IRQ 4 or 3 depending on which serial port is configured, or use a mouse driver like ctmouse that can use a custom IRQ. Serial mouse can be emulated simultaneously with sound card modes that do not require IRQ such as AdLib, CMS, and Tandy (MPU coming in future firmware for games that don't need MPU IRQ).
Thanks to Artem Vasilev (wbcbz7) for implementing mouse and 8250 UART emulation.
"Multifw" - all modes in one firmware
All emulation modes (GUS, SB, MPU, etc.) are now contained within the same firmware. This means switching between modes is much faster than before, taking 1-2 seconds on average. Switching also no longer involves writing new firmware to the card's flash, alleviating flash wear concerns (each sector on the flash is rated for at least 100,000 cycles, so there wasn't much to worry about, but it's still nice for peace of mind).
Many thanks to Jeroen Taverne for developing the original proof of concept and smymm for implementing it within the PicoGUS codebase.
Card settings can now be saved in flash
Once you're satisfied with your PicoGUS's settings, they can now be saved in the card's flash. Saved settings persist across reboots or power cycle without needing to run pgusinit each boot.
For example, when using serial mouse emulation, some BIOSes like MRBIOS need to see the emulated serial port right at boot. Also as a bonus if you want to use emulation modes outside of DOS, settings will apply in those other operating systems. Want to use GUS in OS/2 or Linux, or serial mouse when setting up NeXTStep? This will help!
Overhaul of pgusinit
To support the above new features, adding more options to pgusinit meant I ran out of single letters for its various switches that make mnemonic sense. I've moved to longer yet hopefully still fast to type names for each of the switches.
Also, each pgusinit option now persists between invocations of pgusinit. Previously, most but not all options had to be given in the same invocation of pgusinit. Each option that would enable a feature (e.g. joystick support) has been turned into an on/off option so it can be turned off as well as on.
Running pgusinit by itself will now show all the currently applied settings for the current firmware mode.
See the pgusinit README for more details on running pgusinit.
Fixes
Sound Blaster 2.0:
- Added speaker on/off commands
- Greatly increased quality of output in "Direct DAC" mode
OPL2 emulation
- Fixed "missing notes" issue, most commonly heard in Prince of Persia. Thank you to TerryFi for discovering the issue and coming up with a preliminary fix, then incorporating the final fix from the upstream emu8950 repository.
v1.2.0
New features/fixes
Sound Blaster 2.0 emulation:
The AdLib mode (pg-adlib.uf2
) has been replaced with a new Sound Blaster 2.0 mode (pg-sb.uf2
)! Code to emulate the Sound Blaster DSP was contributed by Kevin Moonlight - huge thanks to him.
- Sound Blaster 2.0 DSP support is pretty well tested but you may run into issues. Please consult the Compatibility List for titles with known issues, and feel free to file an issue on GitHub to report any problems.
- AdLib/OPL2 emulation has been improved, fixing issues with missing/wrong notes.
- The SB base port can be set with pgusinit with the
/p
option, and the OPL/AdLib base port with the new/o
option. - Some older titles supporting AdLib are "speed sensitive" and have weird playback on fast systems (even with a genuine OPL2/OPL3). A new
/w
option in pgusinit can work around these issues in most circumstances.
MPU-401 emulation:
- Fixes an issue reported by zuldan on Vogons where running pgusinit in MPU-401 mode wouldn't work on certain systems. Fixed by initing the MPU-401 and sending the reset MIDI data asynchronously, preventing IOCHRDY from being held low for too long.
- Sysex delay handled without busy wait. Shouldn't have much effect presently, but may allow MPU-401 to be emulated simultaneously with other modes in the future.
General:
- Allows the volume of the wavetable header to be set with the
/v
option in pgusinit in all modes. This is useful if you want to use the wavetable header to mix in other external audio sources like a CD-ROM drive (connection guide coming to the Wiki).
v1.1.0
New features/fixes
GUS emulation:
- Works around a hardware bug in the PCM510xA DAC that results in ~10% of chips to be silent at 22.05kHz sampling rate. This is the rate produced by the GUS at 28 channels, and is used by Doom and the demo "Dope". The workaround is to run the DAC at 44.1kHz, linearly interpolating the 22.05kHz output.
- Increased fractional precision of wave addresses to 10 bits from 9.
- New EXPERIMENTAL fixed 44.1kHz output. Normally the GF1 varies its output sample rate from 44.1kHz at 14 voices to 19.2kHz at 32 voices. Using this option enables 44.1kHz output for all numbers of voices, similar to the Interwave. This gives much higher quality output when playing lots of channels. This will result in stuttering in most games that use streaming DMA for sound effects like Doom, hence it is EXPERIMENTAL. It can be enabled with the
/4
switch in pgusinit. Thanks to wbcbz7 for contributing this support along with the increased wave address precision. - Known issue: Impulse Tracker constantly re-inits the GUS to get the best sampling rate and if it passes through 28 channels rapidly, audio artifacts can be heard. To work around, run PicoGUS in fixed 44.1kHz output mode.
pgusinit
- New
/4
switch when in GUS mode to enable fixed 44.1kHz output.
v1.0.2
New features/fixes
General:
- New bus timing, fixes compatibility with IBM PC/AT 5170.
- Faster IOCHRDY timing to improve compatibility and spend less time on ISA bus.
- Less aggressive overclock and different startup timing to improve stability on reset.
- Added support for Xbox 360 wireless adapter dongle.
Hardware v1.2
A new release of the more DIY friendly version of PicoGUS "backporting" improvements from the v2.0 board.
- Adds option for integrated DAC section. The purple "GY PCM5102" DAC modules have spotty QA, so integrating the DAC is both potentially lower cost and more reliable. Footprints remain to still allow use of the DAC module.
- Reset stability improvements: RC circuit on Pico RUN pin to delay start on power up and filter out glitches on ISA reset, and U5 is now 74AHC logic family for higher positive-going threshold
- ISA RESET has weak pulldown to allow reliable programming the Pico outside of powered PC
- DACK has weak pullup to allow PicoGUS to be used without DMA channel set
- 5V MIDI circuit: uses open drain inverter for better drive and uses more commonly available resistors
- U2 is now specified as an 74LVC244 in the BOM: it's cheaper and more available and in my testing performs just as well as the 74CB3T3245
- Jumper to apply power to micro USB-B connector on Pico to allow USB HID devices to be used
- Fixes to card dimensions to better follow ISA card specs: narrower card edge and better fit for card bracket in PC cases
- Production files for JLCPCB full PCB assembly
- Updates to thank you section on back
v1.0.1
As always immediately after I do a big release, a significant bugfix comes soon after! Don't forget to look at the notes for firmware v1.0.0.
General:
- Increase stability upon startup on PicoGUS 2.0 boards.
v1.0.0
The PicoGUS 2.0 hardware brings v1.0.0 of the PicoGUS firmware! This firmware runs on all released revisions of the PicoGUS hardware: 1.1, 1.1.1, 1.2, and 2.0.
New features/fixes
General:
- Support for PicoGUS 2.0 hardware and its software-controlled wavetable header volume (
/v xxx
pgusinit option). - A preview of game port joystick emulation using USB joysticks is included in all sound card emulation modes, enabled with the
/j
pgusinit option. There is also a "joystick exclusive" firmware (pg-joyex.uf2
) for when you only want to use a USB joystick and not emluate any sound cards. This is considered a preview because only a few USB joystick types are supported: wired Xbox 360 (and third party clone) controllers and the Sony DualShock 4. More joysticks will be supported in the future! See the Compatibility List wiki page for more information about this feature. - Much more reliable firmware flashing from DOS. The previous method abused IOCHRDY to hold the ISA bus far longer than usual, and some chipsets would release the bus before certain flash operations were complete.
- A more robust startup sequence to improve firmware boot stability. All firmwares have the same LED sequence when starting so you will know when the firmware is ready.
- Compatibility with slower PSRAM chips that are rated for only 104MHz, such as the Vilsion Tech VTI7064MSME and ISSI IS66WVS1M8BLL-104NLI. This widens available options for those DIYing their own PicoGUS boards.
pgusinit
pgusinit has been updated to version v2.0.0, featuring:
- Updates to pgusinit to support the new firmware flashing protocol, as well as support upgrading from v0.x.x firmware to v1.x.x firmware. If you have a v0.x.x version of firmware running on your PicoGUS, you can upgrade to v1.0.0 with the latest version of pgusinit included with the firmware release package.
- Detects the current card mode and only shows options applicable to that mode when using
/?
to ask for help.
Adlib emulation:
- Fixes an issue where some software would incorrectly detect PicoGUS as an OPL3 instead of an OPL2.
MPU-401 emulation:
- Sysex delay can be enabled with the
/s
pgusinit option. This will prevent buffer overflows on older MPU-401 revisions. - Fake all-notes-off for the Roland RA-50 can be enabled with the
/n
pgusinit option. - Fixes song change issue in Frederik Pohl's Gateway. PicoGUS will detect when Gateway is running and enable a hack in how the version and ack are returned. Run pgusinit to restore default operation after you're done playing Gateway.
- Running pgusinit will silence any stuck notes if a program exits unceremoniously.
v0.7.0
Note: Please use the version of pgusinit.exe that comes with this firmware!
Version v0.7.0 of the firmware has a much smaller default GUS audio buffer size of 4 samples, thanks to the higher RP2040 clock speed. If you run an older version of pgusinit.exe, it will set the buffer size to 16 samples, negating many of the improvements that this version brings for GUS emulation.
Release notes:
General:
- Runs the RP2040 at 400MHz. This allows for faster reaction to ISA events, holding IOCHRDY low for shorter time periods. This allows better performance for other ISA cards and may help run on faster ISA bus speeds.
- Fixes from @SuperIlu for pgusinit to fix usage message and improve command line parsing.
GUS emulation:
- Higher clock speed enables much shorter interval before checking for IRQs. This should improve compatibility in titles that use IRQs and DMA.
- Fixes for Hand386 and other M6117D-based systems.
- Changes to pgusinit to default to the new GUS buffer size of 4 samples, and support setting the buffer size below 8 samples. Please use the new version of pgusinit that ships with this firmware!
Tandy emulation:
- New emulation core contributed by Aaron Giles. This is the same core used in DREAMM and should result in better accuracy across all titles. or example, sound effects such as crickets chirping and meteor crash in Maniac Mansion and snoring in Zak McKracken sound much better.
CMS emulation:
- New emulation core contributed by Aaron Giles. This is the same core used in DREAMM and should result in better accuracy across all titles.
- Fixes issue with pitch of CMS sound being too high.
MPU-401 emulation:
- Misc optimizations might improve compatibility in some titles.
For known issues, please see the Compatibility List wiki page.
v0.6.1
Another bugfix release! This release fixes a bug introduced in firmware v0.5.0 that caused Descent to freeze on the Loading...
indicator when running setup and starting the game.
GUS emulation:
- Fixes freeze when starting Descent. This patch release uses a smaller/simpler 4-byte DMA buffer that solves the freeze with Descent while also hopefully still preventing stuttering in Doom introduced by level changes (the reason for the DMA buffer in the first place).
For known issues, please see the Compatibility List wiki page.