• Please review our updated Terms and Rules here

Network drive boot - testers wanted!

Mike Chambers

Veteran Member
Joined
Sep 2, 2006
Messages
2,621
netdrive-test1.png


I'm hoping some of you guys here will be interested in helping me test this software I'm working on, called NetDrive. It lets you use a boot floppy on any PC back to the 8088s, and with that boot the machine from a remote disk image via ethernet as if it were a local hard drive. I've got too many 8088s hanging around here and not enough hard drives for all of them, so now I can get some use out of them. :) It's working perfectly for me so far on a handful of old machines using several different ethernet cards, but it really needs to get tested on as many as possible to make sure there aren't any issues.

It should work with any ethernet adapter you may be using as long as it has a standard DOS packet driver available. I reccommend a Crynwr packet driver if one is available for your card, they tend to be extremely small. The way the remote boot works is that the floppy has no OS on it at all, just a custom boot sector that kickstarts the driver loader. Then that reserves a small amount of space at the top of conventional memory for the resident code. All of the code is 100% assembly so it's pretty small. The resident driver is about 6 KB, so it only needs to reserve that plus the size of the packet driver you're using. Using the crynwr packet drivers for both my 3C509 and 3C503 cards, the total memory footprint is under 16 KB.

The driver hooks interrupt 13h, and the remote disk appears just like any standard hard drive to DOS. It doesn't know any better. It's a hell of a lot faster than using a tired old MFM/RLL drive too. You can even use a remote disk image in combination with a real local hard disk if you want it to, and it allows you to change the mapping between them so you can specify which appears as the first hard disk. It's really handy to quickly try running new software or games without the hassle of transferring everything over to a physical hard drive. You just have to use an image utility (like WinImage) and inject the software into the disk image.

I did some performance testing with this too. These numbers include file system overhead.

IBM XT 5160 (so 4.77 MHz) using a 3C509 ethernet card:
Read speed: 85.53 KB/s
Write speed: 97.62 KB/s

10 MHz turbo XT clone using a 3C503:
Read speed: 159.01 KB/s
Write speed: 216.72 KB/s

If you want to try it, download it at http://rubbermallet.org/netdrive-test1.zip

That has the server, and everything needed to generate a boot floppy image to use on the client. I also stuck a bare MS-DOS 6.22 installation on a fresh 20 MB disk image file that I included so you guys can try it without the hassle of making one yourself. Source code isn't included right now. I want to tidy it up a bit first and make some optimizations, shouldn't take too long. I'll make it available real soon. Anyway, on with the instructions!

Making a NetDrive boot floppy for your vintage client:

1. Extract the ZIP somewhere on your machine. The directory structure looks like this:

Code:
+---client
|   |   bootsect.bin
|   |   cmdline.txt
|   |   config.bin
|   |   diskbuild.bat
|   |   loader.bin
|   |   netdrive.bin
|   |
|   \---tools
|           diskio.dll
|           makedisk.exe
|           rawrite.exe
|           rawwritewin.exe
|
\---server
        dos622.img
        netdrive.exe



2. Copy the packet driver .com file for your client's ethernet adapter into the "client" directory.



3. Most packet drivers need command line argument(s) to be run. If yours does, you must open up "cmdline.txt" in a text editor and type in the same command line arguments you would use if you were just running it normally under DOS. Be sure to hit enter after the arguments so that it drops down to a new line. This is important, there needs to be an ASCII value 13 to indicate where it ends. (The packet driver MUST be installed on int 60h, btw)

For example, let's say you're using a 3Com 3C509 adapter and the crynwr packet driver for it. If you would be using it in DOS normally, you'd type this:
Code:
3c509.com 0x60

So, that means you type this in the cmdline.txt file:
Code:
 0x60

And save the file.

Note: If your packet driver does NOT need any command line arguments (for example, a Xircom PE3 driver) you must leave cmdline.txt empty with exactly 0 bytes.



4. In a Windows command prompt, navigate to the "client" directory. All you need to do now is run the "diskbuild.bat" file which will generate the floppy image. You need to tell it your packet driver's filename. Here's an example of using it:
Code:
C:\netdrive\client>diskbuild 3c509.com
Generating 360 KB floppy image of NetDrive using packet driver 3c509.com
Offset 0 BOOTSECT: bootsect.bin
Offset 1024 BOOT: loader.bin
Offset 5120 NETDRIVE: netdrive.bin
Offset 12288 CMDLINE: cmdline.txt
Offset 12800 PKTDRV: 3c509.com
Offset 20992 CONFIG: config.bin
Done.

