Access CD-ROM Images on Your Retro PC
Back in 2022 I wrote an article on how to network your retro PC to a modern-day PC for file transfer purposes. While this is entirely possible [and certainly helps get files over quickly and easily], there are some limitations. Namely:
- With 700 MB of data on a single CD, you need lots of local storage space on the retro PC.
- Copying all these files over the network is time-consuming.
- You need to keep all your CDs handy, which takes up space.
Of course you could just use a large hard disk on your Windows 98 machine with a built-in CD-ROM drive, and do it the old-school way - just put whatever game CD-ROM you want to play in the drive when the time comes - but with so many games now conveniently available in .ISO image format, wouldn't it be nice to just do away with physical CDs completely?
DOS Days contributor, targeted, has come up with an excellent solution to this dilemma - to have the CD-ROM images accessible over a network connecting your retro PC to a modern-day PC. This makes use of a clever new utility called NetDrive by Michael B. Brutman, author of the mTCP DOS TCP/IP stack I referred to in the earlier networking article.
One problem this won't solve is the ability to handle CD audio where a game comes on a 'mixed mode' disc (audio tracks as well as data tracks).
All credit for this article goes to targeted who provided this step-by-step guide and screenshots.
The idea is to have a remote file server (modern-day PC or NAS) hosting hard disk images that contain ISO images as files. The hard disk image is mounted first, then the ISO file becomes visible, and is in turn mounted as a virtual CD-ROM. After that the CD-ROM is used to install the game on the retro PC's C: drive and run as usual. The usage scenario would suggest having one hard drive image per game, and the mount/play/unmount cycle wouldn't even require a reboot.
Here's a pictorial of how this setup will work:
Before we begin, I assume you have a working retro PC that boots to DOS, has a single drive C: (drives D: and E: will be allocated dynamically later), and an ethernet network card is installed.
Let's start on the DOS PC then...
1) Install the network card driver for DOS
For this guide, I am using a 3Com 3X5X9 ISA network card. This is a 10 MBit network card which will give you at most 600 KB/sec transfer speed, equivalent to a 4x CD-ROM. Grab the 3Com driver and unzip it to C:\. Now make the following changes to AUTOEXEC.BAT:
C:\DRIVERS\3C5X9\3C5X9CFG.EXE CONFIGURE
LOADHIGH C:\DRIVERS\3C5X9\PKTDVR\3C5X9PD.COM 0x60
For this particular network card you may need to run
C:\DRIVERS\3C5X9\3C5X9CFG.EXE interactively to have it
initialized and tested for the first time. The '0x60' in the last line above is the interrupt number for the driver, keep it in mind, as
it must match the following TCP/IP configuration.
2) Install TCP/IP driver suite for DOS
Now we have the driver for the network card installed, we need a DOS-compatible TCP/IP stack so the card can communicate over the network. For this we'll again use Michael B. Brutman's mTCP utility - download it here. Unzip it to C:\DRIVERS\MTCP and make the following changes to CONFIG.SYS:
DEVICEHIGH=C:\DRIVERS\MTCP\NETDRIVE.SYS
and to AUTOEXEC.BAT:
SET MTCPCFG=C:\MTCP.CFG
C:\DRIVERS\MTCP\DHCP.EXE
REM *** THERE IS SOME CONFLICT BETWEEN NETDRIVE AND SMARTDRV.
REM *** CACHING ON DRIVES D: AND E: SHOULD BE DISABLED
LOADHIGH C:\DOS\SMARTDRV.EXE 8192 16 A+ B- C+ D- E- /N /E:32768
Now edit your C:\HOSTS.TXT file, adding this line:
This should match the fixed IP address of the bigger Windows/Linux NAS
machine which will be hosting the disk images. The 'nas' name is just what I'm calling the hostname for later use.
Now edit your C:\MTCP.CFG file:
TIMESTAMP ( 1711293328 ) Sun Mar 24 10:15:28 2024
packetint 0x60
mtu 1500
hostname dos
dhcp_lease_request_secs 14400
dhcp_lease_threshold 3600
hostsfile C:\HOSTS.TXT
# DHCP generated settings will appear here. If you are using DHCP
# then these will be updated automatically by the DHCP client (dhcp.exe).
# You can use the same lines to do a STATIC network setup; just alter
# them and don't run the DHCP client.
#
This is just the default sample file, with comments removed, hostname added, and the hostsfile pointing to the file we just edited. Note that packetint matches the interrupt we used in step 1. MTU must be increased to at least 1200 bytes.
3) Reboot your DOS PC and make sure the network comes up
Try running:
and see if the server replies. Do not proceed until you have a response.
4) Install the virtual CD-ROM driver for DOS
In order to have access to CD-ROM .ISO images on the DOS machine, we're going to use the Virtual CD-ROM driver by Jason Hood. There is an entire family of those utilities, but you need just these two:
SHSUCDHD.EXE - to mount a CD-ROM ISO image as a drive.
SHSUCDX.COM - a replacement to Microsoft's MSCDEX CD-ROM extension.
You can download these here. Unzip it to C:\ but don't change anything else, they will only get loaded just before the game is started.
5) Modern PC - Install NetDrive disk image sharing server
Now let's move over to the modern-day PC or NAS that will act as the host for our CD-ROM .ISO images.
The tool used to share these is NetDrive (the project can be found here), which is included with the mTCP pack you downloaded in step 2. NetDrive has several different builds depending on what you need to run it on.
The binaries for Windows 10+ are here. Since I'm using Windows 7, I had to download and build from Go source.
The build process worked just like that, producing the same single netdrv.exe file.
In any case, now you have netdrv.exe in some empty directory on the Windows or NAS machine:
6) Create a disk image with an ISO file inside
For this I will be using an ISO image for Gabriel Knight, aroung 600 MB in size.
First, create an empty image by running:
The 700 MB shown here is arbitrary, but of course needs to be larger than the size of the ISO image.
Now download OSFMount, a free utility for mounting image files as disks. One installed, run it to mount gabriel.img as a drive:
Now copy gabriel.iso onto that drive:
Go to OSFMount and dismount the drive:
Now you have gabriel.img, and inside that "drive" there is a single ISO file.
7) Start the NetDrive server
On the modern PC or NAS, execute:
This way it will share *all* images in that directory, gabriel.img being the only one so far, but you could similarly create game1.img, game2.img, and so forth.
Make sure you give NetDrive firewall permissions to use UDP port 2002.
8) Mount network drive image on DOS
Now back on the DOS machine, take a look at drive D (assigned to NETDRIVE.SYS).
Renew the DHCP lease just in case it ran out:
Mount the remote image onto drive D:
GABRIEL.IMG is the name of the image to be mounted in this case.
Mount the ISO file from drive D: onto CD-ROM in drive E: using the SHSUCD utilities:
C:\DRIVERS\CDROM\SHSUCDX.COM /D:SHSU-CDH /L:E
Now your drive E: is the game CD-ROM!
Make sure SMARTDRV is disabled for drives D: and E:
NOTE: If the NetDrive DOS client fails to disconnect properly, the NetDrive server will fail to mount the image the second time as read/write and the server will need to be restarted.
9) Install the game
Run E:\INSTALL.EXE and follow the instructions.
Assuming the game was installed into C:\GAMES\GABRIEL\
10) Run the game
gkcd.bat
11) Cleaning up
After the game has exited, dismount both the virtual CD-ROM and the network drive in the reverse order:
C:\DRIVERS\CDROM\SHSUCDHD.EXE /U
C:\DRIVERS\MTCP\NETDRIVE.EXE disconnect D:
12) Let's create a bat file to run the game
Create a file called C:\GAMES\gabriel.bat
C:\DRIVERS\MTCP\NETDRIVE.EXE connect nas:2002 GABRIEL.IMG D:
C:\DRIVERS\CDROM\SHSUCDHD.EXE /F:D:\GABRIEL.ISO
C:\DRIVERS\CDROM\SHSUCDX.COM /D:SHSU-CDH /L:E
call gkcd.bat
C:\DRIVERS\CDROM\SHSUCDX.COM /U
C:\DRIVERS\CDROM\SHSUCDHD.EXE /U
C:\DRIVERS\MTCP\NETDRIVE.EXE disconnect D:
For another game, there would appear C:\GAMES\<gamename>.bat with this contents:
C:\DRIVERS\MTCP\NETDRIVE.EXE connect nas:2002 <gamename>.IMG D:
C:\DRIVERS\CDROM\SHSUCDHD.EXE /F:D:\<gamename>.ISO
C:\DRIVERS\CDROM\SHSUCDX.COM /D:SHSU-CDH /L:E
CD <gamename>
<gamename>.EXE
CD ..
C:\DRIVERS\CDROM\SHSUCDX.COM /U
C:\DRIVERS\CDROM\SHSUCDHD.EXE /U
C:\DRIVERS\MTCP\NETDRIVE.EXE disconnect D:
And that's it ! You can create numerous virtual hard drives, each with their own drive letter containing CD-ROM ISO images. Bear in mind the LASTDRIVE environment variable in DOS that sets the last drive letter that DOS will use (the default is E: if no LASTDRIVE variable exists), so add a LASTDRIVE=X: command to your CONFIG.SYS file.
Thanks again to targeted for this awesome article!