MON 0B (octal) — ExitFromProgram (LEAVE)¶
CORRECTED 2026-07-15 (byte-verified). The worker + dispatch described below are on the DEBUNKED model and are WRONG (the
GOTAB[0]=000000/ zero-filledLEAVEstory came from the WRONG table read out of commoncode). Byte truth from the carved L07 image:MCTAB[0B] = 005620B = PRTEX=032673Bin segment 003-S3CP, reached by the real dispatchMON 0B -> ENT14(072167B) -> GOTAB[0B]=MFELL(072114B) -> CALLP(032201B) -> MCTAB[0B]=PRTEX. Verified:dd if=044-S3IDPIT.bin bs=1 skip=1824 count=2->35 bb. Cross-ref ../317B-ExecuteCommand/README.md and SINTRAN/CARVING-HANDOFF.md sec 3a.
Terminates the calling program and returns to SINTRAN III. A batch job continues with its next command. Background programs close all files that are not set permanently open; RT programs close no files but release all reserved devices. ND-100 (and ND-500) call, available to all programs.
Status: documented (zero region). GOTAB[0B] = 000000 (byte-proven) — a
fall-through: there is no direct GOTAB handler word, so the level-14 handler is
reached through the resident MFELL/CALLPROC path (uncarved). The named region for
this call, LEAVE = 144142B in resident commoncode, is zero-filled in this real
SINTRAN L image: LEAVE lies deep inside the large uncarved zero block
103031B–170177B. So the termination worker body cannot be read from these bytes;
LEAVE is attached by symbol name only and its code-vs-data nature is
NOT-RECOVERABLE (see Honest caveats). All addresses/values
are octal.
- Full disassembly:
0B-ExitFromProgram.ASM— the GOTAB[0] fall-through word + theLEAVEnamed region (zero-filled; flagged NOT-CARVED). - Bytes live once in the canonical segment layer:
../../segments-ref/.
Dispatch path¶
flowchart LR
A["User / RT / background program<br/>MON 0B"] --> B["ENT14 level-14<br/>T = MON number"]
B --> C["GOTAB[0B] = 000000<br/>(fall-through, byte-proven)"]
C -.uncarved MFELL / CALLPROC.-> D["program-termination worker<br/>(uncarved; not isolated)"]
D --> E["LEAVE named region<br/>commoncode :144142B (NOT CARVED / zero)"]
class A blue
class B,C blue
class D teal
class E green
classDef blue fill:#E3F2FD,stroke:#0D47A1,color:#0D47A1
classDef teal fill:#E0F7FA,stroke:#00838F,color:#00838F
classDef green fill:#E8F5E9,stroke:#2E7D32,color:#2E7D32
The dashed hop (C ⇢ D) is the resident MFELL/CALLPROC fall-through — it is
not present in any carved segment, so it is the one link that cannot be followed
statically. GOTAB[0B] is literally 000000, so there is no entry stub to
disassemble; dispatch enters the resident handler, which then terminates the
program. LEAVE (E) is the named commoncode region for this call, but in this L
image its word is zero (the range was not carved), so no body is present here.
Code location (dispatch path)¶
Byte offset = (addr − loadbase) in octal words × 2 (decimal); the commoncode load
base is 0, so the byte offset is simply octal-addr × 2 (decimal).
| Role | Segment (full disasm) | Addr range (octal) | Byte offset | Symbol | Verdict |
|---|---|---|---|---|---|
| GOTAB[0] dispatch word | commoncode.asm · .hex | 071233B (1 word, GOTAB base) |
58678 | GOTAB+0 = 000000 |
VERIFIED (fall-through) |
| resident MFELL/CALLPROC bridge | — (uncarved) | — | — | MFELL/CALLPROC |
UNVERIFIED |
| LEAVE named region | commoncode.asm · .hex | 144142B (1 word, to OUTTE=144143B) |
102596 | LEAVE |
NOT CARVED (zero-filled); body link MISATTRIBUTED |
There is no entry-stub row: GOTAB[0] is 000000, so the level-14 handler is a
resident fall-through, not a 025-S3IRPIT stub.
Verify by hand: the GOTAB word is a zero (fall-through):
grep '^71233 ' ../../segments-ref/SINTRAN-DATA_commoncode/SINTRAN-DATA_commoncode.hex
→ 71233 000000 000 000 58678; confirm the zero from the canonical bin
dd if=../../../resident/SINTRAN-DATA_commoncode.bin bs=1 skip=58678 count=2 2>/dev/null | od -An -tx1
→ 00 00. For the LEAVE region:
grep '^144142 ' ../../segments-ref/SINTRAN-DATA_commoncode/SINTRAN-DATA_commoncode.hex
→ 144142 000000 000 000 102596; then
dd if=../../../resident/SINTRAN-DATA_commoncode.bin bs=1 skip=102596 count=2 2>/dev/null | od -An -tx1
→ 00 00 (the two bytes form the word 000000 — the region is zero-filled, i.e. not
carved in this L image). prove-mon.py 0 reads the same GOTAB zero.
Instruction walkthrough¶
Full listing: 0B-ExitFromProgram.ASM. There is no entry
stub (fall-through dispatch) and the named body region is zero-filled (not
carved), so there is no executable walkthrough.
LEAVE named region (144142) — not carved. The single word (LEAVE, between
ENTER=144141B and the next symbol OUTTE=144143B) is 000000 in this L image. It
sits inside a solid zero block that spans the large uncarved range
103031B–170177B, so the termination worker body is simply absent from this
carve — not code, not data, just uninitialised. The consecutive single-word slots
ENTER=144141B / LEAVE=144142B / OUTTE=144143B look like a vector-style region,
all zero here because it was not carved.
Parameter / register contract¶
Manual-side names/types are from
0B_ExitFromProgram.yaml.
MON 0B takes no parameters.
| Reg / field | Dir | Meaning | Verdict |
|---|---|---|---|
| (none) | — | MON 0 takes no parameters | inferred (manual) |
| background program | in | on exit, close all files not permanently open | inferred (manual) |
| RT program | in | on exit, release all reserved devices (no files closed) | inferred (manual) |
| control flow | out | returns to SINTRAN III; batch job continues with next command | inferred (manual) |
The named LEAVE region is zero-filled here and there is no entry stub, so
nothing in this contract is byte-proven from this carve; every row is
inferred from the manual and the caller-side MON 0 wrapper.
Pseudo-code (for an emulator)¶
See 0B-ExitFromProgram.pseudo.c — a pseudo-C
model for emulator authors. Because the named LEAVE region is zero-filled (not
carved) and the real termination worker sits past the uncarved MFELL/CALLPROC, the
model is of the documented behaviour only (terminate program / return to the
command processor), NOT the carved code. The worker is flagged name-only /
not-recoverable; the fall-through MON 0 → worker bridge is modelled but not proven.
Instruction semantics follow the canonical reference:
../../instruction-semantics/ND100-INSTRUCTION-SEMANTICS.md.
Honest caveats¶
What is byte-proven: GOTAB[0B] = 000000 (level-14 fall-through; prove-mon.py 0
reads commoncode file byte 58678 = 00 00). That is the only fact these carved
bytes establish for this call.
What is NOT proven: anything about the LEAVE body. LEAVE=144142B is
zero-filled in this L image — it lies inside the large uncarved zero block
103031B–170177B — so we cannot even decide code-vs-data for it, let alone confirm
it is the MON 0 worker. And because GOTAB[0] is 000000, there is no stub to
follow; dispatch enters the resident MFELL/CALLPROC handler in an uncarved
overlay. Attributing the call body to LEAVE rests on the symbol name
(LEAVE = the manual's short-name for ExitFromProgram) plus its position, not a
followed pointer or a decoded routine — hence the body is NOT-RECOVERABLE here.
No worker body has been fabricated.
This reconciles into one story: the dispatch head (GOTAB[0]=0, fall-through) is
solid; the named LEAVE region is not present in this carve (zeros); and the real
termination worker is not reachable from these bytes. Confirming the actual worker
needs a live trace (break on a real MON 0, single-step the fall-through, and record
where P lands).
Method: ../../../../../EXTRACTING-RESIDENT-CODE.md · dispatch reality: ../../TASK-05-mismatches.md · master map: ../../MON-CALL-INDEX.md.