CARVE: Operator RUN -> swapper gets real work -> domain runs (the road to NLL:) (2026-07-20)¶
Full path: E:\Dev\Ronny\NDInsight\SINTRAN\ND500\CARVE-RUN-TO-WORK-POSTING-CHAIN-2026-07-20.md
Track: SINTRAN carving (Phase 4 - the road to the NLL: prompt).
Method: direct read of SINTRAN-L NPL (MP-P2-N500.NPL, RP-P2-N500.NPL) for LOGIC, cross-checked
against L07 symbol tables for the field/message-code VALUES (SYMBOLS\L07\*.TXT), and against the D4
finding (ND500-D4-RUN-BLOCKER-FINDING-2026-07-19.md) + the context-block carve
(CARVE-SWAPPER-CONTEXT-BLOCK-BUILDER-2026-07-20.md).
Grades: [V] byte/symbol-verified from the L07 tables or from the D4 live harness; [I] inferred
from NPL logic (NPL is a DIFFERENT revision than the L07 bytes - logic only, never final byte authority);
[OPEN] unresolved. Numbers OCTAL unless prefixed 0x. ASCII only; "section N" not the sign.
BOTTOM LINE (answers the three questions)¶
-
What calls
5ACTSWAPPER/ posts realSWPINFOwork? A PAGE FAULT taken by a RUNNING ND-500 process (the domain, or any placed process). The fault arrives as a level-12 STOP message; SINTRAN's driver decodes it (DECOMESS->TRAPDECODER) and, for trap 46 = PAGE FAULT, calls5ACTSWAPPER, which writesSWMSG.SWPINFO(HSWPI=104) to point at the faulting message. It is NOT an explicit activation issued by RUN, and RUN does NOT post swapper work directly.[V] -
What must the EMULATOR do to trigger it? The placed domain must actually START executing (RUN issues a
3START= mailbox 23B), and then generate a real level-12 STOP message - either a PAGE FAULT (STOPR=TRAPCODE,TRAPN=46) which routes to the swapper, or a MONITOR CALL (STOPR=MOCALL) which routes toMCHANDLE. There is no path where postingSWPINFOby hand substitutes for the domain running and faulting.[V] -
Cross-check with the RUN precondition (task #13): RUN of a properly-placed domain issues the domain
3START; execution then reaches5ACTSWAPPERONLY through a page fault, and reachesNLL:output throughMCHANDLE(monitor calls). The current D4 stop is UPSTREAM of all of this: the SWAPPER'S OWN cold-start (process 0) has not completed/parked, so RUN still fails "NO WELL DEFINED PROGRAM" and never gets to3STARTthe domain.5ACTSWAPPERis not even reached yet.[V]
THE CHAIN (per-hop, graded)¶
operator RUN
-> [H0] RUNN precondition (well-defined program) [V, task #13]
-> [H1] RUNN issues domain 3START (mailbox 23B) [I]
-> [H2] domain EXECUTES on the ND-500 CPU [I]
|-- (a) MON call -> STOPR=MOCALL -> DECOMESS -> MCHANDLE -> output "NLL:" [V]
`-- (b) page fault -> STOPR=TRAPCODE, TRAPN=46 -> DECOMESS -> TRAPDECODER [V]
-> [H3] TRAPDECODER: trap 46 = PAGE FAULT, not swapper's own -> CALL 5ACTSWAPPER [V]
-> [H4] 5ACTSWAPPER: SWMSG.SWPINFO := faulting message; reactivate swapper [V]
-> [H5] swapper wakes with REAL work, pages the fault in (5SWRT/MON 131), restarts [V/I]
domain -> domain continues -> NLL:
H0 - RUN precondition [V, prior carve task #13]¶
RUN/GO/CONTINUE all issue RUNN = MON 60 subfn 12B; its "well defined program" runnable state is
set only on the all-success path of PLACE's START-STANDARD-DOMAIN @043011. Source:
ND500-D4-RUN-BLOCKER-FINDING-2026-07-19.md section 8. Not re-derived here.
H1 - RUN starts the DOMAIN via mailbox 3START [I]¶
The domain is activated by a mailbox message carrying MICFU = 3START. Symbol [V]: 3STAR=000023
(= mailbox 23B StartProcess, SYMBOLS\L07\*). The N5XXC driver dispatch has 3START in slot 23
(STAOPP, MP-P2-N500.NPL:398). The servicer's 23B StartProcess is REAL/wired to CpuND500
(D4 finding section 7). The exact RUNN -> 3START emission site is on the ND-100 monitor side
(nd-500-mon J04) and is [I] here, not carved in this pass.
H2 - the domain executes and STOPS for service [V]¶
When the running ND-500 process needs the ND-100, the CPU stops and a level-12 message is delivered to
SINTRAN's driver kernel (N500, NXTMSG ex-queue loop). The answer decoder is DECOMESS
(MP-P2-N500.NPL:803-819, src 135161):
135167 *MICFU@3 LDATX % MIC.FUNC
135170 IF A=3MONCO OR A=3TRACO OR A=3START OR A=3WMONCO THEN
135204 *AAX STOPR; LDATX
135210 IF A=MOCALL THEN CALL MCHANDLE % STOP-REASON = MONITOR CALL
135214 ELSE IF A=5FMOCALL THEN CALL MCHANDLE % = file-transfer moncall
135221 ELSE IF A=TRAPCODE THEN CALL TRAPDECODER % = TRAP (-> page-fault path)
135226 ELSE CALL 5RRTWT
[V]: MOCAL=000001 (MOCALL), TRAPC=000002 (TRAPCODE), 3MONC=000024, 3STAR=000023.
- (a) MON-call sub-path [V]: the LINKAGE-LOADER domain prints NLL: through terminal-output
monitor calls; each stops the CPU with STOPR=MOCALL and is serviced by MCHANDEL
(MP-P2-N500.NPL:1267, src 136764), which does the I/O and restarts the domain. This path never
touches the swapper.
- (b) trap sub-path [V]: a non-resident reference stops with STOPR=TRAPCODE -> TRAPDECODER.
(A second entry to the same code, DECOERRMESS 135240, routes an error-answer with TRAPN=46 and a
legal micro-func straight to ITRAPDECODER - same page-fault handling.)
H3 - TRAPDECODER: page fault -> activate swapper [V]¶
TRAPDECODER (MP-P2-N500.NPL:859-895, src 135314):
135320 *AAX TRAPN-1; LDDTX % D = TRAPNO
135324 IF D>53 THEN ... UNKNOWN TRAP
135327 ELSE IF D = 46 THEN % PAGE FAULT
135336 ITRAPDECODER: IF X >< SWMSG THEN
135354 *5RECE@3 LDATX % RECEIVER
135357 IF A-5SWPROC=0 GO ITRPERR % page fault IN the swapper -> background monitor
135361 MSWPFAULT SHZ 10 + D % pack reason
135364 *AAX TRAPN; STATX
135367 CALL 5ACTSWAPPER % <=== ACTIVATE THE SWAPPER
[V]: TRAPN=000016 (trap-number field in the message), MSWPF=000012 (MSWPFAULT),
5SWPR=011254 (5SWPROC = swapper process descriptor / receiver id). The NPL comment names D = 46
as PAGE FAULT (octal-vs-decimal of the literal not resolved here; the comment is authoritative for
meaning). [V for the branch, I for the literal base]
5ACTSWAPPER is also called from three other sites, all "a process needs the pager":
SWMC (swapper monitor call, 141765), the LNEWSWAP chain that serves the next FIFO waiter
(136037), and the resident-place path (134154). [V - grep of MP-P2-N500.NPL]
H4 - 5ACTSWAPPER posts the work into SWPINFO [V]¶
5ACTSWAPPER (MP-P2-N500.NPL:2851-2908, src 144762); entry X = message requiring service:
144766 X=:D=:MSGTOSW; A:=5MBBANK
144771 *NNC24,CNVWADR % multiport phys addr of the message
144774 AD=:CMSGTOSW
144775 SWPWAIT; CALL WN5STATUS % mark faulting proc "waiting for swapper"
144777 X:=SWMSG; CALL RN5STATUS
145001 IF A=PSWWAIT THEN % swapper FREE?
145006 AD:=CMSGTOSW; *AAX HSWPI; STDTX % SWMSG.SWPINFO := &message <=== REAL WORK POSTED
145011 SWACTIVE; *AAX SWPFU-HSWPI; STATX % SWMSG.SWPFU := active
145054 X:=SWMSG; *AAX SWPST; STATX % SWMSG.SWPST := reason (page fault)
145071 3MONCO; *MICFU@3 STATX % MICFU := 3MONCO (restart swapper after moncall)
145073 CALL MCCO ; CALL XACTRDY % reactivate the ND-500 (the swapper)
145111 ELSE
145112 % swapper BUSY -> insert message into the Swap-wait FIFO (X5SWF), served later by LNEWSWAP
[V]: HSWPI=000104 (SWMSG.SWPINFO), SWPFU=000101, SWPST=000103, 3MONC=000024.
This is the write that makes SWPINFO non-zero. It runs only because a running process faulted.
H5 - swapper services the fault, restarts the domain [V/I]¶
Parked process 0 (the swapper) wakes, reads SWMSG.SWPINFO to find its work, and pages the fault in.
The disk transfer is done by the ND-100 RT-program 5SWRT (RP-P2-N500.NPL:16-58, src 126464):
A:=SWMSG+"SWPINFO"=:D:=5MBBANK; AD=:DSWMSG (phys addr of SWPINFO), then ABSLI; *MON 131 (ABSTR
disk read of the page). On completion MONICO/5RRTWT restarts the faulted domain, which resumes and
runs on toward NLL:. [V for 5SWRT/MON 131; I for the full loop-back]
The cold-start init message is DISTINCT from fault work [V/I]¶
At swapper START, SWMESS/MSWSTART (MP-P2-N500.NPL:428-462, src 133635) also writes
SWMSG.SWPINFO (133654), but to the swapper's own START message (MSWST=000007), not a page-fault
work item. So SWPINFO is written on two different occasions: cold-start init (SWMESS) and per-fault
work (5ACTSWAPPER). [V/I]
WHY the current D4 state has not reached H1 yet [V, from the finding]¶
Per ND500-D4-RUN-BLOCKER-FINDING-2026-07-19.md sections 12i-12l: on this ND-5800 image, PLACE-DOMAIN
drives 500IN init (LOAD control store + LOAD swapper) and the SWAPPER (process 0) is 3START'd and
executes. It runs clean on CpuND500 up to PC=0x0800913B, then dereferences a null taken from an
EMPTY message (SWMSG buffer reads zero). That is the swapper's COLD-START path (SWMESS/MSWSTART),
which should let the swapper initialize and PARK. Because it does not complete, PLACE never finishes, so:
- RUN still prints NO WELL DEFINED PROGRAM (precondition H0 never satisfied), and
- the DOMAIN LINKAGE-LOAD-H02 is never 3START'd, so no domain fault ever occurs, so
- TRAPDECODER and 5ACTSWAPPER are not reached at all in the current state.
So the swapper-work-posting chain (H3-H5) is real and carved, but it sits BEHIND two gates that are not
yet open: (1) swapper cold-start must park; (2) RUN must 3START the domain.
WHAT THE EMULATOR MUST DO TO REACH NLL:¶
In order, each a distinct requirement:
-
Make the swapper's cold-start COMPLETE and PARK (current blocker). The swapper reads its START message via
SWMSG.SWPINFOand must reach its idle/park state, not null-deref. Either the START message (SWMESS/MSWSTART,SWPINFO=start msg) must be delivered non-empty, or the swapper's "no work -> park" branch must be taken. This is the top item (D4 finding 12l).[V - this is the wall] -
Let RUN issue a real
3START(mailbox 23B) for the DOMAIN. Already wired: servicer 23B StartProcess is REAL (D4 finding section 7). Gated only by H0 (needs gate 1 first).[V] -
Run the DOMAIN on
CpuND500and deliver its STOP messages faithfully:- Monitor calls (how
NLL:is printed): the domain stops withSTOPR=MOCALL-> the emulator's 3022/mailbox must present that stop soDECOMESS -> MCHANDLEservices the output. This is the MINIMAL path toNLL:and needs the swapper only if the domain page-faults.[V] - Page faults (only if the placed domain is demand-paged): the
CpuND500page fault (LastPageFault) must be surfaced to the mailbox as a level-12 STOP withSTOPR=TRAPCODEandTRAPN=46, NOT swallowed. Only that runsTRAPDECODER -> 5ACTSWAPPERand pages it in via5SWRT(MON 131).[V]
- Monitor calls (how
-
Do NOT fake
SWPINFOto shortcut this. RUN posts no swapper work; the swapper only ever gets work from a RUNNING process faulting (H2b -> H3 -> H4). A hand-writtenSWPINFOis not a substitute for the domain executing.[V]
Important honest nuance [OPEN]: whether LINKAGE-LOAD-H02 demand-faults at all is unresolved. If
PLACE-DOMAIN placed its segments RESIDENT (the observed 14B RESIWR burst into ND-500 memory) and the
CpuND500 MMU maps them, the domain can run to NLL: with zero swapper involvement - purely via the
MON-call path (H2a / MCHANDLE), with the swapper idle. In that case the swapper-work chain (H3-H5) is
NOT on the critical path to NLL:; the critical path is: swapper parks (gate 1) -> domain 3START
(gate 2) -> domain MON-call output (MCHANDLE). The swapper-work chain becomes load-bearing only for a
domain that actually demand-pages. Settling which case applies needs a live run once gate 1 is open.
Evidence index¶
| Claim | Source | Grade |
|---|---|---|
| DECOMESS routes STOPR=TRAPCODE -> TRAPDECODER, MOCALL -> MCHANDLE | MP-P2-N500.NPL:803-819 (135161) |
[V] |
| TRAPDECODER: trap 46 = PAGE FAULT -> CALL 5ACTSWAPPER | MP-P2-N500.NPL:859-895 (135314) |
[V] |
| DECOERRMESS: TRAPN=46 + legal micfunc -> ITRAPDECODER | MP-P2-N500.NPL:836-844 (135240) |
[V] |
| 5ACTSWAPPER writes SWMSG.SWPINFO := faulting msg, or FIFO-queues | MP-P2-N500.NPL:2851-2908 (144762) |
[V] |
| 5ACTSWAPPER call sites (TRAPDECODER/SWMC/LNEWSWAP/resident-place) | grep MP-P2-N500.NPL (510/879/1052/2050) |
[V] |
| SWMESS/MSWSTART sets SWPINFO to the START message (cold-start) | MP-P2-N500.NPL:428-462 (133635) |
[V/I] |
| Domain start = mailbox 3START (=23B); N5XXC slot 23 = STAOPP | MP-P2-N500.NPL:398; 3STAR=000023 |
[V/I] |
| MCHANDEL services domain monitor calls (NLL: output path) | MP-P2-N500.NPL:1267 (136764) |
[V] |
| 5SWRT pages the fault in via MON 131 ABSTR | RP-P2-N500.NPL:16-58 (126464) |
[V] |
| Field/code values HSWPI/TRAPN/SWPFU/SWPST/3MONCO/3START/MOCALL/TRAPCODE/5SWPROC/MSWPFAULT | SYMBOLS\L07\*.TXT |
[V] |
| Current D4 stop is swapper cold-start (0x913B null-deref), not the domain | ND500-D4-RUN-BLOCKER-FINDING-2026-07-19.md 12i-12l |
[V] |
| Whether LINKAGE-LOAD-H02 demand-faults or runs resident | (needs live run) | [OPEN] |