321B UEAdministrator¶
Validated MON 321B (209 decimal) · Mnemonic UEADM · Group: Monitor Calls for Internal Use (manual section 2.14)
Available from: not known - no compatibility box captured from the manual
Emulation source: src/handlers/mon_321B_UEAdministrator.c
Description¶
Handle User Environment (administrator) (manual section 2.14, short name UEADM). UNVERIFIED - the handler body is not present in the available source tree; only the dispatch/name is known.
Notes¶
- STUB - the handler body is NOT located in the available NPL source. Only the manual name/short (UEAdministrator / UEADM) is known.
- The User-Environment module that implements the body is absent from the source tree (companion to 320B UELogin); also appears in manual section 2.16 (numbers no longer supported).
- Contract UNVERIFIED - description is taken from the manual name only; no parameter block, return values, or caller convention can be confirmed.
Parameters¶
None.
See also¶
Compatibility¶
| ND-100 | ND-500 | User programs | RT programs | System programs |
|---|---|---|---|---|
| Yes | No | No | No | Yes |
From the YAML extraction; this call's page in the manual had no compatibility box that was captured.
ndmonlib implementation¶
Validated Registered MON_STATUS_VALIDATED in src/core/mon_registry.c: implemented, tested and working.
| Handler | mon_321B_UEAdministrator |
| Code lines | 25 (non-blank, non-comment lines in the file) |
| Generator note | registered VALIDATED but the source says 'NOT YET' - check whether the call is complete |
Notes from the handler source¶
src/handlers/mon_321B_UEAdministrator.c line 75
Sub-function selector = param[12] on ND-100, arg[0] on ND-500. The linker
always passes 1. If the caller supplied no argument at all, treat it as
the in-range default rather than faulting.
src/handlers/mon_321B_UEAdministrator.c line 88
The worker stores 124B into the selector slot on the error path
(065470 LDA 124 / 065471 STA ,X 12).
src/handlers/mon_321B_UEAdministrator.c line 97
In range -> the worker's success epilogue at 066644B takes the skip
return (K clear). We expose no per-user table; return w1 = 0.
Emulation research¶
Source
This section comes from the emulation: block of the call's YAML file in the NDInsight repo. It records what was learned while implementing the call in nd500x; its status is nd500x's, not ndmonlib's.
| Status (nd500x) | stub |
| nd500x handler | nd500x/src/libmon/handlers/mon_321B_UEAdministrator.c |
| Last updated | 2026-07-17 |
Note¶
STUB - SAY SO. nd500x treats 321B as DEPRECATED: the handler does no work at all, logs "Deprecated MON call - returning error", and returns an error with the K flag set. It is registered MON_STATUS_DEPRECATED, a status invented for exactly this case (commit 9b0c904) because a MON_STATUS_NOT_IMPLEMENTED handler is short-circuited by the dispatcher and never runs, which left the error code at 0.
Parameter notes¶
1. (none registered)
| Field | Value |
|---|---|
| Note | The nd500x registry declares 0 parameters for this call and the handler reads none. The real UEADM worker is carved and is a companion to 320B UELOG and 317B UECOM in the same User-Environment cluster, so it certainly takes arguments; nd500x simply never looks at them. |
| Verified | No |
Observed calls¶
1. NC C front-end (nc-a06.dom) - indirectly, via 312B MOINF
| Field | Value |
|---|---|
| Params | |
| Expectation | NC does not call 321B directly in the observed traces; it PROBES for it with 312B MOINF and branches at 0x08029092 / 0x0802909E on whether the entry is non-zero. If 312B reports 321B absent, NC skips building its list, walks a NULL and crashes at 0x080241FC. So 312B must report 321B PRESENT (MCTAB[321B] = 065453B) even though 321B''s own handler is a stub. |
| Note | This asymmetry is deliberate and is the single most confusing thing about this call in nd500x. See docs/NC_CRASH_0x08023EA4_ROOTCAUSE.md UPDATE 31 and commit 2618145. |
Return contract¶
- Success: Never returned.
-
Errors
Code Octal Meaning 124 174B Illegal parameter. NOT a real UEADM error - it is the emulator''s way of saying "this call does nothing here". Returned unconditionally.
Verified¶
1. 321B UEADM EXISTS in SINTRAN L07 and its worker is real carved code in 003-S3CP, the same segment as its siblings UECOM / UELOG / SETOL.
| Field | Value |
|---|---|
| Evidence | Carve L-VSX-500 321B-UEAdministrator/README.md, status "byte-verified (dispatch + worker body)". MCTAB slot (segment 044-S3IDPIT, byte offset 2242) = 065453B = UEADM. Reproduced: dd if=044-S3IDPIT.bin bs=1 skip=2242 count=2 -> 6b 2b. |
2. A NOT_IMPLEMENTED handler is never called by the nd500x dispatcher.
| Field | Value |
|---|---|
| Evidence | Commit 9b0c904 and commit 5b6bdfd: "Do not register a handler MON_STATUS_NOT_IMPLEMENTED: mon_dispatch.c short-circuits that status and never calls it." That is why MON_STATUS_DEPRECATED exists - it lets the handler run and set a real error code. |
Unverified¶
- "DEPRECATED" IS AN EMULATOR CLASSIFICATION, NOT A DOCUMENTED FACT. The carve shows the call is present and its worker is real code in this L07 image. Nothing read so far says ND withdrew it. Treat the nd500x description "DEPRECATED: This MON call is no longer supported" as an emulator decision, not a manual statement.
- The UEADM worker body IS carved (see 321B-UEAdministrator.ASM and .pseudo.c) but was not decoded for this note, so the real parameter list, functions and error codes are unread. An implementer should start there rather than from the emulator.
- Nothing observed actually CALLS 321B - only 312B probes for it. So the stub''s error return has never been exercised by a real program, and whether NC would survive a real call is unknown.
Discrepancies¶
1. Commit 9b0c904''s message says 321B returns "error 52" via the new DEPRECATED status.
| Field | Value |
|---|---|
| Is | It returns 124 decimal (174B "Illegal parameter"). Error 52 was one of the INVENTED codes removed by commit 6b57202 - in SINTRAN''s real Appendix A table 52 means "No such friend", nothing to do with an unsupported call. The commit message predates the sweep and is stale. |
| Evidence | mon_321B_UEAdministrator.c uses MON_ERR_ILLEGAL_PARAMETER; src/libmon/mon_errors.h defines it as 124 (174B). Commit 6b57202: "52 -> ''No such friend'' (used for invalid parameter)". |
2. Earlier carve version: the worker is "not-carved / name-only", "zero-filled", with GOTAB[321B] = 112376B vectoring to a diagnostic region DIA6.
| Field | Value |
|---|---|
| Is | All of that was an artefact of the wrong dispatch model. MON calls go through MCTAB @ 005620B; MCTAB[321B] = 065453B = UEADM, and that worker IS carved in 003-S3CP. The old analysis read 065453B in SINTRAN-DATA_commoncode (zeros there - wrong overlay) and wrongly concluded "absent". |
| Evidence | Carve CORRECTED 2026-07-13 header in .../mon-analysis/321B-UEAdministrator/README.md; dd if=044-S3IDPIT.bin bs=1 skip=2242 count=2 -> 6b 2b. |
3. nd500x reports 321B as non-existent through 312B MOINF, because DEPRECATED calls report as entry 0 by the agreed cross-emulator convention.
| Field | Value |
|---|---|
| Is | 312B carries an explicit hard-coded exception ABOVE the registry lookup that returns MCTAB[321B] = 065453B for this call, because NC requires it. So nd500x simultaneously says "present" (via 312B) and "unsupported" (via 321B itself). The 312B answer is the byte-true one. |
| Evidence | mon_312B_CheckMonCall.c lines 46-58; commit 2618145. |
Sources¶
| Doc | Note |
|---|---|
| NDInsight/tools/sintran-segment-carver/versions/L-VSX-500/re/mon-analysis/321B-UEAdministrator/README.md | Byte-verified: MCTAB[321B] = UEADM = 065453B, worker carved in 003-S3CP. Start here to implement. |
| nd500x/docs/MON_CSHARP_SYNC_HANDOFF.md | Line 63 - the 065453B value both emulators must return from 312B for this call. |
Source¶
ND-860228-2-EN manual (section 2.14) - name only.