ISA 8-Bit Ethernet Controller

October 3, 2024 ยท View on GitHub

ISA 8-Bit Ethernet Network Interface Controller

Introduction

ISA 8-Bit Ethernet Controller is an open source network interface controller (NIC) card, designed specifically to be used in computers with 8-bit only ISA (aka XT) bus, such as IBM* PC, IBM* PC XT, various PC/XT compatibles, for example Micro 8088 system. It is based on Realtek RTL8019 ethernet controller and is NE2000-compatible.

ISA 8-Bit Ethernet - Assembled Board

Specifications

  • ISA 8-bit interface (62 pin / card edge)
  • NE2000 compatible
    • Note: Popular Crynwr NE2000 pocket driver does not support NE2000 in 8-bit slots. Please use the patched driver instead
  • Supports configuration using switches, jumperless configuration using RSET8019 utility or PnP
    • Uses DIP switches instead of jumpers for reliability and ease of configuration
  • Boot ROM support
    • Socket supports 512 KiB Flash ROM, such as SST/Microchip 39SF040
    • Can be configured in 16 KiB, 32 KiB, 64 KiB, or page mode. In page mode the entire 512 KiB are accessible through a 16 KiB window
    • Also compatible with other DIP 32-pin Flash ROMs, such as 128 KiB 39SF010A, and 256 KiB 39SF020, or similar
    • 40-pin memory extension connector allows connecting up to 4 MiB of memory that can be used in page mode

Hardware Documentation

Schematic and PCB Layout

Schematic - Version 1.0

PCB Layout - Version 1.0

Building Instructions

Assemble the PCB

  • Clean the PCB with alcohol
  • Apply fluid flux to SMD components pads
  • Solder U1 RTL8019 IC
  • Solder R1 - R7 resistors and RN1 - RN4 resistor arrays
    • Note that RN1 - RN3 are only required if using DIP switches for configuration. They are not required for jumperless configuration
  • Solder C1 - C8 ceramic capacitors
  • Solder C9 and C10 tantalum capacitors
  • Solder Y1 crystal
  • Optional: Program U3 EEPROM. Make sure to use unique MAC address
    • Note: EEPROM can be programmed later using PG8019 utility
  • Solder U3 EEPROM
  • Optional: Solder SW1 - SW4 DIP switches and U2 IC socket
  • Solder J1 Ethernet jack with integrated magentics
  • Clean the remaining flux with alcohol

Program EEPROM

If EEPROM has not been programmed prior to assembly, now it is a good time to do so. The U3 EEPROM contains the following configuration for the RTL8019AS chip:

  • MAC address
  • ISA resources for jumperless configuration
    • Base I/O address
    • IRQ number
    • Boot ROM mode, size, and base memory address
  • Other ethernet controller confirguration - medium type, full duplex, LEDs function, power management settings
  • Product ID (not normally used, although some vendor specific drivers might check for it)
  • Plug and Play data
    • Vendor ID, serial number, PnP version, I/O, memory, and IRQ resources

This information can be programmed using PG8019 utility. The 8019AS.CFG file contains the recommended configuration. Make sure to edit it, and update the MAC address and the serial number. Note that the MAC address is given in the Big-endian format (that is the last byte has the least significant value), while the serial number is given in Little-endian format (that is the first byte has the least significant value).

A few notes about using PG8019:

  • Make sure that your system has 0x300-0x31F I/O addresses available regardless of the Ethernet controller addresses specified in 8019AS.CFG. Note that XT-IDE and XT-CF-Lite frequently use this I/O range. In case you have such a card, you can either temporarily remove it from your system, boot and run PG8019 from a floppy disk, or switch your XT-IDE or XT-CF-Lite to a different address. In the latter case you'll need to update the XT IDE BIOS configuration
  • Make sure that your system boots in real mode (no EMM386), or anything else that might interfer with the card. Ideally boot your system without any drivers loaded at all, for example, in later MS-DOS versions it is possible to bypass CONFIG.SYS and AUTOEXEC.BAT by hitting F5 key at the boot time
  • After EEPROM has been programmed successfully, the PG8019 utility will print the MAC address, also, it will automatically increment the MAC address and the serial number in 8019AS.CFG, which is useful when programming multiple cards