Disk generation complete! Use rawwritewin.exe (on Windows) or
rawrite.exe (on true DOS) to write the image to a floppy disk. Both of
them are in the "tools" directory.

Note: Even though it is a 360 KB image, it can also be written to a 720 KB
floppy disk and it will work because the heads and sectors per track are
the same on both types of disk.

C:\netdrive\client>


5. That's it for preparing the client. Write the image to a floppy and boot it on your client. (High-density floppies will not work. Use double-density 360 KB or 720 KB disks only.) Remember that you MUST boot from that floppy every time you reboot too! So, put in the disk before hitting ctrl-alt-del. :)




Running the NetDrive image server:
Important: You must have WinPcap installed to use the server!
Wi-fi adapters will not work! Wired only.


1. First of all, it's Windows-only for the moment. Sorry to the Linux neckbeards out there. I will compile it for Linux too whenever I upload the next test build.


2. In a Windows command prompt, navigate to the "server" directory.


3. Run netdrive.exe without any command line arguments, and it will dump a list of all available network interfaces on your computer. For example, on my system it looks like this:
Code:
C:\netdrive\server>netdrive
NetDrive disk image server test build 1
(c)2013 Mike Chambers

Obtaining NIC list via libpcap...
1. rpcap://\Device\NPF_{D5A72012-A755-408A-A7D8-BDC8F64C50C5} (Network adapter 'Realtek PCIe GBE Family Controller' on local host)
2. rpcap://\Device\NPF_{B9B9B1F7-D7C8-4D6D-A134-23A3FACCCFB0} (Network adapter 'Sun' on local host)
3. rpcap://\Device\NPF_{FCD22D5D-F05D-49EA-983E-6FC7640E4EC4} (Network adapter 'VMware Virtual Ethernet Adapter' on local host)
4. rpcap://\Device\NPF_{4608DE8D-988A-4F11-B520-C6ABFF2457CC} (Network adapter 'VMware Virtual Ethernet Adapter' on local host)

NetDrive server requires you to specify the network interface number
you wish to use, followed by the image filename on the command line.

Example:
  netdrive.exe 1 myimage.raw

C:\netdrive\server>


In my case, the adapter I want is the Realtek which is listed as #1. Now I run netdrive.exe and feed it both the interface number, and the hard disk image file I want to serve to the client on the command line. Like this:
Code:
C:\netdrive\server>netdrive 1 dos622.img
NetDrive disk image server test build 1
(c)2013 Mike Chambers

Obtaining NIC list via libpcap...

Using network interface 1.

Ethernet bridge on Network adapter 'Realtek PCIe GBE Family Controller' on local host...
Using dos622.img as disk, CHS = 40/16/63


4. That' s it! Now that the server is running, you can go boot the client floppy on your old machine and it should be able to do the remote boot now. Keep in mind that you can only run ONE server and ONE client on the same LAN at any given time! I am adding the ability for the server to recognize multiple clients based on their MAC addresses, and you will be able to assign a separate drive image file to every client by editing a config file.



Also notice there's a boot configuration menu that you can access if you need:

netdrive-menu.png




Have fun! Please give me your questions/comments/feature suggestions/bug reports! :)

I will be updating this first post with downloads whenever there is an updated build.
 
Last edited:
This is a really neat project. If I have the time to I will definitely try this out. It will be much nicer than trying to find a HDD for some of my computers. Thanks for sharing it!
 
Am I the only one...

Am I the only one...

Am I the only one getting all giddy and tingling reading this? This a fantastic little tool!

Two question mike:
1. Is there anyway to make it operate on a machine w/out a packet drive? Three of my machines have a 3COM 3C515 which has no known packet driver.

2. How about on a machine w/ a HDD. Could you use this to boot up and still have access to the HDD? I could see this being a great replacement for laplink, linksrv, etc....

Great job!
 
Last edited:
Am I the only one getting all giddy and tingling reading this? This a fantastic little tool!

Two question mike:
1. Is there anyway to make it operate on a machine w/out a packet drive? Three of my machines have a 3COM 3C597 which has no known packet driver.

2. How about on a machine w/ a HDD. Could you use this to boot up and still have access to the HDD? I could see this being a great replacement for laplink, linksrv, etc....

Great job!

Thanks! I'm really surprised nobody has tried this exact method of remote boot utility before. (At least, I don't know of any out there)

