MON 327B (octal) - FileSystemFunction (GTYPR)¶
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[327B] = 006147B = MFFSC=111563Bin segment 006-S3FS, reached by the real dispatchMON 327B -> ENT14(072167B) -> GOTAB[327B]=MFELL(072114B) -> CALLP(032201B) -> MCTAB[327B]=MFFSC. 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=2254 count=2->93 73. Cross-ref ../317B-ExecuteCommand/README.md and SINTRAN/CARVING-HANDOFF.md sec 3a.
File-system information/maintenance "monster" call: a function code selects a
sub-operation that classifies a file/object descriptor against type and size
tables and returns packed status/flag/value words. The carved worker body is
GTYPR ("Get TYP-RING") in segment 006-S3FS.
Status: dispatch word byte-proven (GOTAB[327B] = 112503B, non-zero, not a
fall-through); the 112503B -> worker hop is UNVERIFIED (banked-overlay
ambiguity); the carved GTYPR body is real SINTRAN L bytes but is
MISATTRIBUTED - not statically reachable from 112503B. See
Honest caveats. All addresses/values are octal.
- Full disassembly:
327B-FileSystemFunction.ASM- the actual code, both regions (dispatch target + GTYPR worker). - Bytes live once in the canonical segment layer:
../../segments-ref/.
Dispatch path¶
flowchart LR
A["User program<br/>MON 327B"] --> B["ENT14 level-14<br/>T = MON number"]
B --> C["GOTAB[327B] = 112503B<br/>(byte-proven, non-zero)"]
C --> D["dispatch target<br/>025-S3IRPIT :112503B<br/>(overlay UNVERIFIED)"]
D -.uncarved CALLPROC.-> E["GTYPR worker body<br/>006-S3FS :113312B"]
E --> F["type/size classify<br/>-> B-frame result words"]
class A blue
class B,C,D teal
class E,F 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 (D ⇢ E) is the resident CALLPROC/segment switch - it is not
present in any carved segment, so it is the one link that cannot be followed
statically. 112503B sits in an alternately-banked overlay window (both
025-S3IRPIT and 006-S3FS cover it with different bytes), so which overlay is
mapped at MON-327 time is a runtime paging decision, not in the static bytes.
Code location (dispatch path)¶
Byte offset = (addr − loadbase) in octal words × 2 (decimal). Verdicts follow
the byte-level DISPATCH analysis, which wins over any older prose.
| Role | Segment (full disasm) | Addr range (octal) | Byte offset | Symbol | Verdict |
|---|---|---|---|---|---|
| GOTAB[327] dispatch word | commoncode.asm · .hex | 071562B (1 word) |
59108 | GOTAB+327 = 112503B |
VERIFIED |
| Level-14 dispatch target | 025-S3IRPIT.asm · .hex | 112503B–112532B |
49798 | DIA9 (SYMBOL-2-LIST) |
UNVERIFIED (banked overlay) |
| resident CALLPROC bridge | — (uncarved) | — | — | CALLPROC |
UNVERIFIED |
| GTYPR worker body | 006-S3FS.asm · .hex | 113312B–114035B |
54676 | GTYPR (FILSYS-SYMBOLS) |
real bytes; link MISATTRIBUTED |
071562B = 071233B (GOTAB base) + 327B.
Verify by hand (dispatch word): grep '^59108' on the raw byte, or read it
straight from commoncode:
dd if=../../../resident/SINTRAN-DATA_commoncode.bin bs=1 skip=59108 count=2 2>/dev/null | od -An -tx1
# -> 95 43 (big-endian word 0x9543 = 112503 octal = GOTAB[327])
112503B = DIA9):
grep -n 'DIA9' ../../segments-ref/025-S3IRPIT/025-S3IRPIT.symbols.txt
dd if=../../../segments/025-S3IRPIT.bin bs=1 skip=49798 count=8 2>/dev/null | od -An -tx1
# -> 48 11 d1 01 d0 43 5a 0d (big-endian words 044021 150401 150103 055015 = DIA9)
113312B):
grep -n 'GTYPR' ../../segments-ref/006-S3FS/006-S3FS.symbols.txt
dd if=../../../segments/006-S3FS.bin bs=1 skip=54676 count=8 2>/dev/null | od -An -tx1
# -> 22 7f cc 65 cc 59 f0 37 (big-endian word 021177 = STD I 177, the GTYPR entry)
Instruction walkthrough¶
Full listing: 327B-FileSystemFunction.ASM. The
functional body is the GTYPR worker (region B); region A is the byte-verified
dispatch target 112503B in 025-S3IRPIT (an overlay-ambiguous window - see
caveats). Pointer WORDS embedded in region B (113511-113524, 113705-113716,
114020-114034) are data that the disassembler linearly decoded as
pseudo-instructions, not executable code.
Entry prologue (113312-113316) - STD I 177 saves caller D through a pointer
word; SAB 67 establishes the local B-frame; JPL I 174 (ptr @113512 =
003752B) calls a resident file-system worker.
Function-code range check (113317-113331) - LDT 172 loads a limit; A is
compared (SKP IF DA GRE ST), adjusted (AAT 100), and normalised (SUB 165)
into B+63; JPL I 164 (ptr @113515 = 010376B) calls a resident worker.
Descriptor scan + type/size classification (113347-113525) - reads a
multi-word descriptor via X (LDA ,X 0/1/3/6/7/11/22/23/44/45), tests flags
with BSKP ZRO/ONE n DA, and walks a stride-2 table (LDX ,B 60 / AAX 2 / MIN
,B 57 / JMP 113360, counter in B+57). It builds a value into B+61, a
function selector (1/2/3) into B+62, and a result into B+63. Error/short
paths jump indirect to the error-return entry 114016B.
Type-value membership test (113576-113640) - a straight-line SAT n / SKP IF
DA UEQ ST chain over the whitelist {3,20,21,25,32,33,34,40,41} (octal) against
B+61. A match sets SAX 1 and jumps to result assembly (113765); no match
falls to the size ladder.
Size/threshold classification (113717-113764) - a descending ladder
(LDT 100/76/74/72/70/66/64/62/60/56/54/52; SKP IF DA GRE ST) maps B+61 (a
size/count) into a ring/category bucket - consistent with the GTYPR = Get
TYP-RING name.
Result assembly and exit (113765-114017, 114035) - sets a status bit
(LDA ,B 65 / BSET ONE 10 DA / STA ,B 65), then publishes B+64 -> B+3 (flags),
B+65 -> B+0 (status), B+63 -> B+2 (value). The normal return executes
MIN ,B 4 at 114013 (bumping the caller's skip/return-index field) and leaves
via JMP I 20 (ptr @114035 = 003776B). The error return is entered at
114016 (STA ,B 2; JMP -3 -> 114014), joining the exit but SKIPPING the
MIN ,B 4 - so an error does NOT bump the skip field.
Resident pointer targets (all octal, outside the carved window, unresolved to
names): 003752, 010376, 020274, 055566, 056307, 071413, 003776.
Parameter / register contract¶
| Item | Dir | Verdict | Notes |
|---|---|---|---|
A (function code) |
in | VERIFIED (bytes) | Range-checked at entry (LDT 172, AAT 100, SUB 165) and used as an index/selector. |
X |
in | VERIFIED (bytes) | Points to a multi-word file/object descriptor; routine reads ,X 0/1/3/6/7/11/22/23/44/45. |
B+0 |
out | VERIFIED (bytes) | Status word (B+65 copied here at 114010). |
B+2 |
out | VERIFIED (bytes) | Value word (B+63 at 114012; error path stores A here at 114016). |
B+3 |
out | VERIFIED (bytes) | Flags word (B+64 copied here at 114006). |
B+4 |
out | VERIFIED (bytes) | Skip/return-index field bumped (MIN ,B 4) on the normal path only. |
| normal vs error return | out | VERIFIED (bytes) | Normal = MIN ,B 4 executed; error = entered at 114016, MIN ,B 4 skipped. |
T = per-function selector |
in | inferred | NPL claims T selects func 1/2/3/4; here the selector lands in A, not obviously T. |
A = open-file/device no. |
in | inferred | NPL/README claim; A is used but its caller meaning is not provable from these bytes. |
D = TYPRING bits out |
out | inferred | NPL claim; results here land in the B-frame slots, not visibly in D. |
The caller-visible register convention lives in the caller-side MON 327 wrapper
and the uncarved CALLPROC frame, so the precise T/A/X assignment is inferred,
not byte-proven in this window.
Pseudo-code (for an emulator)¶
See 327B-FileSystemFunction.pseudo.c - a
pseudo-C model of the GTYPR worker for emulator authors. Control flow, the
type/size classification, and the normal-vs-error return split are byte-verified;
the descriptor-field and caller-register semantics are inferred from the call
structure. Every instruction is translated per the canonical
ND-100 Instruction Semantics reference.
Honest caveats¶
What is byte-proven: GOTAB[327B] = 112503B (level-14 dispatch word, read
straight from commoncode.bin, non-zero - so 327 is NOT a fall-through). The
GTYPR worker bytes at 113312B..114035B are real SINTRAN L bytes and are
control-flow closed: every direct branch lands inside the window, and the routine
is a type/size classifier that reads an X-descriptor and returns packed
status/flag/value words in a B-frame with a normal-vs-error return split.
What is NOT proven (single clear story): the link from the dispatch target
112503B to the GTYPR worker 113312B.
- 112503B ≠ 113312B. The dispatch word points at 112503B, not at GTYPR.
- 112503B lies in a banked-overlay window covered by BOTH 025-S3IRPIT (where
the symbol table calls it DIA9, a device-driver-style name - almost certainly
an overlay-mismatch name, since a file-system call would run under the
file-system PIT, not the device PIT) and 006-S3FS (different bytes). Which
overlay is mapped at MON-327 runtime is a paging-context decision, not in the
static bytes - so the name DIA9 is not trustworthy and the hop is UNVERIFIED.
- A scan of 006-S3FS for any pointer word equal to 113312B in 112000..113312
returns ZERO hits; the 025-S3IRPIT code at 112503B makes one direct
in-segment jump (JMP -44 -> 112447) and never references 113312B. So GTYPR
is NOT statically reachable from 112503B - hence MISATTRIBUTED.
- The symbols FSMTY and MFELL used in earlier folklore do not exist in any
L07 symbol table; do not treat them as L facts. (Note also a symbol-table
conflict: FILSYS-SYMBOLS says GTYPR = 113312, while N500-SYMBOLS says
GTYPR = 107550 - even the worker's own address is revision-dependent.)
Confirming the real path needs a live trace: break at the ENT14 dispatch for MON
327, confirm P lands at 112503B, read the PIT/paging registers to identify the
mapped overlay, then single-step the first JMP I/JPL I that leaves the overlay
and confirm whether control reaches GTYPR.
Method: ../../../../../EXTRACTING-RESIDENT-CODE.md · dispatch reality: ../../TASK-05-mismatches.md · master map: ../../MON-CALL-INDEX.md.