Skip to content

262B GetSystemInfo

Validated   MON 262B (178 decimal) · Mnemonic CPUST · Group: Not grouped in manual

Available from: All programs (manual compatibility box)

Emulation source: src/handlers/mon_262B_GetSystemInfo.c

Description

Gets various system information. The system number, the CPU type, the SINTRAN III version, the instruction set, the patch indicator, and the system generation time are returned.

Parameters

Name Type Direction Description
Number INTEGER In A number. Should always be 0.
Buffer ARRAY Out A 24 byte (12 word) buffer receiving system information (CPU type, SINTRAN version, instruction set, etc.).

Direction: In = the program supplies the value, Out = the call returns it, In/Out = both.

Compatibility

Machines Users Programs
ND-100 and ND-500 All users All programs

The manual's compatibility box for this call, word for word.

Yes/no fields from the YAML extraction (not in the manual's words):

ND-100 ND-500 User programs RT programs System programs
No No Yes Yes No

Disagreement

The manual box says ND-100 and ND-500, but the yes/no fields say ND-100 = No, ND-500 = No. The manual box is the source.

Examples

From the manual (OCR text, not corrected).

INTEGER : Number
BYTES : Buff(0:23)
...
ON ROUTINEERROR DO
    IF ErrCode >< 0 THEN ...
ENDON
Monitor_Call('GetSystemInfo', Number, Buff(0))
INTEGER Number
INTEGER Buff(12)
...
Monitor_Call('GetSystemInfo', Number, Buff(1))
IF (ErrCode .NE. 0) THEN ...
Number : INTEGER2;
Buff : RECORD...END;
...
GetSystemInfo(Number, Buff);
IF ErrCode <> 0 THEN ...
01 Number COMP.
01 Buff.
  02 array COMP OCCURS 12 TIMES.
01 ErrCode COMP.
...
MONITOR-CALL "GetSystemInfo" USING Number, Buff.
CALL "CbError" USING ErrCode.
IF ErrCode NOT = 0 GO ...
Number : W BLOCK 1
Buff : H BLOCK 14B
ErrCode : W BLOCK 1
GetSystemInfo : EQU 3789 + 262B
...
    CALLG GetSystemInfo, 2. Number, Buff
    IF K GO ERROR
...
ERROR : W1 =: ErrCode                     %ErrorCode in W1 register.
SAA  0         %Load register A with zero.
LDX  (BUFF     %Address of a 12-word long buffer.
MON  262       %Monitor call GetSystemInfo.
JMP  ERROR     %Error return from monitor call. (If A not 0.)
...            %Normal return.
ERROR, ...     %Error number in register A.
...

BUFF, 0
*+14/          %A 12-word long buffer.

ndmonlib implementation

Validated Registered MON_STATUS_VALIDATED in src/core/mon_registry.c: implemented, tested and working.

Handler mon_262B_GetSystemInfo
Code lines 42 (non-blank, non-comment lines in the file)

Notes from the handler source

src/handlers/mon_262B_GetSystemInfo.c line 53

Bytes 2:3 describe the FRONT-END ND-100-family CPU that runs SINTRAN III,
NOT the ND-500 coprocessor - the L07 oracle (mon-oracle-for-NC/262B-CPUST.md,
sec 5) is explicit that there is no ND-500 encoding for these two bytes and
that a real machine reports the front-end identity here. On an ND-5800 the
front end is an ND-110/CX-class CPU, so per the manual table:
  byte 2 = 4  (ND-110/CX or ND-120/CX, 48-bit FP)
  byte 3 = 3  (ND-110/CX / ND-120/CX, 16-PIT micro-segment administration)
(Previously 0/0, which is not a valid ND-100-family value.)

src/handlers/mon_262B_GetSystemInfo.c line 64

Bytes 4:5 - Microprogram version. Report the ND-5800 control-store version
11930 (0x2E9A = MICRO-5800-B30), the same value the sysgen range-check and
the octobus VERSION path expect for an ND-5800.

src/handlers/mon_262B_GetSystemInfo.c line 70

Bytes 6:7 - System type = the machine MODEL number. This machine is an
ND-5800, so report 5800 here (the field that carries 100/500/502/5561/...
per the manual). This is where "CPU type 5800" belongs - not byte 2, which
is the front-end CPU-type enum above.

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) partial
nd500x handler nd500x/src/libmon/handlers/mon_262B_GetSystemInfo.c
Last updated 2026-07-17

Note

The handler fills the whole 24-byte buffer, so the shape is right, but most of the fields are FIXED CONSTANTS chosen to describe "an ND-500 running SINTRAN III VSX-500 version L" - they are not read from any emulated system table. The generation-time fields in particular are placeholders.

Parameter notes

1. Number

Field Value
Note IN parameter, a 32-bit word on ND-500 (W BLOCK). The manual says it should always be 0. nd500x reads it, logs it, and IGNORES it - the same buffer comes back for any value.
Verified Yes

2. Buffer

Field Value
Note OUT parameter, 24 bytes = 12 ND-100 words. nd500x writes it BYTE BY BYTE (ctx->write_byte), big-endian for the multi-byte fields, so the layout does not change between ND-100 and ND-500 - this is a byte buffer, not an array of ND-500 W words. OUT-PARAMETER DEFECT CLASS: the buffer IS the result; returning SUCCESS without filling it is the failure shape that cost days on 412B FSCNT (commit 73ac594) and 144B MAGTP function 0 (commit 6ad9c09).
Verified Yes

Observed calls

Caller Params Expectation Note
nd500x guest programs (observed 2026-07-17) Number: 0 Returns SysType=500, OS=VSX-500, Version=L. nd500x MON log line: "OUT: SysType=500, OS=VSX-500, Version=L". Concretely - bytes 6:7 = 500 decimal big-endian (0x01 0xF4), byte 8 = 5 (SINTRAN III VSX-500), byte 9 = ASCII 'L' (0x4C).

Return contract

  • Success: K flag cleared; 24 bytes written to Buffer.
  • Errors

    Code Octal Meaning
    111 157B Missing parameter (fewer than 2 arguments supplied)

Verified

1. MON 262B dispatches via MCTAB to the L07 worker CPUST in segment 006-S3FS.

Field Value
Evidence Carve L-VSX-500 262B-GetSystemInfo/README.md: MCTAB slot (segment 044-S3IDPIT, byte offset 2180) = 063022B = CPUST; the worker is carved in 006-S3FS. Reproduced: dd if=044-S3IDPIT.bin bs=1 skip=2180 count=2 -> 66 12.

2. The buffer is 12 words / 24 bytes.

Field Value
Evidence Carve README: "Returns system information into a caller-supplied 12-word (24-byte) buffer", matching the manual and the handler.

3. Bytes 2 and 3 (CPU type, instruction set) are legitimately 0 on an ND-500.

Field Value
Evidence Audit recorded in nd500x/docs/HANDOFF_MON_COMPLETENESS.md: "262B CPUST: fills 24-byte buffer (bytes 2/3=0; oracle says no ND-500 encoding)". The manual's CPU-type codes 2-5 are ND-100 variants.

Unverified

  • THE GENERATION TIME IS FABRICATED. Bytes 14:23 are hard-coded to minutes=0, hours=0, day=1, month=1, year=1990. There is no real SINTRAN generation event in the emulator. Do not treat these as data.
  • Bytes 0:1 report SYSTEM NUMBER 1 even though the input Number observed is 0. Whether the field echoes the requested number or names the running system is not established from the manual or the carve.
  • Bytes 4:5 (microprogram version) and 12:13 (patch level indicator) are hard-coded 0. Not verified as correct; simply unmodelled.
  • The 24-byte field layout in the handler header is the manual's, not read out of the carved CPUST worker's stores. The CPUST worker body IS carved in 006-S3FS but was not decoded field by field for this note.
  • Byte 8 = 5 ("SINTRAN III VSX-500") and byte 9 = 'L' are chosen to match the carved image's identity (L-VSX-500) - consistent, but the byte 8 code table (1=VSE, 2=VSE-500, 3=RTP, 4=VSX, 5=VSX-500) is transcribed from the handler header and was not re-read from a manual page for this note.

Discrepancies

1. Earlier carve version claimed the call was "misattributed": GOTAB[262B] = 066262B routing to an F1737 "compiler dispatch descriptor" in 025-S3IRPIT, with the F1737 -> CPUST hop unproven.

Field Value
Is An artefact of the disproven dispatch model. The real worker address comes from MCTAB @ 005620B in segment 044-S3IDPIT: MCTAB[262B] = 063022B = CPUST, byte-proven, and that worker IS carved in 006-S3FS.
Evidence Carve CORRECTED 2026-07-13 header; dd if=044-S3IDPIT.bin bs=1 skip=2180 count=2 -> 66 12.

Sources

Doc Note
NDInsight/tools/sintran-segment-carver/versions/L-VSX-500/re/mon-analysis/262B-GetSystemInfo/README.md MCTAB[262B] = CPUST = 063022B, worker carved in 006-S3FS.
nd500x/docs/HANDOFF_MON_COMPLETENESS.md Audit line: buffer filled, bytes 2/3 = 0, no ND-500 encoding per the oracle.

Source

SINTRAN III Monitor Calls (ND-860228.2 EN), page 285.