Skip to content

Ethernet II Controller (ND-110063) — Hardware Description, High Level

Card 324534 (print G), PCB 3094. Sources: schematics ../EthIIImages/ (byte-verified at 300 dpi) and the technical manual ND-12.055.1 EN (original PDF). Detail-level companion: EthII-hardware-detail.md.

The Ethernet II is the ND-100-bus Ethernet controller: a complete single-board 68000 computer that SINTRAN/PIOCOS talks to through two IOXT registers, shared DRAM, and a level-12 interrupt. The card boots nothing by itself — the ND-100 downloads all 68000 code (ENCOS) into the card's DRAM and releases it from reset.

1. System context

flowchart LR
    subgraph ND100["ND-100 host"]
        SINTRAN["SINTRAN / PIOCOS driver"]
    end
    subgraph CARD["Ethernet II card 3094"]
        REGS["Control / Status registers<br/>(IOXT, 2 write + 2 read)"]
        DRAM["512 KB shared DRAM<br/>(mailboxes + 68000 code)"]
        CPU68K["MC68HC000-12<br/>local processor"]
        LANCE["Am7990 LANCE"]
        SIA["Am7992B SIA"]
    end
    XCVR["External transceiver<br/>(+12V switched)"]
    NET(("Ethernet<br/>10 Mb/s"))

    SINTRAN -- "IOXT reg access + DMA to DRAM" --> REGS
    REGS -- "level-12 interrupt, ident 2240-2243" --> SINTRAN
    REGS --- CPU68K
    CPU68K --- DRAM
    LANCE -- "DMA" --- DRAM
    CPU68K --- LANCE
    LANCE --- SIA
    SIA --- XCVR
    XCVR --- NET
  • Bus attachment: ND-100 I/O bus. Device addresses 140360/140364/140370/140374₈ (thumbwheel-selected), ident codes 2240–2243₈, interrupt level 12.
  • Memory attachment: the card's DRAM appears as an ND-100 memory bank (bank number set by thumbwheels, read back in the status register).

2. Board block diagram

flowchart TB
    subgraph HOSTIF["ND-100 bus interface (sheets 2-3)"]
        BUF["Bus buffers<br/>BD0-23, strobes"]
        SEL["Device select<br/>thumbwheels + F521 compare"]
        IDPROM["IDENT PROMs 089-00/01<br/>(code 2240-2243)"]
        INTFF["INT12 logic<br/>RFT + RIE flip-flops"]
        CWREG["Control-word bits<br/>reset/halt/doorbells"]
    end
    subgraph CORE["68000 core (sheet 1)"]
        CPU["MC68HC000-12<br/>12.5 MHz"]
        ENC["LS148 IPL encoder<br/>+ PAL 453-00 IACK"]
        CLK["50 MHz osc<br/>/2 /2 /4 dividers"]
    end
    subgraph MEM["Memory (sheet 4)"]
        DRAM2["512 KB DRAM + byte parity<br/>(standby powered)"]
        EPROM["2x 27512 sockets<br/>(EMPTY - unused)"]
        SRAMP["1 Kbit SRAM<br/>write-protect table"]
    end
    subgraph PERIPH["Peripherals (sheets 3, 5)"]
        MFP["MK68901 MFP<br/>timers, USART, GPIP ints"]
        LANCE2["Am7990 LANCE"]
        SIA2["Am7992B SIA + 40 MHz"]
        PWR["Transceiver +12V switch<br/>PWEN FF + 12V sense"]
        PCT["Test console PCT<br/>20 mA current loop"]
    end

    BUF --- SEL --- INTFF
    SEL --- CWREG
    CWREG -- "reset / halt / NMI-enable" --> CPU
    CWREG -- "doorbells" --> ENC & MFP
    INTFF -- "BINT12 + ident" --> BUF
    CPU --- ENC
    CLK --> CPU & MFP
    CPU --- DRAM2 & EPROM & SRAMP
    BUF -- "ND-100 memory-bank access" --> DRAM2
    LANCE2 -- "DMA (2nd priority)" --> DRAM2
    CPU --- MFP & LANCE2 & PWR
    MFP --- PCT
    LANCE2 --- SIA2 --- PWR

