ND-5000 (SAMSON) Architecture Differences¶
How SINTRAN III Handles ND-5000 vs Standard ND-500 Systems
Overview¶
This document analyzes how SINTRAN III distinguishes between standard ND-500 systems (using DMA interface PCB 3022) and ND-5000 "SAMSON" systems (using Octobus/Multi Function Bus architecture).
Important Note: The ND-5000 maintains software compatibility with ND-500 - it runs the same instruction set, uses the same registers, and executes the same programs. The differences documented here are in the hardware interface between the ND-100 (I/O processor) and the main CPU.
Table of Contents¶
- CPU Generations
- Hardware Interface Differences
- SAMSON Detection and Initialization
- Status Checking Differences
- Communication Mechanisms
- Execution Queue Differences
- Key Variables and Symbols
- I/O Architecture
- Mermaid Diagrams
- Verification and Assumptions
1. CPU Generations¶
The ND-500 CPU software architecture had three physical implementations:
| Generation | Implementation | Systems | Interface |
|---|---|---|---|
| 1st | ND-500/1 | ND-520, ND-540, ND-560 | DMA (PCB 3022) |
| 2nd | ND-500/2 | ND-510, ND-530, ND-550, ND-560, ND-570, ND-580 | DMA (PCB 3022) |
| 3rd | ND-5000 (SAMSON) | ND-5X00 series | Octobus + MFB |
Source: ND-05.009.4 EN ND-500 Reference Manual, pages 17-18
All three implementations run the same instruction set, same registers, and same addressing modes. The difference is purely in hardware implementation and the interface to the I/O processor (ND-100/ND-110).
2. Hardware Interface Differences¶
Standard ND-500 (DMA Interface - PCB 3022)¶
┌──────────┐ ┌──────────┐
│ ND-100 │ PCB 3022 │ ND-500 │
│ I/O │◄────────────────►│ CPU │
│Processor │ DMA Interface │ ND-500/1 │
└────┬─────┘ │ ND-500/2 │
│ └────┬─────┘
│ │
│ ┌──────────┐ │
└─────►│ 5MPM │◄──────────┘
│ Multiport│
│ Memory │
└──────────┘
Characteristics:
- IOX commands via PCB 3022 device registers
- Status read via RSTA5 register (IOX operation)
- 5ILOCK bit indicates CPU running
- 5POWOF bit indicates power failure
ND-5000 (SAMSON - Octobus + MFB)¶
┌──────────┐ ┌──────────┐
│ ND-100/ │ Octobus │ ND-5000 │
│ ND-110 │◄────────────────►│ (SAMSON) │
│ I/O │ Multi Function │ CPU │
│Processor │ Bus │ │
└────┬─────┘ └────┬─────┘
│ │
│ ┌──────────┐ │
└─────►│ MFB │◄──────────┘
│ Shared │
│ Memory │
└──────────┘
Characteristics:
- Communication via Octobus protocol
- Status via MAILINK (mailbox link) in shared memory
- Multi Function Bus (MFB) for direct memory access
- Up to 32 MB physical memory
- Private memory regions possible
3. SAMSON Detection and Initialization¶
Boot-Time Detection¶
During SINTRAN cold start, the system checks for Octobus presence:
Source: PH-P2-OPPSTART.NPL lines 3921-3929
1CH5CPU: *TRA IIC % Read octobus if. status
A:=200; *TRR IIE
T:=100406; *IOXT; TRA IIC
IF A=0 THEN % Octobus present? - (assumes Samson)
DO % Wait for data ready
*IOXT
WHILE A NBIT 3
OD
ASTATION\/COMD=:5STATION
Detection Logic:
1. Read Octobus interface status via IOX (device 100406 octal)
2. If A=0, Octobus is present (assumes SAMSON)
3. Wait for data ready (bit 3)
4. Store station number in 5STATION
CPU Counting and Registration¶
Source: RP-P2-N500.NPL lines 973-980
X:="S5CPUDF"; 0=:NSAMSON=:N5CPU
DO WHILE X<<="E5CPUDF"
IF X.CPUAVAILABLE/\5CPUTYPE=SAMSON THEN
X.CPUNO+FN5DEST-1=:X.5STATION
*IOF
A:=X; *IRW LV12B DB
"LMDF"; *IRW LV12B DX
"CON5IDENT"; *IRW LV12B DP
What This Does:
1. Initialize NSAMSON (SAMSON count) and N5CPU (total ND-500 count) to 0
2. Loop through CPU datafields (S5CPUDF to E5CPUDF)
3. For each SAMSON CPU:
- Calculate Octobus station number: CPUNO + FN5DEST - 1
- Store in 5STATION field
- Disable interrupts (*IOF)
- Set up level 12 interrupt (*IRW LV12B) with:
- DB = CPU datafield address
- DX = LMDF (local message data field)
- DP = CON5IDENT (connection identification)
4. Status Checking Differences¶
The most significant operational difference is how SINTRAN checks if an ND-500/ND-5000 CPU is active.
500HA Subroutine¶
Source: MP-P2-N500.NPL lines 264-269
% Local subroutine to test if nd-500 active
500HA: IF B<<"S5CPUDF" OR B>>"E5CPUDF" THEN EXIT FI
IF CPUAVAILABLE/\5CPUTYPE><SAMSON THEN % DMA interface?
T:=HDEV+RSTA5; *IOXT
IF A NBIT 5ILOCK OR A BIT 5POWOF THEN EXIT FI
FI
EXITA
Interpretation¶
| CPU Type | Check Method | Running If |
|---|---|---|
| ND-500 (DMA) | IOX RSTA5 register |
5ILOCK bit set AND 5POWOF bit clear |
| ND-5000 (SAMSON) | Skip hardware check | Assume running (use MAILINK for actual status) |
Key Point: For SAMSON, the 500HA subroutine does not perform hardware status check - it immediately returns via EXITA. The actual status is determined by checking MAILINK elsewhere.
MAILINK Status Checking¶
Source: RP-P2-N500.NPL lines 85-91
IF A/\5CPUTYPE=SAMSON THEN
% Nd-500 samson on octobus line - test if memory layout ok : -
IF MAILINK><-1 THEN
A:=0; X:="S5CPUDF"
DO WHILE X<<="E5CPUDF"; A\/X.C5STAT; X+5CPUDFSIZE; OD
IF A/\C5PFMASK=0 GO NN5S1
FI
Logic:
- For SAMSON: Check if MAILINK is initialized (not -1)
- If initialized: Check all CPU status fields for power fail mask
- If no power fails detected: proceed to scheduling (NN5S1)
5. Communication Mechanisms¶
Standard ND-500: IOX Commands¶
Communication uses IOX instructions to PCB 3022 registers:
| Register | Direction | Purpose |
|---|---|---|
| RSTA5 | Read | Status (5ILOCK, 5POWOF bits) |
| WSTA5 | Write | Commands |
| WDAT5 | Write | Data out |
| RDAT5 | Read | Data in |
ND-5000 (SAMSON): Mailbox + Shared Memory¶
Communication via shared memory structures:
| Mechanism | Purpose |
|---|---|
MAILINK |
Mailbox link (message queue pointer) |
MAIL1LINK |
Secondary mailbox link |
5STATION |
Octobus station number |
| MFB shared memory | Direct data access |
Initialization of mailbox links:
Source: 5P-P2-MON60.NPL lines 560-564
X:="S5CPUDF"
DO WHILE X<<="E5CPUDF"
A:=-1=:X.MAIL1LINK=:X.MAILINK
X+5CPUDFSZ
OD
Both MAILINK and MAIL1LINK are initialized to -1 (invalid) at startup.
6. Execution Queue Differences¶
A significant scheduling difference exists for SAMSON systems.
Source: s3vs-4.symb line 57255 (also in performance sampling code)
IF CPUAVAILABLE/\5CPUTYP=SAMSON GO OUT % Only one exec. q.
Implication: SAMSON systems use only one execution queue while standard ND-500 systems may use multiple execution queues.
This affects process scheduling - SAMSON appears to have a simpler queue model.
7. Key Variables and Symbols¶
From DP-P2-VARIABLES.NPL¶
| Variable | Type | Description | Source Line |
|---|---|---|---|
NSAMSON |
INTEGER | Number of SAMSON CPUs | 112 |
N5CPU |
INTEGER | Total number of ND-500/5000 CPUs | (nearby) |
5SWPROC |
INTEGER | Swapper process number | 116 |
CPU Datafield Fields (per CPU)¶
| Field | Purpose |
|---|---|
CPUAVAILABLE |
CPU availability flags |
5CPUTYPE |
CPU type (SAMSON or other) |
5STATION |
Octobus station number (SAMSON only) |
MAILINK |
Mailbox link for communication |
MAIL1LINK |
Secondary mailbox link |
CPUNO |
CPU number |
C5STAT |
CPU status flags |
HDEV |
Hardware device base address |
Constants¶
Source: Verified from SINTRAN L07 symbol files (../NPL-SOURCE/SYMBOLS/L07/SYMBOL-1-LIST.SYMB.TXT)
| Symbol | NPL (5-char) | Octal Value | Description |
|---|---|---|---|
SAMSON |
SAMSO | 000003 | CPU type constant for ND-5000 |
OLD500 |
OLD50 | 000001 | CPU type constant for standard ND-500 |
5CPUTYPE |
5CPUT | 000007 | CPU type field offset |
RSTA5 |
RSTA5 | 000002 | Read status register offset |
5ILOCK |
5ILOC | 000005 | Interface locked - bit 5 (mask 0x0020) |
5POWOF |
5POWO | 000010 | Power was off - bit 8 (mask 0x0100) |
5ALIVE |
5ALIV | 000015 | CPU is alive - bit 13 (mask 0x2000) |
8. I/O Architecture¶
Current Implementation (from source code)¶
The I/O system remains on the ND-100/ND-110 "I/O processor" for both standard ND-500 and ND-5000:
Source: ND-05.009.4 EN ND-500 Reference Manual, page 18
THE I/O PROCESSOR: - Supervises the CPU - Runs the I/O system, file system, operating system and job scheduling - Runs local I/O-processor jobs
For both ND-500 and ND-5000, the I/O processor (ND-100/ND-110) handles: - Disk I/O (including SCSI) - Terminal I/O - Network I/O - All device drivers
Multi Function Bus (MFB) - ND-5000¶
The ND-5000 uses Multi Function Bus for memory:
Source: ND-05.009.4 EN ND-500 Reference Manual, page 19
MEMORY: - Multi Function Bus main memory with direct access for the ND-5000 CPU, the I/O processor CPU and DMA transfer devices - Physical main memory up to 32 Mbytes - Memory fully or partially shared between the I/O processor and ND-500 type CPU
Key Difference: MFB allows direct DMA access from I/O devices to shared memory, potentially bypassing the I/O processor for data transfer.
DOMINO I/O System (Future)¶
Source: ND-05.009.4 EN ND-500 Reference Manual, page 17
Until now the I/O processor has been an ND-100, but when the DOMINO I/O system is introduced, other types of I/O processors will be possible.
Source: ND Linker User Guide, page 3088
Use this command if you are programming for the PIOC or DOMINO.
Note: DOMINO uses Motorola MC680x0 processors, representing a move away from ND-100 as the I/O processor. This is not fully documented in available NPL sources.
Octobus Devices¶
Device numbers 2400-2477 (octal) are reserved for Octobus devices:
| Device Range | Description |
|---|---|
| 2400-2417 | Octobus unit 0 |
| 2420-2437 | Octobus unit 1 |
| 2440-2457 | Octobus unit 2 |
| 2460-2477 | Octobus unit 3 |
Source: Monitor Calls manual, Appendix I
9. Mermaid Diagrams¶
System Architecture Comparison¶
flowchart TB
subgraph ND500["Standard ND-500 System"]
A1[ND-100 I/O Processor]
B1[PCB 3022 DMA Interface]
C1[ND-500/1 or ND-500/2 CPU]
D1[5MPM Multiport Memory]
A1 <-->|IOX Commands| B1
B1 <-->|DMA| C1
A1 <-->|Memory Access| D1
C1 <-->|Memory Access| D1
end
subgraph ND5000["ND-5000 (SAMSON) System"]
A2[ND-100/ND-110 I/O Processor]
B2[Octobus Interface]
C2[ND-5000 CPU]
D2[MFB Shared Memory]
A2 <-->|Mailbox| B2
B2 <-->|Octobus| C2
A2 <-->|MFB Direct| D2
C2 <-->|MFB Direct| D2
end
style A1 fill:#2196F3,stroke:#1976D2,stroke-width:2px,color:#fff
style A2 fill:#2196F3,stroke:#1976D2,stroke-width:2px,color:#fff
style B1 fill:#9C27B0,stroke:#7B1FA2,stroke-width:2px,color:#fff
style B2 fill:#9C27B0,stroke:#7B1FA2,stroke-width:2px,color:#fff
style C1 fill:#4CAF50,stroke:#388E3C,stroke-width:2px,color:#fff
style C2 fill:#4CAF50,stroke:#388E3C,stroke-width:2px,color:#fff
style D1 fill:#FFA726,stroke:#F57C00,stroke-width:2px,color:#fff
style D2 fill:#FFA726,stroke:#F57C00,stroke-width:2px,color:#fff
Status Check Decision Flow¶
flowchart TD
A[500HA: Check CPU Status] --> B{CPU in valid range?}
B -->|No| EXIT1[EXIT - Out of Range]
B -->|Yes| C{5CPUTYPE = SAMSON?}
C -->|No - Standard ND-500| D[IOX: Read RSTA5]
D --> E{5ILOCK bit set?}
E -->|No| EXIT2[EXIT - Not Running]
E -->|Yes| F{5POWOF bit set?}
F -->|Yes| EXIT3[EXIT - Power Off]
F -->|No| EXITA[EXITA - CPU Running]
C -->|Yes - ND-5000| EXITA
style A fill:#2196F3,stroke:#1976D2,stroke-width:2px,color:#fff
style D fill:#E91E63,stroke:#C2185B,stroke-width:2px,color:#fff
style EXITA fill:#4CAF50,stroke:#388E3C,stroke-width:2px,color:#fff
style EXIT1 fill:#F44336,stroke:#D32F2F,stroke-width:2px,color:#fff
style EXIT2 fill:#F44336,stroke:#D32F2F,stroke-width:2px,color:#fff
style EXIT3 fill:#FFA726,stroke:#F57C00,stroke-width:2px,color:#fff
SAMSON Initialization Sequence¶
sequenceDiagram
participant BOOT as Boot Code
participant CPUDF as CPU Datafield
participant OCT as Octobus
participant SAM as SAMSON CPU
BOOT->>BOOT: Initialize NSAMSON = 0, N5CPU = 0
loop For each CPU datafield
BOOT->>CPUDF: Check 5CPUTYPE
alt Is SAMSON
BOOT->>CPUDF: Calculate 5STATION = CPUNO + FN5DEST - 1
BOOT->>BOOT: Disable interrupts (*IOF)
BOOT->>OCT: Set up Level 12 interrupt handler
Note over OCT: DB = CPU datafield<br/>DX = LMDF<br/>DP = CON5IDENT
BOOT->>SAM: Initialize via Octobus
else Is Standard ND-500
BOOT->>CPUDF: Use DMA interface setup
end
end
10. Verification and Assumptions¶
Verified from Source Code¶
| Finding | Source File | Line(s) | Confidence |
|---|---|---|---|
NSAMSON variable for counting SAMSON CPUs |
DP-P2-VARIABLES.NPL | 112 | HIGH |
5CPUTYPE=SAMSON check for CPU type |
MP-P2-N500.NPL | 265 | HIGH |
| 500HA skips IOX for SAMSON | MP-P2-N500.NPL | 265-269 | HIGH |
MAILINK used for SAMSON communication |
5P-P2-MON60.NPL | 562, 702 | HIGH |
| SAMSON has single execution queue | s3vs-4.symb | 57255 | HIGH |
5STATION stores Octobus station |
RP-P2-N500.NPL | 976 | HIGH |
| Mailbox links initialized to -1 | 5P-P2-MON60.NPL | 562 | HIGH |
| Octobus detection at boot | PH-P2-OPPSTART.NPL | 3921-3929 | HIGH |
| XRS5CPU called for SAMSON restart | MP-P2-N500.NPL | 3358-3359 | HIGH |
| XTER500 called for non-SAMSON | MP-P2-N500.NPL | 3361 | HIGH |
Verified from Reference Manuals¶
| Finding | Source | Confidence |
|---|---|---|
| ND-5000 is 3rd generation ND-500 implementation | ND-05.009.4 page 17 | HIGH |
| Multi Function Bus (MFB) used for ND-5000 memory | ND-05.009.4 page 19 | HIGH |
| Up to 32 MB physical memory supported | ND-05.009.4 page 19 | HIGH |
| DOMINO I/O system planned for future | ND-05.009.4 page 17 | HIGH |
| Same instruction set for all ND-500 variants | ND-05.009.4 page 18 | HIGH |
| Octobus devices at 2400-2477 octal | Monitor Calls Appendix I | HIGH |
Interpretations (Low Uncertainty)¶
| Interpretation | Evidence | Uncertainty |
|---|---|---|
| SAMSON uses Octobus for CPU communication instead of DMA | Code explicitly checks 5CPUTYPE=SAMSON vs IOX operations |
LOW |
| MAILINK replaces hardware status polling for SAMSON | 500HA skips IOX for SAMSON, other code checks MAILINK | LOW |
| ND-5000 I/O still handled by ND-100 I/O processor | No code shows ND-5000 direct I/O handling | LOW |
Assumptions (Higher Uncertainty)¶
| Assumption | Why Assumed | Uncertainty |
|---|---|---|
| SCSI controllers on ND-5000 still managed by ND-100 | No SAMSON-specific SCSI code found; manual states I/O processor handles I/O | MEDIUM |
| "Own bus and I/O controllers" refers to MFB direct DMA capability | MFB allows direct access from DMA devices, but driver code not found | MEDIUM |
| DOMINO system would replace ND-100 for I/O | Mentioned in manual but no implementation in available sources | MEDIUM |
| Single execution queue for SAMSON is architectural requirement | Comment says "Only one exec. q." but reason not documented | MEDIUM |
What This Document Does NOT Cover¶
- Detailed Octobus protocol - Low-level Octobus communication not documented in NPL sources
- DOMINO I/O system - Future system mentioned but not implemented in available code
- MFB hardware details - Requires ND-05.020 (ND-5000 Hardware Description) manual
- SAMSON microcode differences - Hardware implementation details
References¶
NPL Source Files¶
| File | Content |
|---|---|
MP-P2-N500.NPL |
ND-500/5000 monitor program, 500HA subroutine |
RP-P2-N500.NPL |
Runtime program, SAMSON initialization |
PH-P2-OPPSTART.NPL |
Boot code, Octobus detection |
5P-P2-MON60.NPL |
Monitor calls, mailbox initialization |
DP-P2-VARIABLES.NPL |
Variable definitions including NSAMSON |
MP-P2-PERF-SAMP.NPL |
Performance sampling code |
Official Manuals¶
| Manual Number | Title |
|---|---|
| ND-05.009.4 | ND-500 Reference Manual |
| ND-05.015 | ND-500/2 Hardware Description |
| ND-05.020 | ND-5000 Hardware Description (referenced, not available) |
| ND-860228-2 | SINTRAN III Monitor Calls |
| ND-860289-2 | ND Linker User Guide |
Version History¶
| Date | Version | Changes |
|---|---|---|
| 2026-01-29 | 1.0 | Initial document - SAMSON/ND-5000 architecture analysis |
Parent: README.md - ND-500 Documentation Related: ND500-IF-USAGE-DEEP-ANALYSIS.md - IOX interface analysis Related: ND500-SWAPPER-LOADING-MECHANISM.md - Swapper loading