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 1 of 9, by Anderson77

User metadata
Rank Newbie
Rank
Newbie

Great work, looking good.

Reply 2 of 9, 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.

Reply 3 of 9, 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 9, 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

Reply 5 of 9, 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 9, 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.

Reply 7 of 9, by vic911

User metadata
Rank Newbie
Rank
Newbie

Don't know about the exact CPU req. but a highly optimized version runs on RP2040 as part of doom port.
rp2040 OPL2 emulator (for DOOM)

and used by picogus found here on VOGONS

Reply 8 of 9, by jansakos

User metadata
Rank Newbie
Rank
Newbie

Hi there,
I am working on a prototype built on top of Raspberry Pi Pico 2. So far I was able to make the device compatible with Covox, DSS, FTL sound adapter, OPL2LPT (via emu8950 used in PicoGUS) and Stereo-on-1 (although only the passive version, not really sure about detection logic as of now). I am working on adding support for CMSLPT and TNDLPT.

Main problem I am trying to resolve is connecting the pins of LPT port to Pico itself (since I don't think that Pico is 5V tolerant). Right now I am using some questionable LLCs ( TXS0108E) and I feel like they are a source of some audio degradation. In case you have any tips, I would be really glad to hear them. Please, message me to DMs here on vogons, or reply to this thread.

Also do not worry. When I will have some sort of prototype that can be built with at least usable audio quality, I will provide all the links for the project, including its source code (a bit messy, but working). My main goal is to make the device versatile and easy and cheap to build.

Reply 9 of 9, by digger

User metadata
Rank Oldbie
Rank
Oldbie
jansakos wrote on 2025-11-18, 17:31:

Hi there,
I am working on a prototype built on top of Raspberry Pi Pico 2. So far I was able to make the device compatible with Covox, DSS, FTL sound adapter, OPL2LPT (via emu8950 used in PicoGUS) and Stereo-on-1 (although only the passive version, not really sure about detection logic as of now). I am working on adding support for CMSLPT and TNDLPT.

That's amazing!

Please please please call that thing the "Picovox"! That would be the perfect name for it. ☺️

Also, it might be a good idea to just create a separate topic for it, since it's a different project than the ESP32-based one that this topic was created for.

Main problem I am trying to resolve is connecting the pins of LPT port to Pico itself (since I don't think that Pico is 5V tolerant).

Wasn't it officially clarified that the Pico (or at least the Pico 2) is in fact 5V tolerant? I believe I recall reading that somewhere.

Right now I am using some questionable LLCs ( TXS0108E) and I feel like they are a source of some audio degradation. In case you have any tips, I would be really glad to hear them. Please, message me to DMs here on vogons, or reply to this thread.

Indeed, I'm sure some knowledgeable people here will be able to help you out with that. This sounds like a problem that was likely solved in other projects dealing with modern electronics and old-school Centronics parallel ports as well. Isn't there a design for a Raspberry Pi HAT with an LPT port somewhere, for instance?

Also do not worry. When I will have some sort of prototype that can be built with at least usable audio quality, I will provide all the links for the project, including its source code (a bit messy, but working). My main goal is to make the device versatile and easy and cheap to build.

I will be following your project with great anticipation. And it will be so cool once more people start to collaborate on it.

One potential emulation target to add at to the Picovox (yeah, I'm trying to make that name happen) some point later would be Digispeech DS311/DS301. Those are parallel port devices that support both digital audio and OPL2 FM music at the same time, in a single parallel port device. It might be a fun challenge to reverse-engineer the communication between the Digispeech drivers and the device.

Other possible features:

An "MP3 accelerator" for older computers, which can send an MP3 stream to the device through the parallel port and then the device will decompress and play it back on the fly.

Or a virtual printer that stores the "prints" as PDF files on an SD card.

The possibilities are endless for an ESP32-based or Pico2-based parallel port device.

Anyway, thank you both for sharing your efforts with the world, and good luck!