VOGONS


First post, by mcgurk

User metadata
Rank Newbie
Rank
Newbie

I have trying to do Covox/DSS with ESP32. There were lot of obstacles in the road but I think I did it. Covox was quite easy but DSS needed reaction speeds that I couldn't achieve with ESP32 with normal ways (hardware interrupts). Solution was to dedicate second ESP32 CPU core purely to bitbanging DSS, so it acts like FIFO-buffer chip.

Using quite new ESP32-PICO-KIT witch includes ESP32-PICO-D4 I found out that I can use IO-pins so that 8bit sample can be read directly from internal register (IO32-39) without any bitwise operations. Other ESP32 models works propably too, but you must change pin definitions and reading routine.

Another quite new discovery for me was that apparently ESP32 is 5V tolerant. And actually LPT doesn't give 5V signals but little under 5V.
So I soldered dupont cables to LPT-connector and connected them directly to ESP32 pinheader. For straighforward audio output I2S DAC is easiest.

So for building you need only connect LPT-connector and I2S-dac to ESP32.

https://github.com/mcgurk/Covox

I also made automatic switching between Covox and DSS. It's file "esp32pico_i2s_covox-dss.ino".

Thanks for all information in this thread (Reversing the Disney Sound Source):
Reversing the Disney Sound Source
Without it I wouldn't even start to study DSS internal life.

Reply 2 of 7, by matze79

User metadata
Rank l33t
Rank
l33t

Another quite new discovery for me was that apparently ESP32 is 5V tolerant. And actually LPT doesn't give 5V signals but little under 5V.
So I soldered dupont cables to LPT-connector and connected them directly to ESP32 pinheader. For straighforward audio output I2S DAC is easiest.

some later laptops output only around 3,3V on LPT.
This was giving me quiete some Headache figuring out why my device didnt work.

https://www.retrokits.de - blog, retro projects, hdd clicker, diy soundcards etc
https://www.retroianer.de - german retro computer board

Reply 3 of 7, by digger

User metadata
Rank Oldbie
Rank
Oldbie

Cool project! Finally an open-source parallel port device that supports both Covox and DSS modes.

I was wondering whether something like that could be done with an RP2040 microcontroller. It already has two CPU cores, so the same bitbanging trick could work with that architecture as well, right? And perhaps it has the needed reaction speeds, so you wouldn't have to use such a workaround on that at all?

Here's hoping that Dreamblaster develops and starts selling a "CVX5" with DSS compatibility, based on your design, or something similar!

Thanks for sharing. 🙂

Reply 4 of 7, by mcgurk

User metadata
Rank Newbie
Rank
Newbie

I have rewritten code and started over countless times and maybe this time this is last time. I ditched Arduino IDE in favor of getting all interrupts and watchdogs totally off. Other core runs now only loop with pure assembly without any interruptions. This was needed to get StereoIn1 (Crystal Dreams, Inertia Player) to work. Signal for channelselection is ridiculous (scope image in attachment) and sample read must be very fast. I didn't get it to work until all my software tweaks and added quite strong pullup resistor for channelselection-pin. It is much smaller and shorter than DSS-signal, so now DSS works even more realiable, as it works too without any interruptions in very tight loop. Now Crystal Dreams works 44.1kHz at Stereo (at least with my Compaq Contura 420C 75MHz) and it sounds stunning.

This detects Covox/DSS/StereoIn1-mode automatically, but StereoIn1 some software (Crystal Dreams and Inertia Player at least) puts DSS pin to HIGH, so it must be reset somehow to get back to normal Covox-mode. It cannot know if DSS signal is HIGH because DSS mode is needed or if it just because something else raised DSS-signal. I cannot force it to normal Covox mode after StereoIn1-mode, because then it wouldn't work if DSS-stuff is started after that.

https://github.com/mcgurk/Covox

Attachments

Reply 5 of 7, by vic911

User metadata
Rank Newbie
Rank
Newbie

I've just managed to build this thingy, without any serious skill. Only addition, that I had to set the H1L-H4L solder bridges on the pcm5102, otherwise sound was totally distorted.
Now it works like charm and it adds some live to my soundless Contura Aero.
Thanks for publishing your project!
Theoretically an opl2 emulation is possible with this design? (eg using emu8950)

Reply 6 of 7, by digger

User metadata
Rank Oldbie
Rank
Oldbie

It might be possible to add output support for the Disney Sound Source (and clones such as this one) to SBEMU. Not sure how well the performance would be on older CPUs, though. How efficient is emu8950? I know that for instanced Nuked-OPL3 has pretty demanding CPU requirements as a price for its "perfect" emulation accuracy.