MON 60B / N500M - the 5IFUNC subfunction dispatch table (authoritative)¶
Source: SINTRAN/NPL-SOURCE/NPL/5P-P2-MON60.NPL - the NPL source of the
MON 60 worker itself. The INTEGER ARRAY 5IFUNC (NPL lines 1319-1335) is the 128-entry
(000B-177B) jump table; params[0] (the subfunction code) indexes it, and the entry is the
parameter-preparation routine to run before the common system-monitor call.
Grade: NPL (logic/names). Cross-verified three ways (see bottom). Individual handler bodies still
to be byte-confirmed against L07 050-S3I5PIT - but the structure is nailed.
How dispatch works (NPL 5P-P2-MON60.NPL:1294-1296, matches the L07 bytes at 030416B):
X := 5FUNCTION % params[0], the subfunction code (range-checked to 177B)
A := 5IFUNC(X) % entry point for this function's parameter prep (031310B)
A =: P % jump to it
FRUSMOVE/XFRUSMOVE) and does
GO FAR 5NOPAR to the common path, or is 5NOPAR (no prep needed - e.g. pure reads), or ILLFUNC
(illegal), or 0 (null slot).
The table (octal code -> 5IFUNC handler; user-facing name; notes)¶
| code | 5IFUNC handler | user-facing (doc/caller) | notes |
|---|---|---|---|
| 000-003 | 5NOPAR |
RRREG/WRREG/RPROG/RDATA | reads: no user->buf prep |
| 004 | IPMWRITE |
WPROG | logical program-mem write; copies <=4000B bytes |
| 005 | IDMWRITE |
WDATA | logical data-mem write |
| 006 | ISEGLOAD |
PLACE | load/place one segment (name + shared info) |
| 007 | IPLSWAPPER |
SWLOD (LOAD-SWAPPER) | place swapper; copies file name |
| 010 | 5NOPAR |
RRREG_BLOCK | |
| 011 | IWRGS |
WRREG_BLOCK | write registers block |
| 012 | 5NOPAR |
RUNN (start program) | |
| 013 | ICONNFI |
CNCFI (Connect File) | copies file name + type |
| 014-017 | 5NOPAR |
CLSFI/... | |
| 020-023 | 5NOPAR |
TIMUS/WHO/ERRFL/REACS | |
| 024 | IWCNT |
WRICS (Write Control Store) | copies <=2000B CS words |
| 025-032 | 5NOPAR |
MICST/DMEXAM/DMDEP/PMEXAM/PMDEP/ABSMR | |
| 033 | IDAMW |
ABSMW (physical data-mem write) | |
| 034-036 | 5NOPAR |
MSTOP/MSTCL/... | |
| 037 | ICSLOAD |
LDCS (LOAD-CONTROL-STORE) | copies CS file name. caller call site 006114 |
| 040-042 | 5NOPAR |
DEFM/RSTAT/... | |
| 041 | 5NOPAR |
RSTAT (STATUS) | caller call site 127566 |
| 043 | ISRES |
SPRES (reserve special use) | |
| 044 | ISREL |
SPREL (release special use) | |
| 045 | 5NOPAR |
DEFSW | |
| 046 | IDEFSWAP |
DEFSW (Define Swap File) | copies file name |
| 047 | IDELSWAP |
DELSW (Delete Swap File) | copies file name |
| 050-053 | 5NOPAR |
TESTF/RIFRG/G500P/T500P | |
| 054 | 5NOPAR |
STSWP (START-SWAPPER) | caller call site 010217 |
| 055 | ISPLACE |
SPLAC (Start-Place) | clears 55REP bit |
| 056 | IEPLACE |
EPLAC (End-Place) | |
| 057 | 5NOPAR |
MPVER | |
| 060 | 5NOPAR |
LIMEM | |
| 061 | IMRESSPES |
RESER (reserve mem for test-monitor) | |
| 062 | IDEFHIST |
HIDEF (Define Histogram) | |
| 063 | ISTAHIST |
HISTA (Start Histogram) | |
| 064 | ISTOHIAT |
HISTP (Stop Histogram) | |
| 065 | IREAHIST |
HISTN (Read Histogram) | |
| 066 | IRELHIST |
HIREL (Release Histogram) | |
| 067 | ISPRTE |
SPRTE (read process entry) | copies name |
| 070 | 5NOPAR |
GPRTE | |
| 071 | ISSGTE |
SSGTE (read phys segment entry) | copies name |
| 072-073 | 5NOPAR |
GSGTE/RPHSG | |
| 074 | ISPRNM |
SPRNM (Set Process Name) | |
| 075 | ITSTUSER |
USYST (User SYSTEM test) | |
| 076 | ITOSWP |
TOSWP (send message to swapper) | |
| 077 | IRMESS |
RPROC (read last message) | |
| 100 | RRFLAG |
RFLAG (Read Process Flag) | |
| 101 | WWFLAG |
SPFLAG (Set Process Flag) | |
| 102 | IFORGET |
GPSGE (release ND-500 system) | |
| 103 | IRSYSP |
RSYSP (LIST-SYSTEM-PARAMETERS) | caller call site 073132 |
| 104 | IWSYSP |
WSYSP (Write System Params) | |
| 105-107 | 5NOPAR |
SPRIO/LNKPR/... | |
| 110 | IWPHSG |
WPHSG (Write Physical Segment) | |
| 111 | ISTAPRLOG |
SLOG1 (Start Process Log One) | |
| 112 | ISTOLOG |
STOPLOG | |
| 113 | IPRILOG |
RLOG (Read Log Info) | |
| 114 | IRELLOG |
RELLOG (Release Log Facility) | |
| 115 | ISTLAPR |
SLOGA (Start Log All) | |
| 116 | 5NOPAR |
||
| 117 | IPRABORT |
ABORT (Abort Process) | |
| 120-121 | 5NOPAR |
SETOUT/RDSWP | |
| 122 | ILOGOFF |
LOGOUT (Logout Process) | |
| 123 | IMRELSPES |
RELMEM (Release Memory) | |
| 124 | ISTAMLOG |
SMONLOG (Start Moncall Log) | |
| 125 | IPRIMLOG |
PMONLOG (Print Moncall Log) | |
| 126 | ISTOMLOG |
XMONLOG (Stop Moncall Log) | |
| 127 | IDFSYDOM |
DEFDOM (Define Standard Domain) | |
| 130 | ISFSYDOM |
START STANDARD DOMAIN (family 127 define / 130 start / 131 delete) | caller call site 043171; NOT "PLACE-DOMAIN" - the PLADOM label sits here but the keyword is unconfirmed (see cross-analysis) |
| 131 | IDLSYDOM |
Delete Standard Domain | |
| 132 | 5NOPAR |
LSTDOM (LIST-STANDARD-DOMAINS) | caller call site 007352 |
| 133 | ILI5EXQ |
LSTEXQ (LIST-EXECUTION-QUEUE) | caller call site 111445 |
| 134 | IPLDEB |
(place debug) | |
| 135 | IABLOG |
||
| 136 | IPRACTIVE |
(list active processes) | |
| 137 | 0 |
(null slot) | |
| 140-142 | 5NOPAR |
||
| 143 | IMO5RT |
||
| 144 | ICHACPU |
CHANGE-CPU | |
| 145 | ISSTDOM |
matches the L07 dispatcher SAT 145B boundary compare |
|
| 146-147 | ILLFUNC |
illegal | |
| 150 | ILI5TQU |
LIST-TIME-QUEUE | |
| 151-153 | ILLFUNC |
illegal | |
| 154-156 | 5NOPAR |
||
| 157 | IWCNT |
WRICS (same handler as 024) | |
| 160 | IN5SEGLOAD |
ND-500 segment load | |
| 161 | INDFSYDOM |
||
| 162-172 | 5NOPAR |
||
| 173 | ICPUSTAT |
CPU status | |
| 174-176 | ILLFUNC |
illegal | |
| 177 | 5NOPAR |
Cross-verification (why this table is trustworthy)¶
- L07 bytes (VERIFIED): the
050-S3I5PITdispatcher at030416Brange-checks to177B(=128 entries) and has a boundary compare at145B- exactly where5IFUNCswitches from valid (ISSTDOM@145) toILLFUNC(@146-147). - Caller side (byte-proven by the nd-500-mon:prog decode):
37B->ICSLOAD/LDCS,103B->IRSYSP/RSYSP,133B->ILI5EXQ/LSTEXQ,7B->IPLSWAPPER/SWLODall match this table. - Manual (documented): the 7-category user-facing names (
Developer/MON/calls/60B_N500M_Functions.md) line up slot-for-slot.
L07 byte-location of the table (finding 2026-07-15)¶
5IFUNC is declared *2BANK in the NPL (line 1295: A:=5IFUNC(X); *2BANK) - it lives in the
data bank, not the 050-S3I5PIT code image. A 128-word window in 050-S3I5PIT at 034535B
(dominant value 035704B x90) is a dispatch-like table but only matches the NPL 5IFUNC 5NOPAR
pattern 75/128 - so it is a different table (or bank-1 shadow), NOT 5IFUNC. To byte-confirm
individual handler bodies, locate the bank-2 5IFUNC table first (the dispatcher's table-base
operand resolves into a bank-2 address ~115542B). Until then, per-handler bodies are documented
from the authoritative NPL source with L07 byte-location marked pending.
Version caveat + next step¶
5P-P2-MON60.NPL is NPL source (possibly a slightly different revision than L07). Names and structure
are authoritative; each handler body (e.g. ICSLOAD @NPL 031703B, ISEGLOAD @NPL 031625B)
should be byte-confirmed in segments/050-S3I5PIT.bin before its per-subfunction folder
(60B-NN-Name/) is finalized with pseudo-C. Priority order (from the CPU team): 037B ICSLOAD,
007B IPLSWAPPER, 054B (START-SWAPPER), 041B (STATUS), then the rest.