MON 015B (octal) - Undocumented (F1615)¶
CORRECTED 2026-07-15 (byte-verified). The worker + dispatch described below are on the DEBUNKED model and are WRONG. Byte truth from the carved L07 image:
MCTAB[15B] = 005635B = SETUP=103417Bin segment 006-S3FS, reached by the real dispatchMON 15B -> ENT14(072167B) -> GOTAB[15B]=MFELL(072114B) -> CALLP(032201B) -> MCTAB[15B]=SETUP. Any "GOTAB from commoncode" / "uncarved CALLPROC bridge" / "F16xx stub" / old worker name below is an artefact of the wrong table. Verified:dd if=044-S3IDPIT.bin bs=1 skip=1850 count=2->87 0f. Cross-ref ../317B-ExecuteCommand/README.md and SINTRAN/CARVING-HANDOFF.md sec 3a.
A level-14 monitor call served directly by the Resident PIT (S3RPIT). It is not listed in the SINTRAN III Monitor Calls manual: only the dispatch and the handler entry code are recovered from real SINTRAN L bytes; the high-level purpose is unknown.
Status: dispatch byte-proven (GOTAB[15B] = 120501B, live-matched); the F1615 entry
stub and the shared S3RPIT workers it calls are real SINTRAN L bytes in the same segment; the
call's meaning and one runtime-populated exit are UNVERIFIED (see
Honest caveats). All addresses/values are octal.
- Full disassembly:
015B-Undocumented.ASM- the actual code, both regions (F1615 entry stub + first shared worker). - Bytes live once in the canonical segment layer:
../../segments-ref/.
Dispatch path¶
flowchart LR
A["User program<br/>MON 15B"] --> B["ENT14 level-14<br/>T = MON number"]
B --> C["GOTAB[15B] = 120501B<br/>(byte + live proven)"]
C --> D["F1615 entry stub<br/>025-S3IRPIT :120501B"]
D --> E["shared S3RPIT workers<br/>via JPL I : 116234B / 116665B / 116036B"]
D -.runtime JMP I -31.-> F["ptr@120461B = 000000B<br/>(runtime-populated; unresolved)"]
class A blue
class B,C teal
class D,E green
class F blue
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 main dispatch (C -> D -> E) is fully carved and statically followable inside
025-S3IRPIT. The dashed hop (D -> F) is the JMP I -31 skip-path exit: its pointer word
@120461B reads 000000B in the static image, so it is runtime-populated and cannot be
followed from the bytes alone.
Code location (dispatch path)¶
Every row is a real region you can open. Byte offset = (addr - loadbase) in octal words x 2.
Rows are in execution order.
| Role | Segment (full disasm) | Addr range (octal) | Byte offset | Symbol | Verdict |
|---|---|---|---|---|---|
| GOTAB[15] dispatch word | commoncode.asm · .hex | 071250B (1 word) |
58704 | GOTAB+15 = 120501B |
VERIFIED |
| F1615 entry stub | 025-S3IRPIT.asm · .hex | 120501B-120525B (21 words) |
55938 | F1615 |
VERIFIED |
worker B (via JPL I 35, ptr@120536=116234B) |
025-S3IRPIT.asm · .hex | 116234B |
53560 | S3RPIT worker | real bytes; extent UNVERIFIED |
worker C (via JPL I 33, ptr@120540=116665B) |
025-S3IRPIT.asm · .hex | 116665B |
54122 | S3RPIT worker | real bytes; extent UNVERIFIED |
worker D (via JPL I 23, ptr@120541=116036B) |
025-S3IRPIT.asm · .hex | 116036B |
53308 | S3RPIT worker | real bytes; extent UNVERIFIED |
data word (via LDX I 34/30, ptr@120537=061157B) |
025-S3IRPIT.asm · .hex | 061157B |
23774 | S3RPIT data | VERIFIED (pointer read) |
JMP I -31 exit (ptr@120461B = 000000B) |
- (runtime-populated) | 120461B -> 000000B |
39392 | runtime-linked | UNVERIFIED |
Verify by hand (GOTAB word): grep -E '^71250 ' ../../segments-ref/SINTRAN-DATA_commoncode/SINTRAN-DATA_commoncode.hex
-> 71250 120501 241 101 58704; then
dd if=../../../resident/SINTRAN-DATA_commoncode.bin bs=1 skip=58704 count=2 | od -An -tx1
-> a1 41 (= octal 120501, the F1615 address).
Verify by hand (F1615 stub): grep -E '^120501 ' ../../segments-ref/025-S3IRPIT/025-S3IRPIT.hex
-> byte offset 55938; then
dd if=../../../segments/025-S3IRPIT.bin bs=1 skip=55938 count=4 | od -An -tx1
-> ba 1d a8 09 (= octal 135035 124011 = JPL I 35 / JMP 11, the stub head).
Instruction walkthrough¶
Full listing: 015B-Undocumented.ASM. Region A is the F1615 stub
(the per-MON handler); Region B is the first shared worker it calls (116234B).
The F16xx symbols are a regular table of same-size per-MON entry stubs (F1610..F1627 are each
exactly 025B words apart), so F1615 @120501B is the level-14 stub for MON 15B, not a
coincidence. The stub reads X and A, tests T, calls shared workers, and offers a
skip-return to the caller - consistent with a small argument-driven monitor call.
- Entry / worker call (120501-120502).
120501 JPL I 35calls shared worker B at116234B(pointer word@120536). The worker uses a skip / no-skip convention:120502 JMP 11 -> 120513is the normal (no-skip) return; straight-line code at120503is the skip return. - Skip path (120503-120512). Loads X from data word
061157B(LDX I 34) andAfrommem[X-17], calls a second worker C at116665B(120505 JPL I 33), reloads X (LDX I 30), loadsAfrom120457B(which reads000000B), copiesA->B(RADD CLD SA DB) and exits via120512 JMP I -31through pointer word@120461B- which reads000000B(see caveats). - Normal path (120513-120525). Subfunction-style dispatch: sets
T(SAT 2, thenSAT 1), compares the double accumulator againstS:T(SKP IF DA EQL ST), and branches - calling a third worker D at116036B(120516 JPL I 23) on one selector, and bit-testing (120524 BSKP ONE SSK) on another, converging on shared tails at120534B/120477B.
Pointer / data words the stub dereferences (data, rendered by nd100-dis as FDV/ADD/STZ;
the raw octal is the target): @120536=116234 @120537=061157 @120540=116665 @120541=116036
@120461=000000 @120457=000000.
Parameter / register contract¶
| Reg / field | Dir | Meaning | Verdict |
|---|---|---|---|
X (ZXREG) |
in | Stub loads/uses X (LDX I 34, LDX I 30, LDA ,X -17) as a pointer/index into a table or descriptor. |
VERIFIED (bytes) |
A (ZAREG) |
in | Stub loads A and compares it (SKP IF DA EQL ST) - an argument/selector value. |
VERIFIED (bytes) |
T (ZTREG) |
in | Selector set/tested (SAT 1, SAT 2, ... EQL ST) - subfunction number. |
VERIFIED (bytes) |
| skip return | out | Worker 116234B returns skip/no-skip; the stub has both paths (JMP 11 vs fall-through). |
VERIFIED (bytes) |
| error codes | out | No explicit error-code load is identifiable in the stub; any status is produced inside the uncarved workers. | UNVERIFIED |
| purpose | - | The manual does not list MON 15B; the functional meaning of the inputs/outputs is unknown. | UNVERIFIED |
The exact caller-visible contract is undocumented. What the code proves is only the register usage pattern above.
Pseudo-code (for an emulator)¶
See 015B-Undocumented.pseudo.c - a pseudo-C model of the
F1615 handler for emulator authors. The control flow and the skip / no-skip fork are
byte-verified; the semantics of the three shared workers and the runtime JMP I -31 exit are
inferred / unresolved, not byte-proven.
Every instruction in the .pseudo.c is translated against the canonical
ND100-INSTRUCTION-SEMANTICS.md
(SKP IF DA EQL ST compares the single registers A and T - "DA"/"ST" are dst-A/src-T, not a
D:A/S:T pair; skip-on-condition skips the next word, do not invert; RADD CLD SA DB = B = A).
Honest caveats¶
What is byte-proven: GOTAB[15B] = 120501B (raw bytes a1 41 at file offset 0xe550 of
SINTRAN-DATA_commoncode.bin, i.e. word 071233B + 015), matching a live-DAP read of the running
L system - this is a DIRECT dispatch, not MFELL/000000/fall-through. The earlier
NPL-based "GOTAB[15B]=MFELL, handler NOT LOCATED" conclusion is corrected. The F1615 stub at
120501B is coherent real code (not zeros/data), and the three shared workers it reaches
(116234B, 116665B, 116036B) plus the data word (061157B) are non-zero, statically
followable, coherent S3RPIT code in the same 025-S3IRPIT overlay.
What is NOT proven:
1. Purpose. MON 15B is undocumented. Whether it is a live call or a dormant TSS carryover
cannot be decided from the bytes.
2. The JMP I -31 skip-path exit. Pointer word @120461B reads 000000B in the static
image - a literal indirect jump to address 0 is nonsensical, so this word is almost certainly
patched at runtime (self-modified S3RPIT dispatch). It cannot be resolved from the static
image; a live trace is required.
3. Worker extents. 116234B / 116665B / 116036B are shared workers entered by many stubs;
they have no bounding symbol and multiple return paths, so their full extent is UNVERIFIED.
The .ASM lists worker B (116234B) from entry through its first two return sites for
orientation only.
An earlier draft (DISPATCH.md) tabulated 120502 JMP 11 -> 120514B and a few other targets that
disagreed with the disassembler; the byte-honest nd100-dis output (used here and in the .ASM)
gives JMP 11 -> 120513B. The listing in this folder is the reconciled, byte-true one.
Method: ../../../../../EXTRACTING-RESIDENT-CODE.md §7.6/7.7/8 · dispatch reality: ../../TASK-05-mismatches.md · master map: ../../MON-CALL-INDEX.md.