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.