DRAM access priority: ND-100 (highest) → LANCE → 68000 (lowest). [M:16]

3. The two host-visible registers (IOXT)

Access Address Register
read device +0 or +2 Status: bits 15-8 bank number, 5 halt, 4 reset, 2 INT12 pending, 0 interrupt enabled
write device +1 or +3 Control: bit 0 enable SCIP int, 2 ND interrupt (→MFP), 3 start OPCOM, 4 reset, 5 halt, 6 power-low enable, 8 disable parity check

4. Interrupt architecture at a glance

flowchart LR
    subgraph TO68K["Interrupts INTO the 68000 (LS148 priority encoder)"]
        L7["7 NMI: power low<br/>(enable bit6 + Master Clear)"]
        L6["6: OPCOM doorbell<br/>(control bit 3)"]
        L5["5: memory parity error"]
        L4["4: test console ready"]
        L3["3: MFP vectored<br/>(ND-int, LANCE-err, WRIV,<br/>USART, Timer C RTC)"]
        L2["2: LANCE"]
    end
    subgraph TOND["Interrupt OUT to the ND-100"]
        SCIP["68000 writes SCIP address"]
        RFT["RFT latch"]
        RIE["RIE enable<br/>(control bit 0)"]
        INT12["BINT12 - level 12<br/>ident 2240-2243"]
    end
    SCIP --> RFT --> INT12
    RIE --> INT12
  • Levels 2,4,5,6,7 are autovectored (PAL drives VPA); level 3 is vectored by the MFP (vector base 0x40 → octal vectors 105–117).
  • Levels 5 and 6 are cleared by the IACK cycle itself (PAL outputs CLRMERR / CLROPCOM) — a hardware detail the firmware relies on.
  • The IDENT answer on the ND-100 side clears both the INT12 latch and the enable.

5. Clocks and timers (complete list)

Clock Value Purpose
50 MHz osc → ÷2 ÷2 12.5 MHz 68000 CPU clock, control PALs
→ ÷4 3.125 MHz MFP clock (XTAL1 + CLK)
40 MHz osc → ÷2 20 MHz SIA (Ethernet 10 Mb/s Manchester)
MFP Timer C ≈128.07 Hz the ONLY periodic system timer (RTC, vector 105₈)
MFP Timer D firmware-set USART baud (loops back to RC/TC)
BERR shifter ~1.3 µs 68000 bus-cycle timeout
DCL RC ~200 µs delayed clear after power-low

There is no other timer hardware — no RTC chip, no interrupt/timer controller.

6. Life cycle

sequenceDiagram
    participant ND as ND-100 (SINTRAN)
    participant CW as Control register
    participant CPU as 68000
    participant DRAM as Shared DRAM

    ND->>CW: Master Clear / write reset+halt
    ND->>DRAM: download ENCOS firmware (as memory bank)
    ND->>DRAM: write SSP + PC into bytes 0-7
    ND->>CW: write control word, reset=0 halt=0
    CW->>CPU: release RESET/HALT
    CPU->>DRAM: fetch vectors from DRAM[0..7], boot firmware
    CPU->>CPU: init MFP (VR=0x40, Timer C RTC), LANCE
    loop Operation
        ND->>DRAM: mailbox command
        ND->>CW: bit2 ND-interrupt (MFP vec 116) or bit3 OPCOM (level 6)
        CPU->>DRAM: mailbox answer
        CPU->>CW: write SCIP address → INT12 to ND-100
        ND->>ND: IDENT (gets 2240+n) → clears INT12 + enable
    end

7. What differs from the Ethernet III

See EthIII-hardware-highlevel.md. In one line: Ethernet II = ND-100-bus card, 68000, all code downloaded; Ethernet III (110513) = ND-5000-era MF-bus + octobus card, 68020, self-booting from EPROM.