Skip to content

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

UELogin

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.