VOGONS


uCDD - virtual drive with Redbook audio for DOS

Topic actions

Reply 20 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie
davidmorom wrote on 2026-09-25, 16:23:

Absolute Pinball -> Freezes with blinking cursor al launch


Can you try launching Absolute Pinball from the CD instead of the HDD? I think the eXoDOS dump is missing TRACKS.CDL in its HDD installation.
The game fails because it uses a DSP mode that uCDD rejects, 16-bit unsigned stereo. Cyberball fails for a similar reason, it uses 16-bit signed mono, which it also doesn't work. I'll fix those in the next version.

Also, I cannot find a Cyber Police image with Red Book audio anywhere. I think I can just launch the game with some music cd mounted, but that's not exactly a proper test if the game does anything fancy.

Reply 21 of 37, by davidmorom

User metadata
Rank Newbie
Rank
Newbie

There seems to be two version of the game, one with the name Cyber Law on the title screen without CD audio, and another one with the name Cyber Police and with CD Audio. I sent you a PM.

I also found another two very important (in my opinion) failing games. Destruction Derby 1 and 2. Both games behaves the same, SFX and music initially work but the game stutters extremely. After a while SFX and stuttering dissapears, but the CD-DA music remains.

Reply 22 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie

I'll add them to the list. Some of the games you mentioned earlier have tricky fixes (Chasm requires a whole 16-bit extension that uCDD didn't have). Destruction Derby may be fixed by some of the changes I'm currently working on, it's going to be a big patch!

Reply 23 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie

uCDD Beta 0.9.3

Download here ---> https://github.com/vorvek/uCDD/releases/tag/v0.9.3

This one grew a lot. It started as a pass through the game reports in this thread and ended with 16-bit DPMI support, a new UCDDSET, and a change to how DPMI and VCPI games are handled, and a little extra. Here's what was going on with each reported game.

  • Absolute Pinball (freeze with a blinking cursor): the game asks the CD driver for audio info with a transfer length of 0. uCDD rejected that, and the game retried forever. Past that there were three more problems: its extender expects FS and GS to survive a mode switch (the host cleared them), it does mode switches from inside real-mode calls (the host lost track), and during background CD reads the disk IRQ got stuck in protected mode while the BIOS waited for it. All fixed; tables play with CD music and effects.
  • Amazing Learning Games with Rayman (CD-DA restarts or missing): PMODE/W prefers VCPI when it's available. In VCPI mode the game runs its own protected mode and talks to the sound card directly, so uCDD never sees the sound. uCDD now hides VCPI while it provides DPMI (see below). There's still one track restart at the change from the intro to the menu; I think the game does that on purpose.
  • Battlespire (freeze at the name prompt): same story, CauseWay picks VCPI. With VCPI hidden it uses uCDD's DPMI host (it also needed three DPMI calls that the host didn't support). Character creation and the first level work, with CD music.
  • Batman Forever: The Arcade Game (CD-DA restarts): the game keeps asking "did the disc change?" and restarts the track when the drive doesn't report "busy". uCDD only set busy on some requests. Now it reports busy on every request while audio plays.
  • Batman Forever (stutter): I couldn't clearly reproduce this one. Against a native IDE CD in 86Box, the frame rate and audio looked about the same. The DOS/4GW speedup below should help anyway; feedback is welcome.
  • Battle Race (no SFX): the game sets the SB16 mixer, resets it, and then sets the voice volume. uCDD got the reset wrong and played the effects at about -24 dB. It also uses sound blocks longer than its DMA buffer, which uCDD rejected. Both fixed.
  • Blood (exception dump at launch): the Apogee Sound System reads the current DMA address and page register. uCDD only emulated the DMA count, so the game got garbage and crashed in its mixer. uCDD also didn't accept DSP command 42h, and sound setup was very slow (see the host changes). E1M1 now plays with CD music and effects.
  • Bust-A-Move 2 (freeze at the loading screen): three problems. The Miles driver's detection IRQ arrived during a real-mode call and wasn't delivered in time. The driver writes its handler straight into the interrupt table, and uCDD's host put the old value back after each host call. And the loading screen was very slow (see below). Now it loads at native speed and plays with CD music.
  • Cyber Police (no SFX): the game plays one long sound block over a short DMA buffer and polls the DMA position. uCDD didn't allow that. Effects work now.
    About Red Book: thanks for sending me an image of the CD. It turns out the eXoDOS version runs CL.EXE, which never plays CD audio, even with a real CD drive. CYBERPO1.EXE on the same CD does play the music, and that works with uCDD. (In 86Box, CYBERPO1 draws garbage on the S3 ViRGE; a Cirrus or ET4000 card is fine.)
  • Cyberball (no sound): PMODE/W and VCPI again. After that it needed 45 kHz output (uCDD capped rates at 44.1 kHz), 16-bit mono samples, and short sound blocks inside a larger buffer for the table sounds. All fixed.
  • Chasm: The Rift ("cannot initialize"): Chasm is a 16-bit DPMI program (Borland Pascal 7 with RTM), and uCDD's host only supported 32-bit clients. The host now runs 16-bit clients too. RTM also expects the host to translate DOS calls that use protected-mode pointers, as Windows does, so there's a translation layer for that now. RTM also uses one selector per heap block, so the host now has room for 8192 selectors. Chasm plays with CD music and effects.
  • Alpha Storm (no CD-DA): I couldn't reproduce this. CD audio plays for me in both 0.9.2c and 0.9.3. If you still see it, please post your setup (card, BLASTER, memory manager, and where it goes silent).