Openmoko Inc. has generously allocated 00-1F-11-02-60-00 - 00-1F-11-02-7F-FF MAC addresses range for ISA 8-Bit Ethernet controller project. You can use MAC addresses from this range for your build, as long as you are using this design. Please apply for a different range if you're redesigning the board or re-using this Ethernet controller design in your own project. I ask you not to use 00-1F-11-02-60-00 - 00-1F-11-02-63-FF range (first 1024 addresses). I am using this range for the cards that I build.

Test Ethernet Controller

  • Connect Ethernet cable. Make sure that the green "Link" LED lights up
  • Use mTCP to test the controller
    • DHCP to obtain IP address
    • FTP or HTGET to download a file

Switches and Connectors

SW1 - CONFIG

This switch block sets the configuration mode

Configuration ModeSwitch Position
Jumperless / RSET8019SW1.1 = OFF, SW1.2 = OFF
SwitchesSW1.1 = ON, SW1.2 = OFF
PnPSW1.1 = OFF, SW1.2 = ON

SW2 - IRQ

This switch block, when the card is in the Switches configuration mode, sets the Ethernet controller IRQ

IRQSwitch Position
IRQ2 (on PC/XT) or IRQ9 (on AT)SW2.1 = OFF, SW2.2 = OFF
IRQ3SW2.1 = ON, SW2.2 = OFF
IRQ4SW2.1 = OFF, SW2.2 = ON
IRQ5SW2.1 = ON, SW2.2 = ON

SW3 - IO_ADDR

This switch block, when the card is in the Switches configuration mode, sets the Ethernet controller I/O address

I/O AddressSW3.1SW3.2SW3.3SW3.4
0x200OFFOFFONOFF
0x220ONOFFONOFF
0x240OFFONONOFF
0x260ONONONOFF
0x280OFFOFFONON
0x2A0ONOFFONON
0x2C0OFFONONON
0x2E0ONONONON
0x300OFFOFFOFFOFF
0x320ONOFFOFFOFF
0x340OFFONOFFOFF
0x360ONONOFFOFF
0x380OFFOFFOFFON
0x3A0ONOFFOFFON
0x3C0OFFONOFFON
0x3E0ONONOFFON

SW4 - ROM_ADDR

This switch block, when the card is in the Switches configuration mode, sets the Ethernet controller boot ROM address and size

ROM AddressROM SizeSW4.1SW4.2SW4.3SW4.4SW4.5
ROM DisabledNot applicable***OFFOFF
0xC000016 KiBOFFOFFOFFOFFON
0xC400016 KiBONOFFOFFOFFON
0xC800016 KiBOFFONOFFOFFON
0xCC00016 KiBONONOFFOFFON
0xD000016 KiBOFFOFFONOFFON
0xD400016 KiBONOFFONOFFON
0xD800016 KiBOFFONONOFFON
0xDC00016 KiBONONONOFFON
0xC000032 KiBOFFOFFOFFONOFF
0xC800032 KiBONOFFOFFONOFF
0xD000032 KiBOFFONOFFONOFF
0xD800032 KiBONONOFFONOFF
0xC000064 KiBOFFOFFONONOFF
0xD000064 KiBONOFFONONOFF
0xC000016 KiB / Page modeOFFOFFOFFONON
0xC400016 KiB / Page modeONOFFOFFONON
0xC800016 KiB / Page modeOFFONOFFONON
0xCC00016 KiB / Page modeONONOFFONON
0xD000016 KiB / Page modeOFFOFFONONON
0xD400016 KiB / Page modeONOFFONONON
0xD800016 KiB / Page modeOFFONONONON
0xDC00016 KiB / Page modeONONONONON

