Reply 140 of 1404, by MJay99
The DAC could maybe be integrated then, also - e.g. like it's done here:
https://datasheets.raspberrypi.org/rp2040/VGA-KiCAD.zip
The DAC could maybe be integrated then, also - e.g. like it's done here:
https://datasheets.raspberrypi.org/rp2040/VGA-KiCAD.zip
I wanted to give a quick update. I've paused work on GUS DMA a bit – While traveling for the end of year holidays I put effort in to getting asynchronous writes from ISA DMA to the PSRAM working. Since returning and testing it, while the PSRAM writing does work, it's not helping much with troublesome DMA titles. There is some promise, though, as Doom actually starts and plays and produces something that vaguely sounds like music and sound effects... but more work is needed. I haven't gotten around to doing captures with my logic analyzer to see what's going on on the ISA bus since I only did some quick testing after returning home.
I do have some good news though – MPU-401 emulation with intelligent mode is now working really well. I don't have a huge stable of games that require intelligent mode to test, but Wing Commander I and II and Silpheed are working perfectly. I am using Frederik Pohl's Gateway as my primary testbed since it heavily uses timers and IRQs. It still has some issues when it changes between songs but I'm making progress on it. I've ported over some changes from DOSBox-X's MPU-401 code to the HardMPU-based code in PicoGUS to help with that.
polpo wrote on 2023-01-12, 00:07:I wanted to give a quick update. I've paused work on GUS DMA a bit – While traveling for the end of year holidays I put effort in to getting asynchronous writes from ISA DMA to the PSRAM working. Since returning and testing it, while the PSRAM writing does work, it's not helping much with troublesome DMA titles. There is some promise, though, as Doom actually starts and plays and produces something that vaguely sounds like music and sound effects... but more work is needed. I haven't gotten around to doing captures with my logic analyzer to see what's going on on the ISA bus since I only did some quick testing after returning home.
I do have some good news though – MPU-401 emulation with intelligent mode is now working really well. I don't have a huge stable of games that require intelligent mode to test, but Wing Commander I and II and Silpheed are working perfectly. I am using Frederik Pohl's Gateway as my primary testbed since it heavily uses timers and IRQs. It still has some issues when it changes between songs but I'm making progress on it. I've ported over some changes from DOSBox-X's MPU-401 code to the HardMPU-based code in PicoGUS to help with that.
Love to see the update, everything sounds positive. I hope the DMA work continues to be fruitful, when life and time permits of course. The intelligent MPU emulation is a wonderful option. The notion of these multiple options for the platform is quite exciting.
I'm going ahead with my first card build, while keeping in mind that the card design is not yet final per se - 'them's the risks'. Speaking of the build: I discovered that, despite my wriggling around trying to source cheaper options in my Asia/Pacific region, ultimately there was no beating Mouser, even here. Primarily because Mouser seems to be the one place that currently stocks every component (barring the DAC). That, and taking advantage of the Free Shipping threshold, handily outmatched any other multi-outlet option, cheaper though they may have been individually in some cases. The integrated JLC build also sounds like a great option for the future, once the design is finalised.
Supporter of PicoGUS, PicoMEM, mt32-pi, WavetablePi, Throttle Blaster, Voltage Blaster, GBS-Control, GP2040-CE, RetroNAS.
This is an awesome project. Following.
polpo wrote on 2023-01-12, 00:07:I do have some good news though – MPU-401 emulation with intelligent mode is now working really well. I don't have a huge stable of games that require intelligent mode to test, but Wing Commander I and II and Silpheed are working perfectly. I am using Frederik Pohl's Gateway as my primary testbed since it heavily uses timers and IRQs. It still has some issues when it changes between songs but I'm making progress on it. I've ported over some changes from DOSBox-X's MPU-401 code to the HardMPU-based code in PicoGUS to help with that.
just to clarify - what is MPU used for, connecting external MT32? Are/were there any successful projects implementing General MIDI using GUS? Wiki says "This architecture allowed Gravis to incorporate a General MIDI-compatible mapping scheme." What Im asking is is it possible for PicoGUS to act like GM synth on its own? If not using GUS than are there any lightweight GM implementations that could be run on Pico?
https://github.com/raszpl/FIC-486-GAC-2-Cache-Module for AT&T Globalyst
https://github.com/raszpl/386RC-16 memory board
https://github.com/raszpl/440BX Reference Design adapted to Kicad
https://github.com/raszpl/Zenith_ZBIOS MFM-300 Monitor
rasz_pl wrote on 2023-01-13, 01:49:just to clarify - what is MPU used for, connecting external MT32? Are/were there any successful projects implementing General MIDI using GUS? Wiki says "This architecture allowed Gravis to incorporate a General MIDI-compatible mapping scheme." What Im asking is is it possible for PicoGUS to act like GM synth on its own? If not using GUS than are there any lightweight GM implementations that could be run on Pico?
It is purely for connecting an external MT-32 or other MIDI device. It's only emulating an MPU-401, and the PicoGUS hardware has a 3.5mm TRS MIDI out jack on it. I had the HardMPU and PCMIDI in mind when adding the MIDI out jack. The cost of a PicoGUS board would be around the cost of a HardMPU and is potentially much more capable. A Pico at $4 is near half the cost of the $7.45 Atmega1284 that the HardMPU uses, for example.
But you raise an interesting question. Given that the Pico has little problem mixing 32 channels of audio, making a simple GM synth that runs on the Pico wouldn't be too much of a stretch! I don't know of any implementations, but implementing one that is at parity with the GUS's MIDI implementation shouldn't be too awful...
Timidity maybe? Given it supports the same patchset out of the box...
Timidity is a great idea, I forgot all about it! It's old so shouldn't use too much CPU, and it claims to be very portable. I'll put that one on the backlog...
BTW, tonight I had a new idea about how to handle shared access to the PSRAM (so reading and writing can happen in different threads) and I have the most promising results for DMA so far. Doom v1.9, which uses software mixing of sound effects and streams audio to the GUS in real time with DMA, starts and plays music and sound effects. Once the MIDI exceeds more than a few tracks, it runs out of mixing time, however. But that is extremely good results on a title that would previously only play garbage sounding audio.
I also tried Duke3D, which can play MIDI in the setup program but not mixed sound effects. And the game freezes on launch when it tries playing the audio from the starting animation. But that's also far better than it did before.
I made my sample cache a bit smarter and now I no longer run out of time during GUS sample mixing (it's IO bound with access to the PSRAM rather than with raw CPU time). Doom now runs basically perfectly. There are some slight pops in the streamed audio but that's probably down to my sample cache not being evicted perfectly as new audio streams in. Video: https://youtu.be/vFfT8gmnBaI
polpo wrote on 2023-01-14, 06:14:I made my sample cache a bit smarter and now I no longer run out of time during GUS sample mixing (it's IO bound with access to the PSRAM rather than with raw CPU time). Doom now runs basically perfectly. There are some slight pops in the streamed audio but that's probably down to my sample cache not being evicted perfectly as new audio streams in. Video: https://youtu.be/vFfT8gmnBaI
Ayyyyyy!! Nice one. Really cool breakthrough.
Fortuitous timing as my PSRAMs from Aliexpress just arrived today.
They look good but the proof will be in the installation. At some stage next week, I'll have everything but the DAC, which must be on the slow boat. (looks sideways at my mt32pi which_has_a_dac_in_it, mt32-pi says "hands off buddy!", we continue to stare at one-another suspiciously...)
Supporter of PicoGUS, PicoMEM, mt32-pi, WavetablePi, Throttle Blaster, Voltage Blaster, GBS-Control, GP2040-CE, RetroNAS.
Now THAT is some great news and answering the 'can it run doom?' in another way 😁
It's definitely a milestone!
I've recently also tried it with Freddy's modm (since it's become my default player a while ago) and it actually came pretty close to an original GUS - some effects / notes seem to occasionally be missing, which made it sound a little bit off, but if you didn't know the original, it would be difficult to notice. I'm very curious if the latest changes that made doom work are also gonna push it to a 100% there!
As sphere said: an awesome project! 😀
Well that's some fantastic news!
Can't wait to give it a spin 😁
polpo wrote on 2023-01-14, 06:14:I made my sample cache a bit smarter and now I no longer run out of time during GUS sample mixing (it's IO bound with access to the PSRAM rather than with raw CPU time). Doom now runs basically perfectly. There are some slight pops in the streamed audio but that's probably down to my sample cache not being evicted perfectly as new audio streams in. Video: https://youtu.be/vFfT8gmnBaI
Fantastic.
More bits arrived here today. Enough to build most of the project. (Reminder to new entrants, that the project is still in beta.)
So I started making a test card.
Mostly done. It's my first time fully populating such a board, and doing this much SMT work in one go. Took a few hours, it was fun though. The drag soldering technique is cool. It works really well for the TSSOPs and SOICs. The messiest part of my whole work was the Pico board soldering (the biggest stuff, 🤣), I'll go back and tidy that up a little. Thanks polpo for the build guide, the included details gave me the confidence and info I needed to happily work through the build.
Now just waiting for last couple components to get this thing fully happening.
Supporter of PicoGUS, PicoMEM, mt32-pi, WavetablePi, Throttle Blaster, Voltage Blaster, GBS-Control, GP2040-CE, RetroNAS.
Isn't it possible to add the Pico THT? IE, headers and THT soldering? It doesn't need to be flat..
@Shreddoc Nice looking soldering especially on those TSSOPs! Great results for the first time doing a project as big as this for the first time.
@appiah4 Yes, there are several options for how to mount the Pico. I use headers on the PicoGUS board, then have the Pico soldered onto the headers so I can grab onto the header pins with probes for a scope or logic analyzer. I've also seen people use sockets on the board with headers on the Pico (or on the Pico-H which already has headers soldered), and also surface mounted directly. All methods work fine. If you ever want to remove the Pico, the surface mount method is toughest unless you have a hot plate. It is possible, though.
BTW I now have Duke3D mostly working with a bit of audio stuttering here and there. I'm still not super happy with streaming audio over DMA because the delay between DMA transfers has to be artificially increased. I think the real way to get streaming audio working well is to detect when it's happening and store those samples in RP2040's RAM instead of the external PSRAM. It should be pretty simple to detect – when DMA is going into a memory address associated with a currently looping sample, it's pretty obvious that it's streaming audio. That will be probably take a lot of work, so I'll clean up the current state of things for a new firmware release that brings in MPU-401 intelligent mode emulation and GUS streaming DMA improvements.
polpo wrote on 2023-01-17, 06:55:BTW I now have Duke3D mostly working with a bit of audio stuttering here and there. I'm still not super happy with streaming audio over DMA because the delay between DMA transfers has to be artificially increased. I think the real way to get streaming audio working well is to detect when it's happening and store those samples in RP2040's RAM instead of the external PSRAM. It should be pretty simple to detect – when DMA is going into a memory address associated with a currently looping sample, it's pretty obvious that it's streaming audio. That will be probably take a lot of work, so I'll clean up the current state of things for a new firmware release that brings in MPU-401 intelligent mode emulation and GUS streaming DMA improvements.
Amazinsauce.
I'll be doing some soldering today.. 🤣
So, yeah..
@polpo I also asked this on twitter but, CSV BOM has SN74CB3T3245PW for U2 (which I soldered) whereas your interactive BOM and your card photo has 74LVC244 instead.. Did I do wrong?
appiah4 wrote on 2023-01-17, 09:53:So, yeah..
PicoGUS SOIC TSSOP.jpg
@polpo I also asked this on twitter but, CSV BOM has SN74CB3T3245PW for U2 (which I soldered) whereas your interactive BOM and your card photo has 74LVC244 instead.. Did I do wrong?
I also noticed the slight confusion while building. Ultimately I found this message on the build guide page, where it says "In a pinch, U2 can be substituted with an 74LVC244 part". My conclusion was that the original spec is SN74CB3T3245PW, but if you don't have it, then 74LVC244 is a tolerable second option.
To be clear, I also used a SN74CB3T3245PW for U2.
Supporter of PicoGUS, PicoMEM, mt32-pi, WavetablePi, Throttle Blaster, Voltage Blaster, GBS-Control, GP2040-CE, RetroNAS.