![2023-12-12_IBM_PC-XT_4_running_networking_software_2.jpg](https://cdn-learn.adafruit.com/user_assets/assets/000/000/543/large1024/2023-12-12_IBM_PC-XT_4_running_networking_software_2.jpg?1702414331)
Overview
Most people scream and run when it comes to using an MS-DOS PC to do any sort of networking. Most folks started networking with Windows which made it much easier. Business users could use a number of networking hardware/software solutions but they were expensive and usually proprietary.
Fortunately the standards governing the internet are fairly universal and some clever folks have developed software to allow machines, even the IBM PC 5150, PCjr, and other MS-DOS machines to access today's internet (albeit without modern browsers of course). And speed is not high: an 8088 at 4.77 MHz is not a fast processor. But using basic internet commands usually does not take many CPU cycles and it just works.
This tutorial will use mTCP and it's new addition NetDrive, both by Michael B. Brutman who I applaud for fabulous work porting the software to allow old machines to do fancy things.
Hardware
While the mTCP software runs on a variety of MS-DOS machines. I first selected an IBM PC/XT 5160 with a BIOS date of 1986, then an IBM PC/AT 5170. You'll need a working machine which boots to DOS. A hard disk isn't required but recommended for speed. The software works with virtual MS-DOS images also, see the mTCP documentation for that as it's beyond this guide.
The machine should boot DOS 2.0 or above. MS-DOS 3.31 or better is recommended due to support for larger hard disk partitions. Exact DOS versions is listed in the mTCP documentation.
This XT machine I have for this guide has a 20MB half height drive with MS-DOS 6.22 installed. It also has an 8-bit XT-IDE card which provides an IDE hard disk interface in addition to the native MFM hard drive card. Attached is an IDE to Compact Flash card adapter with a 16MB CF card with basic software. It makes it easy to transfer software between my current desktop and vintage machines.
The AT machine I have also has an XT-IDE card as it's primary drive (the MFM drive is inoperable).
![ISA8_ETH_Card_Front.jpg](https://cdn-learn.adafruit.com/user_assets/assets/000/000/545/large1024/ISA8_ETH_Card_Front.jpg?1702415401)
![NIC_3COM509B-TPO.png](https://cdn-learn.adafruit.com/user_assets/assets/000/000/556/large1024/NIC_3COM509B-TPO.png?1702863789)
The XT is fitted with an ISA8_ETH 8-bit CAT5 network card. Designed by Sergey Kiselev in 2021, they can be found on the internet like on Tindie, maybe eBay in the $50 range. See GitHub for details and a link to a patched NE2000 driver to use it in MS-DOS.
The ISA8_ETH card is not required - you will need an 8-bit network card (for IBM PC 5150/IBM PC Portable 5155/IBM PC/XT 5160 and compatibles) with working packet driver software.
The PC/AT uses a 3COM 3C509B-TPO 16-bit card. Both of the cards I have use standard 10BASE-T 10 megabit Ethernet making it easy to connect to modern Ethernet switches.
See mTCP documentation for non-RJ-45 hardware. There are old time network cards with coax connectors, some come with both connectors or the multi pin AUI connector. For cards that don't have RJ-45, the thinnet connector and AUI connector allows you to add an external transceiver such as the CenterCom 210. Those go for about $20 on eBay at the moment and they let you use ancient cards that don't have RJ-45, or don't support RJ-45 correctly.
Here is a list of cards the mTCP author has tested:
- Xircom PE3-10BT
- Novell NE1000, NE2000 and clones (personally tested)
- 3Com 3C503, 3C509B (personally tested)
- WD/SMC 8003 series
- Intel EtherExpress 8/16
- Davicom DM9008F
- LinkSys PCI
- ESP8266 "WiFi" modems with SLIP firmware (this may need to be investigated for another tutorial)
For the RJ-45 connections discussed here, you'll need a CAT5 Ethernet cable (or better) to an Ethernet switch. If you want to access the internet, a connection to the internet is needed but you could make a local network as long as there is a DHCP server on the network to provide addressing unless you set machine addresses manually (again refer to the documentation for such).
![NetDrive.png](https://cdn-learn.adafruit.com/user_assets/assets/000/000/544/large1024/NetDrive.png?1702415361)
Software
As previously mentioned, you will need packet driver software written for MS-DOS and your specific network card. If you only have the hardware card, you'll need to look on the internet for the software. For the ISA8_ETH modern card, the driver is here. For older cards, hopefully you have the floppy disk(s). If not, type the card model number into a browser. You'll also likely need to know what parameters the driver wants on the command line. The command can be run at a DOS prompt or put in AUTOEXEC.BAT. For example, the driver for the ISA8_ETH card uses a modified ne2000 packet driver which takes three arguments: the software interrupt to use (0x60 is usually ok), the interrupt the network card is using and the IO address the card is using.
The interrupt and I/O address are usually set on the network card via jumpers or DIP switches. You will need values that don't conflict with other hardware in your system (part of the hard part of PC configuration prior to Plug-n-Play which came years later). I set the ISA8_ETH to use Interrupt IRQ 2 and I/O address 0x280. The values are in silkscreen on the back.
You may need to download a PDF of the manual for your card to do such configuration.
For the 3COM card there is configuration software that sets things like the IO address and interrupt as there are no jumpers. I found a couple of sources for the software.
![ISA8_ETH_Card_Back_(jumper_settings).jpg](https://cdn-learn.adafruit.com/user_assets/assets/000/000/546/large1024/ISA8_ETH_Card_Back_%28jumper_settings%29.jpg?1702417164)
With the 3COM 3C509B card, there is a configuration .EXE file with all the software. With an autoconfig on an IBM PC/AT, it selected interrupt 10, base address 0x210. There are no jumpers like the card above.
Also download mTCP and NetDrive, both by Michael B. Brutman. mTCP is a suite of programs which set up a DOS to packet driver interface and some standard internet tools including ping, ftp and a NTP time server query program!
The Chicken and the Egg
The trick to working with vintage computers and getting software from non-vintage sources is the file transfer issue. If you find driver software and download mTCP and NetDrive on your modern computer, how do you get that software onto your vintage computer?? There are some methods depending on what you have on hand.
Fortunately once mTCP is installed, getting software from the network gets a lot easier. With NetDrive, even easier!! But how do you get this software onto the old computer. That's the paradox.
If you have a more modern computer with USB, you can use a thumb drive. This is unlikely for vintage IBM compatibles, though.
There are USB 3.5" floppy drives still available which could transfer files from a modern computer to an older computer with a 3.5" drive. Sometimes they only write 1.44MB floppies when you really need a 720K floppy so be aware of this possible incompatibility.
There are not 5.25" floppy to USB drives, unfortunately and 5.25" floppies are most common for older IBM/MS-DOS compatibles.
If you have an older computer like a 386, 486, or Pentium class, you can generally copy files to that machine via network, USB thumb drive, or SD/CF card. Then you can copy the files to a floppy. This is sometimes called a "tweener" machine as it bridges between older computers and modern computers. Some folks have more than one "tweener" machine to handle different possibilities.
Finally there are solutions like XT-IDE which is a hardware card for providing an IDE disk interface. There are IDE to compact flash and IDE to SD card interfaces which would provide a method for memory cards to appear as a hard drive to the vintage MS-DOS machine. Again this is at an additional expense and setup. At least MS-DOS recognizes such setups (for DOS 2 onward, I believe). Then you play sneakernet copying files onto the memory card then putting the card in the computer and booting up XT-IDE firmware which maps the card as a hard drive. I do suggest getting one XT-IDE card just to get things going on getting a new system up to speed.
Setting Up the Software on the PC
I will take it you have a running MS-DOS machine with storage and a network card at this point. Even if you're here, congratulations, that is the hard part. Loading the internet software is easy after that.
On your modern PC, take all the software: mTCP, NetDrive (and the network card packet driver if you don't have that on the MS-DOS machine) and get it onto the hard drive of the MS-DOS machine (see previous section on the painful methods to do so).
Fortunately once mTCP is installed, getting software from the network gets a lot easier. With NetDrive, even easier!!
![NE2000_screenshot.jpg](https://cdn-learn.adafruit.com/user_assets/assets/000/000/547/large1024/NE2000_screenshot.jpg?1702419296)
Packet Driver Setup
For my IBM PC/XT with an ISA8_ETH card, there an executable file for the packet driver called NE2000.COM (note this is modified from a period NE2000 driver for the ISA8_ETH card). Fortunately the mTCP documentation shows how this driver should be configured. You can run at the MS-DOS command Prompt:
NE2000 0x60 2 0x260
where 0x60 is a software interrupt (not often used in PCs, you can select any value 0x60 to 0x66, 0x68-6F, or 0x78-7E). 2 is the interrupt that the network card used (set with DIP switches) and 0x260 is the I/O address selected with DIP switches. My XT-IDE drive adapter card uses I/O address 0x300 so I knew I should avoid that address.
If you have a different network card, your software may use different software and configuration to run.
For my PC/AT with a 3COM509B-TPO network card, the 3c5x9pd.com file is the packet driver and the command to run is:
3c5x9pd 0x60
If all goes well, hopefully the driver will provide you feedback. The information I get back from my packet driver is shown in the screenshot above. It shows the values I gave it and an Ethernet MAC address. If your MAC address is all one value, things might not be working or your cable may be disconnected. Be sure the network card is connected to a router on your network.
If the MAC address is all one value or doesn't match what is printed on a sticker on the card, that's an indication that the IO port address on the packet driver doesn't match what the card is set to, or there is a conflict and something else is using the same IO ports. (The MAC address should always be returned correctly, even if the cable is disconnected.)
![DHCP_screen.png](https://cdn-learn.adafruit.com/user_assets/assets/000/000/548/large1024/DHCP_screen.png?1702420489)
mTCP Software
You can read all about mTCP on the product page. The manual for mTCP is here. The first utility needed to get connected to your network is DHCP (Dynamic Host Configuration Protocol) which is used to get an address on the network from a DHCP server (typically your internet model but could be on any networked device).
To use DHCP, you will need a configuration file (separate from the usual AUTOEXEC.BAT and CONFIG.SYS). The manual uses the file MYCONFIG.TXT. To create this, go to the directory you want the file in and type:
cat >>MYCONFIG.TXT
PACKETINT 0x60
^Z
MTU 1500
If using MS-DOS 5 or above, I suggest using the EDIT command, which works like a full screen editor.
The value 0x60
is the software interrupt used previously in setting up the packet driver - use the value you used for that. MTU stands for “Maximum Transmission Unit”, which is the largest number of bytes that can be sent by your networking hardware in a single packet. The default is 576 but NetDrive wants a minimum of 1200. The max is 1500.
The default name of your computer is DOSRULES. You can add HOSTNAME yourname to the MYCONFIG.TXT file to set your own name.
Now you will need to set a MS-DOS environment variable to point to the MYCONFIG.TXT file.
set MTCPCFG=C:\NETWORK\MTCP\MYCONFIG.TXT
Be sure you use the path (directory/directories) where you created the configuration file.
Then in the mTCP directory type:
DHCP
And hopefully you'll get a screen like the one above which writes the info to MYCONFIG.TXT also.
If you have a message, your packet driver may not be working or you need to connect your computer to your home network router.
![SNTP.jpg](https://cdn-learn.adafruit.com/user_assets/assets/000/000/549/large1024/SNTP.jpg?1702429790)
At this point I wanted to try to set my computer time to the time on an internet NTP server. The US National Institute of Standards and Technology (NIST) runs public servers. Other institutions also run servers. Find the address of the one you'd like to use, the more local servers are usually better due to less latency.
In the mTCP directory, I typed:
SNTP -set 129.6.15.26
And it set my system time correctly!! (I'll need to set the TZ environment variable to avoid the warning, it did use my time zone).
For my continued use I copied that command into a new batch file named SETTIME.BAT.
NetDrive Software
NetDrive (homepage) is clever software: it takes the packet connection to the network and allows for using floppy and hard drive images that are on the network to appear as if they are on the local machine. This gets rid of the chicken & the egg issue! You can put any software you want in a disk image on your network (Windows or Linux machine) and access it. The documentation can be found here.
The server software is used for two things:
- Creating disk images which are files that contain other files and look like a floppy or hard drive across the network. You cannot have your MS-DOS computer read whatever directories on the server computer, that's too much (for now). You'll need to gather your files and determine whether you want to put them on a virtual floppy (small number) or a virtual hard drive (lots of files possible).
- Make the connection on a Windows 10/11 or Linux machine to the network so the disk images can be seen by the MS-DOS computer.
- Once the MS-DOS client software sees the server, it'll make the connection so the server disk images look like they are local drives connected to the MS-DOS machine. Magic!
Creating a Disk Image
The NetDrive documentation describes using the server software to make a drive. I'm using WIndows 10 but the program runs on Windows 11 and there is a Linux program also.
I went to the directory containing the Windows version of netdrive.exe. I typed the following to make a 500MB empty hard drive file (straight out of the documentation):
netdrive create hd -num_fats 1 511 FAT16B bigdisk.dsk
![NetDrive_making_a_big_disk.png](https://cdn-learn.adafruit.com/user_assets/assets/000/000/550/large1024/NetDrive_making_a_big_disk.png?1702487026)
Knowing the IP Address of Your Server (Windows)
Before starting your server, get the IP address of your machine. In Windows Command Prompt/Terminal, type:
ipconfig/all
And pick the IP address (in the form of something like 192.168.x.x) and write it down.
![NetDrive_Get_Server_IP_Address.png](https://cdn-learn.adafruit.com/user_assets/assets/000/000/552/large1024/NetDrive_Get_Server_IP_Address.png?1702489962)
Alternate Method:
In Windows Control Panel, go to System. If you have named your machine, it will show up as the Device Name. Write that down and you can use it as an alias for the computer IP address.
![Control_Panel_Computer_Name.jpg](https://cdn-learn.adafruit.com/user_assets/assets/000/000/557/large1024/Control_Panel_Computer_Name.jpg?1703205026)
You can test the machine name by using the mTCP command DNSTest. Go to the directory with the mTCP programs then type:
DNSTEST -name ThreadRipper
where you replace the name Threadripper with your machine name. If it works you'll get your local network IP Address back:
![DNSTEST_test.jpg](https://cdn-learn.adafruit.com/user_assets/assets/000/000/558/large1024/DNSTEST_test.jpg?1703206956)
Above, the machine name (alias) ThreadRipper indeed refer to my local machine IP address 192.168.1.78 found through IPCONFIG/all
.
Starting a NetDrive Server
Once you have one or more disk images, you'll want to serve them over the local network.
On Windows 10, start a Command Prompt by going to Start -> Windows System -> Command Prompt
![WIndows_Command_Prompt.jpg](https://cdn-learn.adafruit.com/user_assets/assets/000/000/559/large1024/WIndows_Command_Prompt.jpg?1703207335)
Change to the drive and directory where you unzipped NETDRIVE Client PC files.
In the directory with NetDrive, type:
netdrive serve -port 2002 -image_dir .
The port number is changeable but be consistent between the server and the client. Any port above 1024 should work but there can be rare conflicts with other software.
I specified the current NetDrive directory . for images but you can point to anywhere on your machine. You will see a window similar to the one below.
![NetDrive_server_window_AT.png](https://cdn-learn.adafruit.com/user_assets/assets/000/000/554/large1024/NetDrive_server_window_AT.png?1702862406)
Connecting Your MS-DOS Machine to the Server
The command for starting your client on your MS-DOS machine is:
NETDRIVE CONNECT machine:port image_name driveletter: [-ro]
machine is the IP address we found above (or the alias).
port we specified as 2002 above when starting the server
image_name is the name of the disk image file. The one made above is bigdisk.dsk and it is case sensitive so use the case you used on your server machine.
x: is a drive letter on the local machine. On my AT with only a hard drive, it's D: You must use the colon.
If you specify -ro the disk will be read only (no writes allowed).
My command to have the client listen and connect to the server:
NETDRIVE CONNECT 192.168.1.78:2002 bigdsk.dsk D:
Using the alias of my Windows 10 machine:
NETDRIVE CONNECT ThreadRipper:2002 bigdsk.dsk D:
And it works, my MS-DOS computer sees the file bigdsk.dsk on my Windows 10 machine as a big hard drive on local drive letter D: (on the PC/AT).
The port 2002 appears to work whereas I tried port 8086 and it didn't but I didn't try the latter again after getting a working configuration.
![NetDrive_Client_connects.jpg](https://cdn-learn.adafruit.com/user_assets/assets/000/000/555/large1024/NetDrive_Client_connects.jpg?1702862618)
I made an MS-DOS batch file CONNECT.BAT which types out the NETDISK connect command with my server. You might want to create a similar shortcut. I made a similar DISCON.BAT to disconnect the local machine from the served drive.
Using the New Disk
I copied my MS-DOS machine hard drive C to the virtual hard disk D: as a backup:
XCOPY /S C:\*.* D:\BACKUP
And it was that easy. Now I can have a repository of MS-DOS machine drive images on my Windows machine!
Using other Drive Images
See the NetDrive documentation (available on the NetDrive website here) for the types of images NetDrive can use. Besides hard drives in FAT12, FAT16 and FAT16B (DOS 4+), floppy images in 160, 320, 180, 360, 1200, 720K, 1.44K and 2.88K are allowed.
The documentation notes the Windows programs WinImage and qemu-img (hard drives) work.
See the Playground Note MS-DOS Disk Images for a more complete description of disk images and how to create and use them.