Protected mode changes

  • VCPI is hidden by default while uCDD provides DPMI. Extenders that prefer VCPI (PMODE/W, CauseWay) then use uCDD's DPMI host, and their sound goes through uCDD. If a program only supports VCPI, install with UCDD -install -vcpi. That program's sound then bypasses uCDD. Of course, the usefulness of this is very limited. You still get the CD-ROM data track, I guess.
  • DOS/4GW games are much faster during file access. DOS/4GW runs its DOS call path with interrupts off and turns them back on with POPF, which a protected-mode host can't see. The host single-stepped every instruction to catch it: about 80,000 traps per second while Bust-A-Move 2 was loading. Now it uses the Windows 95 trick (mark the saved flags so the POPF traps once) and learns which code spots can skip stepping. Bust-A-Move 2 loads at (close to) native speed.
  • 16-bit DPMI clients with DOS translation, as described under Chasm.

New setup steps (please read, this changes a fair bit)

  1. Initialize your sound card first, with jumpers, UNISOUND, CTCM, the card's setup program, or whatever your card needs. uCDD no longer sets the IRQ and DMA of SB16 and WSS cards. It only needs to know where the card is.
  2. Run UCDDSET once. Enter the physical card, or use Detect. Pick the virtual card that games will see: SB16, SB Pro, or SB 1.5/2.0, plus a virtual WSS. Set the hotkeys and the mixer levels, then save. Everything goes into UCDD.CFG. The file format is new, so UCDDSET opens its menu once if you have an old UCDD.CFG.
  3. Keep UCDDSET.EXE next to UCDD.EXE. UCDD -install now always runs it. With a valid UCDD.CFG it doesn't show anything: it copies the settings into the driver and sets BLASTER for the virtual Sound Blaster (other BLASTER fields, such as P330, are kept).
  4. If you change your card or your settings, run UCDDSET again. UCDD doesn't read BLASTER anymore. UCDD.CFG is the only configuration source.

The hotkeys are configurable now: modifiers (including the Super/Win keys), disc keys (1 to 0 or F1 to F10), next disc, previous disc, eject/insert, and CD volume up and down. The eject hotkey works for single images too, not only MDM lists.

ucddset.png

Other bits

  • MODE2/2352 (Form 1) data tracks in CUE sheets.
  • UCDDPLAY.EXE, a little extra goodie.

As usual, reports are welcome, and thanks a lot for your help!

Reply 24 of 37, by Yoghoo

User metadata
Rank Oldbie
Rank
Oldbie

Impressive progress! Not tested it yet will certainly do so in the future.

Will UCDDPLAY also be able to play real CDs in the future? Looks great and would be nice to use it as a standalone program as well (when uCDD is not loaded).

