Ethernet II Controller (ND-110063) — Hardware Description, Detail Level¶
Gate-level description of card 324534 print G. Every statement is traced to a
schematic sheet ([S1..S5] in ../EthIIImages/) or the manual ([M:page],
original PDF of ND-12.055.1 EN). PAL behavior is inferred from pin names (no dumps) —
marked [INF]. High-level companion: EthII-hardware-highlevel.md;
net-by-net data: EthII-interrupt-clock-netlist.md /
EthII-netlist.json.
Sheet map: S1 CPU+memory control · S2 bus buffers · S3 DMA and I/O control (MFP, N100 bus) · S4 DRAM + parity · S5 LANCE/SIA/transceiver.
1. 68000 core [S1]¶
- MC68HC000-12 @18D, CLK = 12.5 MHz (T12CLK via 56 Ω). Print-G runs 12.5 MHz; the manual (earlier print) says 10 MHz [M:11].
- DTACK = AND @13A of three sources:
MDTACK(DRAM control),IDTACK(I/O decode),PDTACK(the MK68901's own DTACK output pin). - BERR: LS165 @12B shifts a '1' at ≈6.25 MHz while a cycle hangs
(AS asserted,
NOREQ·LANGR); Q7 after 8 stages → BERR ⇒ ≈1.3 µs bus timeout. - VPA ←
AUTOVECTORfrom PAL 453-00 (autovectored interrupt levels). - Bus arbitration (BR/BG/BGACK) between 68000, LANCE (
LANGR), and the ND-100 port; DRAM priority ND-100 > LANCE > 68000 [M:16].
1.1 Interrupt priority encoder¶
flowchart RL
subgraph SRC["Interrupt sources (all active low)"]
LAN["LANINTR - Am7990 INTR pin<br/>LEVEL, cleared only via CSR0/INEA"]
MFPI["901INTR - MK68901 INTR"]
CONS["CONSOLEINTR - USART RR/TR<br/>via FF 7F (strap CONSPRES)"]
MERR["MERR FF - DRAM read parity error"]
OPC["OPCOM FF - control-word bit 3"]
L7I["LEV7INT - PAL 455-02:<br/>PLOWE(bit6) AND MasterClear"]
end
E148["LS148 @19F<br/>input n = IPL level n"]
CPU["68000 IPL0-2"]
LAN -- "in2" --> E148
MFPI -- "in3" --> E148
CONS -- "in4" --> E148
MERR -- "in5" --> E148
OPC -- "in6" --> E148
L7I -- "in7" --> E148
E148 --> CPU
1.2 IACK decode — PAL 453-00 (PAL16L8B @21C) [INF pin roles, M-confirmed effects]¶
Inputs A1-A3, FC0-FC2, BGACK, R/W, BAS, RESET. During IACK (FC=111, A1-A3=level):
| Output | Effect |
|---|---|
IAK901 |
routes the IACK to the MFP → MFP supplies vector (level 3) |
AUTOVECTOR |
drives 68000 VPA (levels 2,4,5,6,7) |
CLROPCOM |
level-6 IACK resets the OPCOM FF |
CLRMERR |
level-5 IACK resets the MERR FF |
CLRREDY |
clears the console-ready FF |
CPUWR, PRI, IAKE |
write strobe / DRAM priority / ack enable [INF] |
1.3 Interrupt-source detail¶
| Level | Source logic | Set by | Cleared by |
|---|---|---|---|
| 2 | Am7990 INTR pin (o.d., pull-up) [S5] | any unmasked CSR0 cause while INEA=1 | firmware CSR0 write, INEA=0, LANRESET — NOT by IACK |
| 3 | MK68901 INTR | MFP channel logic | MFP ISR protocol |
| 4 | FF 7F + gate 26G from RREDY/TREDY (MFP USART ready pins) [S3] |
console rx/tx ready | CLRREDY (IACK) |
| 5 | F74 @18F [S4] | read parity error RPERR clocked on AS·T6 |
CLRMERR (IACK-5) |
| 6 | LS74 @7F [S1] | clocked by every control write with bit3=1 (NAND BND03·OCW) | CLROPCOM (IACK-6) |
| 7 | PAL 455-02 registered [S1] | PLOW = PLOWE(bit6) AND MCL (Master Clear) |
PLOW deassertion [INF] |
2. MK68901 MFP @29G [S3]¶
flowchart TB
subgraph MFPIN["GPIP inputs"]
I5["I5: LANERROR<br/>LANCE DMA cycle killed by<br/>protect / bus error / range"]
I6["I6: NCINT<br/>= NAND(BND02, OCW)<br/>pulse per control write bit2=1"]
I7["I7: WRIV<br/>68000 write-protect violation"]
I04["I0-I4: unconnected"]
end
subgraph MFPCLK["Clocks"]
C1["XTAL1 = 3.125 MHz"]
C2["CLK = 3.125 MHz"]
TD["Timer D out TDO → TERCLK<br/>loops to RC + TC (USART baud)"]
end
subgraph MFPUS["USART"]
SI["SI/SO ↔ HP4200/HP4100<br/>optocouplers, 20 mA loop (PCT)"]
RRTR["RR/TR pins → CONSOLEINTR<br/>(bypasses MFP int controller)"]
end
MFPCTL["Interrupt controller<br/>VR=0x40 (firmware)"]
OUT["INTR → LS148 in3<br/>IACK ← PAL 453-00<br/>DTACK → PDTACK<br/>RESET ← PMCL"]
I5 & I6 & I7 --> MFPCTL --> OUT
Vector map (VR=0x40, octal) [M:28, matches GPIP wiring]: 117 GPIP7=WRIV · 116 GPIP6=NCINT (ND-100 doorbell) · 114/113/112/111 USART rx-full/rx-err/tx-empty/tx-err · 107 GPIP5=LANERROR · 105 Timer C = RTC. Timer C: TCDCR=0x50 (÷100), TCDR=244 ⇒ 3.125 MHz/100/244 ≈ 128.07 Hz. Timers A/B unused [M:27]. MFP registers at odd addresses only (DS←LDS) [M:22].
3. 68000 address decode [S1 16D, S3]¶
PROM 452-00 @16D decodes A(09-23) → PROTS ROMS IOSPACEH IOSPACEL DRAMS.
Both IOSPACEL (EF00xx) and IOSPACEH (EF01xx) enable the F138 @106 ⇒
EF01xx ≡ EF00xx ("decoded twice" [M:22]) — there is no device unique to EF01xx.
flowchart LR
A["A5-A7"] --> F138["74F138 @106<br/>enables: IOSPACEL + IOSPACEH"]
F138 --> MFP2["Y6 → CS901 (MFP, EF00C0-FF)"]
F138 --> LANIO["Y5 → LANIO"]
F138 --> SCIP2["Y4 → SCIP strobe (EF0080-9F)"]
F138 --> EAREN2["Y3 → EAREN (EF0060-7F)"]
F138 --> SYREN2["Y2 → MERRSTAT (EF0040-5F)"]
F138 --> MODCR2["Y1 → MODCR (EF0020-3F)"]
F138 --> DIVIO["Y0 → DIVIOSEL"]
F138 --> PROFF2["Y7 → PROFF (EF0010-1F)"]
LANIO --> LS139["74LS139 @5D<br/>A3, A4"]
LS139 --> RDP["Y0 → LANCE (RDP=EF00A0, RAP=EF00A2)"]
LS139 --> XCV["Y1 → XCVPW (EF00A8-AF)"]
LS139 --> LRST["Y2 → LANRESET (EF00B0-B7)"]
LS139 --> EST["Y3 → ETHSTAT (EF00B8-BF)"]
Full memory map [M:21]: 000000-07FFFF DRAM (RAM mode) · 800000-81FFFF EPROM ·
EF0000-EF01FF I/O · F00000-F7FFFF protect table · F80000-FFFFFF RAM image
(ND-100 view). EPROMMODE (EF0020) swaps DRAM/EPROM at the bottom for vector fetch.
Register details: - ETHSTAT (R): S244 @9E [S5]: bit0 = LANINTR pin (live), bit2 = PWEN. Active-LOW. - XCVPW (W): D0 → PWEN FF @11E [S5]; R̄ = PWOFF from the LM339 +12 V sense — hardware force-off on supply sag. - LANRESET (W): pulses the Am7990 RESET (OR-ed with system reset). - MERRSTAT (R) [M:24]: b10 write-to-parity, b9/b8 = A18/A17 of error, b7/b6 = NGACK/BGACK (which master saw the error: 00 ND-100, 10 LANCE, 11 68000), b3/b2 parity error hi/lo byte, b1/b0 parity bits read. - EAREN (R): error address A1-16 from latches @25E/23D [S4]. - MODCR [M:25]: EF0020 EPROMMODE, EF0022 PARITYDIS, EF0024 BREAKMODE, EF0026 spare. Single-bit registers, cleared by RESET. PARITYDIS+BREAKMODE = forced-parity breakpoints [M:18]. - SCIP (W): any access clocks the RFT FF (§4). "Status Change In PIOC" [M:23]. - PROFF (W): supervisor override of the protect table.
Write protection: 1 Kbit SRAM, one bit per 512-byte DRAM segment; user-mode write to a protected segment ⇒ BERR + WRIV (MFP I7, vector 117) [M:19]. Table itself mapped at F00000+; PROFF bypasses.
4. ND-100 bus interface [S2, S3]¶
4.1 Selection and registers¶
- Bus signal buffers @3B: BMCL→MCL, BAPR, BIOXE→IOXE, BINPUT, BINACK, BDAP→BDAR, BMEM; INGRANT passes straight through (card is not in the DMA-grant chain).
- Thumbwheels @7J/9J + two F521 comparators (@10B/@7B) match the IOX address →
DEQL. LS139 @5D (2nd half) decodes address bit 0 with the strobes into:OCW(control write, +1/+3) andOSR(status read, +0/+2). Address bit 1 is ignored ⇒ +0≡+2, +1≡+3 [M:29-30]. - IDENT: thumbwheel @11J addresses PROMs 089-00/089-01 which drive the ident code
(2240-2243₈) onto BD00-15 during
PIDENT.
4.2 Control word → card actions¶
flowchart LR
OCW["OCW strobe<br/>(every control write)"] --> RIE["bit0 → RIE FF (D-capture)"]
OCW --> NC["bit2 → NCINT pulse → MFP I6 (vec 116)"]
OCW --> OP["bit3=1 → set OPCOM FF → level 6"]
OCW --> LS175["LS175 @86 captures:"]
LS175 --> PRES["bit4 PRES → 68000+MFP+LANCE reset, LED"]
LS175 --> HALT["bit5 HALT"]
LS175 --> PLOWE["bit6 PLOWE (NMI enable)"]
LS175 --> CWDIS["bit8 CWDIS (parity check off)"]
Note the asymmetry: bits 0/4/5/6/8 are levels (re-captured every write); bit 2 is a pulse per write; bit 3 sets a latch per write.
4.3 INT12 machinery (to the ND-100)¶
stateDiagram-v2
direction LR
state "RFT=0 RIE=0<br/>(idle)" as S00
state "RFT=1 RIE=0<br/>(pending, invisible)" as S10
state "RFT=0 RIE=1<br/>(armed)" as S01
state "RFT=1 RIE=1<br/>BINT12 ASSERTED" as S11
S00 --> S01: control write bit0=1
S00 --> S10: 68000 SCIP access
S10 --> S11: control write bit0=1
S01 --> S11: 68000 SCIP access
S11 --> S00: IDENT answered (PIDENT) or DCL
S10 --> S00: DCL (delayed master clear)
S01 --> S00: control write bit0=0 or IDENT/DCL
S11 --> S10: control write bit0=0
BINT12(open collector, Ca16) = RFT AND RIE. Status bit 2 shows the same AND — a pending-but-disabled doorbell is invisible.CLINT=DCL(delayed clear, ~200 µs after power-low/master-clear [M:18]) ORPIDENT(this card answered IDENT). CLINT resets BOTH flip-flops — after an IDENT the driver must re-write control bit 0.- IDENT daisy chain:
INIDENTin → ifLINT12(INT12 latched at BAPR time in F174 @9A) claim withPIDENT(PROM code onto BD, BDRY), else propagateOUTIDENT.
4.4 DMA-master error reporting [S2]¶
When the card masters the ND-100 bus (NGACK) and a read parity error occurs
(NPERR = RPERR·PARITYDIS̄): assert BERROR (Cb21) + PARERR (Cb18 o.c.) and gate
an error code onto BD16/17/21 (S240 @3A).
5. Memory and parity [S4]¶
- 16× HM51256P-10 + 2 parity chips = 512 KB with byte parity; standby-powered (contents survive power fail) [M:18]. Refresh + arbitration on S1.
- Parity: two F280 trees (15H low, 15G high byte). On CPU/LANCE reads with
LDS/UDS:
PERRL/PERRH→PERR→RPERR→ (a) MERR FF → level 5, (b) DMA-master BERROR/PARERR path, (c) red LED latch (cleared by CLRLED = reset). - Error capture:
SYRENlatches status @22E,EARENlatches address A1-16 @25E/23D — read via MERRSTAT/EAREN. - EPROM sockets 2× 27512 @13C/13D: shipped empty [M:20].
6. LANCE / SIA / transceiver [S5]¶
- Am7990 DAL0-15 multiplexed bus, A16-23 latched; DAS/READY/HOLD handshake
sequenced by PAL 455-01 @9F
[INF]; LANCE DMA window = full DRAM; internal 25.6 µs memory timeout [M:15]. - Am7992B SIA: 20 MHz from 40 MHz osc @17A (÷2, or EXTLANCK test input); PE64102 isolation transformer; TSEL strap network.
- Transceiver power: PWEN FF → +12 V switch (TRL-2N4920 pass transistors), VSENSE
comparators LM339:
PWOFFforce-clears PWEN;EXTPOWERsense; yellow "EXT 12V" LED. The current switch also trips autonomously on overcurrent [M:25].
7. Reset / power-fail sequences [M:18, S1]¶
sequenceDiagram
participant ND as ND-100
participant HW as Card HW
participant CPU as 68000
Note over ND,CPU: Power-fail (Master Clear with PLOWE set)
ND->>HW: BMCL asserted (power failing)
HW->>CPU: LEV7INT (NMI) via PAL 455-02
CPU->>CPU: ISR saves registers to (standby) DRAM
CPU->>HW: drives HALT+RESET low (self-halt)
HW->>HW: DCL fires ~200 us later → clears RFT+RIE (SCIP)
Note over ND,CPU: Restart
ND->>HW: IOXT control write (reset=0, halt=0)
CPU->>CPU: fetch SSP/PC from DRAM bytes 0-7, resume
Master Clear (or power-on) always sets RESET+HALT and clears local I/O activity
[M:29]. PMCL also hardware-resets the MFP and pulses the LANCE reset — an
ND-100-commanded reset re-initializes all peripherals.
8. Known documentation errata¶
- Manual p.27 "PCT interrupts on level 5 via the MFP" contradicts p.12 and the schematic (console = level 4 via RR/TR pins; level 5 = parity error).
- The OCR'd Markdown of the manual in NDInsight contains hallucinated passages —
always verify against
mirror/library/libhw/ND-12055-1-EN.pdf.