ENNS0 startup / XROUT "Unknown name" investigation - 2026-07-23¶
Reverse-engineering of why START-NETWORK-SERVER ENNS0 fails with
XMSG Routing/Naming error: Unknown name (of server or system) on the emulated
ND Ethernet II (PCB 3094 / ND-110063) controller, and what the ND-100 ENNS0 supervisor
does when it talks to the controller.
This folder holds the ND-100-side (ENNS0 supervisor) analysis + the reconstructed
disassembly tooling. The 68K firmware side lives with the firmware docs at
Installation\Communication\Ethernet\x\stripped\docs\ (see ND_EthernetII_68000_Firmware_*
and ENNS0-PRKEY-FIRMWARE-FIXPOINT-2026-07-23.md).
Convention throughout: [V] = VERIFIED (decoded bytes / read source / manual quote);
[I] = INFERRED.
Headline conclusion (state at 2026-07-23)¶
- The ND Ethernet II CONTROLLER emulation is correct: in a live harness trace the 68K boots, posts PRKEY @0x0404, reaches monitor postbox MON_CODE=3 (READY) + STARTED_FLAG=1, and the LANCE fully initializes (IDON, MAC 08:00:26:64:00:00, 128 RX buffers) and starts (RX=ON TX=ON). The ND-100<->controller path works.
- ALL controller I/O happens during
@RT ENNS0.START-NETWORK-SERVERdoes ZERO controller I/O and returns "Unknown name" immediately. - Root cause is one level above the controller: ENNS0 never issues the XROUT name-creation
(
XSNAM=66 /XSCRS=80) for the service*XM-ENNS0, soSTART-NETWORK-SERVER's name-resolve (XSNET=85) returnsXRUNN=2 "Unknown name". MON 200B is handled by REAL SINTRAN (the emulator C# handler is dead#if false), so this is genuine guest behavior, NOT an emulator stub. - OPEN: the exact reason ENNS0 stops before
XSNAM. Two candidates under active decode: (1) an undecoded ENNS0<->firmware command exchange - OPCOMSUBFUNCTION=5, firmware replies MON_CODE=1 / PARAM=0x1E(30) - that may be a status query ENNS0 mis-reads; (2) an XMSG version gate (ENNS0 is COSMOS Ethernet B01/1987, running XMSG M00/1988). A missing COSMOS config step is NOT the cause (official ND-210580 p6 sequence is@RT ENNS0thenSTART-NETWORK-SERVER ENNS0; DEFINE-NETWORK-CONNECTION comes AFTER and only binds already-defined remotes).
Findings docs (reading order)¶
ENNS0-POLL-FINDINGS.md- first pass: ENNS0 has ZERO IOX/IOXT; all controller I/O is via the kernel PIOCM (MON 255B) driver; MAIN=ENNS0 @octal 031655; the 10 PIOCM wrappers.ENNS0-PIOCM-START-FINDINGS-2026-07-23.md- the kernel PISTA (T=6) start path: reset+ initiate, then busy-poll PIOC word 1002B (68K DRAM 0x0404) for PRKEY=052163B, 3-sec timeout, then write MPIOC=5 + ring PWCR=11B. START_P @033124.ENNS0-XROUT-UNKNOWN-NAME-ROOTCAUSE-2026-07-23.md- the name*XM-ENNS0is written via XFWRI + XFSND to XROUT port 0; XROUT replies XRUNN because no XSCRS ran; MON 200B is real SINTRAN, not a stub.XMSG-XROUT-CARVE-LOCATE-AND-RECIPE-2026-07-23.md- XROUT service codes from xmsg-values-l.symb (XSNAM 66 / XSCRS 80 / XSNET 85 / XSGMG 71 / XRUNN 2); location of the XMSG-COMMAND / XROUT binaries on F: (xmsg-command-l03.prog etc.); carve recipe.ENNS0-POSU-XROUT-ERROR-GATE-2026-07-23.md- the POSU error catalog @014642-015250 ("No answer from interface / Interface not started / Check if RTCOMMON…"); "Error communicating with XROUT" is a paraphrase; the controller gate is PRKEY, not the IDENT interrupt latch.
Sibling firmware-side doc (in the Ethernet docs dir):
Installation\Communication\Ethernet\x\stripped\docs\ENNS0-PRKEY-FIRMWARE-FIXPOINT-2026-07-23.md
- the 68K firmware writes PRKEY from exactly one instruction (0x1CF4) inside reset_entry.
DONE (2026-07-23 static-decode agents):
- FIRMWARE-SUBFUNCTION-5-DECODE-2026-07-23.md (filed to Installation\Communication\Ethernet\
x\stripped\docs\) - VERDICT: the OPCOM SUBFUNCTION=5 exchange is a NORMAL SUCCESS/ACK, not
an error. Handler @0x1B00 dispatches SUBFUNCTION via a jump table @0x512; SUB=5 -> 0x1C48
writes MON_CODE=+1 (ACK) + SCIP. PARAM=0x1E(30) is a hardcoded constant (= the OPCOM vector
number), NOT a version/size/error. REQUEST=0 -> D0=-5 = benign "no request pending" (stale
doorbell). MON_CODE is SIGNED: +1=ACK, -2/-4/-5=errors. => the controller-comm exchange does
NOT make ENNS0 abort. This RULES OUT the last controller-side suspect.
- ANNOTATED-ENNS0-DISASSEMBLY-2026-07-23.md - DECISIVE, statically-provable: ENNS0's ENTIRE
XMSG footprint is just TWO MON 200B:
030230 SAT 0;MON 200=XFDUM (liveness "is XMSG up?") and030233 SAT 1;MON 200=XFDCT (disconnect). The name-registration functions (XFGET/XFWRI/XFSND to XROUT port 0 carrying XSNAM 66 / XSCRS 80) are NOT PRESENT in ENNS0 at all - opcode-exact (only 2 MON 200B total). So ENNS0 does NOT and CANNOT register *XM-ENNS0. The runtime XFPRV/XFOPN/XFWDF/XFDBK are SINTRAN's RT-driver-port setup, NOT ENNS0. Rules out controller-SUBFN5 (succeeded) and version/getMagic (no port-0 send possible).
CONCLUSION (both static agents): the ND Ethernet II CONTROLLER emulation AND the ENNS0
supervisor are both cleared. *XM-ENNS0 is created by the XMSG-COMMAND START-NETWORK-SERVER
/ Define-Network-* handler, NOT by ENNS0. START-NETWORK-SERVER returning XRUNN(2) is that
handler failing to resolve/create the server - a config/procedure issue in the XMSG-COMMAND
flow. NEXT (only remaining unknown): disassemble the XMSG-COMMAND program.
RECONCILED ROOT CAUSE (2026-07-23, live RT-descriptor + XROUT decode)¶
Two agents + live evidence now converge. The AUTHORITATIVE root cause is the LIVE
LIST-RT-DESCRIPTION ENNS0: ENNS0 hangs in a SINTRAN device INPUT wait on logical unit
2240B (RTWT, resume-P 030440, datafield 103356B), after MON 124 PRSRV force-reserving a
device. It never completes startup, so it never registers *XM-ENNS0. See
ROOT-CAUSE-ENNS0-HANGS-INPUT-WAIT-LU2240B-2026-07-23.md.
Everything else is DOWNSTREAM of that hang:
- XROUT-XSNET-XRUNN-CONDITION-DECODE-2026-07-23.md (VERIFIED via new bpun_load.py; checksums
exact): XSNET(85) does NOT emit XRUNN. XRUNN=2 is a name-table MISS from the kernel
lookup CHNAM @0o20161, surfaced by getMagic (RSGMG/XSGMG=71) SAA 2 @0o6220. Names enter
the table only via YNNAM @0o17710 (XSCRS/XSNAM). So "Unknown name" simply means *XM-ENNS0
is not in the table - because ENNS0 hung before creating/registering it.
- The config theories are RULED OUT empirically: list-ser shows local system 100 IS
defined and *XM-FIDO registered fine on it - so registration works and a local system
number exists. DEFINE-REMOTE-NAME/DEFINE-LOCAL-SYSTEM are NOT the blocker. The earlier
DEF-REMOTE,,D100 100 failed because it inserted the string D100, not *XM-ENNS0 (right
command family, wrong name) - but even the right name would not help while ENNS0 hangs.
So: FIDO (a normal server) self-registers and works; ENNS0 (network server) hangs in its POSU INPUT wait on LU 2240B and never registers. The ONLY open question is what LU 2240B is and why its input never arrives (agent running) - that is THE fix point.
xmsg-L-binaries/ - actual binaries from the running L disk image¶
Extracted with ndtool from D:\BIGDISK0-L.IMG (the running system, NOT the K floppy).
23 XMSG/XROUT files. The key ones for the START-NETWORK-SERVER decode:
- XMSG-COMMAND.PROG (111103 B) = the (SYSTEM) build; guest banner is Release M (210373M),
so this is the RUNNING command interpreter - PRIMARY target.
- XMSG-COMMAND-L03.PROG (90112 B) = older L03 build (comparison).
- XMSG-XROUT-L03.BPUN (80450 B) = XROUT kernel (where XRUNN=2 is actually returned).
- XMSG-SYMBOL-L03.SYMB, XMSG-VALUES-L.SYMB, XMSG-SYS-DEF-L.SYMB, XMSG-SYSTABS-L03.SYMB,
XMSG-POFTABS-L03.SYMB, XMSG-PL-VALUES-L.INCL = symbol/constant tables.
- XMSG-COMMAND-START-NETWORK-SERVER-DECODE-2026-07-23.md - DONE. Built+verified a SINTRAN
:PROG loader (tools/prog_load.py: 7 BE header words, bank-1 image at file 0x200, load addr 0,
mem word A = file byte 0x200+2A). Command dispatch table @mem 0o22334;
Start-Network-Serverhandler @0o50722 (string "Server not yet started..." @0o50617). The handler loads XROUT service XSNET=85 (SAA 85 @0o72546) and issues MON 200B (wrapper @0o72314) to XROUT port 0 carryingFF09 *XM-ENNS0 / FD05 ENNS0. It RESOLVES/STARTS an already-defined gateway - it does NOT create the name (no XSCRS/XSNAM on its path). XSNET returns XRUNN=2 because XROUT has no name/system entry to bind *XM-ENNS0 to. (Exact XROUT-internal test left [OPEN]: XMSG-XROUT- L03.BPUN needs a load base to disassemble.)
FINAL ROOT CAUSE (investigation closed 2026-07-23)¶
START-NETWORK-SERVER ENNS0 "Unknown name" is a config/procedure gap, NOT an emulator or
firmware or ENNS0 bug. Cleared, in order: controller wiring/68K/LANCE/PRKEY (works); firmware
SUBFUNCTION=5 (normal ACK); ENNS0 supervisor (only XFDUM+XFDCT, never registers a name - by
design); XMSG-COMMAND START-NETWORK-SERVER handler (correctly issues XSNET=85 to start the
gateway). The break: the DEFINE-REMOTE-NAME name<->system mappings (from the XMSG-STARTUP mode
file) were never run, so XROUT has no entry for XSNET to bind XM-ENNS0 to -> XRUNN=2. The
harness/manual run did only start-x + @RT ENNS0 + START-NETWORK-SERVER, skipping XMSG-STARTUP.
Corroborating evidence: on the L image (SYSTEM)XMSG-START:MODE is 0 bytes* (empty) - no
DEFINE-REMOTE-NAME mappings exist. FIX = run the official ND-210580 page-6 WARM-START sequence
(XMSG-STARTUP / DEFINE-REMOTE-NAME BEFORE START-NETWORK-SERVER). Not an emulator change.
tools/ - reconstructed disassembly tooling (session-local until now)¶
Built this session from SINTRAN\File-Formats\BRF-FILE-FORMAT.md. NOT the committed
sintran-segment-carver; these are lightweight ND-100/BRF/68K helpers.
brf_link.py- BRF loader/linker. Resolves a.brfobject into a flat ND-100 image + symbol table. Validated: 174 units of encos-err-i-b01.brf, all checksums OK. SPEC FIX baked in: packed-symbol sixbit decode isascii = c|0o100 if c<0o40 else c(0=space), NOTc + 0o40(the BRF-FILE-FORMAT.md value mis-decodes every symbol).nd100dis.py- ND-100 disassembler (memory-reference / MON / IOX / skip / jump decode reliable; PLANC inline-data blocks are not auto-separated).m68kdis.py- minimal MC68000 disassembler (for the encos-ser 68K firmware).- helpers:
find_callers.py/callers.py(jsr/JPL caller scan),csval.py(checksum),scan.py/scanprog.py(.prog probing - note the.progloader for encos-in-b01.prog is still TODO: ~256-word BE header then raw words),census*.py,dumpstrings.py,dumpwords.py,resolve.py,symdump.py.
Typical use: python brf_link.py <path-to>.brf then python nd100dis.py <image> <base>.
Targets:
- ENNS0 supervisor: Installation\Communication\Ethernet\x\encos-err-i-b01.brf (MAIN @031655)
- 68K firmware: Installation\Communication\Ethernet\x\stripped\encos-ser-all-banks-68k.bin
Related NDInsight docs¶
SINTRAN\XMSG\DOC\ENNS0-XROUT-GETMAGIC-FINDINGS-2026-07-07.md+ENNS0-XROUT-DISASSEMBLY-HANDOFF.md- the earlier getMagic/XSGMG registration analysis.
Installation\Communication\Ethernet\ND-210580-02-EN.md- official COSMOS Ethernet Option install + operator doc (ENCOS-INJ install, the page-6 start recipe, LIST-NETWORK-SERVERS).SINTRAN\NPL-SOURCE\NPL\RP-P2-PIOC.NPL- the kernel PIOCM (MON 255B) driver (PISTA T=6).- RetroCore emulator + logging:
Emulated.HW\ND\CPU\NDBUS\NDBusEthernetII.cs+NDBusEthernetIIDecode.cs([MBX]/[BIT2]/[PRKEY]/[ETH-*] traces); master reference at RetroCoreDOCS\ND_EthernetII_MASTER_REFERENCE_2026-07-23.md.