MON 436B (octal) - SetND500Param (5PASET)¶
Sets the five per-background-user parameters that describe an ND-500 program (user / directory index, terminal device, error number, and two user-defined words); the companion MON 437B GetND500Param reads them back when a program terminates. It is an ND-500 monitor call (manual: ND-500 only, not callable from the ND-100 side).
Status: the S3SM5 numeric vector slot for 436B is byte-proven empty (slot
0x029C = 0x0000, inside the 422B-440B zero run), so no handler code
exists in the carved 030-S3SM5 segment; the ND-100 GOTAB[436] read is a
coincidental hit into the device-table (DT85W), not a handler; and the actual
servicing point is NOT LOCATED / UNVERIFIED. All addresses/values are octal
unless a 0x prefix or (dec) marks them hex/decimal.
- No code body: this call has no worker in any carved segment - there is no
.ASMand no.pseudo.chere. The table below documents the absence. - Bytes live once in the canonical segment layer:
../../segments-ref/(segment030-S3SM5, load base40000B).
Dispatch path¶
flowchart LR
A["ND-500 program<br/>CALLG SetND500Param,1,Buffer<br/>(37B9 + 436B)"] --> B["ND-500 monitor entry<br/>MCNO = 436B"]
B --> C["S3SM5 0x60 vector table<br/>slot 0x029C = word 40516B"]
C -.slot = 0x0000, no handler.-> D["serviced elsewhere<br/>(ND-100 back-end, UNCONFIRMED)"]
X["ND-100 GOTAB[436]<br/>= 056600B = DT85W (device table)"] -.MISATTRIBUTED<br/>device-table data, not code.-> B
class A blue
class B,C teal
class D green
class X blue
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 (C -> D) is where a real call would jump to its handler word; for
436B that word is 0x0000, so no jump target exists inside 030-S3SM5. The
X -> B hop marks the ND-100 GOTAB[436] read as a red herring - 056600B is
DT85W, one entry of the regular device-table series (DT01..DT99, 11-word
stride), not a handler. Where the call is actually serviced is not carved here (see
Honest caveats).
Code location (dispatch path)¶
030-S3SM5 holds a numeric MON-dispatch vector table based at byte offset 0x60.
The slot for MON number N is at byte 0x60 + 2*decimal(N). Byte offset ->
segment word address = load base 40000B + (offset / 2) words.
| Role | Segment (full disasm) | Addr / slot | Byte offset (dec) | Symbol | Verdict |
|---|---|---|---|---|---|
| GOTAB[436] read (does NOT apply) | commoncode.asm · .hex | 071671B (=071233B+436B) |
59250 | reads 056600B = DT85W (device table) |
MISATTRIBUTED - coincidental read into device-table data, not a handler |
ND-500 monitor entry (numeric dispatch, MCNO=436B) |
- (uncarved ND-500 resident) | n/a | n/a | ND-500 MON entry | UNVERIFIED |
S3SM5 0x60 vector slot for 436B |
030-S3SM5.asm · .hex | word 40516B (slot 0x029C) |
668 | (empty) | VERIFIED empty (0x0000) |
| Worker body | none in 030-S3SM5 |
n/a | n/a | expected ND-100 back-end (not located) | UNVERIFIED |
Slot byte offset = 0x60 + 2*decimal(436B) = 96 + 2*286 = 668 (dec) = 0x029C.
Verify by hand (empty S3SM5 slot): grep '^668 ' ../../segments-ref/030-S3SM5/030-S3SM5.hex
-> 668 000 (and 669 000); then
dd if=../../../segments/030-S3SM5.bin bs=1 skip=668 count=2 | od -An -tx1 -> 00 00.
The whole 422B-440B slot run reads 0x0000, while 410B-421B and 446B
hold non-zero handler words - so the empty slot is a genuine "no S3SM5 handler".
Verify by hand (GOTAB[436] is device-table data):
grep '^71671 ' ../../segments-ref/SINTRAN-DATA_commoncode/SINTRAN-DATA_commoncode.hex
# -> 71671 056600 135 200 59250 (value 056600B = DT85W)
grep -oE 'DT8[0-9][RW]=[0-7]+' ../../../../../../../SINTRAN/NPL-SOURCE/SYMBOLS/L07/SYMBOL-2-LIST.SYMB.TXT | sort -u
# -> DT84W=056552 DT85R=056565 DT85W=056600 DT86R=056613 ... (11-word stride device table)
Instruction walkthrough¶
There are no instructions to walk - the vector slot is 0x0000 (data, not a
jump target), so no worker body was carved and there is no .ASM. The ND-100
GOTAB[436] value (DT85W) is a device-table datafield, not code, so it is not
walked either. For a populated neighbour the ND-500 monitor would index the
0x60 table and transfer to the 16-bit handler word found there
(e.g. 410B -> 0xBAE1, 446B -> 0xC1F0); slots 422B-440B are all 0x0000.
Parameter / register contract¶
From 436B_SetND500Param.yaml
and the manual (ND-860228.2 EN, p.451); not byte-proven here because no handler
was located.
| Field | Dir | Meaning | Verdict |
|---|---|---|---|
| call form | in | ND-500 CALLG SetND500Param, 1, Buffer (37B9 + 436B) |
manual (inferred) |
Buffer |
in | INTEGER2[5]: [0] user/dir index, [1] terminal device number, [2] error number (-1 if ESCAPE), [3][4] user parameters |
manual (inferred) |
| availability | - | ND-500 only; not callable from the ND-100 side (see SetUserParam for the ND-100 equivalent) | manual (inferred) |
| handler slot | - | S3SM5 vector 0x029C = 0x0000 (no ND-500 handler in this segment) |
VERIFIED (bytes) |
Honest caveats¶
What is byte-proven: the S3SM5 0x60 vector slot for MON 436B, at byte offset
668 (segment word 40516B, slot 0x029C), reads 0x0000 in the real
SINTRAN L bytes of 030-S3SM5.bin. The whole 422B-440B slot run is 0x0000,
while 410B-421B hold non-zero handler words - so the empty slot is a genuine
"no S3SM5 handler", not a carve artefact. Separately, the ND-100 GOTAB[436] read
(056600B = DT85W) is a device-table datafield, proven by its regular
DT84W/DT85R/DT85W/DT86R neighbours (11-word stride) - the same coincidental
device-table hit seen for the ND-500 call 410B (DT74W), not a handler.
What is NOT proven: where MON 436B is actually serviced. A 0x0000 S3SM5 slot
means "not routed to this segment"; the manual marks the call ND-500-only and points
the ND-100 side to SetUserParam, so the expected back-end is an ND-100-side
companion, but that handler has not been located or carved. Confirming the real
dispatch needs a live trace of an ND-500 SetND500Param call, or locating the
ND-100 back-end that consumes it. Until then this folder correctly holds no code.
This reconciles into one story: the S3SM5 slot is verified empty and the GOTAB
read is a verified misattribution, while the worker is unverified/absent -
consistent, not contradictory.
Method: ../../../../../EXTRACTING-RESIDENT-CODE.md · dispatch reality: ../../TASK-05-mismatches.md · master map: ../../MON-CALL-INDEX.md.