Reply 25 of 37, by davidmorom

User metadata
Rank Newbie
Rank
Newbie

Amazing work, I have no words. I will continue testing as soon as I have some time. The UCDDPLAY program is crazy!

Reply 26 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie
Yoghoo wrote on 2026-09-26, 23:52:

Impressive progress! Not tested it yet will certainly do so in the future.
Will UCDDPLAY also be able to play real CDs in the future? Looks great and would be nice to use it as a standalone program as well (when uCDD is not loaded).

You mean using it as a driver for normal disc drives? I'm not sure if I could shrink the extras more than something like vide-cdd.sys, and technically you can already have the two drivers side by side. I'll look into it, though.

davidmorom wrote on 2026-09-26, 23:58:

Amazing work, I have no words. I will continue testing as soon as I have some time. The UCDDPLAY program is crazy!

I wanted something to quickly test if the set up had worked x)

Reply 27 of 37, by Yoghoo

User metadata
Rank Oldbie
Rank
Oldbie
vorvek wrote on 2026-09-27, 00:02:
Yoghoo wrote on 2026-09-26, 23:52:

Impressive progress! Not tested it yet will certainly do so in the future.
Will UCDDPLAY also be able to play real CDs in the future? Looks great and would be nice to use it as a standalone program as well (when uCDD is not loaded).

You mean using it as a driver for normal disc drives? I'm not sure if I could shrink the extras more than something like vide-cdd.sys, and technically you can already have the two drivers side by side. I'll look into it, though.

I didn't mean as a driver. 😀 Just as a CD player for physical audio CDs. So just using oakcdrom (or vide-cdd etc) and mscdex loaded and than play audio CDs from your real/physical CD-ROM drive.

Reply 28 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie

Oh, sorry, yeah, UCDDPLAY can be extended, it was meant just as a toy, but I can make it so that the Open menu allows picking actual drives too.

Reply 29 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie

I've been investigating, and UDVD2 and vide-cdd seem to allow extracting a disc's track table and audio sectors, so it seems possible. This could also be used to allow physical drives to play Red Book audio without an internal cable. I'll look further into it, as that sounds like a nice feature to have.

Reply 30 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie

Beta 0.9.3a is out! https://github.com/vorvek/uCDD/releases/tag/v0.9.3a

UCDDPLAY can now play normal audio CDs through digital extraction, with the equalizer and visualizations still active and no internal CD audio cable needed. Use a compatible CD drive (tested with UDVD2, OAKCDROM, or VIDE-CDD) and SHSUCDX, then select the drive in the Open menu. For now this is limited to UCDDPLAY, but I think I can extend uCDD to allow Redbook Audio through data streams from physical drives..

This update also adds CUE flags and PRE de-emphasis, reduces loading delays in Rayman games, and fixes startup or audio issues in Rayman, Betrayal at Krondor, Little Big Adventure 1/2, and Corridor 7. Soccer Kid's startup freeze is fixed, but its CD music still needed a separate game workaround.

New entries in the working list include Destruction Derby 1/2, the Rayman games, ShadowCaster, Betrayal at Krondor, Little Big Adventure 1/2, Corridor 7, and Return to Zork.

Special thanks to @davidmorom for all the testing and reports!

Reply 31 of 37, by davidmorom

User metadata
Rank Newbie
Rank
Newbie

I've been testing all the recent changes over the weekend to check the current status of the reported games. As I don't have access to my retro computers on weekends, all the tests referred on this post are done on 86Box, with the configuration files attached at the end of this post. If you don't find tests done on 86Box valuable, I totally understand, I will try to repeat all of them tomorrow on real hardware if I have enough time.

  • Alpha Storm: music plays fine. SFX initially plays fine too, but after a few seconds became stuck in a loop or dissappears. UPDATE: seems to work fine on real hardware.
  • Batman Forever: exactly same problem as Alpha Storm, but it could take a while to fail. Also, after installation the installer tries to determine if FMVs are playable and save the result on a FMV.INI file, but fails with a "DOS/16M error: [32] DPMI host error (possibly insufficient memory)" error. The FMV.INI file must be created manually for the game to run. UPDATE: confirmed on real hardware. The issue manifests after killing a few enemies.
  • Chasm The Rift: silently crash back to prompt while loading csm.bin. UPDATE: on real hardware I get "Out of memory" error at launch.