J1 - Ethernet Connector

J2 - MEM_EXT

This connector can be used to add up to 4 MiB of optional memory (ROM or RAM). The memory, if larger than 64 KiB, can be accessed using the page mode.

PinDescriptionPinDescription
15V25V
3No connection4A21
5No connection6A20
7No connection8A19
9A1810/MEMW
11A1612A17
13A1514A14
15A1216A13
17A718A8
19A620A9
21A522A11
23A424/MEMR
25A326A10
27A228/CS
29A130D7
31A032D6
33D034D5
35D136D4
37D238D3
39GND40GND

Bill of Materials - Version 1.0

ISA 8-bit Ethernet project on Mouser.com - View and order all components except of the PCB and the Realtek RTL8019 IC.

ISA 8-bit Ethernet project on OSH Park - View and order the PCB.

Component typeReferenceDescriptionQuantityPossible sources and notes
PCBISA 8-bit Ethernet PCB - Version 1.01Buy from my Tindie store: ISA 8-bit Ethernet PCB, and optionally a preprogrammed EEPROM, or order from a PCB manufacturer of your choice using provided Gerber or KiCad files
Integrated CircuitU1Realtek RTL8019AS Ethernet Controller1Authorized Realtek distributors or eBay
Integrated CircuitU2SST39SF040 - 512 KiB Flash ROM, 32 pin DIP1Optional - Boot ROM. Mouser 804-39SF0407CPHE
Integrated CircuitU393C46 - 1 Kbit EEPROM, 4 pin SOIC1Mouser 511-M93C46-WMN6TP
Quartz CrystalY120 MHz, 18pF, HC-49U1Mouser 774-ATS200C
Ethernet JackJ1Amphenol RJMG1BD3B8K1ANR - Ethernet jack with magnetics1Mouser 523-RJMG1BD3B8K1ANR
DIP SwitchSW1, SW2DIP switch, 2 position, SPST2Mouser 774-2102MS
DIP SwitchSW3DIP switch, 4 position, SPST1Mouser 774-2104MS
DIP SwitchSW4DIP switch, 5 position, SPST1Mouser 774-2105MS
CapacitorC1, C210pF MLCC Capacitor, 0603 SMT2Mouser 77-VJ0603A100JXACBC
CapacitorC3, C40.01uF MLCC Capacitor, 0603 SMT2Mouser 77-VJ0603Y103JXACBC
CapacitorC5 - C80.1uF MLCC Capacitor, 0603 SMT4Mouser 77-VJ0603Y104JXJPBC
CapacitorC9, C1022uF Tantalum Capacitor, 1210 SMT2Mouser 581-TAJB226K016TNJ
ResistorR1200 Ohm Resistor, 0603 SMT1Mouser 603-RC0603FR-13200RL
ResistorR2, R3470 Ohm Resistor, 0603 SMT2Mouser 603-RC0603FR-13470RL
ResistorR627 kOhm Resistor, 0603 SMT1Mouser 603-RC0603FR-1327KL
ResistorR71 MOhm Resistor, 0603 SMT1Mouser 603-RC0603FR-131ML
Resistor ArrayRN1 - RN410 kOhm x 4 Resistor Array, 0603 SMT4Mouser 667-EXB-38V103JV
IC SocketU232 pin DIP1Mouser 517-4832-6000-CP

Reference Information

Realtek RTL8019AS EEPROM Content

The Realtek RTL8019AS uses 93C46 - 1Kbit / 128 bytes EEPROM to store the configuration. The EEPROM is accessed using 16-bit word mode, with data being stored in Big-endian format. This means that the bytes should be swapped when the EEPROM content is accessed on an x86 system.

