Skip to content

ND-500 System Monitor - the FUNCS dispatch table (the actual ND-500 operations)

FUNCS = 142031B in 030-S3SM5 is the system monitor's 128-entry operation table, indexed by the MON 60B subfunction code - the server-side twin of the worker's 5IFUNC. Where 5IFUNC[N] marshals the caller's parameters, FUNCS[N] performs the actual ND-500 operation. 5FP2E (the entry) reads the packaged function code and jumps through FUNCS[code].

Byte-verified: dumped from 030-S3SM5.bin (base 40000B); every entry lands on a named N500-SYMBOLS routine; REGRE (entry 0) and the entry code are coherent. Overlay validated (segment's own symbol file + coherent code + release-doc PIT).

ERRFP = 141574B = the error/not-serviced-here handler. Codes that point at ERRFP are handled entirely on the ND-100 side (in N500M/5IFUNC or the resident driver) and have no ND-500-side operation - e.g. reserve/release for special use (043-045), histogram (062-066), most logging (111-115, 124-126), abort (117), which manipulate ND-100 process state, not the ND-500.

The full path (all hops named)

command  -> [caller] thunk SAA <code>  -> gateway -> MON 60
         -> [worker] N500M 5IFUNC[code] (param marshalling) -> 5NOPAR -> FPT2ENTRY
         -> [sysmon] 5FP2E -> FUNCS[code] -> the ND-500 operation (REGRE / PMWRI / CSLOA / ...)

FUNCS table (code -> routine @addr -> operation)

code routine addr operation
000 REGRE 142365 read a register
001 REGWR 142410 write a register
002 PMREA 142456 logical program-memory read
003 DMREA 142465 logical data-memory read
004 PMWRI 142527 logical program-memory write
005 DMWRI 142536 logical data-memory write
006 SGLOA 142637 load (place) one segment
007 LDSWA 143551 load swapper
010 REGSR 146410 read register block
011 REGSW 146426 write register block
012 PROGS 146451 start ND-500 program (RUNN)
013 CONFI 146761 connect file
014 CLOSF 147003 close file
015 RESR5 147014 reserve ND-500 process
016 REL50 147727 release ND-500 process
017 LIOPF 150533 list open files
020 CTUSE 151132 time used
021 WHOIS 151763 who is on
022 SETER 152160 set error flag
023 CSREA 152165 read control store
024 CSWRI 152373 write control store
025 MPSTA 152616 micro start
026 DMEXA 153051 data-memory examine (4 bytes)
027 DMDEP 153107 data-memory deposit
030 PMEXA 153042 program-memory examine (4 bytes)
031 PMDEP 153100 program-memory deposit
032 AMEMR 142474 physical (absolute) data-memory read
033 AMEMW 142545 physical (absolute) data-memory write
034 MPSTO 153146 micro stop
035 5MCLE 153247 master clear
036 MONSA 153356 (monitor save / undocumented)
037 CSLOA 153441 LOAD CONTROL STORE (microcode load - the emulator gate)
040 DEFMC 155742 define memory configuration
041 RSTAT 156064 read ND-500 interface status
042 EXAM 150416 examine (log off + terminate)
043-045 ERRFP 141574 (not serviced here; ND-100-side reserve/special)
046 SWFDE 156207 define swap file
047 SWFDL 156535 delete swap file
050 TSTFU 156701 test function
051 RINTE 162604 read interface (IODATUT) register
052 G5PAG 162670 give ND-500 pages
053 T5PAG 163372 take ND-500 pages
054 RUNSW 163621 start (run) swapper
055 SPLAC 164137 start-place
056 EPLAC 164407 end-place
057 RMVER 164652 read micro-program version
060 LIMEM 164776 list memory configuration
061 MEMSP 165041 reserve memory (test-monitor)
062-066 ERRFP 141574 (histogram; ND-100-side)
067 SPRTE 165511 read process entry from name segment
070 GPRTE 165771 get process table entry
071 SSGTE 166110 read phys-segment entry from name segment
072 GSGTE 166352 get phys-segment table entry
073 RPHSG 166537 read from a physical segment
074 SPRNM 166645 set process name
075 ERRFP 141574 (user-SYSTEM check; ND-100-side)
076 TOSWP 166733 message to swapper
077 ERRFP 141574 (read message; ND-100-side)
100-101 ERRFP 141574 (flags; ND-100-side)
102 500SR 167127 stop ND-500 system
103 ERRFP 141574 (read system vars; ND-100-side)
104 WSYSP 167277 write system parameters
105 S1PRI 167325 set priority
106 LINKT 167523 link to process
107 ERRFP 141574 (undocumented)
110 WPHSG 167550 write into a physical segment
111-115 ERRFP 141574 (process logging; ND-100-side)
116 REL50 147727 log off own process (= release)
117 ERRFP 141574 (abort; ND-100-side)
120 SOUTF 167723 set output device
121 FSWPR 142576 read from swapper data memory
122 ERRFP 141574 (logout; ND-100-side)
123 MRELS 167730 release memory (test-monitor)
124-126 ERRFP 141574 (moncall logging; ND-100-side)
127 5DFSY 167736 define standard domain
130 5SFSY 171122 start standard domain
131 5DLSY 172015 delete standard domain
132 5LISY 172263 list standard domains
133 ERRFP 141574 (list exec-queue; ND-100-side)
134 PLDEB 172660 place debugger
135 ABLOG 147734 log off + abort RT-program
136 GPRMA 173217 activate stopped process
137 ERRFP 141574 (unused)
140 5SRES 173243 (reserve/special-place pair)
141 COMSB 173301 set block size of a file
142 SINPD 173370 redefine default infant file
143-144 ERRFP 141574 (activate / change-cpu; ND-100-side)
145 SISTD 173377 start standard domain from S3 opcom
146 ERRFP 141574 (illegal)
147 RELS3 147744 (escape while running std domain)
150-153 ERRFP 141574 (list-time-queue / illegal)
154 DBUGS 173536 debug swapper
155 STSEL 174061 (set select / free-for-patching)
156 READS 174106 read system info
157 MONAC 174261 write control store (alias 024) / monitor access
160 NSGLO 142753 load segment (new domain format)
161 5NDFS 167744 define standard domain (new format)
162 INITR 174526 init tracer
163 CLRTR 174562 clear trace
164 ARMTR 174576 arm tracer
165 DISAR 174612 disarm tracer
166 DUMPT 174626 dump trace memory
167 CLRAD 174654 clear trace address
170 GETCP 174676 read ND-500 CPU-type + micro version
171 SCACH 174723 set cache
172 RSCRR 174776 read HW scratch register file
173-176 ERRFP 141574 (set-cpu-status / illegal; ND-100-side)
177 SETCU 175051 (set CU / FUNCMAX boundary)

Why this matters for the emulator

FUNCS is the implementation list for the ND-500 side of MON 60B. The routines that touch the ND-500 hardware / 5MPM message live here: REGRE/REGWR (register access via the memory-mapped register block), PMREA/PMWRI/AMEMR/AMEMW (memory transfer), CSLOA (control-store load - the gate that hung the emulator), MPSTA/MPSTO/5MCLE (micro start/stop/master-clear), RSTAT (interface status - what the "control store loaded?" check reads). These are the concrete routines to carve for Phase 1 (5MPM handshake) and Phase 3 (bus interface / bring-up).

Next carve priority: CSLOA (037, control-store load), RSTAT (041, interface status), REGRE/REGWR (register access), MPSTA/MPSTO/5MCLE (micro control), and the LDATX/STATX 5MPM primitives at 143300B - these are the emulator's control-store gate + register/memory interface.