Hmm, unfortunately no I don't think there's much you could do if you don't have packet driver for it. I have found NDIS/ODI driver to packet driver shims, but I have never been able to get one of those working correctly with anything. Even if you did get one that works correctly, NetDrive is not designed to load any shims first. You can pick up an old 3C503 or NE1000 pretty cheap most of the time, if you snoop around on ebay a bit.

And yes, you can use a local hard drive at the same time as the remote drive. If you look at the second screenshot, you will see the boot configuration menu which lets you choose between 3 different hard drive mapping configurations:

1. Remote drive is used as the only hard drive, any local hard drive disabled.
2. Remote drive is used as first hard drive and is what it uses to boot, local hard drive is seen as second hard drive.
3. Local hard drive used as first/boot drive, remote drive is mapped as second hard drive.
 
According to this the packet driver for 3COM 3c597 is 3c59xpd.com, which appears to be available in this archive. Is this what you need?

To echo Mike: Indeed that is a VERY nice find. I had posted in regards to this NIC a while back on the forums and the general consensus was there was no packet driver. Thanks.

Edit: Just DLed and looked at the archive and I saw it was the packet driver for the EISA card. Checked my original post and smacked myself repeatedly on the forehead! The card w/ the missing packet driver is the 3C515 - it is a 100mb ISA card. Thanks for the effort nonetheless, but this packet driver I have. In fact I managed to get the official driver disks from 3Com before HP purchased them and wiped the archives.
 
Last edited:
And yes, you can use a local hard drive at the same time as the remote drive. If you look at the second screenshot, you will see the boot configuration menu which lets you choose between 3 different hard drive mapping configurations:

1. Remote drive is used as the only hard drive, any local hard drive disabled.
2. Remote drive is used as first hard drive and is what it uses to boot, local hard drive is seen as second hard drive.
3. Local hard drive used as first/boot drive, remote drive is mapped as second hard drive.

In my excitement I totally missed that. Good deal. I have to try this out w/ one of my systems this wekend!
 
Ok, it's booting a Tandy 1000sx, with a Edimax EN-2000PXA, packet driver is e16pkt.com.
It's at Irq 5 and Address 240h, so the command line reads 0x60 5 0x240
The system also has a XT-IDE v1 @ 300h.
I can boot the disk, (Using the xtide bios, I'm booting off of the bdrive.) But I can't see my XT-IDE harddrive.

I can boot the network drive with the second hd disabled just fine.
I can boot my cf card just fine with the network enabled as 81h, but I can't see the network drive. (I have dos 6.22 installed on my cf card, 256Meg Partition).
If I config the network as 80 and the XT-IDE as 81, then I can boot the network image, but I can't see the the XT-IDE drive.

But encouraging.
I have a eprom burner, and plenty of 27c512s. I wonder if I can find a card that can take a 64k eprom....

Later,
dabone
 
Ok, it's booting a Tandy 1000sx, with a Edimax EN-2000PXA, packet driver is e16pkt.com.
It's at Irq 5 and Address 240h, so the command line reads 0x60 5 0x240
The system also has a XT-IDE v1 @ 300h.
I can boot the disk, (Using the xtide bios, I'm booting off of the bdrive.) But I can't see my XT-IDE harddrive.

I can boot the network drive with the second hd disabled just fine.
I can boot my cf card just fine with the network enabled as 81h, but I can't see the network drive. (I have dos 6.22 installed on my cf card, 256Meg Partition).
If I config the network as 80 and the XT-IDE as 81, then I can boot the network image, but I can't see the the XT-IDE drive.

But encouraging.
I have a eprom burner, and plenty of 27c512s. I wonder if I can find a card that can take a 64k eprom....

Later,
dabone

Thanks for the report! I hadn't tried it with an XT-IDE at the same time. I only tested it along with one hard disk controller (an 80's 8-bit IDE controller, the one that originally came with my 1000tx actually) and it seemed to work with it all configurations, though EDIT.COM didn't seem to want to start from my physical drive when it was mapped to 81h. I'll go stick my XT-IDE card in my 1000tx and see what happens. It sounds like I've got something broken in the translation of the int 13h calls when they're remapped.

So, for you it wouldn't see the XT-IDE drive at all? Not even in fdisk? In my case, the drive worked with everything except edit in that configuration.
 
So, for you it wouldn't see the XT-IDE drive at all? Not even in fdisk? In my case, the drive worked with everything except edit in that configuration.

Nope, actually fdisk was the first thing I was trying to see if I could see the other drive.

Later,
dabone
 
Hmm, I was just thinking... cards with only 8 KB ROM space could still be used. Most packet drivers are roughly in the area of 8 to 10 KB. Some form of compression could be used (it doesn't even have to be very good compression) and then it could be decompressed at boot time. There won't be much space left at all, but it should be enough for some code that just tells the server to send us the rest of it right over the wire! :)
 
So what happens next?
Before we know it, remote loading of a virtual A: drive which contains the necessary packet drivers perhaps?
Just kidding. :)
 
