Skip to content

MON 432B (octal) - SIBASFunction (SIBFU)

"Various SIBAS functions" (manual section 2.14, short name SIBFU) - a system-program monitor call into the SIBAS database interface. The manual lists it name-only: no parameter block, return values, or caller convention are documented. This is an ND-100 monitor call.

Status: partial. GOTAB dispatch head byte-proven (GOTAB[432B] = 056524B); that value is an address in 025-S3IRPIT (load 32000B, the overlay mapped for level-14 dispatch), where it resolves to DT83W = 56524B, a compact function dispatcher (real SINTRAN L bytes: it loads a selector into X, calls sub-routines through a pointer table, and checks results against -1). Whether DT83W is the true semantic "various SIBAS functions" worker - or a dispatch-table slot from which the real SIBAS worker is reached across the uncarved CALLPROC - is UNVERIFIED; the symbol name does not confirm SIBAS (see Honest caveats). All addresses/values are octal.

  • Full disassembly: 432B-SIBASFunction.ASM - the DT83W dispatcher (the byte-proven GOTAB[432] target) + its shared sibling tail / link cells.
  • Bytes live once in the canonical segment layer: ../../segments-ref/.

Dispatch path

flowchart LR
    A["User program<br/>MON 432B"] --> B["ENT14 level-14<br/>T = MON number"]
    B --> C["GOTAB[432B] = 056524B<br/>(byte-proven)"]
    C --> D["DT83W dispatcher<br/>025-S3IRPIT :56524B (real code)"]
    D --> E["sub-routines via pointer table<br/>(link cells 56550-56562)"]
    D -.uncarved CALLPROC.-> F["semantic SIBAS worker<br/>(UNVERIFIED - name not proven)"]
    class A blue
    class B,C teal
    class D teal
    class E green
    class 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 solid edge (C -> D -> E) is byte-proven: GOTAB[432] = 056524B = DT83W, which loads the selector into X and calls sub-routines indirectly through link cells in its 56550-56562 tail. The dashed hop (D ⇢ F) covers the possibility that DT83W is a dispatch-table slot and the true semantic SIBAS worker is reached across the resident CALLPROC - that path is not present in any carved segment, so it cannot be followed statically, and the DT83W-is-SIBAS identity is not name-proven.


Code location (dispatch path)

Every row is a real region you can open. Byte offset = (addr - loadbase) in octal words x 2; for 025-S3IRPIT (load base 32000B) that is (addr - 32000B) octal words x 2 (decimal); for commoncode (load base 0) it is octal-addr x 2.

Role Segment (full disasm) Addr range (octal) Byte offset Symbol Verdict
GOTAB[432] dispatch word commoncode.asm · .hex 071665B (1 word) 59242 GOTAB+432 = 056524B VERIFIED (stored word 5d 54)
DT83W dispatcher (GOTAB target) 025-S3IRPIT.asm · .hex 56524B-56536B (code) + 56537B-56563B (tail/link) 21160 DT83W real bytes = CODE; SIBAS identity UNVERIFIED
resident CALLPROC bridge - (uncarved) - - CALLPROC UNVERIFIED
same address in commoncode commoncode.asm · .hex 56524B (1 word) 47784 (DT83W alias) = 124025 JMP 25 not the dispatch overlay - the 025-S3IRPIT overlay is authoritative

Verify by hand: the GOTAB slot: grep '^71665 ' ../../segments-ref/SINTRAN-DATA_commoncode/SINTRAN-DATA_commoncode.hex -> 71665 056524 135 124 59242; then dd if=../../../resident/SINTRAN-DATA_commoncode.bin bs=1 skip=59242 count=2 2>/dev/null | od -An -tx1 -> 5d 54 (the stored word = octal 056524). For the DT83W dispatcher head: grep '^56524 ' ../../segments-ref/025-S3IRPIT/025-S3IRPIT.hex -> 56524 146157 314 157 21160; then dd if=../../../segments/025-S3IRPIT.bin bs=1 skip=21160 count=12 2>/dev/null | od -An -tx1 -> cc 6f ba 18 ba 1b f2 ff c4 35 a8 06 (= octal 146157 135030 135033 171377 142065 124006 = RADD CLD SA DX / JPL I 30 / JPL I 33 / SAT -1 / SKP IF DA UEQ ST / JMP 6 - real dispatcher code). At the same address in commoncode (dd ... skip=47784 count=2 -> a8 15 = octal 124025, a lone JMP 25), so the 025-S3IRPIT overlay is the real-code region for this vector. prove-mon.py 432 reports the same GOTAB[432]=056524 -> DT83W.


Instruction walkthrough

Full listing: 432B-SIBASFunction.ASM. One region.

