MON 075B (octal) — GetStartByte (REABT)¶
Returns, as an INTEGER4, the number of the next byte that would be accessed in an opened sequential mass-storage file ("read byte pointer"). The worker body reads the current byte position out of the open-file descriptor and stages it as two 16-bit words.
Status: dispatch head byte-proven (GOTAB[075B] = 121471B, non-zero → dispatched, not a
fall-through); worker body is real SINTRAN L bytes; the exact MON 075 → REABT worker link crosses
an uncarved kernel bridge (see Honest caveats). All addresses/values are
octal.
- Full disassembly:
075B-GetStartByte.ASM— the actual code, both regions (F1645 entry stub + REABT worker). - Bytes live once in the canonical segment layer:
../../segments-ref/.
Dispatch path¶
flowchart LR
A["User program<br/>MON 75B"] --> B["ENT14 level-14<br/>T = MON number"]
B --> C["GOTAB[75B] = 121471B<br/>(byte-proven)"]
C --> D["F1645 stub -> shared RPIT<br/>025-S3IRPIT :121471B / :121434B"]
D -.uncarved CALLPROC.-> E["REABT byte-ptr worker<br/>006-S3FS :104005B"]
E --> F["read byte position<br/>via JPL I workers"]
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 proc-table dispatch (selector 45 selected by
the F1645 stub) — 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 × 2.
| Role | Segment (full disasm) | Addr range (octal) | Byte offset | Symbol | Verdict |
|---|---|---|---|---|---|
| GOTAB[75] dispatch word | commoncode.asm · .hex | 071330B (1 word) |
58800 | GOTAB+75 = 121471B |
VERIFIED |
| F1645 entry stub (2 words → shared dispatch) | 025-S3IRPIT.asm · .hex | 121471B–121472B |
56946 | F1645 |
VERIFIED |
| shared RPIT-image dispatch (selector 45) | 025-S3IRPIT.asm · .hex | 121434B–121470B |
56888 | (RPIT image, no named entry) | bytes VERIFIED; semantic inferred |
| resident CALLPROC bridge | — (uncarved) | — | — | CALLPROC |
UNVERIFIED |
| REABT byte-pointer worker body | 006-S3FS.asm · .hex | 104005B–104203B |
47114 | REABT |
real bytes; link MISATTRIBUTED |
Verify by hand: grep '^71330 ' ../../segments-ref/SINTRAN-DATA_commoncode/SINTRAN-DATA_commoncode.hex
→ word 121471, byte offset 58800; then read the F1645 entry and the REABT entry word:
dd if=../../../segments/025-S3IRPIT.bin bs=1 skip=56946 count=2 | od -An -tx1 # 48 d7 = octal 044327 (F1645 LDA -51)
dd if=../../../segments/006-S3FS.bin bs=1 skip=47114 count=2 | od -An -tx1 # 22 0e = octal 021016 (REABT STD I 16)
Instruction walkthrough¶
Full listing: 075B-GetStartByte.ASM. Region A is the level-14 entry
(F1645 stub + shared RPIT dispatch); the functional body is the REABT worker (region B).
F1645 stub (121471–121472) — the byte-proven GOTAB target. 121471 LDA -51 loads the word at
121420B, which on disk is 000000, so A := 0; 121472 JMP -36 is a direct jump back to the
shared dispatch at 121434B.
Shared RPIT dispatch (121434–121470) — 121434 JAF 3 sees A = 0 (false) and branches to
121437 SAA 45, selecting selector 45 (byte-derived; "45 == the REABT proc number" is INFERRED).
The fan-out then goes through indirect pointer words (JPL I / JMP I via @121502=116374,
@121507=117107, @121504=116036, data @121501=061160) — every resolvable target stays inside
segment 025's own span, so the static chain dead-ends here; the cross to 006-S3FS is the runtime
CALLPROC hop.
REABT prologue (104005–104013) — 104005 STD I 16 stashes the caller double; 104011 JPL I 13
and 104013 JPL I 21 call resident FS workers (pointer words @104024 = 003752, @104034 = 072014)
to locate the open-file descriptor.
Validity flag + fork (104044–104054) — 104044 JPL I 53 (@104117 = 003752, worker reused),
then 104045 BSKP ONE SSK computes a boolean into local B+127 (SAA 1/STA vs STZ).
104053 LDA ,B 127 / 104054 JAF 63 forks: flag 0 → byte-pointer path at 104137; flag non-zero
→ error/return path via the indirect returns at 104132/104133.
Byte-pointer read-out (104137–104201) — 104141 JPL I 73 (@104234) looks up the record; two
masked tests (104151 BSKP ONE 160 DA, 104154 BSKP ONE 100 DA) select between two sub-paths that
each load fields off an indexed open-file record (LDX I 56, LDA ,X 3/7, STA ,X 24/25) — the
actual read-out of the current byte position. 104200 STT ,B 123 / 104201 STD ,B 125 stage the
INTEGER4 result as two 16-bit words. Precise field offsets are compiled detail; INFERRED.
Common exit (104202) — 104202 JPL I 42 (@104244) returns into the shared monitor-return path
(the skip-return to the caller is taken by that shared code, not by an instruction in this window).
Pointer/data islands (104023–104037, 104116–104131) — these words are address constants, not
executable instructions; the disassembler renders them as ROP NOOP / AND ,X / STZ I noise. Do not
read them as logic. They hold the targets of the indirect calls above (003752, 003776, 072014,
031075, 104362, 104351).
Parameter / register contract¶
| Reg / field | Dir | Meaning | Verdict |
|---|---|---|---|
D (double, 104005 STD I 16) |
in | caller parameter (file number / descriptor pointer) | inferred |
local B+127 |
internal | validity/open flag, computed 104045–104052 (SSK-gated) |
VERIFIED (bytes) |
local B+123 / B+125 |
out | INTEGER4 result staged as two 16-bit words (hi / lo) | VERIFIED staging (bytes); "= byte number" inferred |
flag fork 104054 |
internal | 0 → byte-pointer path 104137; ≠0 → error/return 104132 |
VERIFIED (bytes) |
| skip / error return | out | shared monitor-return via 104202 JPL I 42; error via 104132/104133 |
inferred (handled past window) |
Manual-level contract (from the manual, NOT re-derived from these bytes): input is the file number (INTEGER) of an opened sequential mass-storage file; output is the next byte number (INTEGER4). The code confirms an INTEGER4-sized result and two outcomes (success vs error), consistent with the manual, but does not let me name the exact input register or the error code from the window alone.
Pseudo-code (for an emulator)¶
See 075B-GetStartByte.pseudo.c — a pseudo-C model of the handler
for emulator authors. Control flow (the B+127 flag fork and the two result-staging paths) is
byte-verified; the file-system worker semantics (which field is the byte position) 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[075B] = 121471B (level-14 dispatch word on disk); the F1645 stub
at 121471B is real code — it loads A = 0 and direct-jumps to the shared RPIT dispatch at
121434B, which selects selector 45 (SAA 45); the REABT worker entry bytes at 104005B match
the disassembly and the FILSYS-SYMBOLS address REABT = 104005.
What is NOT proven: the link from the F1645 stub (in 025-S3IRPIT) to the REABT worker (in
006-S3FS). Every pointer the stub and shared dispatch dereference (061160, 116374, 117107,
116036) stays inside segment 025's span (32000..200000) and lands on more RPIT-image dispatch —
none crosses into the 104xxx file-system range. The stub→worker transfer is the resident
CALLPROC proc-table indexed by selector 45, which is runtime-populated and uncarved. So the
MON 075 → REABT attribution rests on the symbol name ("read byte pointer" = GetStartByte) + the
manual, not a followed pointer — hence MISATTRIBUTED in the strict sense.
This reconciles the two older notes: the folder's earlier README spoke of an MFELL → CALLPROC
narrative, but the byte-true GOTAB target symbol is F1645 (a compiler-generated local label), not
MFELL; the dispatch is real and non-zero, and F1645 is the ground-truth intermediate. Confirming
the REABT attribution needs a live trace: break at 121471B on a real MON 075, single-step through
the CALLPROC dispatch with selector 45 loaded, and confirm P lands on REABT = 104005.
Whether file 0 (the command buffer) is special-cased is UNCERTAIN — no static file-0 test is visible in this window, consistent with the manual restricting the call to sequential mass-storage files.
Method: ../../../../../EXTRACTING-RESIDENT-CODE.md · dispatch reality: ../../TASK-05-mismatches.md · master map: ../../MON-CALL-INDEX.md.