Alright, my 286 works perfect. My PC-6300 doesn't work, hangs at "Found TOC entry: CMDLINE (sector 24, 1 sectors long)". This is probably an issue with the PC-6300 itself though.
 
Hey Mike!,
This is GREAT!
Got it working on my 5155 with a Intel Etherexpress 16 NIC using the Crynwr EXP16.COM packet driver. Everything works with the DOS622.IMG file that you provided. However, I tried to make another image file for the server that was larger (wanted more than 20MB) but I could not get it to work. Maybe the problem is due to the fact that I'm using the shareware (unregistered) version of Winimage. It seems a little weak. Did you use Winimage to create the DOS622.IMG file? Was it a registered version of Winimage? Maybe you could provide some guidelines for creating the Image file.
 
Last edited:
Try using something like BOCHS or Qemu. Both make a raw disk image that should be loadable, make a disk image using the utility from either one and install DOS with either one. This also works for installing stuff and using a linux machine to dd the image to a hard drive rather than working with floppies.
 
Hey Mike!,
This is GREAT!
Got it working on my 5155 with a Intel Etherexpress 16 NIC using the Crynwr EXP16.COM packet driver. Everything works with the DOS622.IMG file that you provided. However, I tried to make another image file for the server that was larger (wanted more than 20MB) but I could not get it to work. Maybe the problem is due to the fact that I'm using the shareware (unregistered) version of Winimage. It seems a little weak. Did you use Winimage to create the DOS622.IMG file? Was it a registered version of Winimage? Maybe you could provide some guidelines for creating the Image file.

Cool! Thanks for the feedback. No problems with using any programs on the image? As far as making your own disk image, I should have mentioned this in the first post -- The easiest way to make them and install an OS is probably to use the emu I wrote, Fake86. That's how I've been doing it. Using a shareware WinImage is just fine, I'm using it unregistered too. It's fully featured, and all it does is bug you with that popup every time you start it.

http://sourceforge.net/projects/fake86

That comes with a little utility called imagegen.exe too. Say you want to make a 50 MB drive, you would do this:
Code:
imagegen.exe imagefile.raw 50

EDIT: There is a 503 MB limit to the image file, because NetDrive (and Fake86) uses the old CHS stuff where the cylinder count is represented in just 10 bits. It forces 16 heads and 63 sectors per track, too.

At this point you could simply take that blank image file and use it immediately over the network, as long as you've got DOS install floppies. I'm impatient though, so I just install DOS on it in Fake86.
Code:
fake86.exe -hd0 imagefile.raw -fd0 c:\path\to\dos\floppy\images\disk1.img -boot 0 -console

That will make it boot from the DOS setup floppy image so you can begin installing it. Whenever setup wants you insert the next disks during setup, click back over to the command prompt window that you started the emulator from where you will see a prompt. Type this:
Code:
change fd0

Then it will ask you to type in the path and filename for the next disk image. Click back over to the Fake86 emu window, and you can proceed with the rest of setup.

That's it, you should now be able to boot DOS from it over the network. WinImage will also work nicely now for adding/removing stuff to/from the image. If you wanted to boot into it in Fake86 for some reason, use the same command as before but take out the "-boot 0" part.
 
Last edited:
So what happens next?
Before we know it, remote loading of a virtual A: drive which contains the necessary packet drivers perhaps?
Just kidding. :)

That's actually not a bad idea! :twisted: A virtual A: in general that is, of course. Not built into the ROM, lol.



Alright, my 286 works perfect. My PC-6300 doesn't work, hangs at "Found TOC entry: CMDLINE (sector 24, 1 sectors long)". This is probably an issue with the PC-6300 itself though.

I'm going to have a new version with some some fixes soon that I'll upload, maybe that will help with the AT&T. One of the fixes that'll be in it are the addition of checksums in the data packets, and it will be able to retransmit if an error is detected. I've seen (very infrequently on my network here) problems with the occasional corrupted packet. This could be your problem. Some networks are going to be noisier than oters, and so also more error-prone. It'll also fix some bugs involving the local hard disk getting remapped to drive 81h.
 
Back
Top