DT83W dispatcher (56524-56536) is the level-14 code GOTAB[432] points at. It loads the caller's function selector into X (56524 RADD CLD SA DX, X := A), then runs sub-routine calls through a pointer table:

56524  146157  RADD CLD SA DX     ; X := A (function selector)
56525  135030  JPL I 30           ; call *(56555) = 050710
56526  135033  JPL I 33           ; call *(56561) = 063743
56527  171377  SAT -1             ; T := -1 (error sentinel)
56530  142065  SKP IF DA UEQ ST   ; skip if A != -1
56531  124006  JMP 6              ; -> 56537 (result == -1: error path)
56532  135016  JPL I 16           ; call *(56550) = 063661
56535  125025  JMP I 25           ; -> *(56562) = 057177 (dispatch onward)

Each call is followed by a SAT -1 / SKP IF DA UEQ ST result check (-1 = error). DT84R=56537B is a sibling entry in the same dispatch-table block; DT83W's error path (56531 JMP 6) and its 56536 JMP 3 fall into that shared tail (56537-56543), which clears two caller status words (STZ ,B 25 / STZ ,B 26) and finishes through more JPL I / JMP I link-cell calls. Words 56544-56563 are pointer/constant cells (data), shared by the DT83W/DT84R/DT84W/SCGLB/ SCGLN entries; nd100-dis renders them as bogus instructions. Their contents (050710, 063743, 063661, 057177, 050661, 063775, 057161) are the real sub-worker addresses.


Parameter / register contract

Manual-side names/types are from 432B_SIBASFunction.yaml - which lists this call name-only (no documented parameters).

Reg / field Dir Meaning Verdict
A (selector) in function selector, copied to X at entry (56524 RADD CLD SA DX) VERIFIED as a copy X := A; its "function selector" meaning is inferred
X (index) internal selector used to reach the sub-routine table VERIFIED (bytes)
result -1 internal error sentinel checked after each sub-call (SAT -1 / SKP IF DA UEQ ST) VERIFIED (bytes); its error meaning inferred
,B 25 / ,B 26 out two caller status words cleared on the shared tail (STZ ,B 25/26) VERIFIED (bytes); field meaning inferred
parameter block in none documented in the manual UNVERIFIED (manual name-only)

The user-visible register convention lives in the caller-side MON 432 wrapper and (if DT83W is a dispatch slot) the uncarved CALLPROC frame, so the precise A/X/T assignment is inferred, not byte-proven here. The manual documents no parameters at all.


Pseudo-code (for an emulator)

See 432B-SIBASFunction.pseudo.c - a pseudo-C model of the DT83W dispatcher for emulator authors. The selector copy, the indirect sub-routine calls, and the -1 result checks are byte-verified; the SIBAS meaning of each sub-routine and the parameter contract are not (the manual is name-only). Every ND-100 instruction in the model is translated per the canonical ND100-INSTRUCTION-SEMANTICS.md (RADD CLD SA DX = X := A; SAT -1 = T := -1; SKP IF DA UEQ ST = skip if A != T; JPL I disp / JMP I disp = call/jump through the link cell at P+disp).


Honest caveats

What is byte-proven: GOTAB[432B] = 056524B (level-14 dispatch; stored word 5d 54). In the 025-S3IRPIT overlay (mapped for level-14 dispatch) 056524B is DT83W, real code - its head 146157 135030 135033 171377 142065 124006 decodes as a clean function dispatcher (selector into X, JPL I sub-calls through link cells, -1 error checks). At the same virtual address in resident commoncode the bytes are only a lone 124025 JMP 25, so the 025-S3IRPIT overlay is the real-code region for this vector.

What is NOT proven: that DT83W is the semantic "various SIBAS functions" worker. The symbol name DT83W (one of a regular DT80R/DT80W.../DT85R dispatch-table series) does not say SIBAS; the manual (section 2.14) lists MON 432 name-only, so its parameter block and behaviour are undocumented. Two readings are consistent with the bytes: (1) DT83W is the SIBAS-function dispatcher (its shape - selector + sub-routine pointer table + -1 error checks - fits "various SIBAS functions"); or (2) DT83W is a dispatch-table slot and the true SIBAS worker is reached from it across the resident CALLPROC in an uncarved overlay. Neither can be settled from these bytes - hence the SIBAS identity is UNVERIFIED, and the sub-worker pointers (050710, 063743, 063661, ...) are link-cell data whose bodies are not resolved here.

Confirming it needs a live trace: issue a real MON 432, capture the first PC after the trap (expect 056524B = DT83W), single-step the sub-routine calls, and identify the pointer-table workers.

Method: ../../../../../EXTRACTING-RESIDENT-CODE.md · dispatch reality: ../../TASK-05-mismatches.md · master map: ../../MON-CALL-INDEX.md.