(TL;DR? Download 3C509.COM driver and 3ccfg.exe configuration).
8086 Driver for 3COM Etherlink III 3C509B cards
Here is a driver and a configuration program for the 3C509B family of network interface cards (NICs) which work in IBM PC and XT hardware.
Download:
Use:
3ccfg.exe configure /int:3 /optimize:dos /modem:none /pnp:disabled /xcvr:auto
3c509.exe 0x60
Nestor a.k.a. Distwave of VCFed.org took the time in 2012 to replace all the 286 specific assembly instructions with generic 8086 code. Nestor used the packet driver source code from crynwr.com, which was released under the GNU GPL license.
However, while Nestor's driver worked, it required that some cards have their IRQ and other parameters preconfigured on a 286 machine. The 3Com configuration program, 3C5X9CFG.EXE, would die claiming no card was in the machine. Predator99 fixed the problem so it now works on 8088 and 8086 machine. The resulting executable, now called 3ccfg.exe), has been compressed with PKLITE so that it fits on a single 360K floppy.
This repository is mainly meant as a secondary location to hold the source code for Nestor's modified driver. (For specific changes Nestor made, look at the history for the file 3c509.asm).
The repository also collates parts like the configuration tool and documentation. Hopefully, having this in version control will also allow future changes people may make (such as the hack to get it working on the V20 CPU at full speed) to be incorporated in a clean way.
First, download the configuration tool 3ccfg.exe to configure your 3C509B. If you run it without arguments, it will give you an easy to use menu based system. Or, you can configure everything from the command line, like so:
3ccfg.exe configure /int:3 /optimize:dos /modem:none /pnp:disabled /xcvr:auto
(3ccfg.exe does not work in 256 KB of RAM or less).
Download 3c509.com to get Ethernet working. You can run it like
3c509.com 0x60
To get on the Internet, you'll also need software that handles TCP/IP such as mTCP. To use mTCP, you need to create a configuration file and then set an environment variable to point to that file.
COPY SAMPLE.CFG MTCP.CFG
SET MTCPCFG=A:\MTCP.CFG
Once that is done, you can use DHCP
to get an IP address and TELNET
to connect to a remote machine.
DHCP
TELNET NETHACK.ALT.ORG
Run the COM file with the software interrupt number: 3C509.COM <packet_int_no>
If you use 0x60, you won't have to edit the mTCP sample file:
A:\> 3C509.COM 0x60
(Note: the README for the driver suggests 0x7e.)
According to the source code comments, <packet_int_no>'s range is 0x60 to 0x66, 0x68 to 0x6f, and 0x7b to 0x7e. Why the gaps? 0x67 is the EMS interrupt, 0x70 through 0x77 are used by the second 8259, and 0x7a is used by NetWare's IPX.
If you run the COM file with no parameters, you'll see this message:
A:\> 3C509.COM
usage: 3c509 [options] <packet_int_no> [id_port]
-i -- Force driver to report itself as IEEE 802.3 instead of Ethernet II.
-d -- Delayed initialization. Used for diskless booting
-n -- NetWare conversion. Converts 802.3 packets into 8137 packets
-w -- Windows hack, obsoleted by winpkt
-p -- Promiscuous mode disable
-m -- Micronetics MSM compatibility
-u -- Uninstall
Card ID | Connector Type | Cable | Works? |
---|---|---|---|
3C509B (3C509B-Coax) |
BNC AUI |
10base2 Thick coax |
Yes |
3C509B-C (3C509B-COMBO) |
RJ-45 BNC AUI |
10baseT 10base2 Thick coax |
Yes |
3C509B-TP | RJ-45 BNC |
10baseT 10base2 |
With configuration |
3C509B-TPO | RJ-45 | 10baseT | With configuration |
The 3C509B-TP and TPO require software configuration before they can be used in a PC or XT as they use IRQ 10 (which didn't exist until the 286). If no NIC is detected by the 3c509.com driver, follow these steps:
- Run 3CCFG.EXE (which is a modified-for-8086 version of 3C5X9CFG.EXE, found in EtherDisk).
- Disable PNP
- Set the IRQ to 3 (or another free IRQ, such as 7, see table below)
- Optimize for DOS
- No modem installed (unless you use a serial port)
- If you have an XT-IDE at 0x300, change the Base Address to 0x320.
- If you wish, change port transciever (RJ45, BNC, AUI), but the default (AUTO) should work.
- Save settings to EEPROM.
- Running
3c509.com 0x60
should now work.
If you have 256 KB of RAM or less, please note that, while the driver itself will work, the configuration program, 3ccfg.exe will fail even when run as a command line program.
This is due to 3ccfg.exe being linked with a large text menu library called MEWEL. [Help wanted! Are you an intrepid DOS hacker? Do you feel up to removing MEWEL, leaving a stripped down, command-line only tool? Or, do you think you could write a completely new configuration program based on the Linux kernel source code? Your help is needed. Please apply at issue #2.]
IRQ | PC/XT Use | Used by default? | Notes |
---|---|---|---|
0 | System Timer | yes | Not wired to ISA bus |
1 | Keyboard | yes | Not wired to ISA bus |
2 | Available | Not allowed by 3C5X9CFG | |
3 | COM2 / COM4 | ||
4 | COM1 / COM3 | yes | |
5 | Hard Disk Soundcard |
||
6 | Floppy | yes | |
7 | Parallel | yes | Some people remove LPT1 to free this IRQ |
At least for the 3C509B-TP these are the factory default settings:
Setting | Default | Command line parameter | Possible Values |
---|---|---|---|
I/O base address | 300H | /IOBASE: | 200..3E0, in increments of 10 |
Interrupt request level | 10 | /INT: | 3, 5, 7, 9, 10, 11, 12, 15 |
Transceiver type | auto select | /XCVR: | AUTO, TP, COAX, AUI |
Network driver optimization | Windows or OS/2 client | /OPTIMIZE: | DOS, Windows, OS/2, server |
Maximum interrupt disable time | 500 microseconds | /MODEM: | 25-1600, in increments of 25ms, or use None, 1200, 2400, 9600, 19200, 38400 |
Plug and Play Capability | enabled | /PNP: | ENABLED, DISABLED |
Full duplex | disabled | /FULLDUPLEX: | ENABLED, DISABLED |
Boot PROM Size | disabled | /BSIZE: | 8,16,32,disabled |
Boot PROM Address | D0000h | /BADDRESS: | C2000-DE000 |
Link beat (pre-10base-T only) | disabled | /LINKBEAT: | disabled, enabled |
Configuration & Diagnostic Port (Do not change unless another device is on address 110) |
110 | /CONFIGPORT: | 100-1E0, in increments of 10 |
Insert wait state each bus cycle (Allows NIC to work in computers with marginal ISA I/O bus timing) |
disabled | /SYNCREADY: | disabled, enabled |
If not using a serial port, I suggest the following command:
3CCFG.EXE CONFIGURE /int:3 /optimize:dos /modem:none /pnp:disabled /xcvr:auto
A serial card may drop bytes if the 3C509B doesn't give up the bus frequently enough to allow other IRQs to be handled. Note that if your serial card has a 16550 UART, you can also use /modem:none
as it will buffer bytes in the FIFO. If you use a serial card with the older 8250 (or 16450 UART), use /modem:9600
, or whatever baud rate you use your serial port at. The lower the baud, the better your Ethernet performance will be.
This likely won't affect you, but I'm documenting it just in case.
If you are still unable to run the configuration program due to "No Adapter Found", it may be because of a strange BIOS quirk which puts the NIC into an infinite loop trying to negotiate PNP. If the 3C509.EXE driver can't find your card either, that might be a tip that this is the problem.
According to archive.org's cache of 3com.com's FAQ, when the "No Etherlink III Adapter Found" error is seen, one should run the following and reboot:
3C5X9CFG /PNPRST
3C5X9CFG CONFIGURE /PNP:DISABLED
Of course, since we are using the 8086 version, you would replace 3C5X9CFG with 3CCFG
.
Here is the commentary on the BIOS bug from EtherDisk V4.3b:
Installing an EtherLink III ISA adapter (3C509B) in certain computers may result in neither the diagnostic and configuration program nor the driver being able find the adapter. The problem is your computer's BIOS is issuing a series of I/O instructions that causes the 3C509B to think it's going to be activated as a Plug 'N Play (PnP) device. Unfortunately, the adapter waits for the PnP series to complete and ignores the "classic" or "legacy" method for discovering an EtherLink III ISA adapter. The fix for this problem is very simple; follow the steps below:
- Boot a minimal DOS setup, making sure that no EtherLink III drivers are loaded.
- Put this EtherDisk in the diskette drive and type A: at the DOS prompt.
- Enter PNPDSABL [which is just a BAT file that executes the two 3C5X9CFG commands above] at the DOS prompt. The configuration and diagnostic program will execute twice. The first time it executes, the configuration and diagnostic program "kicks" the EtherLink III out of its PnP wait. During the second execution, it disables Plug 'n Play. The final message displayed will be: "The 3C5X9 adapter, adapter number 1, was successfully configured"
- Finally, remove the EtherDisk from the diskette drive, and turn the computer power off, then on.