MON 320B (octal) — UELogin (UELOG)¶
Logs a user into a User Environment (manual ND-860228.2 EN, section 2.14, name-only).
ND-100 call. This folder had to reconcile four conflicting UELOG addresses carried across
SINTRAN revisions and symbol tables — the honest result is below.
Status: GOTAB[320B]=112616B is byte-proven, but it resolves to DSI6 — a
device/interrupt routine, not login code (MISATTRIBUTED). The routine actually named
UELOG is real SINTRAN L bytes at 050726B in resident commoncode (version-matched L07
SYMBOL-1-LIST), inside the UE-* cluster. The MON 320 → UELOG link crosses the uncarved
CALLPROC bridge and is UNVERIFIED. All addresses/values are octal.
- Full disassembly:
320B-UELogin.ASM— both regions (GOTAB target stubDSI6+ theUELOGworker body). - Bytes live once in the canonical segment layer:
../../segments-ref/.
Dispatch path¶
flowchart LR
A["User / system program<br/>MON 320B"] --> B["ENT14 level-14<br/>T = MON number"]
B --> C["GOTAB[320B] = 112616B<br/>(byte-proven)"]
C --> D["DSI6 device/interrupt stub<br/>025-S3IRPIT :112616B<br/>MISATTRIBUTED (not login)"]
C -.uncarved CALLPROC / segment switch.-> E["UELOG worker body<br/>commoncode :050726B<br/>real SINTRAN L bytes"]
class A blue
class B,C teal
class D orange
class E 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
classDef orange fill:#FFF3E0,stroke:#E65100,color:#E65100
The dashed hop is the resident CALLPROC/segment switch — not present in any carved segment.
GOTAB[320] byte-resolves to DSI6 (device code, orange = misattributed), while the real
UELOG worker (green) is located by its version-matched symbol name, not by a followed pointer.
Code location (dispatch path)¶
Byte offset = (addr − loadbase) in octal words × 2 (decimal).
| Role | Segment (full disasm) | Addr range (octal) | Byte offset | Symbol | Verdict |
|---|---|---|---|---|---|
| GOTAB[320] dispatch word | commoncode.asm · .hex | 071553B (1 word) |
59094 | GOTAB+320 = 112616B |
VERIFIED |
| GOTAB[320] target stub | 025-S3IRPIT.asm · .hex | 112616B–112644B |
49948 | DSI6 |
real bytes; MISATTRIBUTED (device code, not login) |
| resident CALLPROC bridge | — (uncarved) | — | — | CALLPROC |
UNVERIFIED |
| UELOG worker body | commoncode.asm · .hex | 050726B–051025B |
41900 | UELOG |
real bytes; MON 320 → UELOG link UNVERIFIED |
Verify by hand:
grep '^71553 ' ../../segments-ref/SINTRAN-DATA_commoncode/SINTRAN-DATA_commoncode.hex → the
GOTAB[320] word 112616; then
dd if=../../../segments/025-S3IRPIT.bin bs=1 skip=49948 count=6 2>/dev/null | od -An -tx1 →
d0 43 5a 22 0c 0f (= octal 150103 055042 006017, the DSI6 entry TRR PCR / LDX I 42 / STA ,X 17);
and dd if=../../../resident/SINTRAN-DATA_commoncode.bin bs=1 skip=41900 count=6 2>/dev/null | od -An -tx1 →
f7 08 f7 08 41 ef (= octal 173410 173410 040757, the UELOG entry AAX 10 / AAX 10 / MIN ,B -21).
Re-derive GOTAB[320] from the repo root with python3 scripts/prove-mon.py 320.
Instruction walkthrough¶
Full listing: 320B-UELogin.ASM. Two regions.
Region A — DSI6 @112616B (025-S3IRPIT), the GOTAB[320] target. 23 words, bounded by the
next symbol DSI7=112645B. Its content is device/interrupt-service code: 112616 TRR PCR (read
paging control), 112621 ION / 112632 ION / 112640 IOF (interrupt on/off), 112641 MCL PIE
(clear priority-interrupt enable), 112631/112635 JPL I into nearby resident helpers. This is
plainly not User-Environment login logic — it is what the 320 index happens to resolve to.
Region B — UELOG @050726B (resident commoncode), the worker body. 64 words, bounded by
MYGTL=051026B, sitting between UECOM=050701B and MYGTL inside the User-Environment cluster
(UECHE=050544B, UECOM=050701B, UELOG=050726B). A first table-scan pass
(050726–050747) steps 8-word entries (AAX 10), reads a pair (LDATX), sets a status bit
(BSET ONE 10 DA), stores back (STATX), and loops via JMP -40 → 050707 into the shared
UECOM tail. 050751–050776 is an embedded pointer/data block (data-before/among-code — the
disassembler renders it as instructions, but the bytes are the routine's data table, ending in
five zero words). A second code stretch (050777–051025) copies a caller word, loads a base
descriptor + limit, and loops applying an update to successive records until the magnitude test
051006 SKP IF DA MLST ST terminates it.
Parameter / register contract¶
The manual lists MON 320B name-only (section 2.14), so no user-visible register block is byte-proven. What is byte-proven is the code shape, not its argument meaning.
| Reg / field | Dir | Meaning | Verdict |
|---|---|---|---|
| entry point | in | UELOG=050726B (resident commoncode) is the named worker |
VERIFIED (bytes) |
scan cursor (X) |
internal | 8-word-stride entry cursor (AAX 10); BSET ONE 10 DA sets bit 1 (mask 02; printed 10 = bn<<3) per entry |
VERIFIED (bytes) |
D (double) |
in | caller word saved first in region B (050777 STD -2) |
inferred |
| base / limit | internal | descriptor + limit driving the 050777–051025 apply loop |
inferred |
| record fields | in/out | per-entry login fields (w[0] bit 010, rec[1] active flag) |
inferred |
| user-visible convention | in | A/X/T argument assignment | UNVERIFIED (in caller wrapper + uncarved CALLPROC) |
Full YAML contract: Developer/MON/calls/320B_UELogin.yaml (note: that YAML quotes the M06
address 056561 and calls the body absent — reconciled below).
Pseudo-code (for an emulator)¶
See 320B-UELogin.pseudo.c — a pseudo-C model of the UELOG worker.
The two loops and register moves are byte-verified; the record/field semantics are inferred from
the symbol name and neighbourhood (the manual is name-only), so treat the field meanings as
inferred, not confirmed.
Instruction semantics follow the canonical reference:
../../instruction-semantics/ND100-INSTRUCTION-SEMANTICS.md.
Note on BSET ONE 10 DA (050736/050742): the printed bit number is bn<<3, so 10 (octal)
means bit number 1 - the instruction sets bit 1 (mask 02), not 010.
Honest caveats — reconciling the four UELOG addresses¶
There are four addresses in play. Bytes are ground truth, and the carved binary is the L-VSX-500 (L07) revision — so the L07 tables are the ones that apply to it.
-
112616B=DSI6— L07SYMBOL-2-LIST. This is exactly whatGOTAB[320]byte-resolves to (word071553B=112616B, andprove-mon 320agrees). But the 23 words there are device/interrupt code (TRR PCR,ION/IOF,MCL PIE), not login logic. So the320index is MISATTRIBUTED — it lands in theDSI5/DSI6/DSI7device-service run in025-S3IRPIT, the same family the neighbouring 304B/313B calls resolve into. It is not the UE-login body. -
050726B=UELOG— L07SYMBOL-1-LIST, resident commoncode. This is the answer. Real non-zero SINTRAN L bytes live here, the routine is namedUELOG, and it sits in the contiguousUE-*cluster (UECHE,UECOM,UELOG). This is the actual User-Environment login worker, located by version-matched symbol name — the same standard of evidence used for the other ND-100 worker bodies in this deliverable. -
126036B=UELOG— L07N500-SYMBOLS. This is the ND-500-sideUELOG(the address lives in the ND-500026-S3IMPIT/030-S3SM5space), a separate copy for the ND-500 processor. MON 320B is an ND-100 call, so this is a companion module, not the ND-100 body carved here. -
056561B=UELOG— M06SYMBOL-1-LIST. This is a different SINTRAN revision (M06, not the carved L binary). The320B_UELogin.yamlpulled this M06 address and concluded "the body is absent from the source tree" — that conclusion is a wrong-table artefact: in the version-matched L07 table the body is present at050726B. (For proof the tables differ: in L07, address056561is unrelated, and in L07SYMBOL-1-LISTthe routine at050726isUELOGwhereas in M06 the address050726is a different symbol,DVSTR.)
What is byte-proven: GOTAB[320]=112616B; that 112616B is DSI6 device code, not login;
and that real UELOG bytes exist at 050726B in commoncode (AAX 10 / AAX 10 / MIN ,B -21 …).
What is NOT proven: the MON 320 → UELOG transfer. GOTAB[320] points at DSI6, not at
UELOG, so nothing statically links the MON entry to 050726B; the true route runs through the
uncarved resident CALLPROC/segment switch. Confirming it needs a live trace (break at the MON
320 entry, single-step the segment switch, confirm P lands on UELOG=050726B). Until then the
worker body is identified by symbol name + real bytes, and the dispatch link stays UNVERIFIED.
This reconciles the four addresses into one story: the L07 SYMBOL-1-LIST UELOG=050726B is the
real ND-100 body; 126036B is its ND-500 companion; 112616B is a misattributed device-code
target of the 320 index; and 056561B belongs to the unrelated M06 revision.
Method: ../../../../../EXTRACTING-RESIDENT-CODE.md §9 · dispatch reality: ../../TASK-05-mismatches.md §G · master map: ../../MON-CALL-INDEX.md.