USBODE - making it work

Over the years, many have looked at the Gotek and wondered why nobody made something like it for CDs. Well, that is now here - the USBODE.

The USB Optical Drive Emulator is not, however, a device you install in your pc like the Gotek. Instead, it is a Raspberry Pi Zero 2 W (preferably - you can use a Zero W, but it is slow!) that you connect via USB. Now, you may think as I did - "how do you make anything USB work in pure DOS?" But somehow it does...

The project Github page provides an easy-to-follow guide on how to prepare the Pi, but when it comes to "Using USBODE on the target computer", it simply states "Once the target computer boots, it should be able to see the USBODE as a standard CD-ROM drive." Well, it's a bit more involved than that, and there is no step-by-step guide (that I could find) on how to do this - so I'll take a stab at making one.

Prerequisites

I am assuming that you have followed the initial setup guide on the Github page linked above and have made it to the section "Using USBODE on the target computer".

Note that you control the USBODE via a webbrowser from another computer or phone on the same LAN. The Pi Zero only supports 2.4 GHz Wifi, also known as 802.11 b/g/n. If you switched it off (or your router/access point no longer supports that), you have to have the 1.3" Waveshare OLED hat to control it. Even if you do have access to it via LAN, the hat is still very nice to have!

Making it work in Windows 98

Fortunately, this turned out to be fairly straight forward: Download and install nusb36e, reboot and you're set. I would recommend installing this before plugging in the USBODE, otherwise Windows will search for drivers (which it doesn't have), and once rebooted, it will not (at least, mine didn't) search for them again, rather you need to update them manually from Device Manager.

Making it work in DOS

I'm running DOS 6.22 - I don't now if this will work on older versions.

You need to grab usbobe.zip, which contains usbaspi.sys and usbcd.sys. Copy these to your harddrive where you would like them - for the rest of this guide, I'm assuming they are in c:utils.

Add this to your config.sys - if you have a physical CD-drive installed, put this just before or after the line loading that driver:

DEVICEHIGH=C:\UTILS\USBASPI.SYS /V
DEVICEHIGH=C:\UTILS\USBCD.SYS /D:USBCD

You may also want to set the lastdrive variable by adding LASTDRIVE=Z somewhere near the top. I do this because I prefer to have my physical CD-drive as Y: and the USBODE as drive Z:. This ensures that they do not change drive letters, even if I remove or add a hard drive. Each drive letter available does take up 512 bytes of conventional memory, so if you are really very low on this, you may want to set this lower or omit it all together.

In autoexec.bat, you then need to load the Microsoft CD Extensions, MSCDEX. If you already have a line loading MSCDEX, add /D:USBCD to it, so it looks something like this:

LH C:\DOS\MSCDEX.EXE /D:MSCD001 /D:USBCD /L:Y

/D:MSCD001 is what I assume is already there. /L:Y means "give the drive letter Y to the first drive". This will assign letter Y: to your physical CD drive and Z: to the USBODE. It you want it the other way around, switch the order of the two devices to "/D:USBCD /D:MSCD001".

If you have no physical CD drive, just add LH C:\DOS\MSCDEX.EXE /D:USBCD /L:Y to autoexec.bat.

If you just want the drives to be assigned the first available drive letter after your other drives, omit the /L:-part.

When you reboot, you should see something like this (note that the USBODE should be in Mode 1 to be detected):

USBASPI and USBCD loading

followed sometime later by this:

MSCDEX loading the drives and assigning drive letters

If you do, it works! If not, then you have the same problem as I did.

First off, the USBODE needs to be done booting before it can be detected. I noticed that when it failed, if I just rebooted, it ususally worked. So, if only we could make the pc wait for it to boot...

In autoexec.bat we could have used the PAUSE command, which would make the pc wait until we press a key. We do not have that option in config.sys - but there is another way. Insert this at the top of config.sys:

[MENU]
MENUITEM=WAITING, Waiting for USBODE...
MENUDEFAULT=WAITING, 7
[WAITING]

This will make config.sys display a menu with only one menu item, which will be automatically selected after a timeout (here, set to 7 seconds). So you now have a seven second pause before config.sys starts doing its thing.

A configuration menu with a timeout

For some reason, the USBODE is not always detected, even if it is done booting. If it fails, I can usually just press CTRL-ALT-DELETE to reboot, and if comes right up. Also, once it is detected and works, I have not seen it be detected successfully again on a warm boot. I need to turn the computer off and on again for it to work.

Should I use the shutdown option in USBODE?

Ideally yes. I have on a few occasions just turned off the computer (which also provides power to the USBODE), and so far it have survived. It does seem to take a bit longer on the next boot, though.

The video output on the Pi Zero/USBODE

Did you notice that there is a mini-HDMI output on the Pi Zero and wondered it there is anything interesting when attaching a monitor to it? Well, I did. I am not really sure what I expected - but really thinking about it, it is exactly what you should expect. Yes, I have a mini-HDMI cable laying around, so I fired up a grabber and OBS...

Published on  July 22nd, 2025