I've been also trying already working games, but this time using 3dfx acceleration patches, and found the following results.

  • Carmageddon: when installed in full installation mode (required for redbook audio to play), the game asks for the CD when selecting New Game on the menu (maybe some kind of regression? I'm pretty sure this worked before). Running the game in 640x480 software mode ("-hires" parameter) fails while loading, "FATAL ERROR: Sorry, but Carmageddon has run out of memory". Voodoo mode fails with "Run-time library initialization failure: DLL load aborted" error (both CARMAV.EXE and VOODO2C.EXE executables). UPDATE: all issues confirmed on real hardware.
  • Tomb Raider 3dfx: statically linked executable for Voodoo 1 works OK. Dinamically linked executable for glide2x.ovl shows black screen at launch.
  • Battle Arena Toshinden 3dfx: statically linked executable for Voodoo 1 (the only one that exists) works fine. Beside that, I noticed that after installation, SSETUP.EXE must be run manually to configure sound, it can't be chained from the main SETUP.EXE.
  • Screamer 2 3dfx: same error as Carmageddon, "Run-time library initialization failure: DLL load aborted".
  • Screamer Rally 3dfx: same error as Sreamer 2, "Run-time library initialization failure: DLL load aborted".

It's incredible to see how complex this could be...

Reply 32 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie

Thanks again for testing all of this!
The 86Box reports were useful. I tracked down two separate host problems and put the fixes into 0.9.3b.

- Tomb Raider, Carmageddon, Screamer 2 and Screamer Rally 3dfx: The “DLL load aborted” error came from the GLIDE2X.OVL startup code. The game’s loader passes some information through interrupt E9h, but DOS/4GW replaces that vector when running under a DPMI host. The driver then reads the wrong values and aborts. uCDD now preserves that information and returns it when requested. I could also reproduce the original failure under HDPMI32i.
- Batman Forever’s installer: The installer is a DOS/4GW program that launches DUKTEST.EXE, a DOS/16M program. uCDD previously refused a second DPMI program while the first was running, which caused the host error. It now saves the parent’s state and restores it when the child exits.
- Battle Arena Toshinden’s setup: Same underlying problem as Batman. SETUP can now launch SSETUP, and exiting the sound setup returns to the original menu.

For the remaining games:
- Alpha Storm: The shots played correctly in a short test here. How long does it take for them to stop for you?
- Chasm: I couldn’t reproduce the exit while loading csm.bin. Both the original and patched PS10.EXE reached gameplay with CD audio, including on the 430VX/Pentium MMX 200 configuration. No new fix for this one for now, but it's a finicky game.
- Carmageddon’s CD check and -hires: New Game went to driver selection without asking for the CD. With -hires, my copy hit a different “DatafileStack type mismatch” error, both with uCDD and with OAKCDROM + MSCDEX. That doesn’t explain your out-of-memory report, so these are still unresolved.
These checks were all in 86Box. Your UCDD.CFG, the exact Chasm and Carmageddon versions, and roughly when the sound fails in Alpha Storm/Batman would help narrow down the remaining differences.

Reply 33 of 37, by davidmorom

User metadata
Rank Newbie
Rank
Newbie

This is what I found today. I sent you my complete 86Box setup if you wanna give it a try, check your PM inbox.

  • Alpha Storm: I was unable to replicate the issue anymore, so we can consider it done.
  • Batman Forever: for me, it fails after killing a few enemies and picking the green interrogation on the floor.
  • Chasm: still fails when loading at launch.

For Carmageddon, the thing is very weird. I tested all the available versions on Redump (quite a few), and found very strange results. Some versions, mostly european, fail the CD check when installed in maximum mode, on 86box with OAKCDROM and even on real hardware with a PicoGUS as CD-ROM, but they work fine on DOSBox. This versions seems to work fine in hires mode (when not using UCDD). Other versions pass the CD check correctly, but fails in hires mode with "DatafileStack type mismatch" error. I found one USA version that seems to work both the CD check and the hires mode, at least on my hardware. Check your PM inbox. Anyway, this seems to be a mess, so I think we can say that everything is fine on UCDD side.

Thank you for checking all this.

Reply 34 of 37, by rflego

User metadata
Rank Newbie
Rank
Newbie

What an amazing project! I’ve been looking for a way to use virtual CD-Audio in pure DOS/FreeDOS for a long time; I even started designing a driver for it but didn't have the time to follow through. My idea was different, though: I planned to use a Raspberry Pi or Orange Pi to receive commands via the serial port and play the tracks using the embedded PC. I already use one as a MIDI synthesizer and a virtual floppy drive with XTIDE—I programmed the display so I could swap disks in real time. Congratulations on the project!

Reply 35 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie

I finally got some free time to work again on this, had some busy work days and then caught one of the worst colds I can remember!

davidmorom wrote on 2026-09-29, 17:25:

This is what I found today. I sent you my complete 86Box setup if you wanna give it a try, check your PM inbox.

Thanks for the files. They've been very useful!

davidmorom wrote on 2026-09-29, 17:25:
  • Alpha Storm: I was unable to replicate the issue anymore, so we can consider it done.

Added to the list!

davidmorom wrote on 2026-09-29, 17:25:
  • Chasm: still fails when loading at launch.

This is a curious case. It worked in real hardware, and it worked in 86box through the interpreter, but it failed under the dynarec. uCDD gave 32-bit stacks to 16-bit programs and 86box's dynarec didn't like that. I've fixed it (16-bit stacks for 16-bit programs, 32-bit stacks for 32-bit programs).

davidmorom wrote on 2026-09-29, 17:25:
  • Batman Forever: for me, it fails after killing a few enemies and picking the green interrogation on the floor.

The bridge lost track of which interrupt a real-mode BIOS handler was servicing. Its “interrupt finished” command could then clear the virtual Sound Blaster’s interrupt state before Batman acknowledged the audio block. Sound playback would stop advancing, causing silence or a repeating sound. I didn't get any hangs in the game, though. It's now fixed.

Here's me in the second level, hoping I never need to play this piece of shit again, the controls are horrid!
Ak64cgy.png

davidmorom wrote on 2026-09-29, 17:25:

For Carmageddon, the thing is very weird. I tested all the available versions on Redump (quite a few), and found very strange results. Some versions, mostly european, fail the CD check when installed in maximum mode, on 86box with OAKCDROM and even on real hardware with a PicoGUS as CD-ROM, but they work fine on DOSBox. This versions seems to work fine in hires mode (when not using UCDD). Other versions pass the CD check correctly, but fails in hires mode with "DatafileStack type mismatch" error. I found one USA version that seems to work both the CD check and the hires mode, at least on my hardware. Check your PM inbox. Anyway, this seems to be a mess, so I think we can say that everything is fine on UCDD side.

I managed to fix this too. I found two separate issues.
The affected European releases check GENERAL.TXT and other files on the CD while music is playing. uCDD successfully read the data but included the Busy flag in its response. SHSUCDX expects an exact success status for data reads, so it treated the read as unsuccessful and the game reported that the correct disc wasn’t inserted.
The MSCDEX specification says physical CD drivers should reject requests requiring head movement during audio playback, returning both Busy and Error. OAKCDROM and VIDE-CDD both behaved that way in testing. uCDD can read image data while playing music, so I changed successful data reads to return the status SHSUCDX expects, while keeping Busy set for audio-status queries.
The USA version performs its CD check before the intro and music start, which avoids this problem.
The separate hires crash comes from an incompatible NEWBIGGR.PIX font in the two 1998 European rereleases. Repairing that font fixes the reproduced DatafileStack type mismatch error.
The uCDD-related CD-check issue is now fixed. The font fix I found in, of all places, the Steam Forums: https://steamcommunity.com/app/282010/discuss … 49887216891282/

Thanks again for your time testing!

The new Beta v0.9.3c is now available here: https://github.com/vorvek/uCDD/releases/tag/v0.9.3c

rflego wrote on 2026-10-11, 01:00:

What an amazing project! I’ve been looking for a way to use virtual CD-Audio in pure DOS/FreeDOS for a long time; I even started designing a driver for it but didn't have the time to follow through. My idea was different, though: I planned to use a Raspberry Pi or Orange Pi to receive commands via the serial port and play the tracks using the embedded PC. I already use one as a MIDI synthesizer and a virtual floppy drive with XTIDE—I programmed the display so I could swap disks in real time. Congratulations on the project!

Maybe the PicoIDE would work for what you wanted? It does use the actual IDE channel, instead. Thanks for your words of encouragement!

Reply 36 of 37, by vorvek

User metadata
Rank Newbie
Rank
Newbie

Yet another release with more working games.

I've spent a while trying to find out how to play the 7 Redbook tracks from the Warcraft: Orcs & Humans cd, as the game only seems to offer MIDI and FM Synth for music. Well, it's just how it is, the music is there but the DOS version doesn't use it.
Still, the game exposed an issue with DPMI memory reporting: uCDD reported zero unlocked pages despite available RAM, causing a false insufficient-memory error, which is now fixed.

I also got the following games working:

Alien Logic: It worked without changes.

Inferno: It had a DPMI resize compatibility issue. uCDD always relocated blocks, while its DOS4GVM runtime retained pointers based on the previous address and crashed. Added in-place growth when adjacent space is free, retaining relocation as a fallback. It also requested unsupported C2h unsigned 8-bit single-cycle playback which I hadn't seen in any game yet; I've now implemented the C0h/C2h family.

Quarantine: It just worked with the previous version.

Quarantine II: Same!

SuperKarts: Seven-byte CD request headers were rejected; added compatibility handling. Its custom IRQ0 handler also stops advancing BIOS ticks, which could disable uCDD's CD-refill fallback after the second PLAY; that fallback now uses the audio clock.

The Horde: This was massive, there were FOUR driver problems.
* its 40h/FFh DSP IRQ probe produced a nominal 1 MHz rate that uCDD's parser rejected
* 16-bit playback through 8-bit DMA1 was incorrectly handled
* low-rate PCM used sample holding, adding unwanted high-frequency images
* repeated retrace hints could postpone refills until the CD queue starved.
Fixed the rate handling, DMA byte/word accounting and IRQ status, added PCM interpolation, and added the urgent refill deadline.
I don't know how to play this game (weird mouse controls), but it seems to work now. Got into a fight with some monsters and they destroyed my village while my character was groggy from spinning around.

Warcraft II: The same DPMI memory-reporting defect as Warcraft I prevented launch. It also supplies a four-byte count for larger, fixed-size MSCDEX control buffers. uCDD's validation rejected those requests, preventing CD music. Known controls now use their required size.

That's it for 0.9.3d which can be downloaded here: https://github.com/vorvek/uCDD/releases/tag/v0.9.3d

I hope I get some extra time this week to continue going down the list of games. Everything pre-1995 should already be working, but 95-97 are the biggest chunk of the list.

Reply 37 of 37, by davidmorom

User metadata
Rank Newbie
Rank
Newbie

I'm glad to see you back over here. I hope everything is fine.

I tested Batman and Chasm on 86Box and now they are working fine. Next week I will try them on real hardware, I hope they work and we can forget about them once for good.

I'm still battling with Carmageddon. Very good find the error about the corrupted font, it's funny that it works fine with the 3dfx executables (CARMAV.EXE and VOODO2C.EXE), but not with the original one (CARMA.EXE). Anyway, I'm still having trouble with the hires and the 3dfx accelerated modes, with the three executables I always get the insufficient memory error. I found that if I launch the game in low memory mode (with 16MB of RAM or the "-lomem" parameter), everything works fine, but then there is a very ugly fog that limits the draw distance. Were you able to get the hires or voodoo modes to work? Maybe the game is trying to do some memory allocation that uCDD rejects.

I already tested a lot of games on my side and have a very long report almost ready, but first I want to test the recent changes on some problematic games I found, to see if they are already fixed. I hope to post the results in a couple of days.