← Journal

Retro Computing · October 5, 2026

Getting a later 3Com EtherLink Plus (3C505) online under DOS

How three bugs in the old Crynwr DOS packet driver kept a later 3Com EtherLink Plus (3C505) off the network, and where to get the fixed driver.

I finally have my IBM XT-286 talking to the network through a 3Com EtherLink Plus (3C505).

The card itself worked fine, but the old Crynwr DOS packet driver had a few problems with my later-revision 3C505. After tracking them down and patching the driver, it now works with mTCP for DHCP, FTP and NetDrive.

My card is set for:

  • I/O 300h
  • IRQ 10
  • DMA 5
  • Packet interrupt 60h

The driver is loaded with:

3C505 0x60 10 0x300

What was wrong

There were three main problems in the original driver.

Reset timeout

The driver was supposed to give the card about 15 seconds to complete its self-test, but its timer code was effectively running twice as fast on the PC/AT hardware.

The result was a timeout after roughly 7.5 seconds, followed by:

3c505 apparently not present at this address.

The timeout was increased to allow about 30 seconds. The driver still continues as soon as the card is ready.

Missing PCB acknowledgements

The 3C505 communicates with the PC using small control messages called PCBs.

The DOS driver acknowledged received packets, but not every other PCB returned by the card. On this revision of the 3C505, that could leave the card waiting forever for an acknowledgement.

The driver now acknowledges every PCB received from the card.

That was enough to get DHCP working.

Transmit problems

FTP exposed two more issues.

The 3C505 expects transmit lengths to be even, but the driver could send odd-length packets without padding them correctly.

The driver could also re-enable interrupts in the middle of a transmit. If a packet arrived at the wrong time, the receive routine could interfere with the shared data register while a packet was still being sent.

The fixed driver now:

  • Pads odd-length frames to an even length.
  • Keeps interrupts disabled for the complete transmit.
  • Returns an error instead of hanging if a transmit fails.

After that, FTP transfers worked normally.

NetDrive and DOS 3.3

I also ran into one unrelated problem while testing NetDrive.

NetDrive connected successfully, but DIR displayed garbage when I mounted mTCP's bigdisk.dsk.

That wasn't a network problem. bigdisk.dsk is a 200 MB FAT16B image, which MS-DOS 3.3 can't properly read.

Switching to the 32 MB fat12.dsk fixed it.

For DOS 3.3, stick with disk images of 32 MB or less. Larger FAT16B images require DOS 3.31 or DOS 4.0 and later.

The patched driver

Rather than rebuilding the entire driver, I patched the original 3C505.COM binary directly.

That keeps the rest of the original Crynwr driver unchanged. The permanent patch code fits inside unused space in the driver's existing receive buffer, so the loaded memory footprint stays the same.

The source has also been updated with the same changes.

I tested the driver with:

  • A CPU/card emulator.
  • DOSBox for startup and error handling.
  • The actual 3C505 installed in my IBM XT-286.

And, most importantly, it works on the real hardware.

Download

The fixed driver, source and technical notes are on GitHub:

DashOfBlum/3c505-packet-driver

Download 3c505fix.zip from the Releases page.

The command line works the same as the original driver:

3C505 0x60 10 0x300

Change the IRQ and I/O address to match your card.

For mTCP, use:

PACKETINT 0x60

The -d delayed-start option is not supported.

I've only tested this on my later-revision 3C505 and IBM XT-286. If you try it on another 3C505, especially an earlier revision, let me know how it works and include any 3c505: messages printed during startup.

Credit goes to Krishnan Gopalan and Gregg Stefancik at Clemson University for the original driver, Crynwr Software for the packet-driver framework, and the authors of the Linux 3c505 driver for documenting a lot of the card's behavior.