MON 233B (octal) - SetTemporaryFile (SETTF)¶
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[233B] = 006053B = STEFI=106052Bin segment 006-S3FS, reached by the real dispatchMON 233B -> ENT14(072167B) -> GOTAB[233B]=MFELL(072114B) -> CALLP(032201B) -> MCTAB[233B]=STEFI. 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=2134 count=2->8c 2a. Cross-ref ../317B-ExecuteCommand/README.md and SINTRAN/CARVING-HANDOFF.md sec 3a.
Defines a file to store information temporarily: the file can be read once, and
when it is closed its contents are deleted (the empty file still exists). SETTF is
a dedicated entry that presets the operation mode directly and jumps into the
shared directory-entry dispatcher (the same MDLFI body used by MON 54B
DeleteFile and MON 232B RenameFile).
Status: GOTAB dispatch head byte-proven as fall-through (GOTAB[233B] = 000000,
no per-call stub); the SETTF entry body is real SINTRAN L bytes; it presets mode 4
and dispatches to the tail worker MSTRM; the exact MON 233 -> worker link
crosses an uncarved kernel bridge (see Honest caveats). All
addresses/values are octal.
- Full disassembly:
233B-SetTemporaryFile.ASM- the actual code (the SETTF entry + shared MDLFI dispatcher body; there is no entry stub because the GOTAB slot is zero). - Bytes live once in the canonical segment layer:
../../segments-ref/.
Dispatch path¶
flowchart LR
A["User program<br/>MON 233B"] --> B["ENT14 level-14<br/>T = MON number"]
B --> C["GOTAB[233B] = 000000<br/>(byte-proven: fall-through)"]
C -.uncarved MFELL / CALLPROC.-> E["SETTF set-temporary entry<br/>006-S3FS :106043B"]
E --> F["mode 4 -> MSTRM tail worker<br/>006-S3FS :120233B"]
class A blue
class B,C blue
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 GOTAB slot is zero, so there is no per-call entry stub. The dashed hop
(C -> E) is the resident MFELL/CALLPROC fall-through second-level dispatch -
it is not present in any carved segment, so it is the one link that cannot be
followed statically.
Code location (dispatch path)¶
Every row is a real region you can open. Byte offset = (addr - loadbase) in octal words x 2.
| Role | Segment (full disasm) | Addr range (octal) | Byte offset | Symbol | Verdict |
|---|---|---|---|---|---|
| GOTAB[233] dispatch word | commoncode.asm - .hex | 071466B (1 word) |
58988 | GOTAB+233 = 000000 |
VERIFIED (fall-through) |
| resident MFELL/CALLPROC bridge | - (uncarved) | - | - | CALLPROC |
UNVERIFIED |
| SETTF entry body | 006-S3FS.asm - .hex | 106043B-106051B (7w) |
49222 | SETTF |
real bytes; link MISATTRIBUTED |
| shared MDLFI dispatcher body | 006-S3FS.asm - .hex | 106065B-106211B (joined at 106107) |
49258 | MDLFI |
real bytes (shared) |
| MSTRM tail worker | 006-S3FS.asm - .hex | 120233B (link cell 106210) |
- | MSTRM |
link-cell VERIFIED; meaning inferred |
Verify by hand: grep '^106043 ' ../../segments-ref/006-S3FS/006-S3FS.hex -> byte offset 49222;
then dd if=../../../segments/006-S3FS.bin bs=1 skip=49222 count=8 | od -An -tx1 -> 22 5b cc 65 cc 59 f0 55
(the stored words = octal 021133 146145 146131 170125 = STD I 133 / RADD CLD SL DA / RADD CLD SB DD / SAB 125, the SETTF entry).
The GOTAB slot itself:
dd if=../../../resident/SINTRAN-DATA_commoncode.bin bs=1 skip=58988 count=2 | od -An -tx1 -> 00 00 (= 000000, fall-through).
Instruction walkthrough¶
Full listing: 233B-SetTemporaryFile.ASM. There is no
F16xx/F17xx stub because GOTAB[233] = 0. Calls to shared file-system workers are
indirect (JPL I / JMP I) through the pointer table (link cells) at
106176-106211; nd100-dis renders those pointer words as bogus instructions
(STZ, MPY, FDV, ...) - they are data (link cells), not code.
SETTF entry (106043-106051) - 106043 STD I 133 stashes the caller's D;
106044-106045 build A = L, D = B (the RADD CLD COPY idiom); 106046 SAB 125
builds the frame B; 106047 JPL I 130 -> 003752 is the prologue worker.
106050 SAA 4 sets the operation mode to 4, and 106051 JMP -> 106107 joins the
shared MDLFI dispatcher directly at the mode-store, bypassing the SSK/SSM fold
(106065-106106) that the DeleteFile-family entries use.
Shared mode-store + directory lookup (106107-106115) - 106107 STA ,B 123
stores mode 4 at B+123; 106114 JPL I 66 -> 031075 locates the file's
directory entry; a failure returns via 106115 JMP 57 -> 106174 (store status +
return).
Mode dispatch (106116-106170) - the ladder tests B+123 against 1, then
0, 1, 2, 3 (SAT n / SKP IF DA EQL ST / JAF). Mode 4 matches none
of the 0..3 cases, so control falls through to the tail worker:
106167 JPL I 21 -> 106210 = MSTRM (120233).
Exit (106171-106211) - 106171 MIN ,B 4 bumps the status, 106172 SAA -125,
106173 JMP I 16 -> 106211 (= 003776, resident return). The error path
106174 STA ,B 2 stores the status into the caller's slot then falls to 106172.
106176-106211 are the link cells (003752, 031075, 120067 MODLF, 117352
MRENF, 120470 MSPER, 120236 MSTMP, 120233 MSTRM, 003776).
Parameter / register contract¶
Contract from Developer/MON/calls/233B_SetTemporaryFile.yaml.
| Reg / field | Dir | Meaning | Verdict |
|---|---|---|---|
| entry point | in | 106043B = SETTF; presets mode 4 and joins the shared MDLFI dispatcher at 106107 |
VERIFIED (bytes) |
B+123 |
internal | operation mode (SETTF => 4) |
VERIFIED (bytes) |
B+0 (X) |
in | directory-entry context passed to the lookup worker (106113 LDX ,B 0) |
VERIFIED (bytes); meaning inferred |
B+2 |
out | returned status word (STA ,B 2 at 106174) |
VERIFIED (bytes) |
FileName (user X) |
in | address of file-name string | inferred (manual/yaml) |
| skip / error | out | normal return skips; error return has error number in A | inferred (manual/yaml) |
The mode-4-to-MSTRM mapping is byte-proven at the link-cell level (106210 =
120233 = MSTRM); the meaning (set-temporary) is inferred from the symbol
name and the manual. The user-visible X = file-name convention lives in the
caller-side MON 233 wrapper and the uncarved MFELL/CALLPROC frame, so it is
inferred from the manual, not byte-proven here.
Pseudo-code (for an emulator)¶
See 233B-SetTemporaryFile.pseudo.c - a
pseudo-C model of the handler for emulator authors. Control flow (SETTF presets
mode 4, joins the shared dispatcher, falls through to the tail worker) is
byte-verified; the worker semantics and error-number meanings are inferred from the
FILSYS symbol table and the call structure. Every instruction is translated per the
canonical ND100-INSTRUCTION-SEMANTICS.md
(note the RADD CLD COPY idiom and SAA sign-extended argument load).
Honest caveats¶
What is byte-proven: GOTAB[233B] = 000000 (level-14 dispatch, a fall-through
with no per-call vector); the SETTF entry at 106043B in 006-S3FS is real code
(entry bytes 021133 146145 146131 170125 match the disassembly); SETTF sets
mode 4 (SAA 4) and jumps into the shared MDLFI dispatcher at 106107; and
mode 4 falls through the 0..3 ladder to the tail worker MSTRM = 120233
(link cell 106210).
What is NOT proven: the link from the zero GOTAB slot to the SETTF entry.
Because the vector is zero there is no stub to disassemble and no pointer to
dereference; dispatch drops into the resident MFELL/CALLPROC second-level path,
which lives in an uncarved overlay. So the MON 233 -> SETTF attribution rests
on the SETTF symbol name + the matching set-temporary behaviour, not a followed
pointer - hence MISATTRIBUTED in the strict sense. Confirming the link needs a
live trace: issue a real MON 233, single-step the level-14 fall-through into the
resident CALLPROC dispatch, and confirm P lands on SETTF = 106043.
Name ambiguity (honest): the FILSYS symbol table also carries STEFI
(106052B), a DeleteFile-family sibling entry (SSM=1/SSK=1 -> mode 3 -> MSTMP)
whose name equally reads "set temporary file". This folder documents the SETTF
entry (106043B) as specified for MON 233B; because GOTAB[233] = 0, neither
SETTF nor STEFI is reached through a followed pointer here, so which entry the
resident CALLPROC selects for MON 233 is not statically provable and both remain
candidates until a live trace resolves it.
The prologue link cell 003752, the lookup cell 031075, and the return cell
003776 match no FILSYS-SYMBOLS entry; their addresses suggest resident-monitor /
directory-scan routines outside the resolvable symbol set, and are not resolved here.
Method: ../../../../../EXTRACTING-RESIDENT-CODE.md - dispatch reality: ../../TASK-05-mismatches.md - master map: ../../MON-CALL-INDEX.md.