AddressSizeContentDefault Configuration for ISA 8-Bit Ethernet
0x00 - 0x034CONFIG1, CONFIG2, CONFIG3, CONFIG4
0x001CONFIG10x07
0x011CONFIG20x00
0x021CONFIG30xD0
0x031CONFIG40x01
0x04 - 0x096Ethernet ID (MAC Address)0x00 0x1F 0x11 0x02 0x70 0x00
0x0A - 0x118Product ID0x49 0x53 0x41 0x38 0x45 0x54 0x48 0x20
0x12 - 0x1A9PnP header
0x12 - 0x154Vendor ID (0-3)
0x12 - 0x132Vendor ID - compressed ASCII (00000=A)0x4A 0x8C - 0 10010=R 10100=T 01100=L
0x14 - 0x152Vendor ID - product number0x80 0x19 - 8019
0x16 - 0x194Serial Number (0-3)0x00 0x10 0x00 0x00
0x1A1Checksum?
0x1B - 0x7F101PnP Resource Data
0x1B - 0x1D3PnP Version Number
0x1B1Item byte0x0A
0x1C1PnP Version0x10
0x1D1Vendor Version0x10
0x1E - 0x3B37ANSI Identifier String
0x1E1Item byte0x82
0x1F1Length, bits 7-00x24
0x201Length, bits 15-80x00
0x21 - 0x4436Identifier String"ISA 8-Bit Plug & Play Ethernet Card", 0x00
0x45 - 0x4B7Logical Device ID
0x451Item byte0x16
0x46 - 0x494Logical Device ID 0-30x00 0x00 0x80 0x19
0x4A1Flag 00x02 (Boot ROM disabled) or 0x03 (Boot ROM enabled)
0x4B1Flag 10x00
0x4C - 0x505Compatible Device ID (NE2000 compatible)
0x4C1Item byte0x1C
0x4D - 0x504Compatible ID0x41 0xD0 0x80 0xD6
0x51 - 0x588I/O Format
0x511Item byte0x47
0x521I/O Information0x00
0x531Minimal I/O base, bits 7-00x20
0x541Minimal I/O base, bits 15-80x02
0x551Maximal I/O base, bits 7-00x80
0x561Maximal I/O base, bits 15-80x03
0x571Base alignment0x20
0x581Range length0x20
0x59 - 0x5C4IRQ Format
0x591Item byte0x23 - Small item name = 0x04 (IRQ), Length = 3
0x5A1IRQ mask bits 7-00x3C - IRQ 0-7 mask - IRQ5, IRQ4, IRQ3, IRQ2
0x5B1IRQ mask bits 15-80x02 - IRQ 8-15 mask - IRQ9 (note: IRQ9 is the same as IRQ2, others are not available on an 8-bit slot)
0x5C1IRQ information0x01 - High true edge sensitive
0x5D - 0x6A12Memory Format (optional)64 KiB Boot ROM (16 KiB Boot ROM)
0x5D1Item byte0x81
0x5E1Length, bits 7-00x09
0x5F1Length, bits 15-80x00
0x601Memory information0x40
0x611Minimal base, bits 15-80x00
0x621Minimal base, bits 24-160x0C
0x631Maximal base, bits 7-00x00 (0xC0 for 16 KiB)
0x641Maximal base, bits 15-80x0D
0x651Base alignment, bits 7-00x00
0x661Base alignment, bits 15-80x00 (0x40 for 16 KiB)
0x671Range length bits 15-80x00 (0x40 for 16 KiB)
0x681Range length bits 24-160x01 (0x00 for 16 KiB)
0x69 - 0x6A2End Tag
0x6B1Item byte0x79
0x6C1Checksum of the resource data0x1F
0x6D-0x7F?Unused space0xFF

Red Tape

Licensing

ISA 8-bit Ethernet is an open source hardware project certified by Open Source Hardware Association, certification UID is US002001. The hardware design itself, including schematic and PCB layout design files are licensed under the strongly-reciprocal variant of CERN Open Hardware Licence version 2. The NE2000 driver code is licensed under GNU General Public License v2. Documentation, including this file, is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.

KiCad symbols and modules used in this project are available in my KiCad library repository

CERN-OHL-2.0-S, GPL-2.0, CC-BY-SA-4.0