Skip to content

Page 1

DOMINO and NUCLEUS Software Guide

ND-820026.1 EN

     _____  _____  _____  _____  _____  _____  _____  _____
    |     ||     ||     ||     ||     ||     ||     ||     |
    |     ||     ||     ||     ||     ||     ||     ||     |
    |_____|______|______|______|______|______|______|______|

ND Norsk Data

Scanned by Jonny Oddene for Sintran Data © 2011


Page 2

Looks like the provided image is either blank or doesn't contain meaningful content to convert to Markdown. If you have another page or document, please provide that for conversion.


Page 3

DOMINO and NUCLEUS

Software Guide

ND-820026.1 EN

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 4

The information in this manual is subject to change without notice.
Norsk Data A.S assumes no responsibility for any errors that may appear in this manual, or for the use or reliability of its software on equipment that is not furnished or supported by Norsk Data A.S.

Copyright © 1988 by Norsk Data A.S
Version 1
September 1988

Send all documentation requests to:

Norsk Data A.S
Graphic Centre
P.O. Box 25 - Bogerud
N-0621 Oslo 6
NORWAY

Scanned by Jonny Oddene for Sintran Data © 2011


Page 5

Preface

The manual

This manual describes DOMINO and NUCLEUS. Most of the modules are documented in separate chapters.

The reader

This manual is intended for maintenance personnel and system developers.

The Products

The OS-kit consists of several software modules to be used for running and developing system software on the DOMINO IO-controllers. DOMINO is only available on ND-5000 computers with MF-Bus memory (former MPM-5), whereas NUCLEUS is also available on ND-500-II with OCTOBUS. The DOMINO controllers are based on the Motorola MC-68020 microprocessors.

The OS-kit consists of: - DOMINOS - DOMINO Monitor and a "gateway" to OCTOBUS (BOPCOM Server). - DOMINO Debugger (slightly modified Symbolic Debugger) - DOMINO OPCOM (firmware) - NUCLEUS - NUCLEUS Monitor

Prerequisite knowledge

The user should be familiar with general program development on ND computers. It is not necessary to know much about the Motorola assembly language as most of the programs can be written in PLANC.


Page 6

Important Objects for Program Development

The following objects are important for program development under DOMINO/NUCLEUS:

  • SINTRAN RT-programs and ND-5000 applications
  • PLANC programming language
  • ND-500 Linkage Loader
Manual Reference Number
MPM-5 Technical Description ND-810004
DOMINO Standard Hardware ND-814001
SINTRAN III Commands Reference Manual ND-860128
SINTRAN III Real Time Guide ND-860133
SINTRAN III Monitor Calls Guide ND-860228
PLANC Reference Manual ND-860117
Symbolic Debugger User Guide ND-860158
LED User Guide ND-860266
ND-500 Loader/Monitor ND-860136
Linkage Loader User Guide & Reference ND-860182

Manuals for the MC68xxx microprocessors (published by Motorola Inc)


Page 7

Table of contents

1 Introduction

1

2 DOMINO Operation

9

2.1 DOMINO Overview

9

2.2 Configuration

11

2.2.1 Automatic configuration

11

2.2.2 Manual configuration

15

2.3 Image files

16

2.4 Use of LEDs on DOMINO controllers

17

2.5 DOMINO selftests

19

2.6 DOMINO reset. Algorithm

20

2.6.1 PROMAN SERVER. Algorithm

21

2.6.2 Booting of DOMINO. Algorithm

22

2.7 Event reporting and event log

23

2.7.1 How to operate the event log file

25

2.7.2 How to investigate the Event Log

26

2.7.3 How to use the event log

27

2.8 PROMAN Service port

28

2.9 PMA-Monitor

28

2.9.1 Commands in PMA-Monitor

29

  • LIST-CONFIGURATION
  • REBOOT-DOMINO
  • RECOVER-DOMINO
  • TERMINATE-DOMINO
  • LOAD-DOMINO

2.10 Interface to configuration data and boot functions

34

  • LIST CONFIGURATION
  • BootStatus
  • REBOOT
  • RECOVER
  • TERMINATE

Page 8

DOMINO Monitor

3.1 Miscellaneous commands

Command Page
EXIT 41
HELP 41
SET-ABORT-BATCH-ON-ERROR 42
CC 42
COMPUTE 43
NEW-USER-CONTEXT 44
OUTPUT-FILE 44

3.2 Communication commands

Command Page
OPEN-PATH 46
CHANGE-PATH 48
TEST-COMMUNICATION 50
USE-MAILBOX 52
LIST-MAILBOX-PARAMETERS 52
TRANSPARENT-MODE 53
SET-BREAK-CHARACTER 54
LIST-BREAK-CHARACTER 54
SET-DOPCOM-PARAMETERS 55
LIST-DOPCOM-PARAMETERS 55
SET-MICE-PARAMETERS 56
LIST-MICE-PARAMETERS 57

3.3 Execution commands

Command Page
SOFT-RESET 57
HARD-RESET 58
STOP-TARGET 58
PLACE-DOMAIN 59
DOWN-LOAD 60
GO 61
RUN 61
ATTACH-DOMAIN 62

3.4 Macro commands

Command Page
DEFINE-MACRO 63
EXECUTE-MACRO 65
RESUME-MACRO 67
ERASE-MACRO 67
DUMP-MACRO 68
LIST-MACRO-NAME 68
LIST-MACRO-BODY 69

Page 9

3.5 Debugging Commands

  • 3.5.1 DEBUGGER ................................ 70
  • 3.5.2 BREAK ................................... 77
  • 3.5.3 TEMPORARY-BREAK .......................... 78
  • 3.5.4 STEP .................................... 78
  • 3.5.5 RESET-BREAKS ............................. 79
  • 3.5.6 RESET-LAST-BREAK ........................ 79
  • 3.5.7 DEBUG-STATUS ............................ 80
  • 3.5.8 SET-SPECIFIC-ACCESS ..................... 80
  • 3.5.9 MAIN-FORMAT ............................. 80
  • 3.5.10 EXTRA-FORMAT ........................... 81
  • 3.5.11 LOOK-AT-PROGRAM ......................... 81
  • 3.5.12 LOOK-AT-STACK ........................... 82
  • 3.5.13 LOOK-AT-RELATIVE ........................ 87
  • 3.5.14 LOOK-AT-REGISTER ........................ 87
  • 3.5.15 LOOK-AT subcommands ..................... 88

3.6 DOMINOS Process Monitoring

  • 3.6.1 PROCESS-STATUS ........................... 92
  • 3.6.2 LIST-TIME-QUEUE .......................... 94

3.7 DOMINO Controller Commands

  • 3.7.1 SET-PROTECTION ........................... 95
  • 3.7.2 USE-PROTECTION ........................... 96
  • 3.7.3 LIST-PROTECTION .......................... 96
  • 3.7.4 USE-CACHE ................................ 97
  • 3.7.5 TARGET-IDENTIFICATION ................... 97
  • 3.7.6 TARGET-STATUS ............................ 98
  • 3.7.7 SCOPE-LOOP ............................... 99

4 Applications in DOMINO

  • 4.1 Getting started ............................. 101

5 DOMINOS

  • 5.1 DOMINOS Configuration ...................... 105
  • 5.2 DOMINOS Services ............................ 117
  • 5.3 Process Management .......................... 120
    • 5.3.1 Create Service ............................. 121
    • 5.3.2 Modify Service ............................. 124
    • 5.3.3 Begin Service .............................. 126
    • 5.3.4 End Service ................................ 128
    • 5.3.5 Abort Service .............................. 129

Scanned by Jonny Oddene for Sintran Data © 2011


Page 10

5.3.6 Kill service

  • Page 131

5.3.7 WhoAmI service

  • Page 133

5.3.8 ProsNo service

  • Page 134

5.3.9 PrName service

  • Page 135

5.4 The Event System

5.4.1 SetEv service

  • Page 137

5.4.2 ReadEv service

  • Page 138

5.4.3 WaitEv service

  • Page 138

5.4.4 SelWaitEv service

  • Page 142

5.4.5 UniWaitEv service

  • Page 142

5.5 Time Scheduled Events

5.5.1 InterEv service

  • Page 144

5.5.2 InterDel service

  • Page 145

5.6 Buffer Management

5.6.1 GetBuffer service

  • Page 148

5.6.2 RelBuffer service

  • Page 149

5.7 Exported system data

5.7.1 Fatal service

  • Page 150

5.8 DOMINOS for advanced programmers

5.8.1 The MC68K in supervisor mode

  • Page 152

5.8.2 Disable and enable interrupts

  • Page 154

5.8.3 Access rights in supervisor mode

  • Page 155

5.8.4 PLANC compiler

  • Page 157

5.8.5 Special rules for interrupt handlers

  • Page 162

5.8.6 Special rules for trap handlers

  • Page 163

5.8.7 Rules for UDS and PME

  • Page 165

5.8.8 Implementing exception handlers

  • Page 165

5.8.9 PIRCreateDriver Service

  • Page 166

5.8.10 UDSE scheduling primitives

  UFindPD UDSE-primitive
  UBlocPr UDSE-primitive
  UdeBlocPr UDSE-primitive
  • Page 167
  • Page 168
  • Page 168

5.8.11 Implementing UDS

  • Page 169

5.8.12 Implementing PME

  • Page 170

5.8.13 System processes

  • Page 171

6 NUCLEUS Overview

  • Page 173

6.1 NUCLEUS library files

  • Page 175

6.2 Including NUCLEUS in an application

  • Page 175

6.3 Communication Concepts

  • Page 177

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 11

NUCLEUS Library

7 NUCLEUS Library

7.1 Summary of NUCLEUS Calls

183

7.2 Parameters in NUCLEUS Calls

185

7.2.1 NUCLEUS Status Codes

186

7.3 NUCLEUS Call Interface

189

7.3.1 Create Port

189

7.3.1.1 Delayed Abort for NUCLEUS

191

7.3.2 Create Port Name

192

7.3.3 Open Port

194

7.3.4 Open Return Port

195

7.3.5 Delete Port Name

197

7.3.6 Create Message

198

7.3.7 Read or Write a Message

200

7.3.8 Send Message

202

7.3.9 Receive Message

204

7.3.10 Get Info

205

7.3.11 Close Port, Message or Sendreference

207

7.3.12 Get Version

209

7.4 Brief Introduction to Tables in NUCLEUS Kernel

210

7.4.1 NUCLEUS Call Sequence - An Example

213

8 PLANC Programming Example

219

9 Error Handling in NUCLEUS

227

9.1 NUCLEUS Start Up (System Booting)

227

9.2 NUCLEUS Fatal Errors

227

9.3 NUCLEUS Nonfatal Errors

229

9.4 Power Failure Handling

229

9.5 Verifications Tests During Start Up

230

9.6 NUCLEUS Verification Program

230

9.7 Debugging and Tracing of NUCLEUS

233


Page 12

NUCLEUS Monitor

10.1 Installation of NUCLEUS Monitor

Page 235

10.2 The command system

Page 236

10.3 NUCLEUS monitor commands

Page 237

10.3.1 NUCLEUS monitor - common commands

Command Page
Exit 237
Main-format 237
Get-port-name 238
Help 238
List-messages 238
List-names 239
List-ports 239
Verify 240

10.3.2 NUCLEUS Monitor - high-level commands

Command Page
Advanced-mode 240
Close 240
Create-message 241
Create-name 241
Create-port 241
Fill-data-buffer 242
Open-port 242
Print-data-buffer 242
Receive-message 243
Read-message 243
Send-message 243
Write-message 243

10.3.3 NUCLEUS Monitor - low-level commands

Command Page
Connect-file 244
Display-descriptor 244
Display-kicklist 244
Display-masterblock 245
Display-messages 246
Display-port 246
Dump-kernel 246
Extra-formats 247
Force-display 247
Get-Nucleus-memory 247
List-trace 248
List-quota 248
Look-at 248
Set-trace 248

Page 13

Table of Appendices

Appendix Title Page
A Image files 249
B DOMINO selftests 251
C Error and status codes 261
Index 273

Page 14

List of Figures

  1. DOMINO hardware components .................................................... 3
  2. DOMINO SW components .......................................................... 4
  3. DOMINO Overview ............................................................... 9
  4. DOMINO controllers in the MF-bus crate ....................................... 15
  5. Event reporting .............................................................. 24
  6. SERVER path to DOMINO controller ............................................ 47
  7. ASYL path to DOMINO controller .............................................. 49
  8. SERVER path using MAILBOX .................................................... 51
  9. PLANC-MC ordinary stack frame ................................................ 83
  10. PLANC-MC native stack frame .................................................. 85
  11. Structure of a DOMINOS configuration program ................................ 107
  12. DOMINOS configuration. USER ADDRESS PART .................................... 109
  13. DOMINOS configuration. EXTENSION PART ........................................ 111
  14. DOMINOS configuration. PROCESS PART .......................................... 111
  15. DOMINOS configuration. ROUTINE LIST .......................................... 111
  16. DOMINOS configuration. LOAD LIST ............................................. 112
  17. DOMINOS configuration. INSERT ................................................ 112
  18. DOMINOS configuration. SKIP .................................................. 113
  19. Round-robin scheduling ....................................................... 121
  20. DOMINOS relative memory layout ............................................... 147
  21. DOMINO memory protection ..................................................... 155
  22. Processes communicating via NUCLEUS .......................................... 173
  23. Tables in NUCLEUS kernel ..................................................... 210
  24. Record layout for a message in descriptor table .............................. 210
  25. Record layout for a homeport in descriptor table ............................. 211
  26. Record layout for a sendref in descriptor table .............................. 212
  27. Message buffer layout in bufferarea .......................................... 212
  28. Creating ports and names in NUCLEUS .......................................... 213
  29. Create message and open port ................................................. 214
  30. Write a message into the message buffer ...................................... 215
  31. Send a message ............................................................... 215
  32. Receive a message ............................................................ 216
  33. Read a message ............................................................... 216
  34. Pointers in descriptor table ................................................. 217
  35. Error in NUCLEUS ............................................................. 228
  36. NUCLEUS verification program ................................................. 230
  37. NUCLEUS verification program - screen picture ................................ 231
  38. Image file header versus image area .......................................... 250

Page 15

List of Tables

  1. DOMINO module names .......................... 14
  2. PIOC-compatible memory protection ............ 96
  3. Memory protection not allowed ................ 96
  4. DOMINOS error codes .......................... 119
  5. Function numbers and names in NUCLEUS calls .. 185
  6. NUCLEUS status/error codes ................... 187
  7. NUCLEUS calls and error/status codes ......... 188
  8. PROMA N(Processor Manager) error codes ....... 263
  9. DOMINOS, DOMINO Operating System errors ...... 265
  10. DOMINO Services (HW-LIB/OPCOM) error code ... 266
  11. DOMINO Services (BOPCOM) error codes ........ 267
  12. NUCLEUS operation error/status codes ........ 272

Page 16

[Blank Page]


Page 17

Chapter 1 Introduction

DOMINO

The basic idea of DOMINO is to have a range of powerful IO-controllers able to support the IO-needs for the ND-5000 CPUs. DOMINO introduces new hardware and software architecture for this purpose. DOMINO contains a standard environment for DOMINO IO-controllers, which make development easier for new applications.

Hardware

The manual deals with DOMINO, as seen from a software point of view. Only a short overview is given of the hardware architecture. (See the manual "DOMINO Standard Hardware" (ND-814001)).

The DOMINO controllers are connected to the common MFbus (Multi Function) memory. Each controller is able to transfer data to and from this memory (Direct Memory Access), which is the main data path. The MFbus, and all CPUs attached, support semaphore cycles to allow for process synchronizing. The MFbus has 32-bits data and address buses.

OCTOBUS

The OCTOBUS is a serial bus intended for sending short messages. It is mainly used for process synchronization. During initialization it passes configuration parameters. The DOMINO Monitor uses it as a communication path through the BOPCOM server.

MFbus

The MFbus Controller initializes the DOMINO controllers at power-up. OCTOBUS parameters and address space for the DOMINO controller in the MFbus memory are set. The very first time, this must be done by ND System Integration staff or ND service/support staff running the MFbus Controller Maintenance program.


Scanned by Jonny Oddene for Sintran Data © 2011


Page 18

Chapter 1 Introduction

DOMINO Controller

The DOMINO controller supports dedicated IO-processes (applications) to run within a common environment. Device-dependent hardware and software are added for each DOMINO-based development project.

Local Memory

A Controller can have from 1/2 to 8 MB of local memory. There is a parity bit for each byte in the 32-bit word.

Memory Protection

Memory protection is needed in the software architecture where many tasks run concurrently. The protection system in hardware supports such needs. A bus error is generated if attempting to refer an address with wrong privileges.

Timers

The MFP (Multi Function Peripheral) has four timers. One of them is used for generating clock interrupts. The MFP has also the USART for the terminal interface.

Debugging Tools

Some parts of the controller are present to ease developing and maintenance.

Breakpoint

A breakpoint can be defined for each memory location. This ensures fast program execution even when running with a debugger, as checking for breakpoints is handled by hardware. Local CPU processing power is not used for breakpoints.

Trace Connectors

The bus signals are available on trace connectors. A logic analyzer can be attached to the target via these.

RS232 Part

An RS232 C terminal interface allows for attaching a terminal directly to the controller.


Page 19

Chapter 1 Introduction

flowchart TB
    A[Inside host computer]
    B[OCTOBUS controller / MFbus adapter]
    C[MC-68020<br>Local RAM<br>OPCOM PROM<br>Device PROM<br>Memory protect<br>USART / timers]
    D[Case (device)<br>dependent hardware<br>(storage media,<br>terminals or data<br>communication)]
    E[Terminal and<br>trace interface]
    F[Device interface]
    G[Operator<br>terminal]
    H[MICE / logic<br>analyzer]
    I[To device]

    A --> B
    B --> C
    B --> D
    C --> E
    E --> G
    E --> H
    D --> F
    F --> I

Figure 1. DOMINO hardware components

DOMINOS and DOMINO Monitor

The dedicated applications handling I/O inside the DOMINO controller are run under the control of DOMINOS. DOMINOS is an operating system kernel common to all DOMINO controllers. Several applications may run concurrently as separate processes.

The DOMINO Monitor is an ordinary SINTRAN user-program, which is used for downloading and debugging of applications in the DOMINO controllers.

Both stand-alone applications and applications controlled by DOMINOS can be run. DOMINOS and its application processes are loaded at the same time into one domain. Code (for new processes) cannot be added to the DOMINO controller while it is running.


Page 20

Chapter 1 Introduction

flowchart TD
    USER --> |ND-500| A[DOMINO Monitor\nSuper kernel]
    A --> |XMSG| B[BOPCOM server\n(RT-program)]
    B --> |MPIT| C[DOMINO OPCOM]
    B --> |ND-100| B
    B --> |Ring 2| B
    C --> |OCTOBUS| D

    subgraph DOMINO
    C
    end

Figure 2. DOMINO SW components

DOMINO communication

The DOMINO Monitor communicates with the PROM-based OPCOM module in the controller (OPCOM means DOMINO OPerator COMmunication). It contains interrupt drivers for OCTOBUS and its local terminal interface. There is also code for performing hardware-related tests and code for execution of the commands via the DOMINO Monitor.


Page 21

Chapter 1 Introduction

Several commands for debugging and maintenance are available in the DOMINO Monitor. OPCOM is mainly invisible for the programmer.

Debugging may continue even after an application has crashed, as the firmware code remains intact. The DOMINO Monitor contains hardware-related debugging commands, while the integrated DOMINO Debugger operates on source level.

The DOMINO Monitor may communicate with DOMINO OPCOM in three different ways:

  • ASYL - ASYnchronous Line (terminal interface). Communication from terminal line on ND-100 to terminal line on DOMINO.
  • SERVER - BOPCOM server. This is by far the most used way of communication. Both ND-100 and the DOMINO controller need an OCTOBUS station.
  • MICE - Micro-In-Circuit Emulator replacing the MC68xxx processor. This is mainly used for debugging during hardware development of the controller.

Mailbox

A mailbox may be used in addition to terminal line and the server. The mailbox consists of a fixed part of physical MFbus memory (MPM). It must be accessible from both the DOMINO Monitor and the DOMINO controller. The data transfer becomes faster when using mailbox instead of serial transmission (terminal line and OCTOBUS).


Page 22

Chapter 1 Introduction

NUCLEUS

NUCLEUS is a library for fast message passing.

NUCLEUS Use

NUCLEUS is intended to be used only for all Norsk Data System applications requiring fast and reliable message passing between processes within one computer. The processes may for instance be one server with several clients. NUCLEUS cannot be used for communication between computers.

All processes communicating via NUCLEUS have to be within the same computer. By computer is meant one or several main CPUs and DOMINO controllers with access to the same physical memory and OCTOBUS.

NUCLEUS Kernel

NUCLEUS data structure reside in shared memory (MPM), operated upon by specific rules. Parts of physical memory are reserved for the data structure used by NUCLEUS.

NUCLEUS Library

The services provided by NUCLEUS are independent of the CPU and operating system where the process is running.

NUCLEUS Monitor

The NUCLEUS Monitor is a tool for inspection of tables and queues in NUCLEUS kernel.


Page 23

Chapter 1 Introduction

Communication Concepts

Communication between processes in NUCLEUS is based on ports and messages. Their descriptions reside in physical memory shared between the CPUs. (The NUCLEUS kernel)

Port

A port is an address (reference), where you can contact others, and vice versa. Ports may have a name. A port contains among other things an identification of the port owner and a pointer to received messages. Messages can be linked to a port, where they are queued in the same sequence as they arrive.

Message

A message is a physical buffer, which is sent (linked) between ports. A message consists of a physical buffer for data and a header containing for example a buffer descriptor and link to other messages.


Page 24

The page has no visible text or diagrams to transcribe into Markdown.


Page 25

Chapter 2 DOMINO Operation

2.1 DOMINO Overview

flowchart TD
    A(Event log\nASCII) -->|Inspect\nlog prog.| B(Event\nlog)
    B --> C(Error device)
    B --> D(Domino\nconfig.)
    D --> E(:IMAG)
    E --> C
    B --> F(PROMAN server:)
    F -->|Event msg.\ngateway| C
    F -->|Processor\nManager| C
    G(MFbus\ncontr.) --> F
    F --> H(MF-bus)
    H --> I(Octobus)
    I --> J(Domino)
    J -->|Opcom| K(DominoOS\nNucleus)
    K -->|"Appl."\nNucleus lib| J

Figure 3. DOMINO Overview


Page 26

Chapter 2 DOMINO Operation

PROMAN

The Processor Management server (PROMAN) is a system server running on ND-100. (See also page 21). The server is started immediately after system start and is responsible for:

  • Automatic booting of DOMINO-controllers at restart/power up

When the system is running, the server provides the following services:

  • Reboot DOMINO with default software on request
  • Reboot DOMINO with given software on request
  • Give DOMINO configuration data on request
  • Terminate DOMINO-controllers on request
  • Power-fail handling of DOMINO-controllers

Requests to PROMAN are sent by NUCLEUS. These requests are described in the section "Interface to configuration data and boot functions".

PROMAN Error Codes

Error codes returned from PROMAN, are found in Appendix C. See page 261-263.


Page 27

Chapter 2 DOMINO Operation

2.2 Configuration

Configuration in this context, is information given to the system about the kind of hardware (DOMINO controllers) that has been installed, and about the software that can be run on it.

The DOMINO hardware consists of cards that fit into the MF-bus crate. They are recognised by the MF-bus controller. It is possible to attach a console to the MF-bus controller for configuration and maintenance purposes. The hardware part of the configuration is described in the manual "MPM-5 Technical Description" (ND-810004.01).

A minor change is made to the configuration procedure to allow for software configuration. This is the normal way of telling the system which software to run on the controllers. This method is described under "automatic configuration". The other way, done by means of a configuration file, is described under "manual configuration".

2.2.1 Automatic configuration

This is the normal way that the operating system is told which software to place onto the controllers.

The software for a controller is contained in an image file. See page 16.

As a general rule, a DOMINO-controller is downloaded with a predefined image according to Module Number. This is a hardwired number on each card fetched by the MF-bus controller, (module/model number). See table on page 14.


Page 28

Chapter 2 DOMINO Operation

However, as there will be a need for different software to execute in several DOMINOS of the same type in the same system, changes have been made in the configuration procedure of the MF-bus controller. (MF-bus controller software version E00 or later, contained in 4 EPROMS, is prerequisite for DOMINO Operation).

This procedure is used during system integration to suit the customers needs. The configuration may also be changed by qualified service personal on-site by means of the MF-bus controller console. The software configuration is placed by the MF-bus software into the EEPROM in the back-wiring of the MF-bus.

An additional parameter may be entered during the normal hardware configuration of a DOMINO card on the MF-bus controller console. (the parameter is asked for, but is not mandatory). It is called "Basic Software Identification", and consists of a string of up to four characters, specifying the image to be downloaded.

An additional question is asked:

+----------------------------------------------+
| Basic Software Module identifier (4 characters): |
+----------------------------------------------+

All alphanumeric characters are permitted. More than 4 characters are ignored, missing characters are assumed blank. Default value is all blank (SPACE or NUL). The four byte string is saved among with the hardware parameters in the backwiring-EEPROM.


Page 29

Chapter 2 DOMINO Operation

The image name is then constructed as follows:

<product id> - <hardware id> - <basic software id> : IMAG

  • Standard part to identify product relationship, the product here being the Processor Manager-server, PROMAN, which has the product prefix PMA.

  • Identifier for h/w module number (4 chars). This identifier is looked up by the PROMAN program as a function of the hardware module number, see table 1 on page 14.

  • Software type identifier (max 4 chars). Necessary when more than one type of product runs on processors with the same module number. Examples are TCP/IP, COSMOS and SIBAS-communication, all running on Ethernet-III. This field is NOT intended to take care of version control.

If Basic Software Identifier is omitted, the image file name will be:

<product id>-<harware id>:imag

Examples

Image Name Description
PMA-GRAPH:IMAG % default image name for graphical controller.
PMA-ETH3-TCPI:IMAG % for communication TCP/IP
PMA-ETH3-COSM:IMAG % for communication COSMOS
PMA-ETH3-SIBR:IMAG % for SIBAS
PMA-SCSI-BDIO:IMAG % for BDIO etc.
   _______             ___________________
  |       |           |                   |
  |       |<--------->|                   |
  |_______|           |                   |
    |                 |                   |
    |                 |                   |
    |                 |                   |
   \|/               \|/                 \|/
Standard part   Defined at           Given by
for images      configuration        Module Number
                (Basic Software Id)  (see table)
                   |
                   |
                  \|/
       Standard part, prefix
       for PROMAN = PMA

Page 30

Chapter 2 DOMINO Operation

User-area

The PMA-files are stored on the user-area of user UTILITY.

Module Number Hardware-id Type of module
5B VMEI VME-bus interface
20B IPI3 IPI level III controller
21B SCSI SMDE controller (SCSI)
22B ETH3 Ethernet III
23B FPS5 FPS-5000 controller
24B TERM Terminal controller
25B GRAP Graphic controller
26B MFCC Multi function comms controller
27B VMEC VME-bus controller
30B DMAC MF-DMA controller

Table 1. DOMINO module names

DOMINO modules, not mentioned in the table above, with Module Number in the range 5 to 76(octal), will get their hardware identifier as shown in the table below:

Module Number Hardware-id
6B 006B
7B 007B
. .
. .
. .
75B 075B
76B 076B

Page 31

Chapter 2 DOMINO Operation

2.2.2 Manual configuration

It is possible to override the automatic configuration by using a configuration file.

Configuration file
The file must be named PMA-CONFIG:SYMB and placed under user SYSTEM. Configuration is not intended to be done this way under normal circumstances, but is for testing, debugging and exception cases.

An example of a configuration file is shown below:

┌───────────────────────────┐
│ 12 (UTILITY)PMA-ETH3-TEST │
│ 13 (SYSTEM)TEST-DOMINO    │
└───────────────────────────┘

 ┌───────────────────────────────────────────────────────┐
 │  Image file name to be downloaded.                    │
 │  Default user is RT, and default file type is :IMAG.  │
 │  OCTOBUS Station number to DOMINO                     │
 │  controller (MUST be octal).                          │
 └───────────────────────────────────────────────────────┘

OCTOBUS Station number (=Configured number)
↓
20

┌──────────┐    ┌────────┐
│ Terminal │    │ MF-bus │
│ (For con-│    │        │
│ figuration│    └───────┘
│ purposes) │       │
└──────────┘       │
                    │
┌──────────┐        │         ┌────────────────────────┐
│          │        │         │                        │
│Controller│────────┼─────────│                        │
│          │        │         │  Slot number           │
└──────────┘       1          2          3             │
           │         │         │          │            │
           │                                           │
           │           (Physical no. in crate)         │
           └───────────────────────────────────────────┘

Figure 3. DOMINO controllers in the MF-bus crate.


Page 32

Chapter 2 DOMINO Operation

2.3 Image files

Image files are used because they occupy less space on the disk, and are faster to place than domains.

Image file description

An image-file is the program and data to be placed into a DOMINO-controller, called Basic Software Module.

The file has a one-page header containing execution start address, bitmap and other information describing the image both in size and layout, (see figure in Appendix A, on page 250).

The rest of the file, from page one onward, is the initial content of the DOMINO's memory. Address zero in DOMINO physical memory corresponds to the start of page one on the image-file.

The image area is very often scattered, thus the file is likely to contain "holes".

The image is created by the tool "PMA-CRE-IMAGE". It takes a standard MC68xxx domain and converts it into an image file (:IMAG).

More information

In Appendix A, page 249-250, you will find a more thorough description of the image file.


Page 33

Chapter 2: DOMINO Operation

2.4 Use of LEDs on DOMINO Controllers

Each DOMINO controller has at least three LEDs (light emitting diodes) in three different colors:

Yellow

The yellow LED is by hardware connected to the MC68K processor such that it indicates whether it is running or idle (waiting inside the STOP instruction).

Green

This LED indicates from release C of DOMINO OPCOM and DOMINOS, whether the application is running or not. It is lit just before the first process is started by DOMINOS and switched off when the application terminates or aborts or when DOMINO aborts. Possible user-defined process management extension callable on process begin, are executed before the LED is switched on.

Red

The red LED is used to indicate error situations. There exist several situations when a DOMINO controller is unable to communicate via OCTOBUS. In such a situation, the controller will hang. The red LED is used to display at least some information about the reason of the fault. Different flashing patterns are used, and are interpreted as described below:

---------------------------------
|                               |
|  The LED is off all the time: |
|  Everything seems to be OK.   |
---------------------------------

---------------------------------
|                               |
|  The LED is on all the time:  |
|  This means that the selftest |
|  after reset has found some   |
|  fault. The controller may be |
|  used if the hardware can be  |
|  avoided. (For instance the   |
|  protection system).          |
---------------------------------

Page 34

Chapter 2 DOMINO Operation

█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █

Fast regular flashing: OPCOM receives a NAK when suspecting an ACK. ON-time = OFF-time ≈ 0.5 sec. Timing for the following patterns are corresponding to this.

█    █    █    █    █    █    █    █
█

Regular flashing long OFF/short ON: Something unusable received from OCTOBUS.

█  █       █  █       █  █  
█

Two short ON/one long OFF: Error returned when connecting to OMD.

█ █ █       █ █ █  
█

Three short ON/one long OFF: MPROTSET returns error when initially setting up memory protection.

█ █ █ █ █ █ █ █ █ █ █ █ █
█   █ █

One long ON/two short ON: The host switch stack is empty; nobody to send to.

█ █ █       █ █ █  
█       █

Three short ON/one long ON: OCTOBUS driver interface called with invalid function code.

█ █ █  █     █   █  
█

Four short ON/one long ON: OCTOBUS driver returns error when connecting to emergency message 177B or 176B.

█ █ █ █    █ █  █
█

Seven short ON/one long ON: The path to be used is unknown in OPCOM.

█       █       █                      
█ █

Regular very slow flashing: Error returned from OCTOBUS driver when sending.

█       █      █       █  
█

Regular flashing long ON/short OFF: Overflow on the host switch stack.


Page 35

Chapter 2 DOMINO Operation

2.5 DOMINO selftests

After power up, MCL and before booting, all DOMINO controllers perform a set of selftests to verify the hardware. These selftests are divided into two main groups:

  • Preboot tests
  • Postboot tests

The preboot tests run in EPROM, and verify all necessary hardware to be able to boot and run in DRAM (DOMINO Local Memory). The postboot tests consist of two parts:

  • Standard postboot tests
  • Device dependent postboot tests

The 'Standard postboot tests' is executed on all DOMINO controllers and test all the standard hardware parts such as MFP, interrupt system, protect system, BADAP, OBCON, etc. The 'Device dependent postboot tests' are tests specific for each type of DOMINO controllers, and test all the special hardware functions of the different controllers.

All standard tests (Preboot tests and Standard postboot tests) are located in the DOMINO OPCOM prom, while the device tests are located in the device prom.

More information

In Appendix B you will find a detailed description of the selftests. I.e.:

  • Test numbers
  • Selftest reporting to test connector
  • How to use a TDF
  • Exception handling in selftests
  • Description and names of preboot and postboot tests

Page 36

Chapter 2 DOMINO Operation

2.6 DOMINO reset. Algorithm

flowchart TD
    A[RESET] --> B["NON-Destroying (applies to memory) so-called 'preboot test'"]
    B --> C{"Power fail recovery"}
    C -->|No| D["post boot tests"]
    C -->|Yes| E["Enter 'WAITCONT' state\nWait for DOMINO OPCOM-command\nWAITCONT: see page 98"]
    D --> F["Initialize controller HW and OPCOM structures"]
    F --> G["Enter 'aborted' state"]
    G --> H["Wait for DOMINO OPCOM command"]
    E --> |(See previous section)| G

Page 37

Chapter 2 DOMINO Operation

2.6.1 PROMAN SERVER. Algorithm

Check for right configuration (ND-5000)
Setup ERS-log file
Setup lamu-buffers
Initialize time-queue
Initialize internal data structures
Initialize octobus and nucleus communication
Start threads for ERS-gateway and service interface
Get configuration..
  - find all MF-bus controllers (one for each card-crate)
  - DO FOR each MF-bus-controller
    - get crate-configuration (investigate-bank)
    - DO FOR each DOMINO-Controller in crate
      - get and save config data (list-configuration)
    - ENDDO
  - ENDDO
  - get configuration from config-file (pma-config)
  - redefine configuration for those found on file
Start boot-thread for each DOMINO-Controller

DO WHILE FOREVER
  get head of time queue
  wait for event
  IF event = timeout THEN
    find tread associated with timeout event occurred
    start tread
  ELSE % Communication receive event
    IF powerfail-event THEN
      handle powerfail
    ELSE
      DO WHILE something received
        case receive type
          incase OCTOBUS
            find thread associated with station number
          incase NUCLEUS-Service-port
            find service thread
          Incase NUCLEUS-ERS-gateway-port
            find ers-gateway thread
          ELSE
            report unexpected event
        ENDCASE
        IF legal thread THEN
          collect event information
          start thread associated with receive event
        ENDIF
      ENDDO
    ENDIF
  ENDIF
ENDDO

Page 38

2.6.2 Booting of DOMINO. Algorithm

Perform hard reset of DOMINO
Open image file
Get and save boot time
Perform echotest (EchoTest)
Get DOMINO-ident (IdentY), report selftest status
Perform stop (Stop)

DO
    Get block from image
    WHILE blocks left in image
        Fix block in buffer
        Set mailbox pointer in DOMINO (SetBxP)
        Download block from buffer to DOMINO local memory (BxDoLd)
        Unfix block in buffer
ENDDO

CLOSE image file
Get image execution start address
Put start address in DOMINO's program counter (RegMod)
Start DOMINO (Go-On)
Report DOMINO started

DO
    Start watchdog timer and wait
    Perform watchdog check
ENDDO


Page 39

Chapter 2 DOMINO Operation

2.7 Event Reporting and Event Log

ERS-reports from the DOMINO operations software are logged on a ring-file on the system disk. These reports have three different origins:

  • Reports from the Processor Manager itself.
  • Reports sent from OPCOM in DOMINO (sent via OCTOBUS to PROMAN). These reports are normally fatal-errors from low-level functions in DOMINO such as bus-error and unexpected traps and interrupts.
  • Reports from application software running in the DOMINO (sent via NUCLEUS to PROMAN, using the "PMAreport" call.)

The ring-file buffer always contains the last ERS-messages sent by the system, and may be recalled with the "PMA-DUMP-LOG" program.

Applications in DOMINO may report standard ERS events to the Watchdog in Sintran (ERS3WD). This is done by using the routine "PMAreport" included in DOMINO Programmers Kit. (ND number: 250297).

+-------------------------+
| ROUTINE VOID, VOID      |
|  ( INTEGER2,            |
|    BYTES POINTER)       | 
|  : PMAreport            |
|                         |
+-------------------------+
|  & SEC (Standard Error  |
|  Code) & EventData(User |
|  parameter part & of    |
|  standard event report) |
+-------------------------+

The routine will provide the interface to NUCLEUS, and send the report to the ERS-gateway server (part of PROMAN), which in turn will send the message to the Watchdog.


Page 40

Chapter 2 DOMINO Operation

flowchart TD
    ERROR_DEVICE[ERROR device] --> S3WatchDog
    S3WatchDog --> PROMAN
    PROMAN[["PROMAN\nEvent msg\ngateway\nserver"]] --> OCTOBUS
    ND_100[ND-100] --> PROMAN
    OCTOBUS --> DOMINO_CONTROLLER
    PMA_dump_log[PMA-dump-log\nprogram] -->|Ring file| PMA_ERS_BUFFER
    PMA_ERS_BUFFER -->|Inspect ERS-msg| INSPECT
    DOMINO_CONTROLLER[DOMINO\ncontroller] --> OPCOM
    OPCOM --> DOMINOS
    DOMINOS -->|PIRfatal| PIRfatal
    PIRfatal --> ERS_LIB
    ERS_LIB[ERS LIB] --> DOMINO_APP
    DOMINO_APP[DOMINO\napplication\nsoftware]

    "PMAreport" ---> PROMAN

Figure 4. Event reporting


Page 41

Chapter 2 DOMINO Operation

2.7.1 How to operate the event log file

The operation of the event log file (ring-file) is fully automatic. The PROMAN server will create it if it does not exist. The file may be deleted to empty the contents, or it may be recreated with new size to suit. Default size is 5 pages, which is enough to store a few hundred ERS-reports. The file must be at least two pages in size, and it must be contiguous. The file resides under user SYSTEM with the name PMA-ERS-BUFFER:DATA.

 _____________________________
|  NOTE !                     |
|_____________________________|
| The file must not be        |
| deleted or tampered with    |
| when the PROMAN server is   |
| active. If you wish         |
| to change the size or       |
| delete it, please do this   |
| before the server is        |
| started, or immediately     |
| before restarting the       |
| system. If the server is    |
| unable to log to            |
| the ring file, a message    |
| will report this to the     |
| system error console.       |
|_____________________________|

Page 42

2.7.2 How to Investigate the Event Log

To investigate the Event Log, simply use the program PMA-DUMP-LOG:PROG supplied in the DOMINO Maintenance Kit (ND no. 211322). Start the program under user SYSTEM and give a file name on which to dump the like this:

+--------------------------------+
| PROCEDURE:                     |
|                                |
| @PMA-DUMP-LOG   % call the program   |
| Output file: "MY-LOG"   % give dump file name |
| Bye!                       |
| @PED MY-LOG:SYMB   % investigate the file in an editor   |
+--------------------------------+
| OR:                            |
| @PMA-DUMP-LOG "MY-LOG"         |
| Bye!                           |
| @PED MY-LOG                    |
+--------------------------------+

The format dumped on the file "MY-LOG" is the same as the Watchdog server (ERS3WD) presents on the error device.


Page 43

Chapter 2 DOMINO Operation

2.7.3 How to use the event log

The PMAreport-routine is supplied as a :NRF file. The routine must be imported into a module where it is used as follows:

IMPORT (ROUTINE VOID,VOID(INTEGER2,BYTES POINTER): PMAreport)

The file "PMA-ERS:NRF" must be included in the load session.

For details about ERS in general, see SINTRAN III Release information, L-version. (ND-860230)


Page 44

2.8 PROMAN Service Port

The server will have a NUCLEUS service port (system port) accepting requests from other system servers.

Port name
The name of the port is PMAservicePort.

Several requests may be sent to the server using NUCLEUS messages. The server will acknowledge requests. Some requests may return data. The user is responsible for providing a large enough message for return of data.

┌───────────────────────────────────────────────────────────────────────┐
│ NOTE !                                                                │
│ Acknowledgements and return data will always be                       │
│ sent back to the request-message's home port.                         │
└───────────────────────────────────────────────────────────────────────┘

2.9 PMA-Monitor

The PMA-Monitor provides an interactive command interface to the service port functions in the Processor Manager (PROMAN). The monitor is supplied in DOMINO Maintenance Kit (ND-211311), as a :PROG file (PMA-MONITOR:PROG).

The monitor is started by means of the command:

@PMA-MONITOR,J

The PMA-Monitor prompts with PMA: whenever it is ready to accept a command.


Page 45

Chapter 2 DOMINO Operation

2.9.1 Commands in PMA-Monitor

The following commands are direct implementations of the service port's corresponding functions. The messages "Request acknowledged" and "Request not acknowledged" are printed as a consequence of ACK or NAK from the Processor Manager.

See also the section "Interface to configuration data and boot functions". Page 34-38.

LIST-CONFIGURATION

Purpose Display statistics for all the Domino controllers in a system, eg:
PMA: LIST-CONFIGURATION↵
SLOT 11 : Crate id 3 Octobus station 13B ---> SCSI CONTROLLER
     Module 21B Model 0B Print A Eco B
     Image file: "(UTILITY)PMA-SCSI-BDIO"
     Boot status: Domino started
     Boot time: 1988-08-28 21:09:22
SLOT 10 : Crate id 3 Octobus station 12B ---> ETHERNET III
                                         CONTROLLER
     Module 22B Model 0B Print D Eco D
     Image file: "(UTILITY)PMA-ETH3-TCPI"
     Boot status: Domino started
     Boot time: 1988-08-28 21:09:22
PMA:

The output from the LIST-CONFIGURATION command is explained on the following pages.


Page 46

Chapter 2 DOMINO Operation

In this example, Two DOMINO controllers are present in the system.

+--------------------------------------------------+
|                                                  |
|                    MF-bus Crate                  |
|                                                  |
+--------------------------------------------------+
^                        |                         ^
|                        |                         |
Slot 1                   |                         Slot 26
        Slot 10         Slot 11

Description of output from the LIST-CONFIGURATION command:

SLOT

The slot location in a card crate where the DOMINO is installed.

Crate id

DOMINO controllers reside in a card crate (card bank). Crate id is a unique identifier of the card crate's position. If your system has just one MF-bus crate, you may ignore this parameter. If there are more than one MF-bus bank, it is useful to know that the Crate id is actually the station number of the MF-bus controller in the Crate/Bank in question.

OCTOBUS station

The OCTOBUS station number to the DOMINO controller.

Module

Hardware Module Number tells what kind of card (type of DOMINO in this context) that is present in the slot. This is the origin for determining the hardware identifier in the image name, (see section about Automatic configuration, page 11).


Page 47

Chapter 2 DOMINO Operation

Model

Hardware model number.

Print/Eco

Engineering Change Order level is an official code for the status of hardware modifications performed on the card.

Image file

The image file name currently used (Basic Software Module). Normally this file name is the default one, or from the configuration file (PMA-CONFIG). It may also be the image name given in a RECOVER or LOAD command.

Boot status

Tells the status of a DOMINO controller as the Processor Manager (PROMAN) sees it. These states may be one of the following:

STATE MEANING
Undefined state No operation yet performed
Booting Initial booting in progress
Rebooting Rebooting in progress
Domino started Program in Domino controller started
Error received from Opcom Fatal error occurred in DOMINO
Booting aborted Booting, rebooting or load aborted due to error in load
Terminated Domino controller terminated due to request
Image placed Image place performed

Boot time

The time and date when the last boot, reboot or load started.


Page 48

Chapter 2 DOMINO Operation

REBOOT-DOMINO

Purpose

Reloads and starts the controller using the default image, or the one given in the configuration file (PMA-CONFIG:SYMB).

Parameter

<station number> = OCTOBUS station number to DOMINO controller (default octal)

The request is acknowledged if the station number is known by the system ie. the controller is configurated.


RECOVER-DOMINO

Purpose

Reloads and starts the controller using the given image.

Parameters

<station number> = OCTOBUS station number to DOMINO controller (default octal)

<image file> = Name of image file, default filetype is :IMAG, default user is RT

The request is acknowledged if the station number is known by the system ie. the controller is configurated. The syntax of the filename and the presence of the file is not checked at this point.


Page 49

Chapter 2 DOMINO Operation

TERMINATE-DOMINO


Purpose
To stop the DOMINO controller.

Parameters
<station number> = OCTOBUS station number to DOMINO controller (default octal)

The following functions are performed, in listed sequence:

  1. Opcom stop
  2. Nucleus close on behalf of controller, (releases all Nucleus resources held by controller).
  3. Hard reset (selftests starts)

LOAD-DOMINO


Purpose
Reloads and starts the given controller using the given image. (Same as RECOVER-DOMINO command, except that the final GO command is not issued).

Parameters
<station number> = OCTOBUS station number to DOMINO controller (default octal)

<image file> = Name of image file, default filetype is :IMAG, default user is RT

The image will be placed ready to run in the controller. Boot status in LIST-CONFIGURATION (page 31) will take value Image placed when the function has been performed.


Scanned by Jonny Oddene for Sintran Data © 2011


Page 50

2.10 Interface to Configuration Data and Boot Functions

See also the PMA-MONITOR on page 28. A type-definition may be found on the file:

PMA-SERVICE-COM:DEFS

The command specifications are given below:

List Configuration

Request TYPE tConfigRequest = RECORD PACK
BYTE: PMcommand % = 1 for config request
ENDRECORD
+---+
| 1 |
+---+
Size: 1 byte
Response TYPE tConfigEntry = RECORD PACK
BYTE: BankIndex, SlotIndex % range = 2..7 and 1..26
INTEGER2: ModuleModel % (see MF-bus controller documentation)
INTEGER2: OctStation % OCTOBUS station number
INTEGER2: BootStatus % (see below)
INTEGER2: CEecoLevel % Module's ECO-level (0 if undefined)
BYTES: ImFileN(0:61) % Image file name
INTEGER2 ARRAY: BootTime(0:6) % Time of last boot
ENDRECORD

| | TYPE tConfigResponse = RECORD PACK | | | BYTE: PMCRmessack, NoOfDOMINOes | | | tConfigEntry ARRAY: ConfigEntry(0:15) | | | ENDRECORD |


Page 51

Chapter 2 DOMINO Operation

          ┌──────────────────────────────────────────────┐
          │                                              │
          │                    0=ack / 377B=nak          │
          └──────────────────────────────────────────────┘
          ┌─────────────┬────┬───────────────────────────┐
messack   │ NoOf (0..16)│    │                           │
          └─────────────┘    │                           │
          ┌──────────────────┤      Bit 10:5 Module no.  │
Bank (2..7)                  │      Bit  4 (always 1)    │
          ┌──────────────────┤      Bit  3:0 Model no.   │
Slot (1..26)                 │                           │
          └──────────────────┘                           │
          ┌──────────────────────────────────────────────┤
Module/Model                                            │
          └──────────────────────────────────────────────┘
          ┌──────────────────────────────────────────────┐
OCTO STATION                                            │
          └──────────────────────────────────────────────┘
          ┌──────────────────────────────────────────────┐
Bootstatus                                              │
          └──────────────────────────────────────────────┘
          ┌──────────────────────────────────────────────┐
ECO-LEVEL                                              │
          └──────────────────────────────────────────────┘
                   ┌───────────────────────────────────┐
                   │ IMAGE FILE NAME (62 bytes)        │
                   └───────────────────────────────────┘
                       ┌─────────────────────────────┐
                       │                             │
                       │ BTU                         │
                       ├─────────────────────────────┤
                       │ Second                      │
                       ├─────────────────────────────┤
                       │ Minute                      │
                       ├─────────────────────────────┤
                       │ Hour                        │
                       ├─────────────────────────────┤
                       │ Day                         │
                       ├─────────────────────────────┤
                       │ Month                       │
                       ├─────────────────────────────┤
                       │ Year                        │
                       └─────────────────────────────┘
                           ┌──────────────────────┐
                           │        B O O T       │
                           │        T I M E       │
                           └──────────────────────┘
Size: 2 + NoOfDOMINOes * 86 bytes

Page 52

BootStatus

Bootstatus is an enumeration value telling the status of a controller, these are:

Code Status Description
0 pmUndef Found in configuration, no action yet performed
1 pmBooting Initial booting in progress
2 pmRebooting Reboot in progress due to request
3 pmStarted Controller has been started after boot/reboot
4 pmError An error has been received from Opcom after start
5 pmAborted Boot or reboot aborted due to error
6 pmTerminated Controller has been terminated due to request

REBOOT

Request

TYPE tReBootRequest = RECORD PACK
  BYTE:   PMcommand % = 2 for reboot request
  INTEGER2: ReBootStation
ENDRECORD
+---+
| 2 |
+-----------+
| Reboot station number |
+-----------+

Size: 3 bytes

The parameter is the OCTOBUS station number of the DOMINO card you wish to reboot.

Response

TYPE tReBootResponse = RECORD PACK
  BYTE: PMRBRmessack ENDRECORD
+----------+
| messack  |---->[ 0=ack / 377B=nak ]
+----------+

Size: 1 byte


Page 53

Chapter 2 DOMINO Operation

NOTE !

An acknowledgement here means that the controller is found in the configuration, and that a reboot is in progress. It is not an acknowledgement that a reboot has performed satisfactorily. One way confirming this is by polling the list-configuration function and watching the "BootStatus" field. A better way is to put this in the design on a higher level by sending acknowledgement from the DOMINO software when it wakes up in the controller.

RECOVER

Request

TYPE tRecRequest = RECORD PACK
  BYTE:     PMcommand % = 3 for recover request
  INTEGER2: RecStation
  BYTES:    RecImageName(0:61)
ENDRECORD
 ___________      _____________________________________
|           |    |                                     |
|     3     |    |    Recover station number           |
|___________|    |_____________________________________|
//
|   Image file name (62 bytes)                         |
|_____________________________________________________|

Size: 65 bytes

Response

TYPE tRecResponse = RECORD PACK
  BYTE: PMRECmessack 
ENDRECORD
 ___________      
|           |     
|  messack  | ---- [ 0=ack / 377B=nak ]
|___________|     

Size: 1 byte

NOTE !

See note for Reboot.


Page 54

Chapter 2 DOMINO Operation

TERMINATE

Request

TYPE tTermRequest = RECORD PACK
  BYTE: PMcommand % = 4 for terminate request
  INTEGER2: TERMstation
ENDRECORD
+----------------------+
|          4           |
+----------------------+
| Terminate station    |
| number               |
+----------------------+
Size: 3 bytes

Response

TYPE tReTermResponse = RECORD PACK
  BYTE: PMTERMmessack
ENDRECORD
+---------+     +-------------------+
| messack | --->| 0=ack / 377B=nak  |
+---------+     +-------------------+
Size: 1 byte

Page 55

Chapter 3 DOMINO Monitor

This chapter describes the commands in the DOMINO Monitor. The purpose of the DOMINO Monitor is to debug and maintain DOMINO IO-controllers. The program supervises the DOMINO controller through the OPCOM module inside the target, or via an inter-circuit emulator (MICE-II).

The descriptions of the commands are grouped into sections according to function.

Starting

The DOMINO Monitor is a program that can be run in the ND-500/5000 computers. It can be started as follows:

┌──────────────────────────────────────────────┐
│@ND-500-MONITOR DOMINO-MONITOR↓               │
│                                              │
│DOMINO-MONITOR Version C of: <Month Day>, <Year>    │
│        Entered: <Month Day>, <Year>. Time: <Ho:Min>│
│DM: HELP↓                                        │
│Command: //                                      │
│......                                           │
│DM: EXIT↓                                        │
│DOMINO-MONITOR session terminated at:             │
│        <Month Day>, <Year>. Time                  │
└──────────────────────────────────────────────┘

Prompt

The DOMINO Monitor prompts with DM: whenever it is ready to accept a command.

Notation

When describing the commands available in the DOMINO Monitor, the following rules apply:

  • All parameter names are enclosed in <> brackets.

Page 56

Chapter 3 DOMINO Monitor

  • If a parameter that is asked for has a default value, the default value is enclosed within slashes //
  • The names of optional parameters are enclosed in () brackets.
  • If more than one value must be specified, the right bracket is followed by three dots, as in <Parameters>...

Command Entering

All commands, domains and file names may be abbreviated as long as they are unambiguous. The abbreviation rules are as for SINTRAN. The full range of SINTRAN editing characters is available.

The DOMINO Monitor will prompt for missing default parameters.

ESCape

A Command and parameter collection can be aborted by pressing ESCape. The user returns to the command level in the Monitor. Command execution may also be interrupted in this way. Special NOTIS keys generating ESCape characters are therefore also harmless to the program.

@

If the first character of a command line is @, the rest of the line is taken to be a SINTRAN command. The command is checked before being sent to SINTRAN. This safeguards against starting another program unintentionally and thus causing automatic termination of the Monitor.

&

The character & means that the input line is continued on the next line.

Radix

Numeric arguments may be given in octal, decimal or hexadecimal format. The default radix is octal, but it may be changed by use of the MAIN-FORMAT command. A trailing B (octal) D (decimal) or H (hexadecimal) may override the current format except if it is hexadecimal. Hexadecimal numbers must start with a digit.


Page 57

Chapter 3 DOMINO Monitor

3.1 Miscellaneous commands

This command group is general in the sense that it is not related to any function of the DOMINO controller. Some of these commands affect the program environment.

3.1.1 EXIT

Purpose
Terminates the execution of the DOMINO Monitor. Note that EXIT cannot be used within a macro. This command is used for releasing reserved resources (for example the DOMINO controller). All breakpoints - if any - are released, and if possible the control is given back to the Processor Manager.

3.1.2 HELP

HELP <Command>

Purpose
All commands matching <Command> will be written together with their parameters to the output file.
Command
Any command abbreviation, ambiguous or nonambiguous. Default is all commands.
Parameters
Note that HELP may also be used for some parameters to obtain a list of legal choices.

Page 58

3.1.3 SET-ABORT-BATCH-ON-ERROR

SET-ABORT-BATCH-ON-ERROR \<ON/OFF: /ON/ >

Purpose

When the DOMINO Monitor is invoked from a batch job, it usually does not make sense to continue after an error has occurred. The Monitor therefore, by default, aborts the batch job in error situations. This command is used for changing this condition. Non-critical sequences in a batch job can ignore the error conditions by using this command.

ON/OFF

ON: the batch job should be aborted after any error.
OFF: only the current command should be ignored after error. Error messages are still output to the batch output file. This is similar to interactive execution mode.

3.1.4 CC

CC \<any text string>

Purpose

This command is for writing comments in a batch or mode job. It does not affect the DOMINO Monitor.


Page 59

Chapter 3 DOMINO Monitor

3.1.5 COMPUTE

COMPUTE <Expression /O/ >

Purpose

Evaluate and display the value of a simple arithmetic expression. The result is displayed in octal, decimal and hexadecimal format. Negative numbers are shown as two's complement for the octal and hexadecimal format.

Operations available are addition (lowest priority), subtraction, multiplication and division (highest priority). Parentheses may be used to force parts of the expression to be evaluated out of the normal priority sequence. There are no practical limitations to the number of nesting levels allowed. Unary plus and minus, real numbers and exponents are not implemented.

Example

Example
DM: COMPUTE 1+2-34/(5+6-78D/9D) ↵
1B 1 1H

Scanned by Jonny Oddene for Sintran Data © 2011


Page 60

3.1.6 NEW-USER-CONTEXT


Purpose
Changes the current SINTRAN user-area without losing any context within the DOMINO Monitor. This is particularly useful for getting necessary access to files on several user-areas. The command is for security reasons restricted to users who originally have been logged in as user SYSTEM.

User
The name of the new SINTRAN user-area.

+---------+
| Example |
+---------+
|         |
| DM: NEW-USER-CONTEXT DOMAINS-500 |
| Now entered as user: DOMAINS-500 |

3.1.7 OUTPUT-FILE


OUTPUT-FILE <File name> /TERMINAL/

Purpose
This command is used for directing the information stream from the DOMINO Monitor to a file. Initially this information appears on the user's terminal. Commands, parameter prompts and error messages will continue to appear on the terminal after switching. The <File name> is used as output file until EXIT or a new OUTPUT-FILE command is given.

File name
The name of the file where output is desired. A new file can be created by giving the name within double quotes ("). Default file type is :SYMB.


Page 61

Chapter 3 DOMINO Monitor

3.2 Communication commands

These commands are related to establishing communication with the target, and for inspecting and altering parameters describing communication behaviour.

The DOMINO Monitor has to access the DOMINO controller via communication media. This can be achieved in three ways:

  • Through a terminal line to an inter-circuit emulator (MICE-II). The logical name for this path is MICE.
  • Through a terminal line to the OPCOM module running inside the controller (ASYnchronous Line). The logical name for this path is ASYL.
  • Through BOPCOM SERVER to the OPCOM module. The logical name for this path is SERVER.

The terminal lines are treated as files, so they must be defined as peripheral files in SINTRAN. The path which is used for performing commands at the moment is displayed within parentheses when the DOMINO Monitor prompts for a command. This path is called the current path.

A command may be prefixed with a path-name inside parentheses. The path given will then be used for this command, but the current path is restored after the command is performed.

+------------------------------------------------------+
| Example                                              |
+------------------------------------------------------+
| DM(SERVER): (ASYL)LOOK-AT-STACK↵  %command performed |
|                        on ASYL                       |
| DM(SERVER): LIST-MICE-PARAMETERS↵ %affects only      |
|                        DOMINO-MONITOR                |
+------------------------------------------------------+

Scanned by Jonny Oddene for Sintran Data © 2011


Page 62

Chapter 3 DOMINO Monitor

3.2.1 OPEN-PATH

OPEN-PATH <Path name /SERVER/ >,<station number>

Purpose

It opens the path associated with <Path name>, and an attempt will be made to connect to the target. This command must be given before any communication between a target and the DOMINO Monitor can start. Information about whether this has succeeded or not is displayed. The opened path is used as the current path for subsequent communication with the target.

At the most one path of each type can be opened at the same time. This is to permit several communication media to reach the same target without losing any opened path.

Path name

The logical name of the path. If the <Path name> is MICE or ASYL this takes place via the peripheral file. If the <Path name> is SERVER, it takes place via the Bopcom server to the given station number.

Station number

Station number associated with the given path.

Example
DM: OPEN-PATH SERVER 30↵
Connected to MC68020 based controller
DM(SERVER):

Page 63

Chapter 3 DOMINO Monitor

The figure below illustrates the path from DOMINO monitor to DOMINO controller using the BOPCOM server. Path name is SERVER.

graph TD
    A[DOMINO monitor] -->|XMSG| B[BOPCOM server]
    B -->|OCTOBUS| C[DOMINO controller]
    C --> D[DOMINO OPCOM]
    D --> E[DOMINOS]
    E --> F[DOMINO "application" SW]
    F --> G[Device]
    B -->|RT-program in ND-100.| C

Figure 5. SERVER path to DOMINO controller


Page 64

3.2.2 CHANGE-PATH

CHANGE-PATH <Path name /SERVER/ >

Purpose
This command requires that the parameter <Path name> is open. The path will from now on be used as the current path, and <Path name> will appear between parentheses in the prompting text.

Path name
The name of an already opened path.

+---------+
| Example |
+---------+
| DM: OPEN-PATH SERVER 24                              |
| Connected to MC68020 based controller %connection     |
|                                                    established |
| DM(SERVER): OPEN-PATH ASYL ASYL-DISC               %Opening    |
|                                                    another path|
| Connected to MC68020 based controller %ASYL        |
|                                                    becomes     |
|                                                    current     |
|                                                    %path       |
| DM(ASYL): CHANGE-PATH SERVER                       % Switch back|
|                                                    to SERVER   |
|                                                    path        |
| DM(SERVER):                                         |
+----------------------------------------------------+

Page 65

Chapter 3 DOMINO Monitor

The figure below illustrates the path from DOMINO monitor to DOMINO controller using the ASYnchronous Line. Path name is ASYL.

flowchart TD
    A(DOMINO monitor) -->|ASYL (RS232)| B(DOMINO controller)
    B --> C(DOPCOM)
    C --> D(DOMINOS)
    D --> E(DOMINO "APPLICATION" SW)
    E --> F(Device)

Figure 6. ASYL path to DOMINO controller


Page 66

3.2.3 TEST-COMMUNICATION

TEST-COMMUNICATION

Purpose

Tests communication between the DOMINO Monitor and the target via the standard path. The test is performed by writing and reading several bit patterns. The communication cannot be tested via MICE.

Number of times

The number of times to run the communication test.

If there are no errors during the tests, two communication parameters are reported:

  • Elapsed time used on sending 100 bytes 100 times.
  • Communication overhead, measured as the time used for sending 0 bytes 100 times.

If an error occurs during transmission, the following is reported:

  • Bits lost, and in which direction.
  • Whether data received is different from data expected or not.

Page 67

Chapter 3 DOMINO Monitor

graph TD;
    A[DOMINO monitor] -->|XMSG| B[BOPCOM server];
    B -->|RT-program<br>in ND-100.| C;
    C -->|MFbus| D;
    D --> E(Multiport<br>Memory);
    E --> F(MAIL<br>-BOX<br>N-1);
    E --> G(MAIL<br>-BOX<br>N);
    E --> H(MAIL<br>-BOX<br>N+1);
    D -->|OCTOBUS| I;
    I --> J[DOMINO controller<br>N];
    J --> K[OPCOM];
    K --> L[DOMINOS];
    L --> M[DOMINO<br>"APPLICATION"<br>SW];
    M -->|Device| I;

Figure 7. SERVER path using MAILBOX

Transparent-mode (see page 53) must be used to give input to an application running inside target (OPCOM or MICE-II).


Page 68

3.2.4 USE-MAILBOX

USE-MAILBOX

Purpose

A mailbox can be used in addition to the terminal line or Bopcom server paths to speed-up communication. It resides in physical memory and has installation-dependent characteristics.

This command turns the use of the mailbox OFF or ON for communication in subsequent commands. Communication between DOMINO Monitor and DOMINO controller is tested if the use of it is turned ON. The mailbox definition remains even if the use of the mailbox is turned OFF.

NOTE! The reset commands will turn off the use of the 
mailbox as the DOMINO controller loses information 
about where the mailbox is after this command is 
given.

3.2.5 LIST-MAILBOX-PARAMETERS

Purpose

List the parameters defining the mailbox.

Example

┌──────────────────────────────────────────┐
│ DM(SERVER): USE-MAILBOX ON               │
│ DM(SERVER): LIST-MAILBOX-PARAMETERS      │
│                                          │
│ Use-Mailbox                          : ON│
│ ND-100 page number for MF page zero  : 1400B │
│ MF page number for mailbox           : 400B  │
└──────────────────────────────────────────┘

Page 69

Chapter 3 DOMINO Monitor

3.2.6 TRANSPARENT-MODE

TRANSPARENT-MODE ()

Purpose
This command connects the user directly to the target. If the standard path is ASYL or SERVER, this is the OPCOM module. If the path is MICE, this is the MICE-II command processor.

All characters typed by the user go directly to the target, and the DOMINO Monitor only registers the transfer. The same applies to data sent from the target to the user. This command is terminated by typing the break character. Default value for the break character is @ (ASCII 100B), but it may be changed with the SET-BREAK-CHARACTER command.

Transparent mode must be used for giving input to an application running inside the target.

Path name
If the optional parameter is not given, the current path is used. It has to be given if it is impossible to open a path to the target.


Page 70

Chapter 3 DOMINO Monitor

3.2.7 SET-BREAK-CHARACTER

SET-BREAK-CHARACTER <Break character /100B/ >

Purpose
Change the character that terminates the transparent communication mode initiated by the TRANSPARENT-MODE command.

Break character
The ASCII value of the break character. Select a value not used by the application running inside the target.

Control characters can be used as long as they are not used by the application. This is because the SINTRAN line-editing characters do not apply when the DOMINO Monitor is in transparent mode.

3.2.8 LIST-BREAK-CHARACTER

LIST-BREAK-CHARACTER

Purpose
This command displays the break character that terminates the TRANSPARENT-MODE command.


Page 71

Chapter 3 DOMINO Monitor

3.2.9 SET-DOPCOM-PARAMETERS

Purpose
Several parameters concerning the communication between DOMINO Monitor and the target may be changed using this command. The unit of measure for time parameters is BTU. One Basic Time Unit is 20 ms.

Parameter Description
SOH-TO SOH timeout. The maximum time to wait for receiving the Start Of Header message from the DOMINO controller after a function has been asked for.
Succ* Successive timeout. The maximum time to wait for reading the next data unit within a message.
IniHold* Initial hold. Not used in the present version of the DOMINO Monitor.
DLoad# Download retries. The number of unsuccessful retries to make before aborting when downloading a domain to the DOMINO controller.
General# General retries. The number of retries to make after a communication error (e.g. the DOMINO Monitor gives an unexpected answer, or a message has been destroyed during transmission).

3.2.10 LIST-DOPCOM-PARAMETERS

Purpose
List the parameters that determine the communication behaviour between the DOMINO Monitor and the DOPCOM module. They are displayed in the same order as they appear in the SET-DOPCOM-PARAMETERS command.


Scanned by Jonny Oddene for Sintran Data © 2011


Page 72

Chapter 3 DOMINO Monitor

3.2.11 SET-MICE-PARAMETERS

Purpose

Several parameters concerning the communication between DOMINO Monitor and the MICE-II may be changed by using this command. The unit of measure for time parameters are either ms or BTU (1 BTU = 20 ms). Several parameters are needed for this communication, as the DOMINO Monitor requests functions on MICE by simulating operator input directly to the MICE command processor.

Parameter Description
Clear* Clear timeout. The maximum time (ms) available for clearing the MICE output buffer.
Mem* Memory timeout. The maximum time (ms) to wait after requesting a memory location a break point change from MICE, or after giving the GO command.
Reg* Register timeout. The maximum time (BTUs) to wait after requesting a register from MICE.
IStep* IStep timeout. The maximum time (BTUs) to wait after requesting the single-step execution mode from MICE.
Step* Step timeout. The maximum time (BTUs) to wait for data about a single step.
Type* Type timeout. The maximum time (BTUs) to wait when opening a path to MICE and requesting target identification.
DlD* Download timeout. The maximum time (BTUs) to spend on downloading a domain for emulation in MICE. The timeout value includes all successive retries.
DlD# Download retries. How many retries to make after an unsuccessful download of a domain to the DOMINO controller.
EscDel ESCape delay. The time to wait (BTUs) between receiving the results of a requested function and sending ESCape to acknowledge MICE.

Page 73

Chapter 3 DOMINO Monitor

3.2.12 LIST-MICE-PARAMETERS

Purpose

List the parameters that determine the communication behaviour between DOMINO Monitor and MICE-II.

3.3 Execution commands

The commands in this category are used for loading, starting and stopping execution of an application.

3.3.1 SOFT-RESET

Purpose

This command will perform a software reset on the target. The target enters aborted state. The reset is performed by sending a specific command to the target, which means that the effect of this command depends on whether the target is running and able to receive the SOFT-RESET command or not. This command is only available when using ASYL or SERVER as the current path.


Page 74

3.3.2 HARD-RESET


HARD-RESET

Purpose
This command performs a hardware reset on the target. The target state becomes aborted. Both the processor and the device hardware on the target will be put into an initial state. This command is particularly useful after a software crash in the controller. This command is only available when using MICE or SERVER as path.

NOTE!
Even if OPEN-PATH to a controller does not work, it is possible to send a HARD-RESET to that controller. After HARD-RESET, the user should wait until the selftest has terminated (5-15 seconds depending on memory, SCSI and controller type).


3.3.3 STOP-TARGET


Purpose
The execution of the current application stops, and the target state becomes stopped.

If the application, for example goes into an endless loop, and is outputting something on the terminal, user commands will still be received by the DOMINO Monitor. Only echo from what the user types, and output from the Monitor may disappear between the application output. In this case both the DOMINO Monitor and the application may be temporarily stopped by XON/XOFF. CTRL+S halts the program, while CTRL+Q resumes execution.


Page 75

Chapter 3 DOMINO Monitor

3.3.4 PLACE-DOMAIN


PLACE-DOMAIN

Purpose
The domain is placed in the target's memory and made ready for execution. The program counter is set to the start address of the domain. The target state must be stopped or aborted before this command is given.

Domain
Name of the domain. It may be preceded by a SINTRAN user-area in parentheses. COSMOS Remote File Access is also supported, so the complete domain specification becomes:
System(Remote-user(Password)).(User)Domain
Both old and new domain formats are supported.

+---------+
| Example |
+---------+

DM(SERVER): SOFT-RESET⇩
DM(SERVER): STOP-TARGET⇩
DM(SERVER): PLACE MY-APPLICATION⇩

Placing (PACK-ONE:DOMINO-USER)MY-APPLICATION:DSEG
1042000B is current address.
243306B bytes transmitted.
Placing (PACK-ONE:DOMINO-USER)MY-APPLICATION:PSEG
410000B is current address.
10420B bytes transmitted.

% The application is now ready to be started

Page 76

3.3.5 DOWN-LOAD

DOWN-LOAD \<File to download>

Purpose

Download a file from the SINTRAN file system into the controller.

File to download

The file must contain Motorola S-record format. S7, S8, or S9 records will modify the PC-register according to the given start address when the RUN command is used.

The Object Converter can be used for making S-records from :NRF format. It can save some time during downloading, as program variables with no initial values (for example stacks, heaps) are not loaded. On the other hand, S-records are in ASCII format which must be converted into binary format during loading. Debug information is not supported by the Object Converter.

+------------------------+
|        Example         |
+------------------------+
| % use Object Converter |
|   to make Motorola     |
|   format of domain     |
|                        |
| DM(SERVER): SOFT-RESET |
| DM(SERVER): STOP-TARGET|
| DM(SERVER): DOWN-LOAD  |
|   MY-APPLICATION:MOBJ  |
|                        |
| 300 is the current     |
| record number          |
| Downloading finished.  |
| 318 records            |
| transmitted.           |
|                        |
| % The application is   |
|   now ready to be      |
|   started by RUN       |
|   command              |
+------------------------+

Page 77

Chapter 3 DOMINO Monitor

3.3.6 GO

GO (

)

Purpose
Start execution of a program from <Address>.

Address
The <Address> is loaded into the PC-register and execution started. If no <Address> is given, execution starts from current value of the PC-register.

┌─────────┐
│ Example │
└─────────┘

% Assumes that domain in Motorola format is loaded. Its S8
% record is S804020204F3 giving start address 020204H.

DM(SERVER): GO 020204H

3.3.7 RUN

Purpose
The current domain in the target is started at its start address (main entry). This command requires that a domain has already been loaded by use of either PLACE-DOMAIN or the DOWN-LOAD command.


Page 78

3.3.8 ATTACH-DOMAIN

ATTACH-DOMAIN <Domain>

Purpose

This command is used when a domain is already placed in the target's memory and has been aborted during execution. The command allows investigation of the aborted domain.

Domain

The name of a domain in the specified description file. The <Domain> may be prefixed with COSMOS RFA notation:
System(Remote-user(Password)).(User)Domain

3.4 Macro commands

Macros provide a convenient mechanism for executing the same set of commands repeatedly. As macros may have parameters, they can be regarded as user-defined commands.

Macros are particularly useful for programs requiring certain initialization commands to be given before execution starts, or for executing a set of debug commands.

Each user may in fact build his own set of macros from:

  • DOMINO Monitor commands
  • SINTRAN commands
  • other macros

Macros may be saved permanently in files, or they may just be temporary, vanishing when the DOMINO Monitor is left.


Page 79

Chapter 3 DOMINO Monitor

3.4.1 DEFINE-MACRO

DEFINE-MACRO <Macro name>
<Macro body> END-MACRO

Purpose

Compose a new macro from the basic commands or other macros.

Macros defined by this command are temporary. Permanent macros may be prepared by an editor on a file. The DOMINO Monitor expects file type :MACR. The number of temporary macros that may be defined are only limited by internal storage (heap) reserved for macros.

Macro name

The name of the new macro. It can consist of any number of visible characters except space or comma.

Macro body

Every line following the DEFINE-MACRO command is taken as the macro body until the END-MACRO is encountered. It must be written on the beginning of a new line. It can be abbreviated to just E. The macro contents will not be checked before execution.

Parameters

It is possible to define formal parameters within the macro body. They are replaced by actual parameters when the macro is called. A parameter is defined by

PARAMETER <Parameter name> <Default value>
<Prompting text>

PARAMETER is a keyword that cannot be abbreviated or used for other purposes. If spaces or commas are part of any of the parameter's parameters, they must be enclosed in single quotes ('). Quotes are permitted but not required otherwise.


Page 80

Chapter 3 DOMINO Monitor

The first actual parameter supplied in the macro call line replaces all occurrences of the <Parameter name> used in the first PARAMETER definition. The second actual parameter replaces <Parameter name> used in the next PARAMETER definition, and so on. Excessive parameters are ignored.

Default value If the actual parameter is empty, the default value is used when expanding the macro. Parameters without default are replaced with an empty string when not specified.
Prompting text When a macro is executed, all parameters are prompted for. That means successive parameters cannot be specified on the same line.
Parameter scope Parameter declarations are legal anywhere in the macro body. This means that parameters can be declared after some macro statements. The scope of the declaration is from the declaration point to the end of the macro (provided that it is not redeclared).

Page 81

Chapter 3 DOMINO Monitor

3.4.2 EXECUTE-MACRO

EXECUTE-MACRO <Macro name>, (<Parameters> ...)

Purpose
The macro with the specified name is processed. Formal parameters are substituted with actual parameters.

Macro name
The name of an existing (temporary or permanent) macro.

Parameters
Actual parameters to replace the formal parameters in the macro. Each parameter must be specified on a separate line. The parameter may contain any character except space or comma.

The words EXECUTE-MACRO can often be left out. The search strategy used for looking up a command or macro is as follows:

  • Search through list of DOMINO Monitor commands. If a match is found, the corresponding command is processed.
  • Search through list of temporary macros. If any matching macro is found, it is processed.
  • Test for permanent macro. If a file matches the specified string (default file type :MACR), it is taken to be a permanent macro and processed. The file system will ensure that, if a file with the specified name is not found under the current user, user SYSTEM's default directory is searched.
  • If not yet found, it is assumed not to exist.

Page 82

Chapter 3 DOMINO Monitor

Note that the extension (directory:user) cannot be put in front of a file name specification, as it is taken to be a path specification. Consequently, a macro must either reside on the current user-area or on user SYSTEM. File type extension may be used to overrule the default :MACR.

Temporary macros may be defined within permanent macros. Such temporary macros will be erased when the processing of the permanent macro is finished. This feature may only be used if the macro is prepared by an editor.

If a macro is given the name of (or a legal abbreviation of) a DOMINO Monitor command, EXECUTE-MACRO may not be left out.

+---------+
| Example |
+---------+
DM: DEFINE-MACRO ?↵
@WHO            % a simple SINTRAN command
END-MACRO↵

DM: ?
===> 768 YOUNG-HACKER
+---------+
| Example |
+---------+
DM: DEFINE-MACRO START-DOMAIN↵
PARAMETER P1,,'User name ' % Enter user-area for application
NEW P1
OPEN-PATH ASYL ASYL-DISC
USE-MAILBOX ON 1100B       % Use ASYL and mailbox
PARAMETER P2,,'Domain '
PLACE-DOMAIN P2            % Place and start application
RUN
END-MACRO

Page 83

Chapter 3 DOMINO Monitor

3.4.3 RESUME-MACRO

Purpose
If the DOMINO Monitor is not able to carry out a statement in the body, the macro is aborted. This command makes it possible to force the processing of it to continue. The macro is resumed at the statement following the one where it was interrupted.

+----------------------------------------+
| Example                                |
|                                        |
| DM: EXECUTE-MACRO UNRELIABLE⇥          |
| DM: OUTPUT-FILE LOG-FILE:SYMB          |
|                                        |
| NO SUCH FILE NAME                      |
| CURRENT MACRO ABORTED                  |
|                                        |
| DM: RESUME-MACRO⇥                      |
| DM: PLACE-DOMAIN MY-APPLIC             |
| DM: RUN                                |
| ....                                   |
+----------------------------------------+

3.4.4 ERASE-MACRO

ERASE-MACRO

Purpose
The temporary macro is erased (deleted). Permanent macros are erased by using the SINTRAN command:

@DELETE-FILE <Macro name>:MACR

Macro name
The name of an existing temporary macro;


Page 84

Chapter 3 DOMINO Monitor

3.4.5 DUMP-MACRO

DUMP-MACRO \<Macro name>

The named temporary macro is written to a file with the same name as the macro. The macro becomes permanent and can at a later time be executed by using the macro name as a command. If the file does not exist, it will be created. The default type of the file is :MACR. The macro name must therefore be an acceptable file name (any combination of letters, digits, and hyphens of maximum 16 characters).

Macro name: The name of an existing temporary macro. If it does not exist, an empty permanent macro is created.

3.4.6 LIST-MACRO-NAME

LIST-MACRO-NAMES \<Macro names>

  • Purpose: The names of the macros with names matching the specified name are listed on the output file. Only temporary macros are listed. Permanent macros are listed by the SINTRAN command:

    @LIST-FILES <Macro name>:MACR,,
    
  • Macro names: Macro names or abbreviations of names of the macros to be listed. Default is all macros defined.

Page 85

Chapter 3 DOMINO Monitor

3.4.7 LIST-MACRO-BODY

LIST-MACRO-BODY <Macro name>
Purpose The bodies of the macros matching the specified name are listed on the output file. Only temporary macros may be listed. Permanent macros have to be inspected in an editor.
Macro name Macro name of macro body to be listed.

3.5 Debugging commands

The DOMINO Monitor has several facilities for debugging an application. The basic commands in the DOMINO Monitor allow for hardware-oriented debugging at the assembly level. In addition, a special version of the Symbolic Debugger has been made available in the DOMINO Monitor. It allows inspection of the program by symbolic variables and routine names as used in the source code.


Page 86

3.5.1 DEBUGGER

Purpose

Enter the integrated Debugger in the DOMINO Monitor.

The commands of the Debugger are documented fully in the manual Symbolic Debugger User Guide (ND-860158).

The DOMINO Debugger can only be started if a domain has been placed in the controller with the command PLACE-DOMAIN, and this domain is the one to be debugged. The Debugger communicates with the target in transparent mode. The target state must be stopped or aborted when entering the Debugger.

In order to use symbolic names, the program must be compiled with the DEBUG-MODE option in the compiler turned ON. If the DEBUG-MODE option is OFF, the DOMINO Debugger may be used, but no symbolic references can be made. All debugger information is stored together with the object code.

It is possible to exit and reenter the Debugger without losing any context (for example for performing other Monitor commands).

+----------------------------------------------+
| DM(ASYL): PLACE-DOMAIN MY-APPLICATION        |
| ....                                         |
| DM(ASYL): DEBUGGER                           |
| DOMINO Symbolic Debugger.                    |
| PLANC PROGRAM. MY_MODULE.MY_MAIN.186         |
| % Main entry at line 186 in source program   |
| $RUN                                         |
|                                              |
| Connecting to target. Break character is: 100B |
+----------------------------------------------+

Page 87

Chapter 3 DOMINO Monitor

The following gives an overview of the available commands in the DOMINO Debugger.

Command Description
ACTIVE-ROUTINES List current call hierarchy.
ALIGN-LISTING Adjust line numbers of current program to correspond to an old listing.
BREAK Set break point at one of the items routines, labels or source line numbers. A line number is given relative to the start of the program. The previous break point defined by this command (if any) is reset. An optional parameter is present. It allows for specification of either <Count> or <Condition>. <count>, tells how many times program control shall pass the breakpoint before execution halts. The execution halts just before performing any statements of the specified item. (<condition>) is for giving a Boolean expression constructed of constants, variables and the operators (+ - < > >< * / ** =); which must be true when the breakpoint is reached, for execution to halt.
BREAK-ADDRESS Set break point at program address. This command resets any previous breakpoint.
BREAK-RETURN Break at return from current routine. Error code is displayed. Note that program execution continues.

Page 88

Chapter 3 DOMINO Monitor

Command Description
CLOSE-HISTOGRAM Erase information accumulated in the histogram.
COMPARE-DATA Compare data of running program with :DSEG file of source program. Differences are reported.
COMPARE-PROGRAM Compare program code with :PSEG file of running program. Differences are reported.
CONTINUE Resume execution of program.
DISPLAY Display variables in current scope.
EXIT Resume DOMINO Monitor.
FIND-SCOPE Find scope corresponding to a program address. Returns name of module, routine and line number relative to start of routine.
FORMATS-DISPLAY Set format(s) used by DISPLAY command.
FORMATS-LOOK-AT Set format(s) used by LOOK-AT commands.
HELP List commands and parameters.
INCLUDE-COMMANDS Make all permanent macros on a file available.
LOOK-AT-XXXX Inspect DATA, PROGRAM, REGISTER or STACK. Subcommands similar to those in the DOMINO Monitor's LOOK-AT. Use HELP within LOOK-AT to get a list of subcommands.

Page 89

Chapter 3 DOMINO Monitor

LOOK-AT-LIST

Displays records in a single-linked list (linear list). The data structure is identified by a pointer to head of the list, <start>, and a pointer within the record to next, <link>. The parameter <count> gives the number of records to be displayed. Type CR to display next record.

MACRO

Erase, list or build a macro. The macro is listed if no parameters given. It is erased if no body is given as 2. parameter.

List the information accumulated in the histogram on an <Output File>.

RESERVE-TERMINAL

Reserve an additional, free terminal. The user communication with the Debugger switches to this terminal. Communication with the application still goes via the first terminal.

RESET-BREAKS

Reset current breakpoints.

RUN

Start program at specified program address. Execution continues if no address is given. The DOMINO Monitor connects to the target. The break character must be typed to return to the Debugger's command processor.

SCOPE

Switch observation scope to specified, active module or routine. Default is the current scope. This command does not affect the program execution, only the set of variables that may be inspected.

SET

Assign value to a variable. The value may be a constant or an expression. The variable may be simple or composite.


Page 90

Chapter 3 DOMINO Monitor

SET-HISTOGRAM

Define a program area to be logged in the histogram. The histogram gives the percentage of CPU time spent on different program parts. The program area is identified by the parameters <Start address> and <Maximum address>. The program area is divided into <interval> equal partitions, logged individually. The maximum is 64 intervals.

This command can be repeated several times to cover several program fractions in the histogram.

STEP

Step through the program instruction-by-instruction. The <count> parameter must be -1. The optional parameters (<low>) and (<high>) specify the program area where the step mode is active. If not given, step mode is used on the entire program. The instruction executed is output. Each CR typed causes execution of the next instruction.

PROGRAM-MAP

Print a map of a specified module or routine. The following is output: Program area (addresses), entry point, stack demand, variables with type and initial values. This is very useful when doing assembly-related debugging. By giving this command in a mode job, you may obtain a list to be printed on paper.

USE-HISTOGRAM

Switch the use of the histogram ON or OFF. Information is only accumulated in the histogram when this switch is ON. No information is erased before CLOSE-HISTOGRAM is given.

Operators

The following operators are available in most expressions: + -Shift Addr Mod TypeOf * / ** . (dot). Symbolic names cannot be abbreviated as they have to be unique.


Page 91

Chapter 3 DOMINO Monitor

Some examples

$BREAK-ADDRESS Addr( <Routine name> )   % same effect as BREAK

$BREAK-ADDRESS Addr( <Line number> )    % ---- " ----

$DISPLAY <Pointer name>                 % inspect pointer

$DISPLAY Ind( <Pointer name> )          % inspect data element
                                        % of pointer

$DISPLAY Addr( <Variable Name> )        % address of variable

Integer : i                              % somewhere in source
13 =: i
...
$DISPLAY ADDR(I)                        % verify I has changed
ADDR(I) = 00000400044B
$COMPARE-DATA
Low: 400044B                            % segment no ' address
Low: 400044B
D 00000400044B: 00B CHANGED TO 015B

$DISPLAY
MaxChar=127 NoBytes=0
Prompt= (00000532364B;0:14) Default= (Nil;0:0)%byte pointers

$SET NoBytes = 125                      % SET using constant
$SET NoBytes = MaxChar-2                % SET using simple variable
$SET Default = Prompt                   % SET using composite data

Page 92

Chapter 3 DOMINO Monitor

$DISPLAY
MaxChar=127 NoBytes=125
Prompt= (00000532364B;0:14) Default= (Nil;0:0) %byte pointers

$SET Ind(Prompt) = 0             % clear buffer
$SET Ind(Prompt) = 'Hello'
$DISPLAY Ind(Prompt)
IND(PROMPT)=HELLO

% Suppose you want a histogram from line 20 to 34

$DISPLAY ADDR(20); DISPLAY ADDR(34)
ADDR(20)=0..400036B ADDR(34)=0..400242B
$SET-HISTOGRAM 400036B 400242B 14
$USE-HISTOGRAM ON
$BREAK 35
$RUN
....
$PRINT-HISTOGRAM
┌────────────────┬──────────────┐
│ APPLIC.20      │ 0..400036B   │
│ APPLIC.22      │ 0..400060B   │
│ ....           │              │
│ APPLIC.33      │ 0..400234B   │
└────────────────┴──────────────┘
┌──────────────────┐
│ % CPU-time per   │
│ interval         │
│ In this example  │
│ is almost all    │
│ CPU-time spent   │
│ outside the      │
│ logged program   │
│ area.            │
└──────────────────┘
% CPU-time per interval
APPLIC.20   5.80
APPLIC.22   0.00
APPLIC.33   0.00

NOTE! LOG-LINES and LOG-CALLS and some other commands are
not available, as DOPCOM does not support multiple
breakpoints

Page 93

Chapter 3 DOMINO Monitor

3.5.2 BREAK

BREAK <Address> ((<Count> /1/ ) ((<Commands>)...

Purpose
Set breakpoint at a program address. When the breakpoint is reached, execution terminates and control is passed to the command processor.

It is possible to set new breakpoints as long as DOMINO Monitor has memory space to store information about them. The breakpoints are active until reset by the RESET-BREAKS command.

Address
The program address where a breakpoint is to be set.

Count
How many times the program control shall pass the breakpoint before breaking. The execution stops just prior to executing the instruction at the breakpoint address.

Commands
DOMINO Monitor commands to be performed when the breakpoint is reached. Default is none. Maximum 7 commands can be given. It is legal to invoke macros.

After a breakpoint has been reached, program or data locations or the registers may be displayed or modified. The next instruction to be executed is by default the instruction pointed to by the PC-register, but this may be overridden by the GO command or the optional <Start address> parameter of the STEP command.

Example

+-----------------------------------------+
| Example                                 |
+-----------------------------------------+
| DM(SERVER):BREAK 40013B 1 LOOK-AT-DATA  | 
| 67716B                                   |
| DM(SERVER):RUN                           |
+-----------------------------------------+

% Execute until breakpoint is detected, application
% terminates or application is aborted due to error.

Scanned by Jonny Oddene for Sintran Data © 2011


Page 94

Chapter 3 DOMINO Monitor

3.5.3 TEMPORARY-BREAK

TEMPORARY-BREAK <Address> ((<Count> /1/ ), (<Commands>))...

Purpose
Similar to BREAK except that, when the breakpoint is reached, the breakpoint is reset.

Address
The program address where the breakpoint is to be set.

Count
The number of times the program control should pass the breakpoint before breaking. The execution stops just prior to executing the instruction at the breakpoint address.

Commands
DOMINO Monitor commands to be performed when the breakpoint is reached. Default is none. A maximum of 7 commands can be given.

3.5.4 STEP

STEP <Start address> ((<Count> /1/ ), (<Commands>))...

Purpose
Enter single step mode. If no parameter is given, the instruction pointed to by the program counter is disassembled and displayed.

By typing CR, the instruction pointed to by the PC-register is executed. CR can be repeated several times. Typing anything else causes return to the DOMINO Monitor's command processor.

Start address
The program address where single-step execution should start. Default is the current value of the program counter.

Count
The number of times the program control should pass the <start address> before entering single step mode. The execution stops just prior to executing the instruction at this address.


Page 95

Chapter 3 DOMINO Monitor

Commands

DOMINO Monitor commands to be automatically executed in single-step mode. Default is none. A maximum of 7 commands can be given. The commands are executed between each step. The STEP command must not be called again.

┌──────────┐
| Example  |
└──────────┘

For i In 1:100 Do    % source program area to be stepped
S* NOP               % is a wait loop
Endfor

DM(SERVER): STEP↵
401016B: MOVE.Q #1,D0     % Initial value of i
401020B: EXT DO; EXT.L DO % Sign extend D0
401024B: MOVE.L D0,677160B % Save current i
┌───────┐
│401030B: NOP             % Body of loop
│401032B: MOVE.L 677160B,D0 % Restore current i
└───────┘
401036B: ADDQ.L #1,677160B % ++ i (next valid i)
401042B: CMPI.L #14B,D0
401050B: BNE.S *-20B       % Repeat if i > 100

3.5.5 RESET-BREAKS

Purpose
All breakpoints are removed by using this command.

3.5.6 RESET-LAST-BREAK

When a breakpoint is encountered during execution, this breakpoint may be removed and the original instruction restored by executing this command.


Page 96

Chapter 3 DOMINO Monitor

3.5.7 DEBUG-STATUS


Purpose
List information about defined breakpoints.


3.5.8 SET-SPECIFIC-ACCESS


SET-SPECIFIC-ACCESS \<ON/OFF: OFF>

Purpose
Turn on or off the specific memory access mode used during debugging. If it is OFF when the LOOK-AT command is used, the Monitor will prefetch a whole block of data from the DOMINO controller's memory. This happens even when only a single memory location is to be displayed. If it is ON, only the unit of information (byte, halfword or word) actually needed at the moment will be fetched.

ON/OFF
It is a good rule to let the switch be OFF if several locations are to be investigated at the same time in the same memory area, and to let it be ON for sporadic investigation.


3.5.9 MAIN-FORMAT


MAIN-FORMAT \<Format: /OCTAL/>

Purpose
Set the numeric format to be used when displaying numbers. Octal is set as main format when the DOMINO Monitor is entered.

Format
OCTAL, HEXADECIMAL, or DECIMAL or abbreviation of one of these.



Page 97

Chapter 3 DOMINO Monitor

3.5.10 EXTRA-FORMAT

EXTRA-FORMAT ()...

Purpose
Sets additional, numerical format(s) to be used when displaying numerical values.

Formats
Any of the formats BYTE, HALFWORD, ASCII, OCTAL, DECIMAL, HEXADECIMAL. The names of the formats can be abbreviated.

If no are given, the extra formats are switched off.

3.5.11 LOOK-AT-PROGRAM

LOOK-AT-PROGRAM

Purpose
Display and modify program data. Several subcommands are available.

Address
The memory address from where inspection should start.


Page 98

3.5.12 LOOK-AT-STACK

Purpose

The current local data field is displayed. This is the memory area pointed to by the current A6-register (used as stack pointer), and contains routine call information, such as address to local data field and return address to calling routine.

Several subcommands are available. The subcommands PREVIOUS and NEXT are only related to LOOK-AT-STACK.

Subcommand PREVIOUS

Display the previous local data field (for example the local data field of the calling routine). This command may be repeated until reaching the local data field of the main program, which has the lowest stack frame.

Subcommand NEXT

Display the next local data field (for example the local data field of the procedure called by the current one). It is only valid to do this after PREVIOUS. It is not possible to move beyond the data field of the routine currently being executed (the uppermost stack frame) of the current call hierarchy.

Stack Format

The stack frame format for ordinary routines (valid from H-version of the PLANC-MC compiler) is as follows:


Page 99

Chapter 3 DOMINO Monitor

     +-------------------------+
     |   Byte                  |
     |   offset                |
     |                         |
     |   0B          STP <-----| A6
     |                         |
     |   4B       Unused       |
     |                         |
     |   10B       SMAX        |
     |                         |
     |   14B       SYST        |
     |                         |
     |   20B     ERRCODE       |
     |                         |
     |   24B Parameters &      |
     |         local data      |
     |                         |
     |         free stack      |
     |         area            |
     |                         |
     |          PREV <---------| A7 (USP/SSP/MSP/ISP)
     |                         |
     |         RETLINK         |
     +-------------------------+

Figure 8. PLANC-MC ordinary stack frame

Item Description
STP - Points to the first free location of the stack. The stack grows both upwards and downwards.
Unused Reserved word for future extension.
SMAX - Points to the top of the free stack. This is the same as the A7-register for the current stack. The variable is needed as there may be several stacks in use. The value of A7-register changes after each stack initialization (Inistack).
SYST Reserved word for PLANC runtime SYSTem.
ERRCODE The value of ERRCODE of current routine.

Scanned by Jonny Oddene for Sintran Data © 2011


Page 100

Chapter 3 DOMINO Monitor

Parameters

Actual parameters are placed on the stack in the same order as they are declared. A routine with in-value or out-value is passed in another way: Simple variables and constants not exceeding 32 bits are passed via the D0-register. All other variables and constants as pointer to the actual parameter are passed via the A0-register.

PREV

The previous value of the A6-register. The previous value of A7-register is A7 - 2 words. Both registers are restored with previous values at routine termination.

The return address of the calling routine. If the routine terminates normally (not ERRETURN), this address is incremented by two (bytes) when returning (also called skip return).

ErReturn

If a routine makes error return (ErReturn), a jump is made to the PLANC runtime routine #XRET. The address of #XRET is always in the A5-register. The #XRET routine performs error return to the previous level. The current stack frame is popped on the stack. The D0-register keeps the ERRCODE value.

The instruction following a routine call (content of address RETLINK) holds either a subroutine call to the local exception handler, or a new jump to #XRET if no local handler is defined (On RoutineError Do ... Endon). In this way control passes to the next higher routine in the call hierarchy. All routines at lower call levels than the one having the exception handler are terminated.

Special Routine

The Special routine cannot have parameters, except for the in-value and out-value. No local stack is initiated for the routine when called. The routine has to do this itself if any local data is to be used.


Scanned by Jonny Oddene for Sintran Data © 2011


Page 101

Chapter 3 DOMINO Monitor

Native Routine

The Native routine is well suited for use by exception handlers. It can have in-value and out-value (which an interrupt routine usually does not need), but no formal parameters. The local stack is initiated when activated, allowing for local variables. A slightly different stack frame is used:

+----------------------+
| Byte offset |        |
|-------------| free   |
| -4B         | stack  |
|             | area   |
|-------------|        |
| 0B          | STP    |<----- A6, A7
|-------------|        |
| 4B          | Unused |
|-------------|        |
| 10B         | SMAX   |
|-------------|        |
| 14B         | SYST   |
|-------------|        |
| 20B         | ERRCODE|
|-------------|        |
| 24B         | Local  |
|             | data   |
|-------------|        |
|             |        |
| PREV        |        |
|-------------|        |
| RETLINK     |        |
+----------------------+

Figure 9. PLANC-MC native stack frame

STP - STrack Pointer

STP points to 1. free location after local data (PREV). The stack grows only from high to low memory addresses. This is similar to how the CPU uses the stack.


Page 102

Chapter 3: DOMINO Monitor

PREV

The previous value of the A6-register. The previous value of the A7-register is STP - 2 words. Both registers are restored with previous values on termination of the routine.

Return address to calling routine.

Native Restrictions

  • It is not possible to make an error return from a native routine.
  • An ordinary routine can call a native routine but not the opposite way around.
  • A native routine can call other native routines.
  • A native routine can have ordinary routines as inner routines.
  • No inner PLANC routine can be called recursively.

Page 103

Chapter 3 DOMINO Monitor

3.5.13 LOOK-AT-RELATIVE


LOOK-AT-RELATIVE <Relative to> /A6/

Purpose
Start listing of contents in memory relative to either the contents of a register or absolute address. Both absolute and relative addresses are displayed. Several subcommands are present.

Relative to
Any register or a numeric address. Default is A6-register (PLANC stack pointer).

3.5.14 LOOK-AT-REGISTER


LOOK-AT-REGISTER <Name> /PC/

Name
The name of one of the registers. The specified register is displayed in current main format. If CR is typed, the next register in the sequence is displayed. Several subcommands are present.

The registers are: PC, D0:D7, A0:A6, USP, SR, SSP, ISP, MSP, VBR, SFC, DFC, CACR, CAAR. The A7-register is at any time one of the stack pointer registers: USP (User SP), SSP (Supervisor SP), MSP (Master SP), ISP (Interrupt SP). Only MC68020 has the registers MSP, ISP, CACR and CAAR.


Page 104

Chapter 3 DOMINO Monitor

3.5.15 LOOK-AT Subcommands

This set of subcommands can be used to inspect several items in succession, change displayed format, change items to be inspected, modify contents of registers or memory.

EXIT

Return to DOMINO Monitor command processor. In addition to the command EXIT, both a full stop (.) or a semicolon (;) terminate the LOOK-AT subcommands.

HELP

All subcommands matching <Command> are output together with their parameters.

PERMIT-DEPOSIT

In order to avoid unintended modification of the memory or a register, the command PERMIT-DEPOSIT must be typed before the depositing of a new value can take place. An exception is when the CODE command is used.

↵

Carriage return causes display of the next item (register, instruction or memory location).

<A>, <N> / <file> ↵

Dump <N> bytes starting at address <A>. <A> may also be a register name. If <file> is given, the dump is written into this file.

Any of the parameters may be omitted, causing the default values to be used. Default value for <A> is the current address inspected, default value for <N> is the number of bytes within the current format, while omitting <file> will cause the output to be written to the standard output file (for example, terminal).

<n> ↵

Modifications of memory or registers are made by typing the new value <n> followed by CR. <n> is deposited into the current memory address or register inspected. The current address can be altered by typing <A> / CR.


Page 105

Chapter 3 DOMINO Monitor

Example

+----------------------------+
|         Example            |
+----------------------------+
| DM: LOOK-AT-REGISTER PC↵   |
| PC: 700000B  PERMIT-DEPOSIT↵|
| PC: 700000B  400000B ↵     |
|                   P/       |
| PC: 400000B↵               |
+----------------------------+
% PC is changed
% Verify change

'<string>' ↵
The memory can be modified by an ASCII string by 
enclosing the `<string>` in single quotes. Two 
successive quotes are interpreted as one single 
quote (for example ''' becomes ').

CODE

Assemble symbolic assembler instruction and deposit into memory. Several instructions can be given simultaneously by separating each with a semicolon (;). The instruction(s) will be assembled and stored, starting at the current location. Program memory may also be modified numerically by first typing BYTE, and thereafter modifying bytes in the main format (see the MAIN-FORMAT command on page 80).

Example

+-------------------------------+
|           Example             |
+-------------------------------+
| % Removing a test by patching |
|                               |
| DM(SERVER): LOOK-AT-PROGRAM 400160B↵|
| 400160B: BNE.B *-22B CODE↵    |
| Instruction: NOP↵             |
| 400160B: NOP↵                 |
+-------------------------------+

Page 106

Chapter 3 DOMINO Monitor

BREAK

Sets a breakpoint in the current address. The command is similar to the BREAK command. Parameters are <Count> and <Commands>.

+------------------+
|      Example     |
+------------------+
| DM(SERVER): LOOK-AT-PROGRAM 400160B |
| 400160B: NOP BREAK                  |
| 400160B: BKPT #7 BREAK              |
|                                     |
| % The original instruction is       |
| % copied to the breakpoint table    |
| % inside OPCOM, before being        |
| % replaced by the BKPT instruction  |
+-------------------------------------+

TEMPORARY-BREAK

Sets a temporary breakpoint at a current address. The command is similar to the TEMPORARY-BREAK command in the DOMINO Monitor. Parameters are <Count> and <Break>.

Change format

When displaying memory it is possible to use BYTE, HALFWORD (16 bits), or WORD (32 bits) as main display format. DISASSEMBLE can be used for getting symbolic assembler instructions (for example when moving into a memory area containing instructions when using LOOK-AT-DATA).

Additional display formats may be obtained by typing EXTRA-FORMAT followed by a list of formats. This command is similar to the global EXTRA-FORMAT command, except that the extra formats are only valid within LOOK-AT.

COMPUTE <Expression>

Evaluates and displays the result of an arithmetic expression. It is displayed in all numeric formats. The command is similar to the global COMPUTE command.


Page 107

Chapter 3 DOMINO Monitor

ABSOLUTE <Address>

Displays an item from an absolute address. Addresses are otherwise taken as relative addresses.

Change mode

In a LOOK-AT command, it is possible to change to one of the other LOOK-AT commands by typing one of the subcommands below. This is equivalent to EXITing from LOOK-AT and typing another LOOK-AT command. This feature saves some typing work. The modes available are:

  • DATA <Address>
  • PROGRAM <Address>
  • REGISTER <Name>
  • STACK
  • RELATIVE <To>

3.6 DOMINOS process monitoring

These commands are only relevant when running applications under control of DOMINOS.


Page 108

3.6.1 PROCESS-STATUS

PROCESS-STATUS

Purpose

Print status of the processes matching <Process name> on the output file.

Process name

Any abbreviation for a process name. Default is all processes.

The information given for each process is:

  • Process name
  • Process state (DORMANT, BLOCKED, READY or RUNNING)
  • Process priority
  • Event buffer (events set but not yet read by the application)
  • Program Counter
  • CPU time used, measured in units of 5 ms.

If the parameter <Process name> matches exactly the name of an active process (not DORMANT), the process context is displayed:

  • Data registers D0...D7
  • Address registers A0...A6
  • User Stack Pointer USP
  • Status Register SR

Page 109

Chapter 3 DOMINO Monitor

Note that the register contents is undefined for a DORMANT process.

If the process is scheduled after a round-robin strategy (among processes with equal priority), time limit is displayed. That is, how many time units to use before being moved backwards in the ready queue. 0 is interpreted as 2**32 time units (244 days 15 hours).

If the processor is running in supervisor mode at the moment (for example, DOMINOS service is being executed for a process or an exception handler is active after an interrupt), SSP (Supervisor Stack Pointer) is displayed.

If the process is BLOCKED when waiting for event(s) to occur, the event mask is displayed.

The READY queue of DOMINOS is displayed, showing the processes ready to run by name in the order they will be assigned to the CPU. The first process is the currently executing one.

Example

+--------------------------------------+
|             Example                  |
+--------------------------------------+
| DM(SERVER): PROCESS-STATUS!          |
|                                      |
| process  state    prio  event buffer |
| p-counter  time used                 |
|                                      |
| PRO1      blocked  1     0      0    |
| 200                                 |
| PRO2      dormant  6     0      20   |
| 90                                  |
+--------------------------------------+

Page 110

3.6.2 LIST-TIME-QUEUE

LIST-TIME-QUEUE ()

Purpose
List once or periodically all entries in the time queue.

Interval
Time in seconds between each report.

Each entry (if valid) contains the following information:

  • The name of the process to receive the time scheduled event(s) when the delay time expires.
  • The event(s) to be set.
  • The remaining delay time (in 5 msec units).
  • The interval time (in 5 msec units). The delay time to be used together with periodic scheduled events. 0 means no periodic scheduled events.

There may be entries in the queue which are no longer valid, since the service request has been cancelled. In this case the word "VOID" is displayed.

Example

+---------------------------------------------+
| Example                                     |
|                                             |
| DM(SERVER): LIST-TIME-QUEUE                 |
| process  events  delay  interval            |
| PR01     2       250    0                   |
+---------------------------------------------+

Page 111

Chapter 3 DOMINO Monitor

3.7 DOMINO Controller Commands

These commands are related to the hardware environment in the controller.

3.7.1 SET-PROTECTION

SET-PROTECTION <From address> <To address>
<Supervisor mode> <User mode>

Purpose

The DOMINO controller has a flexible memory protection system. The memory protection can be changed dynamically while running programs. The microprocessor's user and supervisor mode of operation can be given separate access rights for the same memory area. The command can be repeated to protect several areas.

When the controller starts, a default protection setting is made. This is modified if DOMINOS is loaded and started.

Address

The <From address> and <To address> give the memory area to be protected. Seen from hardware the local memory is divided into segments of 1024 bytes each which can be protected individually.

Supervisor Mode

Access rights for area when the microprocessor runs in supervisor mode.

User Mode

Access rights for area when the microprocessor runs in user mode.

The basic legal access rights are: Fetch, Read-Write, Read-Only, No-Access. Fetch means that the contents of the memory area can be executed as instructions. Fetch should normally not be used together with Read and Write. Two PIOC-compatible modes are supported instead.


Page 112

Chapter 3 DOMINO Monitor

Supervisor User
Any-Access Any-Access
Read-Fetch Read-Fetch

Table 2. PIOC-compatible memory protection

There are four combinations of user and supervisor mode that are not allowed.

Supervisor User
Fetch Read-Write
Fetch Read-Only
Read-Write Fetch
Read-Only Fetch

Table 3. Memory protection not allowed

3.7.2 USE-PROTECTION

USE-PROTECTION <ON/OFF: /OFF/ >

Purpose

Switches the entire memory protection system ON or OFF. The memory protection is switched on during controller initialization, and after having started DOMINOS.

3.7.3 LIST-PROTECTION

Lists the memory-protected areas.


Page 113

Chapter 3 DOMINO Monitor

3.7.4 USE-CACHE

USE-CACHE <ON/OFF: /OFF/ >

Purpose

Switches the use of the MC68020's cache ON or OFF. The use of the cache is switched on during controller initialization.

3.7.5 TARGET-IDENTIFICATION

Purpose
Gives mainly static information about the target by displaying the following:

CPU Type MC68000, MC68010, MC68012 or MC68020.
PROM 1 version Version and revision number of DOPCOM.
PROM 2 version Version of optional (device-dependent) PROM.
RAM size Size of controllers local memory in bytes and pages.
Standard tests Indicates whether the self-tests have been correctly executed or not.
Device tests Indicates whether the optional (device-dependent) tests have been correctly executed or not.
Trace module Indicates whether trace module is present or not.
Trace PROM version Version of the trace module if present.

Page 114

3.7.6 TARGET-STATUS

Purpose

Gives information about the current state of the target by displaying:

Controller state

The current state of the application program can be:

  • running: Application is running normally in the controller.
  • stopped: Application is suspended or has properly terminated.
  • aborted: Application has been stopped due to serious error.
  • Waitcount: A power drop has moved the controller to this state. "GO" will continue the application.

The following three states are internally used, and should not be visible with the TARGET-STATUS command:

  • prestep
  • stepping
  • PFoccured

Cache mode

Indicates whether the MC68020's cache is being used or not.


Page 115

Chapter 3 DOMINO Monitor

3.7.7 SCOPE-LOOP

SCOPE-LOOP <Loop type> <Data type> <Address 1> <Address 2> (<Pattern 1> <Pattern 2>)

Purpose
Defines and starts a short program loop. This is intended specifically for hardware debugging via oscilloscope, logic analyzer or tracer. The loop consists of two memory accesses followed by optional compare of data.

Loop type
Read, Read-Compare, Write, Write-Read, Write-Read-Compare

Data type
Byte, halfword or word (32 bits).

Address 1 and 2
The memory addresses to be accessed as defined by Loop type

Pattern 1 and 2
If the loop type includes write of data, Pattern 1 is written into Address 1, and similarly for the second pair of parameters. If the loop type includes Compare, the patterns are used as "the data expected".


Page 116

I'm sorry, but the page you provided does not contain any visible text or diagrams to convert into Markdown. If you have another page or additional information, please provide it so I can assist you.


Page 117

Chapter 4 Applications in DOMINO

4.1 Getting started

In this section, you find a small example of how an application is written, loaded by the DOMINO Configurator and run in the controller. It shows what is required of a minimum DOMINOS configuration with one trivial application process. The application runs in an endless loop and prints a message on the terminal every second.

The routine ERRCHECK in the following example is to be imported in many of the subsequent examples for handling the return status of DOMINO services.


Page 118

Chapter 4 Applications in DOMINO

Source code for DOMINOS-TEST:PLNC

$Include DOMI-DEFINES:DEFS
Module Common
  Export ErrCheck, WaitSeconds
  Routine Integer, Void : Errcheck % display error code
    If @ < PIOK Then
      Output(1,'A','$Error occurred, errcode = ')
      Output(1,'O',@), Output(1,'A','B')
    Endif
  Endroutine

  PITUniWaitEv : WaitRec := (PIEvsel,(0,1),200,1,0)

  Routine Integer, Void : WaitSeconds
    % block (suspend) calling process @ no. of seconds
    @ * 200 =: WaitRec.PITimeOut
    Addr (WaitRec) PIRUniWaitEv ErrCheck
  Endroutine
Endmodule

Module PRO2
  Export PRO2
  $Include DOMI-APPL-IE:IMPT
  Import (Routine Integer, Void : WaitSeconds)
  Integer Array : S (0:1023)
  Program : PRO2
    IniStack S
    Do % forever
      Output(1,'A','$PRO2 running')
      l WaitSeconds
    Enddo
  Endroutine
Endmodule

Module Auto_Start
  Export Auto_Start
  $Include DOMI-APPL-IE:IMPT
  Import (Routine Integer, Void : ErrCheck)
  Import (Program : PRO2 )
  Integer Array : S (0:1023)
  Constant Prior = 5
  PITCreate : CreRec := (0,'PRO2',PIABegin+Prior,Addr(PRO2))
  Program : Auto_Start
    IniStack S
    Output(1,'A','$Creating process PRO2')
    Addr (CreRec) PIRCreate =: Errcode
    Errcode Errcheck
  Endroutine
Endmodule

Scanned by Jonny Oddene for Sintran Data © 2011


Page 119

Chapter 4 Applications in DOMINO

  • DOMINOS expects that the process Auto_Start is exported, and that it takes care of starting other processes. Auto_Start is automatically given the name PR01 by DOMINOS.
  • Auto_Start runs with priority 1, which is the lowest possible one. Each time a process is created and ready to run ("create and go"), the queue of runnable processes is scheduled. If the new process has priority > 1, it will immediately gain access to the CPU. Thus, Auto_Start does not get the chance to finish its work first. This may be avoided by giving Auto_Start higher priority than the processes it is going to start.
  • The PLANC compiler automatically includes a system call (MONO) to terminate the process at the end of the program. Therefore, it is usually not necessary to terminate the process by an explicit call.
  • There must be at least one separate module for each application process. Each process must have a main program and its own stack.
  • The include file with imported routines must be included in each module. The DOMINOS data types need only be included at the outermost level. These are PLANC restrictions.
  • Output can only be sent to the user's terminal when the DOMINO Monitor is run, or when a service terminal is attached to the controller.
  • Instructions for using DOMINOS services and for building records are given in the remainder of this section.

Page 120

Chapter 4 Applications in DOMINO

+------------------------------------+
| Compiling DOMINOS-TEST:PLNC        |
|                                    |
| @ND-500-MONITOR                    |
| ND-500 MONITOR Version H00         |
| N500: PLANC-MC68J                  |
| - MC-68020 Planc Compiler - May 15, 1987 |
| *DEBUG-MODE ON                     |
| *COMPILE DOMINOS-TEST:PLNC,,DOMINOS-TEST:NRF |
|    335 Lines compiled. No diagnostics.     |
| *EXIT                              |
+------------------------------------+
  • It is convenient to compile the application together with debug information, as there will be no need for recompilation before debugging when unexpected results occur. The debug information does not slow down the execution of the application. The only disadvantage is that the :NRF and :LINK files become a little larger.
  • DOMINOS has also been compiled together with debug information, so all code in the DOMINO controller (except OPCOM) can be referred to by symbols in the Symbolic Debugger.

Scanned by Jonny Oddene for Sintran Data © 2011


Page 121

Chapter 5 DOMINOS

DOMINOS is an operating system common to all the DOMINO controllers. The functions offered by DOMINOS are described in this chapter.

DOMINOS is backwards compatible with PIOCOS on source level from the programmer's point of view, except for a new naming convention used in include files. DOMINOS is not an updated PIOCOS but a completely new implementation, incorporating a similar architecture but more efficient algorithms and tools.

5.1 DOMINOS configuration

From version B00 of DOMINOS the DOMI-GENERATOR is replaced by the so called Configurator. Both programs implement a similar solution: Depending on user defined input a mode file is produced and started. The input is now no longer the answer to a lot of questions but the configurator resembles a compiler which compiles a small "high-level programming language" into a mode file.

Configuration language syntax

The diagrams show the current syntax version of the language. Words in lower case are reserved keywords, upper case refers to a different syntax diagram and <....> refers to user selectable file names, routine names and so on. Note the use of strings!

The diagram on page 107 shows the overall structure of a configuration program. It starts always with the definition of the target hardware. For the time being only two device types are possible: VENUSGLUE or MPMSTDDOMINO (= MPM based STandarD DOMINO).


Page 122

Chapter 5: DOMINOS

The next statement is optional and allows to specify a string which - executed as a SINTRAN command (the "@" must not be included into the string) - activates the linkage-loader to be used. If this statement is used, the programmer has to be aware that one of the next versions of the configurator will assume the use of the new ND-LINKER. A change in the configuration program will in this case become necessary.

The DOMAIN statement is NOT optional, however the WITH part can be omitted with the result that the same name is used for domain and segment. SINTRAN filename syntax can be used for both domain and segment.

THE PLACE statement defines the base address of DOMINOS, default is 400000B, which is the start of the area reserved by the OPCOM module for applications.

With the optional BUFFER statement the system buffer pool of DOMINOS can be increased by the amount of <value>. No decrement is possible.

If the default name of the :NRF file containing DOMINOS can not be used for example because a SINTRAN user area will be included, the SYSTEM statement must be used.


Page 123

Chapter 5 DOMINOS

flowchart TD
    A[configuration for <controller type>] --> B[linker is '(linkage-loader)']
    A --> C[domain is <domain>]
    C --> D[with <segment>]
    D --> E[place at <address><br>(def. 400000B)]
    E --> F[buffer + <value><br>(def. 0)]
    F --> G[system] --> H[LOAD LIST]
    H --> I[USER ADDRESS PART]
    I --> J[EXTENSION PART]
    J --> K[PROCESS PART]
    K --> L[endconfig]

Figure 10. Structure of a DOMINOS configuration program


Page 124

Chapter 5: DOMINOS

USER ADDRESS

The User address part is a complex and optional statement which starts with the reserved word USERADDR. Here specific user entries/addresses can be specified. Each of the currently three entry/address specifications is optional.

  • The first - starting with the reserved word ENTRY allows to specify a different user entry. By default the user entry is a PLANC PROGRAM : AUTO_START. (This possibility is new in the configurator, no predecessor in the GENERATOR.)
  • The second specification - starting with "DATA AT" allows to specify where the user data should be located. Using this is necessary if user program and data overlaps or if the user wants to save memory space.
  • The last specification allows to change the address range where processes (in MC68K user mode) have read/write access (in addition to the user memory data area) on the MC68K bus if at least one of the processes is created with the "system" bit set. (Refer PIRCreate service in DOMINOS). The default is the range reserved for the device part on DOMINO controllers.

Page 125

Chapter 5 DOMINOS

graph TB
    A[useraddr]
    A --> B[entry is]
    B --> C{\<user entry point\>}
    C --> D{(def. AUTO\_START)}
    A --> E[data at]
    E --> F{\<user and UDSE data address\>}
    F --> G{(def. 1000000B)}
    A --> H[iospace from]
    H --> I{\<address\>}
    I --> J{(def. 70000000B)}
    H --> K[to]
    K --> L{\<address\>}
    L --> M{(def. 77677777B)}
    A --> N[endaddr]

Figure 11. DOMINOS configuration. USER ADDRESS PART


Page 126

Chapter 5 DOMINOS

EXTENSION

The optional complex EXTENSION statement specifies in the LOAD LIST all files which contain user defined system extensions (UDSE). (Even files which contain exception handlers must be included into this list, although the exception handlers are not specified here but at runtime with the service PIRCREATE.)

Four branches inside the EXTENSION statement allow to specify up to eight (2 x 4) process management extensions (PME) in the BEGIN/END ACTION branches, and up to eight user defined services (UDS) in the CALL branch.

The EXTENSION statement must be closed with ENDEXT. (Code and data of UDSE is now located in DOMINO memory, that it can be called/accessed in supervisor mode as well as user mode. The result is that it is no longer necessary to have two copies of the same part in memory, one in the UDSE area and one in the process area.

Libraries must be loaded twice

Libraries MUST be loaded with the UDSE first, and then once again with the processes. In the second load only those modules which are accessed by processes, and not by UDSE are placed in memory. To drop loading the library first with UDSE will not result in undefined references BUT IN MEMORY PROTECTION VIOLATION when the UDSE calls the library routines which then reside in process memory!) For a detailed description of user defined system extensions read the section DOMINOS FOR ADVANCED PROGRAMMERS on page 151.


Page 127

Chapter 5 DOMINOS

graph TD;
    extension --> |LOAD LIST| begin;
    begin --> end;
    end --> power;
    power --> call;
    call --> endext;
    begin --> |action| up;
    begin --> |action| down;
    up --> |action| ROUTINE LIST;
    down --> |action| ROUTINE LIST;

Figure 12. DOMINOS configuration. EXTENSION PART

PROCESS PART

The PROCESS statement contains for the time being only a LOAD LIST specifying all files which contain process code. Concerning libraries refer to the EXTENSION statement above. The PROCESS statement is NOT optional.

graph TD;
    process --> |LOAD LIST| endproc;

Figure 13. DOMINOS configuration. PROCESS PART

graph TD;
    is --> |<routine name>| o;

Figure 14. DOMINOS configuration. ROUTINE LIST


Page 128

Chapter 5 DOMINOS

LOAD LIST

Each file name in the LOAD LIST command is converted to one load command for the linkage loader. Between the load commands the user can insert anything he wants by using the INSERT command.

flowchart TD
    A[on] --> B[<file name>]
    B --> C
    C --> D[INSERT]
    C -->|Loop| A

Figure 15. DOMINOS configuration. LOAD LIST

INSERT

The optional INSERT statement is used in connection with LOAD LIST and the SKIP TO statement (refer below). Its purpose is to enable the user to include special commands into the generated mode file to tailor it to his own needs. Each string in the INSERT statement is placed on a new line in the mode file.

NOTE! The use of INSERT statements can result in incompatibility when larger changes in the generated mode file structure are introduced with a new version of the configurator.

flowchart TD
    A[insert] --> B['<any string>']
    B --> C
    C -->|Loop| A

Figure 16. DOMINOS configuration. INSERT


Scanned by Jonny Oddene for Sintran Data © 2011


Page 129

Chapter 5 DOMINOS

SKIP

The following diagram illustrates the SKIP statement.

graph LR
    A[skip to] --> B[linker]
    B --> C[domain]
    C --> D[place]
    D --> E[buffer]
    E --> F[system]
    F --> G[useraddr]
    G --> H[extension]
    H --> I[process]
    I --> J[endconfig]
    J --> K[INSERT]

Figure 17. DOMINOS configuration. SKIP

The SKIP statement can be inserted into the configuration program such that its label (one of the keywords LINKER...ENDCONFIG, see diagram) appears before the statement which starts with the same keyword appears. The effect is that the compiler generates the mode file up to that statement (unless there is a non-default statement in between). This becomes important together with the use of the INSERT:


Page 130

Chapter 5 DOMINOS

An example

+---------------------------------------------+
| An example                                  |
+---------------------------------------------+
|                                             |
|  CONFIGURATION FOR VENUSGLUE                |
|                                             |
|  DOMAIN IS "DOMINOS-C"                      |
|                                             |
|  SKIP TO BUFFER                             |
|  INSERT 'cc inserted before the buffer increase'|
|                                             |
|  PROCESS ON DOMI-TEST-PROG, PLANC-MC ENDPROC|
|  ENDCONFIG                                  |
|                                             |
+---------------------------------------------+

The result is that the string cc .... is inserted into the mode file just in front of the statement which defines the system buffer pool size. The buffer statement itself (BUFFER + ) need not to be used. Without the SKIP the string would be inserted in front of the commands compiled from the PLACE statement.


Page 131

Chapter 5 DOMINOS

+-------------------+
|   Another example |
+-------------------+
| CONFIGURATION FOR MPMStdDomino
|
| SKIP TO DOMAIN
| INSERT 'abort-batch-on-error off'
| ....
| ....
| ENDCONFIG
+-------------------+

Without SKIP the string would be inserted before the linkage-loader is called.

The following table shows where the strings are inserted when using one of the reserved words in the SKIP TO statement:

RESERVED WORD WHERE STRINGS ARE INSERTED
LINKER before the linkage loader is called (remember "@" inside the strings!)
DOMAIN before the domain is opened, can for example be used to release and delete the domain first
PLACE before the data load address for DOMINOS is set
BUFFER before the program load address for DOMINOS is set
SYSTEM before the DOMINOS file(s) are loaded
USERADDR before the segment is closed after having loaded DOMINOS
EXTENSION after the segment is opened again and the user/UDSE data load address is established
PROCESS before process files are loaded
ENDCONFIG before the segment is closed and END-DOMAIN is executed

Page 132

The Compiler

The configuration compiler is a subsystem for the ND-100 with only a few commands. Besides the standard commands HELP, EXIT and so on, the following are available:

  • CONFIGURE command with parameter "source-file" (default: terminal), "mode output file" (default: terminal) and "list file" (default: no listing). Using the default values and calling the compiler inside a mode file seems the best solution. If a separate source file is used the file type :DCNF is assumed.
  • Two other commands LIST-KEY-WORDS and LIST-CONTROLLER-TYPES display the reserved keywords and the possible controller types respectively.

Page 133

Chapter 5 DOMINOS

5.2 DOMINOS Services

Naming Convention

Symbolic names in ND-products shall follow a convention to reduce the risk of conflicts with user-defined names. The prefix PI is reserved for DOMINOS. This has led to incompatibility with PIOCOS as, for instance, RealTime has become PIRealTime and U10K PIOK.

Call Interface

DOMINOS has an exported routine for each service, including the user-defined services. The user has to import these routines by including the file DOMI-APPL-IE-C:IMPT into his source files, and optionally DOMI-UDSE-IE-C:IMPT for UDS. Type declarations are in the file DOMI-DEFINES:DEFS. The imported routines generally appear as follows:

| Import (Routine <option> PIPservice, Integer2 : PIRservice) |
  • option is a PLANC routine modifier (e.g. SPECIAL or NATIVE). The user need not worry about it as long as the routine is not called with assembler code. The option is subject to change from one DOMINOS version to another.
  • service is the name of the service (e.g. SetEv).
  • The invalue is a pointer to the parameter record unique for each service. It has the same name as the routine, except for the prefix PIP (PI Pointer), while PIR means PI Routine. There is also a corresponding record type called PIT (PI Type).
  • The outvalue is status from the service. There are predeclared constants for the different errors that can occur in the file DOMI-DEFINES.

Page 134

Chapter 5: DOMINOS

Trapping of errors from the DOMINOS services using PLANC On Routineerror is not possible. If nothing else is mentioned, all out parameters in the record are undefined in case an error code is returned.

The appropriate call can be done as follows:

┌──────────────────────────────────────────────────────────┐
│ Addr <ParameterRecord> <RoutineName> =: ReturnStatus      │
└──────────────────────────────────────────────────────────┘

NOTE! Most CPU registers (D0:D7, A0:A4) may be overwritten after the call. This is especially important in user-written interrupt handlers where all registers need to be saved. The PIOC compatible TRAP #2 sequence, where the registers are saved, can be used in interrupt handlers, or even better, the interrupt handler itself can save all registers on entry and restore them on exit.

The old TRAP #2 sequence of calling services in DOMINOS will remain available in the foreseeable future. It is however slower than the new way of invoking services. Only the registers D0 and SR are changed when returning from DOMINOS.

Completely new functions compared to PIOCOS have generally an additional parameter called PISubFunc (type Integer2). If nothing else is mentioned, this must be initialized to 1 (to eliminate the risk of "automatic initialization" by the compiler or loader). This parameter allows future extension of the function. For most of the functions already known from PIOCOS, some of the bits of the parameter PIProcess are reserved for this purpose (besides Create, WhoAmi and ProsNo, as PIProcess contains an out-value in these functions).

Scanned by Jonny Oddene for Sintran Data © 2011


Page 135

Chapter 5 DOMINOS

Constant Octal value
PITermination 6000B
PIILCAL 6001B
PIRANGE 6002B
PICONTX 6003B
PISupModeCall 6004B
PIintErr 6005B
PIDomFatal 6006B
PIUserFatal 6007B
PINOEXIST 6011B
PIEXIST 6012B
PIILPRI 6013B
PIILSTATE 6014B
PINOPROS 6015B
PINOFREE 6016B
PIEVNOEX 6021B
PIILVEC 6022B
PINOBUF 6041B
PIINCONSIST 6042B
PIILADDR 6043B
PINoRout 6051B

Table 4. DOMINOS error codes

Error codes

The DOMINO Operating System errors are found in Appendix C on page 264-265.

The DOMINO Services (HW-LIB/OPCOM) error codes, are found in Appendix C on page 266.

The DOMINO Services (BOPCOM) error codes, are found in Appendix C on page 267.


Page 136

5.3 Process Management

Processes are application programs which can run virtually in parallel under DOMINOS process management. Each process is in one of the following states:

Dormant

Dormant means that the process exists but is completely passive.

Blocked

Blocked means that the process is in a wait state. For the time being, only "waiting for event" is a possible reason. User-defined services may create more reasons.

Ready

The process is in the ready queue because it is ready to execute. The process is not executing because there are other process(es) with higher or equal priority in the queue.

Running

That process in the set of ready processes which has the highest priority, and thus is the current executing one.

All processes which are ready for execution are linked to the ready queue in the order of their priority, highest priority at the head of the queue. The scheduler always selects process at the head of the queue, sets its state to running and executes it.

Each process has a time limit. This is the maximum CPU time it can use before being moved backwards in the ready queue. The value of the limit is determined during creation of the process and can be changed with the Modify service. Default (maximum) is 244 days 15 hours. The time limit is restored each time a process becomes running.

If a process stays in the running state when the time limit expires, it is moved behind the last process in the ready queue with the same priority. This is partial round-robin scheduling.


Page 137

Chapter 5 DOMINOS

+--------------------------------------------------+
| NOTE! The basic time unit in DOMINOS is 5 msec.  |
+--------------------------------------------------+
flowchart LR
    A[process A\nprior 20\nrunning] --> B[process B\nprior 20\nready]
    B --> C[Process C\nprior 20\nready]
    C --> D[Process D\nprior 17\nready]
    C -->|When time limit of A expires, A is moved after C\nand B becomes running. D keeps its relative position.| D

Figure 18. Round-robin scheduling

5.3.1 Create service

Explanation
Create a process. This means in particular:

  • Memory space for the process description is allocated from the system buffer pool.
  • The process description is initialized according to default values and parameters given by the service.
  • A new entry is allocated in the process table and given to the process description.
  • The time limit is set to maximum (244 days, 15 hours).
  • If the "create and go" option is selected, the process is set into the ready state, otherwise it becomes dormant.

Page 138

Chapter 5 DOMINOS

+-------------------+-------------------+
|   PITCreate record                    |
|-------------------+------------------ |
| IN                | OUT               |
|                   |                   |
| PIProcess         |   Integer2        |
|                   |                   |
| PIName (0:3)      |                   |
|                   |                   |
| PITypePrio        |                   |
|                   |                   |
| PIStartAddr       |                   |
+-------------------+-------------------+
   Bytes                 Integer2
   Program Pointer

PIProcess

The process number is returned. Most process-related functions need the value as input. The number of processes that may be created is mainly limited by buffer space in DOMINOS.

PIName

User-chosen process name of four characters. If a shorter name is used, fill up with spaces. It must not be in use by another process.

PITypePrio

PITypePrio contains in fact several parameters:

  • The PIFullAcc bit defines whether the process has write access to the device-dependent IO-space of memory or not. If set, the process is allowed to do so, and if not, only user data is accessible. However, the memory protection is global for all processes. If one process has access to the IO-space, the IO-space cannot be protected. Thus this option should not be used unless it is absolutely necessary!
  • If the "create and go" bit is set to one (PIABegin), the process is started, otherwise the service Begin has to be called explicitly.
  • Bits 0:7 contain the process priority within the range 1:255. A process with priority 0 is illegal, while 255 is reserved for future extension.
  • All other bits must be zero in order not to conflict with future extensions of the create service.

Page 139

Chapter 5 DOMINOS

PIStartAddr
Points to the first instruction to be executed by this process after it has been started.

 _________________________________
| Example of starting a process   |
|_________________________________|
| $Include DOMI-DEFINES:DEFS      |
|                                 |
| Module Common                   |
|    Export ErrCheck, WaitSeconds |
|     % as in previous example    |
| Endmodule                       |
|                                 |
| Module PRO2                     |
|    Export PRO2                  |
|     % as in previous example    |
| Endmodule                       |
|                                 |
| Module Auto_Start               |
|    Export Auto_Start            |
|    $Include DOMI-APPL-IE:IMPT   |
|    Import (Routine Integer,     |
|            Void : ErrCheck)     |
|    Import (Program : PRO2 )     |
|    Integer Array : S (0:1023)   |
|    Constant Prior = 13          |
|    PITCreate : CreRec :=        |
|      (0,'PRO2',PIABegin+Prior,  |
|      Addr(PRO2))                |
|    Program : Auto_Start         |
|      IniStack S                 |
|      Output(1,'A',              |
|        '$Auto_Start is creating |
|         PRO2')                  |
|      Addr (CreRec) PIRCreate    |
|        ErrCheck                 |
|    Endroutine                   |
| Endmodule                       |
|_________________________________|

Scanned by Jonny Oddene for Sintran Data © 2011


Page 140

5.3.2 Modify Service

Explanation
The Modify service can change the parameters of a process. The parameter record is a variant record of PITCreate. The process number is IN parameter and specifies the process to be changed.

All parameters supplied in the Create service can be modified. The process name, memory access and priority affect the process immediately, while start address will be used when the next Begin service is called for the process.

If the new process priority is equal to the old one, and the process being modified is actually the running one, the process state is affected. The process is moved in the ready queue behind all processes with same priority.

The extra parameter PITimeLimit is used to give an individual time limit to the process for round-robin scheduling. That is the maximum number of CPU time units to have exclusive access to the CPU. The parameter is interpreted as a 32-bit unsigned integer. Zero means in fact the maximum time limit, which is used when the process is created.


Page 141

Chapter 5 DOMINOS

+----------------------------------------+
|  PITModify record of PITCreate         |
|                                        |
|            IN           |     OUT      |
|                         |              |
| Integer2   ───────────► | PIProcess    |
| Bytes      ───────────► | PIName (0:3) |
| Integer2   ───────────► | PITypePrio   |
| Program Pointer ──────► | PIStartAddr  |
| Integer4   ───────────► | PITimeLimit  |
+----------------------------------------+

Example of a process which changes its priority

Module PRO2
  Export ModRec  % used by Auto_Start when creating process
  $Include DOMI-APPL-IE:IMPT
  Import (Routine Integer, Void : ErrCheck)
  Integer Array : S (0:1023)
  Program : PRO2?  % predeclaration
  PITModify : ModRec := (0, 'PRO2', 0, Addr(PRO2), 0)
  Program : PRO2
    IniStack S
    Output(1,'A','$PRO2 running with unknown priority')
    Output(1,'A','$I will now set it to 10')
    10 =: ModRec.PITypePrio
    Addr (ModRec) PIRModify ErrCheck
  Endroutine
Endmodule

Module Auto_Start
  Export Auto_Start
  Import (PITModify : ModRec)
  % code as for previous example, except using ModRec
Endmodule

Page 142

Chapter 5 DOMINOS

5.3.3 Begin Service

Explanation
Set a process to the ready state. This means in particular that the scheduler can take care of it, and start execution of it (set it into the running state) as soon as there is no other process ready with higher priority. The start address is the one given when the process was created if it has not been modified in the meantime. See also the services END and ABORT.

 +---------------------------------------+
 |     PITBegin record                   |
 | +----------------------+              |
 | | IN                   | OUT          |
 | |                      |              |
 | |  Integer2 ->  PIProcess             |
 | +----------------------+              |
 +---------------------------------------+

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 143

Chapter 5 DOMINOS

Example of creating and starting a process by two services

Module PRO2
  Export PRO2
  % code as before
Endmodule

Module Auto_Start
  Export Auto_Start
  $Include DOMI-APPL-IE:IMPT
  Import (Routine Integer, Void : ErrCheck)
  Import (Program : PRO2 )
  Integer Array : S (0:1023)
  Constant Prior = 13
  PITCreate : CreRec := (0, 'PRO2', Prior, Addr(PRO2))
  PITBegin : BegRec := (0)
  Program : Auto_Start
    IniStack S
    Output(1,'A','$Creating PRO2 without starting it')
    Addr (CreRec) PIRCreate ErrCheck
    Output(1,'A','$Starting PRO2')
    CreRec.PIProcess =: BegRec.PIProcess
    Addr (BegRec) PIRBegin
  Endroutine
Endmodule

Page 144

5.3.4 End Service

The process executing this call is taken from the running to the dormant state. Only a new BEGIN service (issued by a different process) can start it again. All entries in the timer queue concerning the dormant process are removed. The pointer being the in-value to this service is dummy, so NIL should be used.

+---------------------------------------------+
| Example of a process which stops itself     |
+---------------------------------------------+
| Module PRO2                                 |
| $Include DOM1-APPL-IE:IMPT                  |
| Import (Routine Integer, Void : ErrCheck)   |
| Export PRO2                                 |
| Integer Array : S (0:1023)                  |
| Program : PRO2                              |
|   IniStack S                                |
|   Output(1,'A','$PRO2 running')             |
|   Output(1,'A','$I will now make myself     |
|          dormant')                          |
|   Nil PIREnd ErrCheck % Usually never       |
|                           reached !!        |
| Endroutine                                  |
| Endmodule                                   |
|                                             |
| Module Auto_Start                           |
|   Export Auto_Start                         |
|   % code as before                          |
| Endmodule                                   |
+---------------------------------------------+

Scanned by Jonny Oddene for Sintran Data © 2011


Page 145

Chapter 5 DOMINOS

5.3.5 Abort Service

This service has the same effect as END, but the process to be made dormant is specified in the parameter record.

┌───────────────────────────┐
│        PITAbort record    │
│  ┌────────┐       ┌──────┐│
│  │  IN    ├──────>│ OUT  ││
│  │Integer2│       │      ││
│  │        │       │      ││
│  │        │      [illegible]│
│  └────────┘       └──────┘│
│                 PIProcess │
└───────────────────────────┘

Scanned by Jonny Oddene for Sintran Data © 2011


Page 146

Chapter 5 DOMINOS

Example of Starting and Stopping a Process Several Times

+------------------------------------------------+
| Module PRO2                                    |
| ...                                            |
| Integer Array : S (0:1023)                     |
| Program : PRO2                                 |
|     IniStack S                                 |
|     Do % infinite loop                         |
|         1 WaitSeconds                          |
|         Output(1,'A','$PRO2 running')          |
|     Enddo                                      |
| Endroutine                                     |
| Endmodule                                      |
|                                                |
| Module Auto_Start                              |
| ...                                            |
| Integer Array : S (0:1023)                     |
| Constant Prior = 6                             |
| PITCreate : CreRec := (0, 'PRO2', Prior,       |
|                        Addr(PRO2) )            |
| PITAbort : AboRec := (0)                       |
| PITBegin : BegRec := (0)                       |
| Program : Auto_Start                           |
|     IniStack S                                 |
|     Output(1,'A','$Creating process PRO2')     |
|     Addr (CreRec) PIRCreate ErrCheck           |
|     CreRec.PIProcess =: AboRec.PIProcess =:    |
|        BegRec.PIProcess                        |
| Do                                             |
|     Output(1,'A','$Starting process PRO2')     |
|     Addr (BegRec) PIRBegin ErrCheck            |
|     5 WaitSeconds                              |
|     Output(1,'A','$Stopping process PRO2')     |
|     Addr (AboRec) PIRAbort ErrCheck            |
|     3 WaitSeconds                              |
| Enddo                                          |
| Endroutine                                     |
| Endmodule                                      |
+------------------------------------------------+

Page 147

Chapter 5 DOMINOS

5.3.6 Kill service

The process given in the parameter record is made dormant. The process description is returned to the buffer pool and its entry in the process table is cleared. The process no longer exists (i.e. its process number becomes undefined).

+--------------------------------------+
|             PITKill record           |
|     IN                      OUT      |
|  Integer2  ---->  [ PIPprocess ]     |
+--------------------------------------+

Page 148

Example of Creating and Deleting a Process Several Times

Module PRO2

Integer Array : S (0:1023)
Program : PRO2
IniStack S
Do While True
  % infinite loop
  1 WaitSeconds
  Output(1,'A','$PRO2 running')
Enddo
Endroutine
Endmodule

Module Auto_Start

Integer Array : S (0:1023)
Constant Prior = 2
PITCreate : CreRec := (0,'PRO2',PIABegin+Prior,Addr(PRO2))
PITKill : KilRec := (0)
Program : Auto_Start
IniStack S
Do
  Output(1,'A','$Creating process PRO2')
  Addr (CreRec) PIRCreate ErrCheck
  7 WaitSeconds
  Output(1,'A','$Deleting process PRO2')
  CreRec.PIProcess =: KilRec.PIProcess
  Addr (KilRec) PIRKill ErrCheck
  4 WaitSeconds
Enddo
Endroutine
Endmodule

Page 149

Chapter 5 DOMINOS

5.3.7 WhoAmI service

Obtain the process number of the calling process. The process number is needed as parameter in several services.

+---------------------+
|   PITWhoAmI record  |
+---------+-----------+
|   IN    |    OUT    |
|---------|-----------|
|PIProcess| -> Integer2|
+---------+-----------+

Example of a process calculating its process number

+-------------------------------------------------------+
| Module PRO2                                           |
| ...                                                   |
| Integer Array : S (0:1023)                            |
| PITWhoAmI : WhoRec := (0)                             |
| Program : PRO2                                        |
|   IniStack S                                          |
|   Output(1,'A','$PRO2 running with process number ')  |
|   Addr (WhoRec) PIRWhoAmI ErrCheck                    |
|   Output(1,'I',WhoRec.PIProcess)                      |
| Endroutine                                            |
| Endmodule                                             |
+-------------------------------------------------------+

Scanned by Jonny Oddene for Sintran Data © 2011


Page 150

5.3.8 ProsNo Service

Obtain number of a process with a given name.

+-----------------------------------+
| PITProsNo record                  |
|                                   |
|    IN            |    OUT         |
|    --------------|----------------|
|    PIProcess     |  Integer2      |
|    --------------|----------------|
|    PIName(0:3)   |                |
+-----------------------------------+

Another example of how to get the process number

+---------------------------------------------------------------+
| Module PRO2                                                   |
| ...                                                           |
| Integer Array : S (0:1023)                                    |
| PITprosNo : ProRec := (0,'PRO2')                              |
| Program : PRO2                                                |
|    IniStack S                                                 |
|    % I know my name, but not my process number                |
|    Addr (ProRec) PIRProsNo ErrCheck                           |
|    Output(1,'A','$PRO2 running with process number ')         |
|    Output(1,'I',ProRec.PIProcess)                             |
| Endroutine                                                    |
| Endmodule                                                     |
+---------------------------------------------------------------+

Page 151

Chapter 5 DOMINOS

5.3.9 PrName service

Obtain name of a process with a given process number.

flowchart LR
    A[Integer2] -->|IN| B[PITPrName record]
    B --> C[OUT]
    B --> D[PIPprocess]
    D --> E[PINName(0:3)]
    C --> F[Bytes]

Example of getting the process name

Module PRO2
...
Integer Array : S (0:1023)
PITPrName : PrNRec := (0,' ')
PITWhoAmI : WhoRec := (0)
Program : PRO2
IniStack S
% I neither know my process number nor name
Addr (WhoRec) PIRWhoAmI ErrCheck
% I still do not know my name
WhoRec.PIProcess =: PrNRec.PIProcess
Addr (PrNRec) PIRPrName ErrCheck
Output(1,'A','$')
Output(1,'A',PrNRec.PIName)
Output(1,'A',' running with process number ')
Output(1,'I',PrNRec.PIProcess)
Endroutine
Endmodule

Page 152

5.4 The Event System

Event system

The event system is used for synchronization purposes between processes (two way synchronization), and between interrupt handlers and processes (one way synchronization). It is a very general concept which may be used for solving a broad range of problems regarding the signalling part of interprocess communication.

Driver to process (one way) Process to process (both ways)
Interrupt Ack event
Server ⟶ Client
event process ⟵ process
Driver ⟶ Process Req event

Event buffer

Each process has an event buffer containing the current events set for it. The buffer is an integer variable where each bit corresponds to a discrete event.

Event agreement

The communicating processes must agree in advance upon which events (bits) to use and upon their semantic values. Events are normally used in combination with additional information exchanged between the processes (e.g. a message residing in a mailbox). The event just says that 'something has occurred', but not what or which process caused it.

A process can set events for any other process (including itself) as long as it knows its process number. Events can only be sent to processes in the same DOMINO controller. NUCLEUS must be used if communication with remote processes is needed. NUCLEUS uses events 30 and 31 (decimal bit number).


Page 153

Chapter 5 DOMINOS

5.4.1 SetEv service

Set event(s) for a process. The events given by PIEEvents are added (ORed) to the event buffer of the receiving process. There is no event queuing in case some of the events already are set for it. An event may only be sent to one process at a time (no broadcast possibility).

This can lead to events being lost (overwritten) in the receiver's event buffer if the receiving process is slow compared to the senders. Careful design of an event protocol between the communicating processes removes the problem.

+-----------+--------------+------+
|           | PITSetEv     |      |
|           | record       |      |
|           |              |      |
| IN        |              | OUT  |
|           |              |      |
| Integer2  |  PIProcess   |      |
|           |              |      |
| Integer4  |  PIEvent     |      |
+-----------+--------------+------+

Page 154

5.4.2 ReadEv Service

The events currently set for the process are returned in the variable PICurrEvents. The process will return immediately (never enter blocked state) even if there are no events. The returned events are cleared in the process' event buffer.

+----------------------+
|   PITReadEv record   |
+----------------------+
| IN  |\              | OUT | 
|     | PICurrEvents  |---->| Integer 4 |
+-----+---------------+     +-----------+

5.4.3 WaitEv Service

The process will wait for events given by the variable PIWaitEvents. The process continues when any of these events are set (one or more). All events set are then returned in the variable PICurrEvents, and the event buffer of the process is cleared.

If the events to wait for are equal to zero, the process will never return. If there are already events in the buffer which match PIWaitEvents when WaitEv is called, the process continues immediately.

+----------------------+ 
|   PITWaitEv record   | 
+----------------------+
| IN  |\              | OUT | 
|     | PICurrEvents  |---->| Integer 4 |
|     | PIWaitEvents  |     +-----------+
| Integer 4       |
+-----+-----------+ 

Page 155

Chapter 5: DOMINOS

Example of signalling ('kicking') a process

+----------------------------------------------------+
| MODULE MASTER %This example is only relevant when  |
|               %loss of events is acceptable, or    |
|               %there is a certain maximum delay    |
|               %before the receiver reacts.         |
| PITProsNo : ProRec := (0,'SLAV')                   |
|                                                    |
| PROGRAM : MAST % Master process (kicking slave)    |
| PITSetEv : SetEvRec                                |
| INTEGER : KickCount                                |
| ..                                                 |
| % wait for creation of SLAVE process               |
| ProRec.PIProcess =: SetEvRec.PIProcess % ProRec of |
|                                     % slave        |
| 1 =: SetEvRec.PIEvent; 0 =: KickCount % Bit/Event  |
|                                            % 0 set |
|                                                    |
| DO                                                 |
|   ++ KickCount                                     |
|   Output(1,'A','$MAST : Kicking SLAV for ')        |
|   Output(1,'I',KickCount)                          |
|   Output(1,'A','th time')                          |
|   Addr(SetEvRec) PIRSetEv % kick partner           |
|   1 WaitSeconds             % ensure slave gets    |
|                             % time to react        |
| ENDDO                                              |
| ENDROUTINE                                          |
| ENDMODULE                                           |
|                                                    |
| MODULE SLAVE                                       |
| EXPORT SLAVE                                       |
|                                                    |
| PROGRAM : EVE2                                     |
| PITWaitEv : WaitEvRec                              |
| INTEGER : KickedCount                              |
| ..                                                 |
| 0 =: KickedCount                                   |
| % return when any event occurs                     |
| -1 =: WaitEvRec.PIWaitEvents % return when any     |
|                              % event               |
| DO                                                 |
|   Addr(WaitEvRec) PIRWaitEv                        |
|   ++ KickedCount                                   |
|   Output(1,'A','$EVE2 : I have been kicked for ')  |
|   Output(1,'I',KickedCount); Output(1,'A','th time')|
| ENDDO                                              |
| ENDROUTINE                                          |
| ENDMODULE                                           |
+----------------------------------------------------+

Scanned by Jonny Oddene for Sintran Data © 2011

Page 156

Example of Signalling Events with Positive Feedback

MODULE MASTER % The kicking process waits for acknowledge
EXPORT MASTER % from the slave in this example. If the
              % slave dies, the master is stuck!
TYPE EventKind = ENUMERATION (None,Kick,Ack)
PITProsNo : ProRec := (0,'EVE2')
PITSetEv : SetEvRec
PROGRAM : MASTER
PITWaitEv : WaitEvRec
PITSetEv : SetEvRec
INTEGER : KickCount
..
ProRec.PIProcess =: SetEvRec.PIProcess
Kick CONVERT INTEGER =: SetEvRec.PIEvent % prepare kick
0 =: KickCount; -1 =: WaitEvRec.PIWaitEvents
DO
  ++ KickCount
  Output(1,'A','$MAST : Kicking SLAV for ')
  Output(1,'I',KickCount); Output(1,'A','th time')
  Addr(SetEvRec) PIRSetEv ErrCheck % kick slave
  Addr(WaitEvRec) PIRWaitEv ErrCheck % wait acknowledge
  CASE ( WaitEvRec.PICurrEvents CONVERT EventKInd )
  INCASE Ack 
    Output(1,'A','$MAST : Ack')
  ELSE % protocol violation
  ENDCASE
ENDDO
ENDROUTINE
ENDMODULE

Page 157

Chapter 5 DOMINOS

MODULE SLAVE
EXPORT SLAVE
TYPE EventKind = ENUMERATION (None,Kick,Ack)

PROGRAM : SLAVE
PITSetEv : SetEvRec
PITWaitEv : WaitEvRec
INTEGER : KickedCount
..
ProRec.PIProcess =: SetEvRec.PIProcess
0 =: KickedCount; -1 =: WaitEvRec.PIWaitEvents

DO % forever
  Addr(WaitEvRec) PIRWaitEv ErrCheck % wait acknowledge
  CASE ( WaitEvRec.PICurrEvents CONVERT EventKInd )
    INCASE Kick
      ++ KickedCount
      Output(1,'A','$SLAV : I have been kicked for ')
      Output(1,'I',KickedCount); Output(1,'A','th time')
      Ack CONVERT INTEGER =: SetEvRec.PIEvent
      Addr(SetEvRec) PIRSetEv ErrCheck
    INCASE Ack
      Output(1,'A','$SLAV : Ack')
    ELSE % protocol violation
  ENDCASE
ENDDO
ENDROUTINE
ENDMODULE

Page 158

Chapter 5 DOMINOS

5.4.4 SelWaitEv Service

This service does basically the same as WaitEvents. The difference being that only those events the process is waiting for are cleared in the event buffer. PICurrEvents contains however all events at return (selective wait).

+------------------------+
| PITSelWaitEv record    |
| IN           | OUT     |
|--------------|---------|
| PICurrEvents | Integer 4
| PIWaitEvents |
+--------------+

5.4.5 UniWaitEv Service

The UniWaitEv (universal) service provides all the functions that are possible with SelWaitEv and WaitEv, and some additional.

The parameter PISubFunc parameter may contain the sum of any of the constants PIEvSel and PIEvComp.

  • PIEvSel
    Only those events the process is waiting for (WaitEvents parameter of PIWaitEv) are returned in the variable PICurrEvents and cleared in the event buffer.
  • PIEvComp
    The process is continued only when all the events given by WaitEvents parameter have occurred.
  • PITimeOut
    If the PITimeOut parameter is different from zero, this indicates the time to wait (basic time units) before giving the process timeout. The event(s) given by PITimeEvent are returned in this case. A bit should normally be reserved for signalling timeout. Otherwise, it will not be possible to distinguish timeout from other events as no more.

Page 159

Chapter 5 DOMINOS

distinguish timeout from other events as no more
context accompanies it. If any of the WaitEvents
occur before timeout, the process returns and the
timeout is cancelled.

+--------------------+
| PITUniWaitEv record|
|                    |
|  IN            OUT |
| Integer2     PISubFunc|
|              PIWaitEv|
|              +--------------------+      |
| Integer4     | PICurrEvents       |      => Integer4
|              | PIWaitEvents       |      |
|              +--------------------+      |
| Integer4     PITimeout             |
| Integer4     PITimeEvent           |
| Integer4     PIReserved = 0        |
|              (future extension)    |
+-----------------------------------+

Example of halting a process for a given time

PITUniWaitEv : WaitUniRec := (PIEvsel,(0,1),200,1,0)

ROUTINE INTEGER, VOID : WaitSeconds
  1 =: WaitUniRec.PIWaitEv.PIWaitEvents % wait for timeout
  @ * 200 =: WaitUniRec.PITimeOut % set timeout event
  Addr (WaitUniRec) PIRUniWaitEv ErrCheck % wait
ENDROUTINE

Page 160

Chapter 5 DOMINOS

5.5 Time Scheduled Events

Timer queue

DOMINOS uses a timer queue in order to provide time-scheduled events. Each entry in the queue gives information about the process requesting the service, and when it wants it.

PIOCOS

The clock process in PIOCOS is replaced by a more sophisticated clock driver in DOMINOS. The length of the timer queue is only limited by the size of the system buffer pool.

5.5.1 InterEv Service

This service provides time related events at regular intervals.

PIDelay

After a number of time units, given by PIDelay, the events in the PIEvent parameter are set. The value 0 (zero) is invalid.

PIInterval

If PIInterval is different from zero, it gives the delay interval before the events are set again. The events are set repeatedly until the service is cancelled by the InterDel service.

PIModifier

PIModifier may contain the sum of any of the constants PICISecond and PICIRelative.

PICISec

The parameters PIInterval and PIDelay are by default taken to be given in basic time units. This constant changes the time unit to seconds.

PICIRel

By default, the delay before setting the events are scheduled absolute to the DOMINOS system clock. This constant causes the event to be scheduled relative to the time when this service is called. The DOMINOS clock is exported in the parameter PIRealTime into the application program.


Page 161

Chapter 5 DOMINOS

+--------------------+ 
|  PITInterEv record | 
|                    | 
| IN         | OUT   | 
|------------|-------| 
| PITSetEv   |       | 
| Integer2   | PIProcess |
| Integer4   |       | 
|            | PIEvent   |
| Integer4   |       | 
|            | PIInterval |
| Integer4   |       | 
|            | PIDelay    |
| Integer2   |       | 
|            | PIModifier |
+------------|-------|

5.5.2 InterDel Service

Each requested InterEv service can be cancelled with this call. The parameter PIEvent cancels services according to the following rule:

  • If the PIEvent is equal to zero, all time services belonging to PIProcesses are cancelled.
  • If PIEvent > 0 then all time services matching both the PIEvent and the PIProcess parameter are cancelled.
+---------------------+
|  PITInterDel record |
|                     |
| IN          | OUT   |
|-------------|-------|
| (PITSetEv)  |       |
| Integer2    | PIProcess |
| Integer4    |       |
|             | PIEvent   |
+-------------|-------|

Scanned by Jonny Oddene for Sintran Data © 2011


Page 162

Chapter 5 DOMINOS

5.6 Buffer Management

Buffer pool

The buffer management supplies utility functions for administrating shared pools between the processes. There is one pool for the user processes and another only accessible from supervisor mode (e.g. DOMINOS and device drivers). The buffer management is of general purpose. The data kept in a buffer is not interpreted by DOMINOS. A common pool makes it possible to save memory space, as it is no longer necessary to allocate one buffer heap per process. A buffer in the pool is at any time either free to be used, or allocated to a process. The use of the pools is allocated at load time.

PIOCOS

The buffer management was also implemented in PIOCOS. However, the services have been revised to include a pool of user buffers and are now available for the user too.

Memory layout

The system buffer pool is defined by the memory gap between data and code part of DOMINOS. The user buffer pool is defined by the global label PIUserBuffer and the start of the memory area for the system (supervisor) stack. This stack is located in the last part of the local memory.


Page 163

Chapter 5 DOMINOS

|----------------------------------|
|           Local memory           |
|----------------------------------|
|        OPCOM                     |
|----------------------------------|
|        DOMINOS data              |
|----------------------------------|
|                                  |
|        System buffers            |
|                                  |
|----------------------------------|
|        DOMINOS code              |
|----------------------------------|
|        PIR <service routines>    |
|----------------------------------|
|  User def.sys.extensions         |
|------------------------------UDSE|
|                                  |
|        User Code                 |
|                                  |
|----------------------------------|
|                                  |
|      Unused memory gap           |
|                                  |
|----------------------------------|
|                                  |
|        User data                 |
|                                  |
|----------------------------------|
|                                  |
|        User buffers              |
|                                  |
|----------------------------------|
|                                  |
|        System stack              |
|                                  |
|----------------------------------|
Address label                BufferSta
PIUserBuffer
BufferEnd
PIMemSize

Figure 19. DOMINOS relative memory layout

Consistency check

The data structure for buffer management is a double-linked list of elements. Each element keeps information about one buffer. The elements are ordered according to increasing memory address. If a buffer is given to a process, a flag is set in the corresponding list element. When DOMINOS starts, there is one list element spanning the whole pool. As buffers are given to processes, the number of list elements increases (fragmentation). The buffer list is checked for consistency. Inconsistency during DOMINOS start leads to a fatal system error (DOMINOS is aborted).


Page 164

5.6.1 GetBuffer Service

Allocate a buffer to a process. If there is not enough free buffer space, an error message is returned.

PISubFunc
This modifier indicates in which pool the buffer resides. Use PIUsrBuff for user pool and PISysBuff for system pool.

PIBuffAddr
The address (32-bit pointer) to the start of the buffer. Returned by DOMINOS.

PIBuffSize
The size of the desired buffer in bytes.

+-------------------+-------------------+
|  PITGetBuffer     |                   |
|     record        |                   |
+-------------------+-------------------+
|    IN             |    OUT            |
|                   |                   |
|  Integer2 ----->  |   PISubFunc       |
|                   |                   |
|  PIBuffAddr  ---->|   Integer2 Pointer|
|                   |                   |
|  Integer4 ----->  |   PIBuffSize      |
+-------------------+-------------------+

Page 165

Chapter 5 DOMINOS

5.6.2 RelBuffer Service

Release a buffer allocated to a process. The service checks for consistency.

  • PISubFunc: This modifier indicates in which pool the buffer resides. Use PIUsrBuff for user pool and PISysBuff for system pool.
  • PIBuffAddr: The address (32-bit pointer) to the start of the buffer.
+-----------------------------+
|        PITRelBuffer record  |
|                             |
|      IN             OUT     |
| Integer2 -------- PISubFunc |
| Integer2 Pointer--PIBuffAddr|
+-----------------------------+

5.7 Exported System Data

Some data items are exported from DOMINOS and can be imported to application modules. Note that all these data items reside in a memory area which is write-protected. All the data items can be replaced in a later version of DOMINOS by routines with equal names and a corresponding out value.

  • PIRealTime: An INTEGER4 variable which is incremented by the clock driver on each timer interrupt (every 5 msecs). It is initialized to 0 on DOMINO startup.
  • PIHostNumb: The number of the host CPU as an INTEGER2 variable. For DOMINO controllers the contents of the variable is not currently defined.
  • PIControll: The number of the controller in the current host system as an INTEGER2 variable. The contents on DOMINO is the OCTOBUS Station number of the controller.

Page 166

Chapter 5 DOMINOS

PICPUType

INTEGER4 variable which contains a number describing the processor used on this controller. The following values are defined for the MOTOROLA processors (decimal) : 68000, 68010 and 68020.

5.7.1 Fatal service


If a fatal error occurs in a user program, this error can be reported to the host by using this call. Note that DOMINOS is aborted. This means all activities are stopped and the controller must be loaded and started again!

This ultimate service can be called from interrupt handlers too.

PISubFunc
For future extension. Must be set to 1.

PIError
The user-defined error code to return. Extended to be an INTEGER 4, but only the lower 16 bits are used.

PIAORegister & PIDORegister
The parameters PIAOREGISTER and PIDOREGISTER are handled such that the value of PIAORegister is put into the AO-register and the PIDORegister into the DO-register. Thus, these values may be inspected by the LOOK-AT-REGISTER command in the DOMINO Monitor. The current values of AO and DO should therefore be saved in the record before preparing the call.


Page 167

Chapter 5 DOMINOS

+------------------+---------------+
|     PITFatal record               |
|         IN        |       OUT     |
|------------------ |---------------|
| Integer2 -------> | PISubFunc     |
| Integer4 -------> | PIError       |
| Integer4 -------> | PIDORegister  |
| Integer4 -------> | PIAORegister  |
+------------------+---------------+

5.8 DOMINOS for advanced programmers

DOMINOS also offers special program environments for user defined:

  • interrupt handlers
  • trap handlers
  • services (UDS)
  • process management extensions (PME)

UDSE
All these entities are hereafter referred to as User-Defined System Extensions (UDSE).


Page 168

5.8.1 The MC68K in Supervisor Mode

Execution Modes

When making UDSE code, the user must be aware that the instructions will be executed in the so-called supervisor mode of the MC68K. DOMINOS executes in this mode. This is indicated by a bit in the status register (SR) of the processor and has the following implications compared with the user mode used in the process environment:

  • A different machine stack is used
  • There are no restrictions on the processor instruction set
  • Different access rights apply throughout the first 16-MByte address range

Stack Pointers

The A7-register is used as stack pointer in the MC68K processors. The user and the supervisor mode have separate A7-registers. Depending on the execution mode, one of them is selected when A7 is accessed in an instruction.

However, it is possible in supervisor mode to read the A7-register of the user mode by using the 'MOVE from/to USP' instruction. This is necessary to let DOMINOS switch from one process to another.


Page 169

Chapter 5 DOMINOS

Privileged Instructions

The privileged instructions which can be executed in supervisor mode but which lead to a trap if tried in user mode are:

  • All instructions which may change SR:
    • MOVE to/from SR
    • ANDI to SR, also EORI, ORI
    • RTE
    • STOP
  • Coprocessor instructions cpSAVE and cpRESTORE
  • RESET
  • MOVEC (to access special CPU registers), MOVES (to access 'unnatural' address spaces) and MOVE to/from USP (to access the user stack pointer)
  • The RTE instruction is always the last instruction to be executed in an interrupt/trap handler to resume the suspended activity.

Page 170

5.8.2 Disable and Enable Interrupts

The following code shows how to turn interrupts off and on. The interrupt should normally only be turned off for short intervals.

+-----------------------------------------------+
| Code to disable all maskable interrupts       |
+-----------------------------------------------+
|                                               |
| INTEGER2 : SaveSR                             |
|                                               |
| $* MOVE.W  SR, SaveSR   % keep current value  |
|                         % of SR               |
| $* ORI.W   #0700H,SR    % set interrupt       |
|                         % threshold to        |
|                         % maximum             |
|                         % uninterruptible     |
|                         % code                |
| $* MOVE.W  SaveSR, SR   % interrupts          |
|                         % switched on again   |
|                                               |
+-----------------------------------------------+

The combination of these two pieces of code can with advantage use the stack instead of the INTEGER2 variable. The well-known rules for how to use a stack must then be followed:

+-------------------------------------------------+
| Macros to enable and disable interrupts         |
+-------------------------------------------------+
|                                                 |
| $MACRO solo                                     |
| $* MOVE.W  SR,-(A7)  % save old SR on stack     |
| $* ORI.W   #0700H,SR % disable all maskable     |
|                      % interrupts               |
| $ENDMACRO                                       |
|                                                 |
| $MACRO tutti                                    |
| $* MOVE.W  (A7)+,SR % restore SR                |
| $ENDMACRO                                       |
| ...                                             |
| ...                                             |
| SOLO  % from now on interrupts are disabled     |
| ...   % critical section with no interrupt      |
| TUTTI % interrupts on again                     |
|                                                 |
+-------------------------------------------------+

Note: Some interrupts cannot be disabled, e.g. Power fail.


Page 171

Chapter 5 DOMINOS

5.8.3 Access rights in supervisor mode

The hardware-based access protection system in DOMINO controllers depends on the MC68K mode of operation. Different areas inside the first 16 MBytes of the physical address range must be used for different purposes. Before DOMINOS is started, the protection is setup by the OPCOM module. Later, DOMINOS changes parts of the access map.

OPCOM only with DOMINOS
address supervisor user address
000000H
read only no access
400H
read write read only
*
1 fetch no access
*
1 read write no access
20000H
* 2 fetch no access
* 3 fetch fetch
* 4 no access fetch
* 5 read write read write
RAM end minus
8 KByte
read write no access
RAM end-
read write no access
* 6
* 6
1000000H

Figure 20. DOMINO memory protection


Page 172

Chapter 5 DOMINOS

Notes:

  • * Value depends on the current OPCOM version
  • *¹ Value depends on DOMINOS version and size of system buffer pool. See DOMINOS configurator.
  • *² Value depends on * and the current DOMINOS version
  • *³ Value depends on * and the code part of the UDSE
  • *⁴ Value depends on <load address for user/UDSE data>. See DOMINOS configurator.
  • *⁵ Value depends on <sys proc extra READ/WRITE>. See DOMINOS configurator.

Page 173

Chapter 5 DOMINOS

5.8.4 PLANC compiler


Clean code & Option 2

It is very important to use the right PLANC compiler for MC68K and to use it correctly:

  • In version G one must use the compiler directive OPTION 2 which forces the compiler to use a new calling sequence, which has no data placed in the code area (dirty code). It is also much faster. From version H this option is switched on by default.
  • From version H it is safer to use high level PLANC statements in SPECIAL routines: A warning is issued when the compiler generates code in a SPECIAL routine which assumes the existence of a stack (usually not present!).
  • Version I should be used since the UNSIGNED modifier is used in DOMI-DEFINES-:DEFS.

Exception handler

Exception handler is used as a common name for interrupt handlers (asynchronous exception) and trap handlers (synchronous exception). The term 'exception' means that the CPU is forced to leave its normal execution sequence to execute some exceptional code.

PLANC constraints

Exception handlers are activated entirely by hardware, and they do not therefore fit into the PLANC environment. When an ordinary PLANC routine is called, the PLANC run-time system allocates a stack frame for the routine. The code inside the routine assumes that the stack is present, which is not the case for exception handlers. There are, however, three kinds of routines in PLANC which do not implicitly assume the presence of a stack:

  • PROGRAM
  • NATIVE (only available in MC68K PLANC)
  • SPECIAL

Page 174

Program

PROGRAM defines a main program which begins always with an INISTACK statement, thus making its own stack. It would therefore be a perfect solution for the problem, but there are some drawbacks:

  • INISTACK must be the first statement in the routine, and the generated code destroys the register context before it can be saved.
  • Only a static allocated stack is accepted in the INISTACK statement (the stack cannot reside in a heap). If interrupts on different levels use the same handler, the same array could be initialized twice, thus destroying (overwriting) the stack of the exception handler on the lower interrupt level.
  • The new stack to be created is the supervisor stack. Changing this stack might have consequences for the whole system.
  • A design goal for exception handlers is to make them fast and short (few instructions). The INISTACK and all the other necessary actions are quite a big overhead in many of these cases.

The conclusion is that a solution with PROGRAM is not recommended!


Scanned by Jonny Oddene for Sintran Data © 2011


Page 175

Chapter 5 DOMINOS

Native

NATIVE routines are only for MC68K PLANC. They have an automatically included calling sequence based only on the MC68K machine stack. Registers are not destroyed when the routine is called. There are however serious compatibility problems such as that NATIVE routines must never call a normal routine (e.g. a routine in the PLANC runtime system). In addition to this, NATIVE routines are unable to use ERRETURN, and, with the exception of invalue and outvalue, have NO parameters. NATIVE-type routines are not fully supported. There is therefore no guarantee that they will not be removed from the compiler at some time in the future.

A solution with NATIVE routines can no longer be recommended since the MC-PLANC compilers now have better support for SPECIAL routines.

Special

The routine option SPECIAL defines a routine with no call-sequence. In practice this leads to routines which: - have no stack frame (no parameters and local data) - are rather fast

Earlier it was quite dangerous to use anything else than pure inline assembler in such routines since the generated code assumed that a stack frame existed. The latest versions of the MC-PLANC compiler issue a warning when it uses the stack frame in a SPECIAL routine. High-level PLANC statements in SPECIAL routines are therefore now possible which allows the implementation of increased complexity.

This type of routine can with advantage be used in cases where the complexity of the handler is small or medium.


Page 176

Chapter 5 DOMINOS

Mixed routines

The recommended solution for complex exception handlers is a combination of one SPECIAL routine and normal routines.

INISTACK simulation

It is quite easy to simulate an INISTACK statement for the stack layout belonging to "OPTION 2", using an array dynamically allocated on the machine stack! This is exactly what the standard INISTACK lacks!

+---------------------------------------------------------------+
| Assembler code for saving registers and allocate stack        |
+---------------------------------------------------------------+
| PITDriver : AnExceptHandler %predeclared SPECIAL routine      |
| $* MOVEM.L D0-A5, -(A7)   %save user registers                |
|                                                                |
| $* LINK A6,#<stack demand> %save A6 and allocate stack         |
| $* MOVE.L A6,4B(A7)       %save former A7                     |
| $* PEA 14B(A7)            %generate FREE pointer              |
| $* MOVE.L A7,A6           %is now PLANC stack pointer         |
+---------------------------------------------------------------+

The code inside the exception handler is now free to use the address and data registers. The new stack frame is now initialized with a size of the absolute value of <stack demand> given in bytes. The parameter <stack demand> must be given as a negative argument to fit with the MC68K. The size of the stack need only take care of the routines called (directly or indirectly) from here. In the current version, the value should not exceed 1 KByte. Ordinary PLANC routines (with or without parameters) can be called. Note that the current SPECIAL routine must still not have any local variables!


Page 177

Chapter 5 DOMINOS

Having executed the routines of the exception handler, the original context must be restored:

Assembler code for deallocating stack and restoring registers
$* MOVE.L 10B(A6),A7 % deallocate current stack
$* MOVE.L (A7)+,A6 % restore A6
$* MOVEM.L (A7)+,D0-A5 % restore user registers
$* RTE % resume interrupted activity
ENDROUTINE % (pop machine stack)

Note that the INISTACK simulation here is dependent on the current implementation of the stack layout. It may therefore change in the future!

In cases where the user can guarantee that a trap handler is always activated when a usual PLANC stack exists, it is possible for the trap handler to use the PLANC stack of the interrupted activity. DOMINOS uses this for all services which must only be called from a process and thus have a stack defined. It requires that the process has some free space on the stack.

Scanned by Jonny Oddene for Sintran Data © 2011


Page 178

5.8.5 Special rules for interrupt handlers

Activity transparency

When an interrupt occurs, the currently executing activity (a process or another exception handler) is suspended, and the processor starts executing the interrupt handler. After execution, the interrupted activity must be reactivated. From this activity's point of view, it must look as if nothing has happened. This means that the interrupt handler must not alter the context of the interrupted activity. In practice, this implies that all the registers used by the interrupt handler have to be temporarily stored away. The interrupt handler has no way of knowing which registers are in use by the interrupted activity. As already shown in the previous example, this can easily be done with two MOVEM.L assembler instructions.

Limited services

Since interrupts can even suspend the execution of a DOMINOS service, DOMINOS has to keep its data structures protected against corruption. This could be done by locking all data structures with a SOLO/TUTTI sequence or by using special structures. To avoid long interrupt-off times and to keep the algorithms simple this has only been done in some cases. Calling a PIR routine or TRAP #2 sequence from an interrupt handler directly or indirectly is therefore not allowed, with the following exceptions:

Function Description
PIRSetEvent Set an event to a process
PIRFatal Message to the outer world, that the system is going to collapse

DOMINOS is not able to check whether or not a call for a service is invoked by an interrupt handler.


Page 179

Chapter 5 DOMINOS

5.8.6 Special rules for trap handlers

Traps in this sense are synchronous exceptions which are generated explicitly by a process or by any other activity by using one of the following MC68K instructions:

  • BKPT - Break point, used by DOMINO OPCOM
  • CHK - check register against bounds
  • CHK2 - check register against bounds
  • cpTRAPcc - trap on coprocessor condition
  • TRAP - trap unconditional
  • TRAPcc - trap on condition
  • TRAPV - trap on overflow

Other synchronous exceptions like bus error, address error, illegal instruction, privilege violation are not covered here. DOMINOS/OPCOM assumes that an occurrence of such a trap is not wanted and treats it as a fatal error!

Trap handler interface

The environment for handlers of this kind of traps is quite similar to that of interrupt handlers. The main difference is that, since the trap is programmed, the programmer may define an interface between the handler and the trap-producing activity. The programmer controls both sides of the trap. By hiding the trap-producing activity inside a routine (e.g., a library) this interface need not be known anywhere else. Trap implementation in DOMINOS shows this quite clearly:


Page 180

Chapter 5 DOMINOS

DOMINOS Monitor Calls

The TRAP #2 instruction is reserved in DOMINOS for "monitor calls". The defined interface in this case is that the D0 register contains the function number and the A0 register a pointer to the appropriate parameter record. On return from the trap handler, the D0 register contains a status value.

DOMINOS Services

It is obvious that (unlike an interrupt handler) DOMINOS need not save and restore the D0 register. The other way of calling DOMINOS (by using the routines PIR(function name)) is implemented in a similar way. However, it is defined in the specifications that no register is saved and restored, which makes this way of calling DOMINOS faster.

Also part of the interface is that the trap handler expects an existing PLANC stack (exceptions are PIRSetEvent and PIRFatal, which does not need a PLANC stack).

DOMINOS Services Callable from Trap Handlers

Which DOMINOS process services may be called from a trap handler depends on which environment the handler has been called from. If it was a process or a different trap handler (UDS and PME), any service may be called. If, however, it was an interrupt handler, which activated a trap handler, only PIRSetEvent and PIRFatal may be called. This applies also to nested trap handlers. The lowest level is important!


Page 181

Chapter 5 DOMINOS

5.8.7 Rules for UDS and PME

Process stack
Inside DOMINOS, the PLANC stack of the calling process is used. Each process should therefore keep about 1/2 KByte of extra stack space plus that amount used by the PME (and even more if the UDS requires more than that).

ERRETURN
Use of ERRETURN inside DOMINOS is not allowed. Owing to the memory-protection system usage, the pg; error handler will reside in a memory area which has no fetch permission in supervisor mode. This results in a fatal error when ERRETURN is executed.

5.8.8 Implementing exception handlers

Almost all integration of UDSE with DOMINOS is done at load-time with the exception of trap and interrupt handlers. They are linked to DOMINOS at run-time. This is typically the responsibility of the Auto_Start process at start-up. Exception handlers different from UDS and PME are implemented to preserve compatibility with PIOCOS.


Page 182

5.8.9 PIRCreateDriver Service

Put the address of an exception handler into the interrupt vector.

PIVector
See the MOTOROLA manuals for vector assignment. Take also the actual DOMINO hardware implementation into consideration (e.g. interrupt levels). Some vectors are reserved for DOMINOS, and an error code is returned if they are chosen by the user. The legal ranges are: 3, 5:8, 10:28, 36:76, 78:255.

If the vector is in the range 64:79, then it is one of the MFP (Multi Functional Peripheral, MC68901 MFP) interrupts. In this case the corresponding channel in the MFP is enabled. Preparing timers (A and/or B) in the MFP is still the responsibility of the user program before calling PIRCreateDriver. Even during a power-fail restart, MFP-related drivers must be reinitialized (programming the timer(s) and calling PIRCreateDrive).

PIDriverAddress
Pointer to the exception handler declared as ROUTINE PITDriver : .

+-----------------+
| PITCrDrv record |
+-----------------+
| IN              | OUT          |
|                 |              |
| Integer2 ------>| PIVector     |
|                 |              |
| PITDriver       |              |
| POINTER ------->| PIDriverAddress |
+-----------------+

Page 183

Chapter 5 DOMINOS

5.8.10 UDSE scheduling primitives

Some internal scheduling primitives in DOMINOS are defined in the include file DOMI-UDSE-IE:IMPT, which is distributed together with DOMINOS. They can only be called from an UDSE and never from a process.

UFindPD UDSE-primitive

Most DOMINOS services refer to a process by its process number. Internally DOMINOS refers to a process by means of a pointer to its process description (PD). This routine maps (converts) from process number to a pointer to the PD. The full content of the PD is only to be interpreted by DOMINOS, and must not be altered by a UDS. Eight INTEGER4 variables (UDSEx, x ∈ 0:7) are free to be used by the UDSE for storing process related context.

+------------------------------------------------------+
| ROUTINE SPECIAL INTEGER2, TPrDsPtr : UFindPD         |
|                                                      |
| @: Process number to find process description to.    |
|    0 means return pointer to process description     |
|    currently running (i.e. the process calling the   |
|    UDSE).                                            |
| =: Pointer to process description TPrDs.             |
|    NIL is returned if the process does not exist.    |
+------------------------------------------------------+

Scanned by Jonny Oddene for Sintran Data © 2011


Page 184

UBlocPr UDSE-primitive

The routine UBlocPr blocks a process. That is, it is removed from the ready queue. The process must be in the ready queue when this service is requested (ready or running).

ROUTINE SPECIAL TPrDsPtr, INTEGER2 : UBlocPr
@
=:

UdeBlocPr UDSE-primitive

The routine UDeBlocPr de-blocks a process. That is, it is inserted into the ready queue. The process must be blocked or dormant when the service is called.

ROUTINE SPECIAL TPrDsPtr, INTEGER2 : UBlocPr
@
=:

Page 185

Chapter 5 DOMINOS

5.8.11 Implementing UDS

Up to eight User-Defined Services (UDS) can be established. They are represented in DOMINOS just like the DOMINOS services:

+-----------------------------------------------------------+
| ROUTINE <option> <param. record> POINTER, INTEGER2 : <name> |
|                                                           |
| @ Pointer to parameter record (user defined)              |
| =: Status (Return PIOK if call is successful)             |
+-----------------------------------------------------------+

Other services (PIRxxx) can be called from the UDS, but services based on current process will be done on behalf of the process calling the UDS. The UDS must be called by calling the routine PIR. The UDS must be imported into the source code of the user process. Also the TRAP #2 sequence is possible but not recommended. The value UFUNCx (x = 0:7) must then be loaded into the DO register prior to the call.


Page 186

5.8.12 Implementing PME

Two groups of four routines can each be defined as process management extensions (PME):

ROUTINE
@: Pointer to process description
= : Status (Return PIOK if call is successful)

Start-up/Clean-up
Each group is triggered by a process-state transition. The first group is called each time a process is moved from the dormant to the ready/running state. The PMEs for this group typically do process start-up actions. The other group is called each time a process state is changed in the opposite direction (running/ready/blocked to dormant). This group is intended for process clean-up actions.

Error return
If the PME terminates (returns) with an error (Status >< PIOK), the remaining PMEs in the group are aborted, and the process does not change state.


Page 187

Chapter 5 DOMINOS

5.8.13 System processes

System processes in DOMINOS exist for the sake of compatibility. In PIOCOS, the memory protection system was switched off by the scheduler as long as a system process was active. System processes does not execute in supervisor mode! In DOMINOS, the memory protection system is not switched off to keep the advantages. Instead, an extra window with read/write access in user mode is established in the I/O space on the MC68K bus.

NOTE
A process should only be defined as a system process (ref. PIRCreateService), if absolutely necessary!


Page 188

I'm sorry, but the page is blank, so there's no content to convert to Markdown.


Page 189

Chapter 6 NUCLEUS Overview

Usage

NUCLEUS is intended to be used only for all Norsk Data System applications requiring fast and reliable message passing between processes within one computer. The processes may for instance be one server with several clients. NUCLEUS cannot be used for communication between computers.

Computer

All processes communicating via NUCLEUS must be within the same computer. By computer is meant one or several main CPUs and DOMINO controllers with access to the same physical memory and OCTOBUS.

+--------------------+                +---------------------+
|       ND-5000      |                |      ND-100/500     |
|                    |                |                     |
|   +-----------+    |                |   +-----------+     |
|   | PROCESS A |    |                |   | PROCESS B |     |
|   +-----------+    |                |   +-----------+     |
|   | NUCLEUS   |    |                |   | NUCLEUS   |     |
|   | LIBRARY   |    |                |   | LIBRARY   |     |
|   +-----------+    |                |   +-----------+     |
|   | µ-code    |    |                |   | MON (100) |     |
|   | (5000)    |    |                |   +-----------+     |
|   | MON (100) |    |                |                     |
|   +-----------+    |                |                     |
+--------------------+                +---------------------+
        |                                 |
        |  MFbus                          |  OCTOBUS
        |                                 |
        +-----------------+  OCTOBUS  +---+
                          |  station  |
                          +-----------+
                              |
                              |
                             +-+
                             | |
                             | | MFbus
                +---------------------+
                |  Multiport memory   |
                |  +---------------+  |
                |  | NUCLEUS       |  |
                |  | KERNEL        |  |
                |  | DATA          |  |
                |  +---------------+  |
                +---------------------+

Figure 21. Processes communicating via NUCLEUS


Page 190

Chapter 6 NUCLUS Overview

NUCLEUS Kernel

NUCLEUS data structures reside in shared memory, operated upon by specific rules. Parts of physical memory are reserved for the data structure used by NUCLEUS.

NUCLEUS has slow and fast services. Slow services are those which are not time-critical, or are of such a nature that they need time to be carried out anyhow.

For ND-5000, the time-critical NUCLEUS calls nkMove, nkSend, nkReceive and nkGetInfo are microcoded to achieve required performance. All other NUCLEUS calls are executed in ND-100.

For ND-500, the time-critical NUCLEUS calls are not microcoded. These calls are executed in ND-100 (level 12). The NUCLEUS library in ND-500/5000 presents a standard NUCLEUS interface for applications.

NUCLEUS Library

The services provided by NUCLEUS are independent of the CPU and operating system where the process is running.

NUCLEUS Monitor

The NUCLEUS Monitor is a tool for inspection of tables and queues in the NUCLEUS kernel.

Communication Concepts

Communication between processes in NUCLEUS is based on ports and messages. Their descriptions reside in physical memory shared between the CPUs. (The NUCLEUS kernel)


Page 191

Chapter 6 NUCLEUS Overview

6.1 NUCLEUS library files

For manual installation of the NUCLEUS library, a diskette containing the files listed below is delivered. Choose the files needed and copy them to any user area. After loading any NUCLEUS library, a PLANC library (I-version or later) must be loaded.

File Name Description
NK-100-1bank-C:BRF NUCLEUS library for 1-bank program in ND-100.
NK-100-1bank-C:BRF NUCLEUS library for 2-bank program in ND-100.
NK-5000-C:BRF NUCLEUS library for ND-500/5000.
NK-DOM-APPL-C:NRF NUCLEUS library for DOMINO Controller.
NK-DOM-OS-C:NRF Must be loaded in DOMINO.
NK-DOM-LINK-C:MODE Example of a DOMINO load/link job.
NK-ERRCODE-C:DEFS Error and function codes "Constant" defs.
NK-LIBRARY-C:IMPT Import declarations of the library routines.

6.2 Including NUCLEUS in an application

File Name Description
NK-LIBRARY-C:IMPT All modules using NUCLEUS must include this file. It is common to all computers. The file contains NUCLEUS calls that can be included in a PLANC program, i.e., a library of PLANC routine calls using NUCLEUS.

Scanned by Jonny Oddene for Sintran Data © 2011


Page 192

Chapter 6 NUCLEUS Overview

ND-500

The library should be loaded on a separate segment if the application is running on a ND-500 computer. Performance will decrease if program code and library are loaded on the same segment, because cache (in ND-500 computers) is turned off on the segments that libraries are loaded on.

DOMINO

NUCLEUS is integrated with DOMINOS on the DOMINO controller. Both NK-DOM-APPL-C:NRF and NK-DOM-OS-C:NRF must be loaded to use the NUCLEUS library inside a DOMINO controller. The mode file DOM-LINK-C:MODE contains an example of how to make a load/link job for applications using NUCLEUS inside DOMINO.

+--------------------------------------------+
| Example of linking using DOMINOS Configurator |
+--------------------------------------------+
| @DELETE-FILE CTEST-LOAD:OUT                |
| @(user-area)DOMI-CONFIG                    |
| CONFIG,,TEST-LOAD:OUT                      |
| CONFIGURATION FOR MPStdDOMINO              |
| LINKER is linker                           |
| DOMAIN is test                             |
| SYSTEM ON (user-area)DOMI-OS:NRF           |
| EXTENSION ON (user-area)nk-dom-os-c,       |
| (user-area)pl-mc68020                      |
| ENDEXT                                     |
| PROCESS ON                                 |
| test,(user-area)nk-dom-appl-c,             |
| (user-area)PLANC-MC68020                   |
| ENDPROC                                    |
| INSERT 'LIST-ENT ALL'                      |
| ENDCONFIG                                  |
+--------------------------------------------+

Page 193

Chapter 6 NUCLEUS Overview

6.3 Communication Concepts

Communication between processes in NUCLEUS is based on messages and ports. Their descriptions reside in physical memory shared between the CPUs (The NUCLEUS kernel).

Message

A message consists of a physical buffer for data and a header containing for example a buffer descriptor and link to other messages.

Port

A port contains for example an identification of the port owner and a pointer to received messages. Messages can be linked to a port, where they are queued in the same sequence as they arrive.

Home port

Every message has a home port. This is supplied when a message is created. It is used as the default port to receive a message, and is needed when a process has to answer an arbitrary process (e.g. clients & server).

Sender port

A message may have a sender port. This is supplied when you send the message, and is used to indicate who sent the message. Use nkGetInfo to check for who sent it. This is especially useful for servers.

Send-reference

In order to send a message to a port, a sendreference (to the port) must exist. The sendreference is used by NUCLEUS for access checking.


Page 194

Chapter 6 NUCLEUS Overview

Slow and fast services

Creation of ports and messages are slow services, while message passing is fast. The slow functions are not needed as often as the fast ones, since the same message may be reused without being deallocated. Only the user-data need be changed between each message passing (fast services).

Port name

A port is uniquely identified by a symbolic port name. Processes may refer to the port by the name if they have access rights. Names cannot be abbreviated.


Page 195

Chapter 6 NUCLEUS Overview

6.4 Protection in NUCLEUS

Processes are divided into two categories: system processes and public processes.

System processes

System processes are:

  • Processes running in the DOMINO processor.
  • RT-programs.
  • Background programs running as user System and RT.

Background programs are System processes if the user running the program originally logged in as System.

Restrictions: There are no restrictions for each System process. Only the total amount of resources (number of descriptors and amount of message buffer space) is limited. The amount of resources can be changed by means of the S3-configuration program (See page 181).

Public processes

Any process which is not a System process, is a public process.

Restricted resources

  • Descriptors: For each create-port, create-message, open-port or open-return-port, a slot in the descriptor table is reserved. The number of descriptors for each public process is restricted.
  • Buffer space: Message buffers are allocated in a common buffer pool. For each message a process creates, a fixed amount (header, fragmentation), plus the number of bytes in the create-message call, is subtracted from the allowed quota for the process.

Page 196

Chapter 6 NUCLEUS Overview

The allowed amount of resources (number of descriptors, buffer space) common to all public processes can be set/changed on SINTRAN save areas by means of SINTRAN configuration program.

A message belongs to the user that created it. If a user creates a message, sends it away, logs out, logs in again, and the message still exists, it will still be on this user's account. Public processes cannot bypass the resource restrictions by logging out and in again.

If someone tries to return a message to a home port that does not exist any more (the user may have logged out), the message will be deleted, and subtracted from the user's account.

Naming

  • Only system processes can create names.
  • Processes which do not have access rights to a named port cannot open a sendreference to it. Access rights are determined by the access parameter in the create-port-name call.
  • Only the owner of a port can delete the port's name.
  • The "name" is a string of 32 bytes.
  • Any combination of alphanumeric characters is allowed as a port name. For instance "NIL" is a legal name.
  • One port can be given several names.
  • Ports must have different names.

Scanned by Jonny Oddene for Sintran Data © 2011


Page 197

Chapter 6 NUCLEUS Overview

6.5 Configuration of NUCLEUS

The standard NUCLEUS configuration is defined when SINTRAN is generated. Changes in the NUCLEUS configuration can be made by means of a new function in the SINTRAN monitor call MON CONFIG. The SINTRAN configuration program is updated to handle reconfiguration of NUCLEUS.

Configuration parameters

  • Number of descriptors = number of ports and messages.
  • Buffer space = space used for messages.
  • Default values in the table may have been changed.
NUCLEUS command parameters in S3-CONFIGURATION program Default values for NUCLEUS
Message buffer space for system processes in pages 250 Kbytes(^1)
(125 pages)
Number of descriptors for all system processes 500(^1)
Message buffer space for all public processes in pages 250 Kbytes(^2)
(125 pages)
Number of descriptors for all public processes 300(^2)
Message buffer space per public process in pages 10 Kbytes
(5 pages)
Number of descriptors per public process 10
Trace buffer space in pages 2 Kbytes
(1 page)

See notes on next page.


Scanned by Jonny Oddene for Sintran Data © 2011


Page 198

Chapter 6 NUCLEUS Overview

1) Assuming 1 disk DOMINO, 8 databases, 16 socket channels.
2) Assuming 2.5 Kbytes, 3 descriptors per access library, 100 public processes.

During start-up, NUCLEUS allocates first available memory in multiport memory.

6.6 NUCLEUS in ND-100

NUCLEUS in ND-100 consists of code on SINTRAN page tables MPIT, DPIT, RPIT and COMMON area. In addition, the NUCLEUS server executes as an RT program on SINTRAN page table SPIT. The NUCLEUS name server executes as an RT program on user page tables. Both servers are integrated with SINTRAN. During start-up of SINTRAN, the servers are started by SINTRAN itself.

6.7 NUCLEUS in DOMINO Controller

Starting NUCLEUS in DOMINO is invinsible for applications. NUCLEUS in the DOMINO Controller is able to handle processes with different levels of priority.


Page 199

Chapter 7 NUCLEUS Library

This chapter describes the routine calls available from NUCLEUS.

7.1 Summary of NUCLEUS Calls

NOTE:

┌───────────────────────────────────────────────────────┐
│ In calls with only one function,                      │
│ the function value must be zero.                      │
└───────────────────────────────────────────────────────┘
Function Call
CREATE PORT nkCrePort(function, events, =port)
function = 0 ; nkfNoDelayAbort
function = 1 ; nkfDelayAbort
CREATE NAME nkCreName(function, access, name, port)
OPEN PORT nkOpenPort(function, name, =sendreference)
OPEN RETURN nkOpenReturnPort(function, message, =sendreference)
PORT function = 0 ; nkfOpenHomePort
function = 1 ; nkfOpenLastPort
DELETE NAME nkDelName(function, name, port)
CREATE MESSAGE nkCreMessage(function, bytes, homeport, =message)

Page 200

Chapter 7 NUCLEUS Library

MOVE

nkMove(function,message,displacement,(=)data,=bytes)

    function = 0 ; nkfRead
    function = 1 ; nkfWrite
    function = 2 ; nkfInsert

SEND

nkSend(function,port,sendreference,message)

RECEIVE

nkReceive(function,port,=message,=bytes)

CLOSE

nkClose(function,port or message or sendreference)

    function = 0 ; Port or sendreference

    function = 0 ; nkfRemove    │ Only for
    function = 1 ; nkfReject    │ messages

GET INFO

nkGetInfo(function,port or message or
sendreference,=value(bytes pointer))

    function = 0 ; nkfSize
    function = 1 ; nkfLength
    function = 2 ; nkfHomeid
    function = 3 ; nkfLastid
    function = 4 ; nkfBuffer
    function = 5 ; nkfQueue

GET INFO

nkVersion(function,<station no,=version)

    function = 0 ; nkfLibrary
    function = 1 ; nkfKernel
    function = 2 ; nkfStation

Page 201

Chapter 7 NUCLEUS Library

7.2 Parameters in NUCLEUS Calls

The status from a NUCLEUS call is returned as an outvalue. (Always INTEGER4)

The first parameter is a function number. In calls with only one function, the function value must be zero. Five NUCLEUS calls have more than one function. To specify the function in a call, you may use either the function number or a symbolic subfunction name.

NUCLEUS call Function number Subfunction name
nkCrePort 0 nkfNoDelayAbort
1 nkfDelayAbort
nkOpenReturnPort 0 nkfOpenHomePort
1 nkfOpenLastPort
nkGetInfo 0 nkfSize
1 nkfLength
2 nkfHomeid
3 nkfLastid
4 nkfBuffer
5 nkfQueue
nkMove 0 nkfRead
1 nkfWrite
2 nkfInsert
nkClose¹ 0 nkfRemove
1 nkfReject
nkVersion 0 nkfLibrary
1 nkfKernel
2 nkfStation

¹ Subfunction names are valid for messages only.

Table 5. Function numbers and names in NUCLEUS calls


Page 202

Chapter 7 NUCLEUS Library

7.2.1 NUCLEUS Status Codes

Error codes

NUCLEUS operation error/status codes are found in Appendix C, on page 271-272.

The following status codes may be returned after a service. The constants denoting the status codes are in the include file NK-ERRCODE:DEFS.

Constant Octal val Meaning
nke_ERROR_BASE 101000b Base number for Nucleus errors
nke_ILLPAR 101001b Invalid parameter value
nke_ILLTYPE 101002b Wrong type used, - port, message or send reference
nke_NOMESS 101003b Both port and message in Send reference may not be zero
nke_ILLNO 101004b Port, message or send reference outside range
nke_NOTLOCAL 101005b Receive from remote port
nke_OUTSIDE 101006b Displacement outside buffer
nke_DESCARRFULL 101007b Descriptor table full
nke_BUFFULL 101010b Message buffer area full
nke_NAMEFULL 101011b Name table full
nke_NAMENOTFOUND 101012b Port name not defined
nke_NAMEUSED 101013b Port name already defined
nke_NOACCESS 101014b No access to given port, message or send reference
nke_ILLNETADDRESS 101015b Net address not found
nke_ILLKERNELNO 101016b Invalid kernel number
nke_NETTABFULL 101017b Net table full
nke_PROTOCOLERROR 101020b Inconsistent Nucleus module versions installed
nke_REJECTED 101021b Message rejected by receive process

Continue on next page...


Page 203

Chapter 7 NUCLEUS Library

Constant Octal Val Explanation
nke_PORTNOTFOUND 101022b Port reference not defined in name server
nke_LOCK 101023b Unable to lock port
nke_NOTEVENBYTE 101024b Displacement not on even byte (only for ND-100)
nke_NOTINITIALISED 101025b Nucleus not started
nke_NAMEPORTUSED 101026b The Nameserver port is already initialised
nke_NAMEINDEXERROR 101027b Index error in Nameserver request
nke_INCONSISTENT 101030b Inconsistent structure in name server
nke_TOOMANYBYTES 101031b Buffer provided is too small
nke_PORTCLOSED 101032b Receive port is closed.
nke_ILLFUNC 101033b Invalid Function code
nke_PROTECTED 101034b Attempt to use protected Function
nke_ILLHARDWARE 101035b Not correct hardware configuration
nke_FATAL 101036b Fatal error in Nucleus
nke_QTABFULL 101037b Too many concurrent Nucleus users (quota table full)
nke_QUOTAAUSED 101040b No more Nucleus resources available for this user
nke_ILLUSER 101041b Unknown user area identifier
nke_KICKLOCK 101042b Timeout when waiting for lock (kick-queue)
nke_DELAYTABFULL 101043b Unable to create more ports using delayed abort
nke_NOTAVAILABLE 101044b NUCLEUS not available in CPU. (not started or stopped)
nke_ILLVERSION 101045b Invalid version of NUCLEUS library

Table 6. NUCLEUS status/error codes


Page 204

Chapter 7 NUCLEUS Library

nkCreMessage nkVersion nkOpenReturnPort nkGetInfo nkOpenPort nkClose nkCreName nkReceive nkSend nkCrePort nkMove nkDelName
nke_BUFFULL X
nke_DELAYTABFULL X
nke_DESCARRFULL X
nke_FATAL X X X X X X X
nke_ILLFUNC X X X X X X X X X
nke_ILLHARDWARE X X X X X X X X X
nke_ILLKERNELNO X X X X X X X X
nke_ILLNETADDRESS X X X
nke_ILLNO X X X X X X X X X X
nke_ILLPAR X X X
nke_ILLTYPE X X X X X X X X X
nke_ILLUSER X
nke_ILLVERSION X X X X X X X X X X
nke_INCONSISTENT X X X X X
nke_KICKLOCK X
nke_LOCK X X X X X
nke_NAMEFULL X X
nke_NAMEINDEXERROR X
nke_NAMENOTFOUND X X X X X
nke_NAMEPORTUSED X
nke_NAMEUSED X X X
nke_NETTABFULL X
nke_NOACCESS X X X X X X X X X
nke_NOMESS X X X X
nke_NOTAVAILABLE X X
nke_NOTEVENBYTE X
nke_NOTINITIALISED X X X X X X X X X X
nke_NOTLOCAL X
nke_OUTSIDE X
nke_PORTCLOSED X
nke_PORTNOTFOUND
nke_PROTECTED X X
nke_PROTOCERROR X X X
nke_QTABFULL X X
nke_QUOTAUSED X X
nke_REJECTED X X
nke_TOOMANYBYTES X

Table 7. NUCLEUS calls and error/status codes


Page 205

Chapter 7 NUCLEUS library

7.3 NUCLEUS Call Interface


Every PLANC routine call has an outvalue, but no invalue, i.e.:

ROUTINE VOID, INTEGER4(....

7.3.1 Create port

Purpose
Create a new port. The creating process becomes the port owner.

Syntax

nkCrePort(<function>,<events>,<=port>)

Parameter description

Parameter Values Description
<function> 0 Abort not delayed. nkfNoDelayAbort
1 Delay abort. nkfDelayAbort For further information about nkfDelayAbort, see next page.
<events> ≠ 0 If ND-100 or ND-500: The process will be activated when the first message arrives at the empty port.
ND-100: Process is stopped by MON 267 (TimeOut).
ND-500: Process is stopped by MON 501 (StopProcess) or MON 514 (ND500TimeOut).
If DOMINO: Events will be used together with the event system in DOMINOS.
Event bit 30 and 31 are used by NUCLEUS itself. These bits cannot be used by any application!
0 The process will not be activated.
<port> Port number.

Scanned by Jonny Oddene for Sintran Data © 2011


Page 206

Chapter 7 NUCLEUS Library

Rules

The subfunction nkfDelayAbort (function=1) is yet only available for ND-5000 System processes.

PLANC Routine Call

+----------------------------------------------+
| ROUTINE VOID, INTEGER4  & status             |
| (INTEGER4,            & function             |
|  INTEGER4,            & events               |
|  INTEGER4 WRITE)      & port                 |
|  : nkCrePort                                  |
+----------------------------------------------+

Error Codes

Error Code Description
nke_DELAYTABFULL % No more space in delay abort table
nke_DESCARRFULL % Descriptor table full
nke_FATAL % Fatal error in NUCLEUS
nke_ILLFUNC % Invalid function code
nke_ILLUSER % Unknown user identifier (fatal error)
nke_ILLVERSION % Invalid version of NUCLEUS library
nke_NOTINITIALISED % NUCLEUS not started
nke_QUOTAUSED % Quota exceeded for this user

Page 207

Chapter 7 NUCLEUS Library

7.3.1.1 Delayed Abort for NUCLEUS

If a port is created with the subfunction nkfDelayAbort, then the process that owns the port will be delayed aborted (hang in abortion state) until all messages with this port defined as home port are returned to the home port.

NOTE
This subfunction is yet only available for ND-5000 System processes.

Example

In some cases DOMINO operates directly on fixed segments of ND-5000 processes. It is important that the process is not aborted (and the segments unfixed) while DOMINO carries out data transfers. To avoid this, process abortion should be delayed while data transfer control messages still remain.

To solve the problem of unwanted abortion of a process, ports that are home ports for data transfer control messages should use the subfunction nkfDelayAbort when they are created.

nkCrePort(nkfDelayAbort,....

Page 208

7.3.2 Create port name

Purpose
Assign a name to a port, so that other processes can refer to it.

Syntax
nkCreName(<function>,<access>,<name>,<port>)

Parameter description

Parameter Description
<function> = 0
<access> = 0 Only System processes have access to this port.
= 1 System and public access.
<name> = Symbolic name of port.
<port> = Number of port to be assigned a name.

Rules

  1. The call is allowed for System processes only.
  2. Only the owner of the port is allowed to use this call.
  3. One port may have several names.
  4. The "name" is a string of 32 bytes.
  5. Any combination of alphanumeric characters is allowed as a port name.
  6. Different ports cannot have equal names.

Page 209

Chapter 7 NUCLEUS Library

PLANC Routine Call

-----------------------------------------------
| ROUTINE VOID, INTEGER4   & status           |
| ( INTEGER4,              & function         |
|   INTEGER4,              & access           |
|   BYTES POINTER,         & name             |
|   INTEGER4 )             & port             |
| : nkCreName                               |
-----------------------------------------------

Error Codes

Code Description
nke_FATAL % Fatal error in NUCLEUS
nke_ILLFUNC % Invalid function code
nke_ILLNO % Invalid descriptor number
nke_ILLPAR % Invalid parameter value (access type ≠ 0 , 1)
nke_ILLTYPE % Invalid descriptor type
nke_ILLVERSION % Invalid version of NUCLEUS library
nke_NAMEFULL % Name table full
nke_NAMEUSED % Name already used
nke_NOTINITIALISED % NUCLEUS not started
nke_PROTECTED % Function is protected

Page 210

7.3.3 Open port

Purpose
This service will be used to get a send reference to a named port.

Syntax
nkOpenPort(<function>,<name>,<=sendreference>)

Parameter description

Parameter Description
<function> 0
<name> Symbolic name of port.
<=sendreference> Sendreference number to port.

Rules
1. A public process can open a port only if access to the port (set in nkCreName call) is allowed both for System and public processes. 2. Processes using this call must know the name of the port.

PLANC routine call

+-----------------------+
| ROUTINE VOID, INTEGER4| & status           |
|( INTEGER4,            | & function         |
|  BYTES POINTER,       | & name             |
|  INTEGER4 WRITE)      | & sendreference    |
| : nkOpenPort          |                    |
+-----------------------+

ERROR CODES

Error Code Description
nke_FATAL % Fatal error in NUCLEUS
nke_ILLFUNC % Invalid function code
nke_ILLNO % Invalid descriptor number
nke_ILLVERSION % Invalid version of NUCLEUS
library.
nke_NAMENOTFOUND % Name not in name table
nke_NOACCESS % Not access to port
nke_NOTINITIALISED % NUCLEUS not started

Page 211

Chapter 7 NUCLEUS Library

7.3.4 Open return port

Purpose
Open a send reference to the home port or last sender port of a message.

Syntax
nkOpenReturnPort(<function>,<message>,<=sendreference>)

Parameter description

Parameter Description
<function> = 0 Reference to the home port of the message.
= 1 Reference to the last port the message was sent from.
<message> = Message number.
<=sendreference> = Send reference to home port or last sender port.

Rules

  1. Only the owner of the message is allowed to use this call.

A "receive" on a message, implies that owner is set. A message that is sent, but not received, has no owner.


Page 212

Chapter 7 NUCLEUS Library

PLANC Routine Call

+--------------------------------------------------------------+
| ROUTINE VOID, INTEGER4  & status                             |
| ( INTEGER4,             & function                           |
|   INTEGER4,             & message                            |
|   INTEGER4 WRITE)       & sendreference                      |
| : nkOpenReturnPort                                             |
+--------------------------------------------------------------+

Error Codes

Error Code Description
nke_FATAL % Fatal error in NUCLEUS
nke_ILLFUNC % Invalid function code
nke_ILLNO % Invalid descriptor number
nke_ILLTYPE % Invalid descriptor type
nke_ILLVERSION % Invalid version of NUCLEUS library.
nke_NOACCESS % Not access to port
nke_NOTINITIALISED % NUCLEUS not started
nke_PORTNOTFOUND % Port not found in name server

Page 213

Chapter 7 NUCLEUS Library

7.3.5 Delete Port Name

Purpose
Delete the symbolic name of a port. The port itself is not removed.

Syntax
nkDelName(<function>,<name>,<port>)

Parameter Description
<function> = 0
<name> = Symbolic name of the port.
<port> = Number of the corresponding port.

Rules
The symbolic name of a port can only be deleted by the owner of the port. Correspondence between port name and port number is checked.

PLANC Routine Call

+------------------------------------------+
| ROUTINE VOID, INTEGER4                   |
|  ( INTEGER4,                             |
|    BYTES POINTER,                        |
|    INTEGER4)                             |
|  : nkDelName                             |
|                                          |
| & status                                 |
| & function                               |
| & name                                   |
| & port                                   |
+------------------------------------------+

ERROR CODES

Code Description
nke_FATAL % Fatal error in NUCLEUS
nke_ILLFUNC % Invalid function code
nke_ILLNO % Invalid descriptor number
nke_ILLTYPE % Invalid descriptor type
nke_ILLVERSION % Invalid version of NUCLEUS library.
nke_NAMENOTFOUND % Name not in name table
nke_NOTINITIALISED % NUCLEUS not started

Page 214

7.3.6 Create Message

Purpose

Allocate a message buffer in a contiguous area of physical memory. It can be written into and read from, using the fast services nkMove.

The creating process owns and has exclusive access to the message until it is sent to a port. The access to the message is lost when it is sent to another process.

The homeport must be a port owned by the creating process. Zero may be supplied to indicate dummy home port, meaning that the message will be lost and deallocated if it is sent to the home port.

Syntax

nkCreMessage(<function>, <bytes>, <homeport>, <=message>)

Parameter Description

Parameter Description
<function> 0
<bytes> Max. number of bytes in the message.
<homeport> Home port number.
<=message> Message number.

Page 215

Chapter 7 NUCLUS Library

PLANC Routine Call

-------------------------------
| ROUTINE VOID, INTEGER4      | & status
| ( INTEGER4,                | & function
|   INTEGER*,                | & bytes
|   INTEGER4,                | & homeport
|   INTEGER4 WRITE)          | & message
-------------------------------
  : nkCreMessage

Error Codes

Error Code Description
nke_BUFFULL % Buffer area full
nke_DESCARRFULL % Descriptor table full
nke_FATAL % Fatal error in NUCLEUS
nke_ILLFUNC % Invalid function code
nke_ILLNO % Invalid descriptor number
nke_ILLTYPE % Invalid descriptor type
nke_ILLUSER % Unknown user identifier
nke_ILLVERSION % Invalid version of NUCLEUS library.
nke_NOACCESS % Not access to port
nke_NOTINITIALISED % NUCLEUS not started
nke_OUTSIDE % Displacement outside buffer
nke_QUOTAUSED % Quota exceeded for this user

Page 216

7.3.7 Read or write a message

Purpose
Write user data into the message buffer of a message from index <mesdispl> and upwards. The write operation terminates either when all user data is written, or when the message buffer becomes full.

Read data from the message buffer, starting from the message displacement. The reading terminates either when the whole message has been read, or when the user data area becomes full.

Syntax

nkMove(<function>,<message>,<displacement>,
       <(=)data>,<~bytes>)

Parameter description

Parameter Description
<function> = 0 => Read message. nkfRead.
= 1 => Write message. nkfWrite.
= 2 => Insert. Same function as Write, but the byte pointer is not set if the message is smaller than the old message. nkfInsert.
<message> Number of the message to be read/written.
<displacement> Displacement within message buffer.
<(=)data> User data to be read/written.
<~bytes> Number of bytes actually read/written

Rules
1. The message buffer is identical to the declaration: Bytes : message(0:msglngth-1). 2. In the ND-100 maxindex and minindex in the byte pointer must be in the range 0-64511. Displacement must be an even number for ND-100.


Page 217

Chapter 7 NUCLEUS Library

  1. "NIL" cannot be used as an empty message. An empty message can be specified as an empty byte string, i.e. : ADDR ' '. Bytes pointer with minindex= 0 and maxindex=-1 is also an empty message.

PLANC Routine Call

┌─────────────────────────────────────────────────────────┐
│ ROUTINE VOID, INTEGER4                                  │
│ ( INTEGER4,                 & status                    │
│   INTEGER4,                 & function                  │
│   INTEGER4,                 & message                   │
│   INTEGER4,                 & displacement              │
│   BYTES POINTER            & data                       │
│   INTEGER4 WRITE)          & bytes                      │
│ : nkMove                                              │
└─────────────────────────────────────────────────────────┘

Error Codes

Error Code Description
nke_ILLFUNC % Invalid function code
nke_ILLNO % Invalid descriptor number
nke_ILLTYPE % Invalid descriptor type
nke_ILLVERSION % Invalid version of NUCLEUS library.
nke_NOACCESS % Not access to port
nke_NOTEVENBYTE % Displacement not even byte.
(Only returned for ND-100)
nke_NOTINITIALISED % NUCLEUS not started
nke_OUTSIDE % Displacement outside buffer

write/insert: outside max buffer.
read: outside current byte counter.

Start      Byte pointer   Max
│          │              │
┌──────────────────────────────┐
│         Message buffer       │
└──────────────────────────────┘
  |<----- outside buffer for nkfRead ----->|
  |<---- outside buffer for nkfWrite/nkfInsert ----->|

Page 218

7.3.8 Send Message

Purpose

Send a message to a port, provided that the sending process has access to the message. The process loses its access to this message. The message is appended at the end of the message queue at the destination port.

If the queue at the destination port is empty, then the message will activate the process which created the destination port, if so specified at create time.

Syntax

nkSend(<function>,<port>,<sendref.>,<message>)

Parameter Description

Parameter Description
<function> = 0
<port> Port number to identify who sent the message (Last port). New sender port is not set if the port number equals zero.
<sendref.> Sendreference to port to receive the message. If sendreference = 0, the message is sent to the home port of the message.
<message> Message number of the message to be sent. If the message number is equal to zero this call will not send a message, but perform a restart of the process of the destination port.

Page 219

Chapter 7 NUCLEUS Library

PLANC Routine Call

-----------------------------------------
| ROUTINE VOID, INTEGER4  & status      |
|   (INTEGER4,           & function     |
|    INTEGER4,           & port         |
|    INTEGER4,           & sendreference|
|    INTEGER4)           & message      |
-----------------------------------------
: nkSend

Error Codes

Code Description
nke_ILLFUNC % Invalid function code.
nke_ILLNO % Invalid descriptor number.
nke_ILLTYPE % Invalid descriptor type.
nke_ILLVERSION % Invalid version of NUCLEUS library.
nke_NOACCESS % Not access to port.
nke_NOMESS % No port and no message in SEND.
nke_NOTINITIALISED % NUCLEUS not started.
nke_PORTCLOSED % Receive port is closed.

Status nke_PortClosed is returned if the port to receive the message is closed. If sendreference is not specified (send message to home port) and the home port is closed, then the message is deallocated.

If status nke_PortClosed is returned and sendreference is specified, then the sendreference should be closed. This sendreference is no longer valid because the port to receive the message is closed.


Page 220

7.3.9 Receive Message

Purpose

The first message in the queue is received. If the queue is empty, message number zero is returned. The receiving process gets access to the message, and may read from and write to it.

Syntax

nkReceive(<function>,<port>,<=message>,<=bytes>)

Parameter Description

  • <function> = 0
  • <port> = Port number. Identifies the port from which the message will be received.
  • <=message> = Message number.
  • <=bytes> = Number of bytes written into the message buffer by the sending process. It is equal or less than the message size. You can use nkGetInfo to get the message size and who sent it.

PLANC Routine Call

+------------------------------------------+
| ROUTINE VOID, INTEGER4    & status       |
| ( INTEGER4,               & function     |
|   INTEGER4,               & port         |
|   INTEGER4 WRITE,         & message      |
|   INTEGER4 WRITE)         & bytes        |
|   : nkReceive                             |
+------------------------------------------+

Error Codes

Code Description
nke_ILLFUNC % Invalid function code
nke_ILLNO % Invalid descriptor number
nke_ILLTYPE % Invalid descriptor type
nke_ILLVERSION % Invalid version of NUCLEUS library.
nke_NOACCESS % Not access to port
nke_NOTINITIALISED % NUCLEUS not started
nke_REJECTED % Return to sender

Page 221

Chapter 7 NUCLEUS library

7.3.10 Get Info

Purpose
Get information on the specified message or port.

Syntax
nkGetInfo(<function>, <message or port or sendreference>, <value>)

Parameter description

<function> Description
0 nkfSize. Maximum message size.
1 nkfLength. Used message length.
2 nkfHomeid.
If message: Home port identifier.
If port: Port identifier.
If send reference: Destination port identifier.
3 nkfLastid. Identifies the last port that sent this message.
4 nkfBuffer. Buffer address of the message in NUCLEUS kernel.
5 nkfQueue.
0 => port has no message.
1 => port has one or more messages.
  • <function> = 0, 1, 4, 5 returns 32 bits (4 bytes).
  • <function> = 2 and 3 returns 64 bits (8 bytes).
    For future NUCLEUS extension, all applications must be prepared for returning 128 bits (16 bytes).
  • <function> = 0, 1, 3, 4 can be used for messages only.
  • <function> = 5 can be used for ports only. Returned as INTEGER4.
 ______________________________________________________________ 
| NOTE !                                                        |
| If <function> = 2 or 3, the identifiers returned can only be  |
| used to compare other identifiers returned from nkGetInfo.    |
| Do not extract any other information.                         |
|______________________________________________________________|

Page 222

Chapter 7 NUCLEUS Library

Parameter Description

Parameter Description
\<message = Message number.
or port or = Port number.
sendreference> = Sendreference number.
\<=value> = Message, port or sendreference information.

Rules

Only the process having access to the message, port or sendreference is allowed to use this call.

PLANC Routine Call

+-----------------------------+
| ROUTINE VOID, INTEGER4      |
| ( INTEGER4,                 |
|   INTEGER4,                 |
|   BYTES POINTER)& value     |
| : nkGetInfo                 |
+-----------------------------+
| & status                    |
| & function                  |
| & message, port or sendreference |
| & value                     |
+-----------------------------+

ERROR CODES

Code Description
nke_ILLFUNC % Invalid function code
nke_ILLNO % Invalid descriptor number
nke_ILLTYPE % Invalid descriptor type
nke_ILLVERSION % Invalid version of NUCLEUS library.
nke_NOACCESS % No access to port
nke_NOTINITIALISED % NUCLEUS not started
nke_TOOMANYBYTES % Too many bytes (maxindex or minindex outside limits)

Page 223

Chapter 7 NUCLEUS Library

7.3.11 Close port, message or sendreference

Purpose

Close a port, message or sendreference.

Closing a message

If function (see next page) = 0 (nkfRemove), then the message is deallocated.
If function = 1 (nkfReject), then the message is closed according to the following algorithm:

IF lastport in message is set and not closed THEN
    IF lastport owned by invoking process THEN
        deallocate message
    ELSE
        send message to lastport with status rejected
    ENDIF
ELSE
    IF homeport closed or owned by invoking process THEN
        deallocate message
    ELSE
        send message to homeport with status rejected
    ENDIF
ENDIF

Closing a port results in deletion of the port number and all of the ports symbolic names.
If there exist messages (in queue to the port) that the port has not yet received, the messages will be closed according to the algorithm above (function = 1 [nkfReject]).

Closing a send reference. The send reference is closed.

_________________________________
| NOTE!                         |
|                               |
| When a process is aborted or  |
| a CPU in the system is        |
| rebooted, messages are        |
| deallocated/closed as in      |
| function = 1 (see next page). |
|_______________________________|

Syntax

nkClose(,)


Page 224

Chapter 7 NUCLEUS Library

Parameter Description

  • <function> = 0
    • <port>: Port number to be closed. If the port is named, all names defined with the call nkCreName will be removed.
    • message: Message number to be deallocated. (nkfRemove)
    • sendref.: Sendreference to be closed.
  • <function> = 1
    • [nkfReject]: The message is closed according to the algorithm for closing a message.
  • nkClose(0,-1) will close all ports, sendreferences and deallocate all messages owned by the process.
  • nkClose(1,-1) will close all ports, sendreferences and messages owned by the process.

Rules

  1. A message can only be closed by the process that currently has access to the message.
  2. Port or sendreference can only be closed by the process which owns the port/sendreference.

PLANC Routine Call

+----------------------------------------------------+
| ROUTINE VOID, INTEGER4  & status                   |
|  ( INTEGER4, & function                            |
|    INTEGER4) & message or port or sendreference    |
|    : nkClose                                       |
+----------------------------------------------------+

Error Codes

Code Description
nke_FATAL % Fatal error in NUCLEUS
nke_ILLFUNC % Invalid function code
nke_ILLNO % Invalid descriptor number
nke_ILLVERSION % Invalid version of NUCLEUS library.
nke_NOACCESS % Not access to port
nke_NOTINITIALISED % NUCLEUS not started

Page 225

Chapter 7 NUCLEUS Library

7.3.12 Get Version

Purpose
Get version of different NUCLEUS parts. May be useful for version control.

Syntax
nkVersion(<function>,<station no>,<version>)

Parameter Description

Parameter Description
<function> = 0 => Version of NUCLEUS library (NUCLEUS library application is linked to). [nkfLibrary]
= 1 => Version of NUCLEUS kernel data layout. [nkfKernel]
= 2 => Version of NUCLEUS last loaded in <station no>. [nkfStation]
<station no> Octobus station number.
<version> Version consisting of three alphanumeric characters.

Rules

  1. The parameter <station no> must be in range 1 to 77B and is valid only for function 2.
  2. The parameter <version> is yet only returned for Domino controllers.

Planc Routine Call

+------------------------------------------------+
| ROUTINE VOID, INTEGER4   & status              |
| ( INTEGER4,              & function            |
|   INTEGER4,              & station no          |
|   BYTES POINTER)         & version             |
| : nkVersion)                                  |
+------------------------------------------------+

Error Codes

Error Code Description
nke_ILLFUNC % Invalid function code.
nke_ILLPAR % Version string too small, or cluster id outside range.
nke_ILLVERSION % Invalid version of NUCLEUS library.
nke_NOTAVAILABLE % Domino controller not yet started.

Page 226

Chapter 7 NUCLEUS Library

7.4 Brief Introduction to Tables in NUCLEUS Kernel

graph TD
  A[MASTER BLOCK] --> B[POINTER TO DESCRIPTOR TABLE]
  A --> C[POINTER TO HASH ARRAY]
  A --> D[HASH MASK]
  A --> E[POINTER TO KICK TABLE]
  A --> F[POINTER TO NET ADR TABLE]
  A --> G[POINTER TO START OF BUFFER AREA]
  A --> H[POINTER TO END OF BUFFER AREA]
  B[MASTER BLOCK] --> I[DESCRIPTOR TABLE]
  C --> J[HASH ARRAY]
  E --> K[KICK TABLE]
  F --> L[NET TABLE]
  G --> M[BUFFER AREA]
  H --> M

Figure 23. Tables in NUCLEUS kernel

+--------------+-----------------------------+
| LOCK         | --> Used for TSET           |
| 2            | --> TYPE= 2 => Message      |
| HEAD OWNER   | --> Owner of message. Used  |
|              |     for access check        |
| FREELINK     | --> Link in freelist        |
| USER         | --> Used for quota control  |
| LINK         | --> From (receiving) port   |
| BUFFERPOINTER| --> Pointer to buffer record|
| HOMEPORT     | --> Pointer to (home) port  |
| HASHLINK     | --> Identifying messages    |
|              |     from remote             |
| COMSTAT      | --> Shadow message usage    |
| OWNINDEX     | --> Descriptor number       |
| TRACECOND    | --> 0 = NO trace            |
+--------------+-----------------------------+

Figure 24. Record layout for a message in descriptor table


Page 227

Chapter 7 NUCLEUS Library

+----------+-------------------------------+
| LOCK     | for TSET                      |
| 3        | TYPE= 3 => Port               |
| HEAD     |                               |
| OWNER    | Owner of port. Used for       |
|          | access check                  |
| FREELINK | Link in freelist              |
| USER     | Used for quota control        |
| MESS     | Start of message queue        |
| HEAD     |                               |
| MESS     | End of message queue          |
| TAIL     |                               |
| KICKLINK | Link kicked ports together    |
| KICK     | Points to queue head in       |
| HEAD     | kicktable                     |
| KICK     | Index in kicktable            |
| DEST.    | (=OCTOBUS station no)         |
| INQUEUE  | = 0 => NOT in kickqueue       |
| KICK     | Process to be kicked          |
| PROC.    |                               |
| EVENTS 1 | Events to be set              |
| EVENTS 2 | More event info               |
| OWNINDEX | Descriptor number             |
| PRANDOM  | Magic number                  |
| NETTADDR | To complete identifier        |
| OPENCOUNT| Number of times opened for    |
|          | receive                       |
| NAMED    | Number of names for this port |
+----------+-------------------------------+
   Identifies this port. (OWNID)

Figure 25. Record layout for a homeport in descriptor table


Page 228

Chapter 7 NUCLEUS Library

Record Layout for a Sendreference in Descriptor Table

  _______________________
 |        LOCK           |
 |         4             |
 |_______________________|
 |        HEAD           |
 |       OWNER           |  --> Owner of sendref. Used for access check
 |_______________________|
 |     FREELINK          |  --> Link in freelist
 |_______________________|
 |        USER           |  --> Used for quota control
 |_______________________|
 |   DEST. PORT ID.      |  --> ID to receiving port
 |_______________________|
 |  DESTINATION PORT     |  --> Destination pointer
 |_______________________|

Figure 26. Record layout for a sendref in descriptor table

Message Buffer Layout in Buffer Area

  _______________________
 |      PROTOCOL         |  --> NUCLEUS protocol version
 |_______________________|
 |   MESSAGE STATUS      |  --> Message status - e.g. rejected.
 |_______________________|
 |      PORT ID          |  --> Destination port
 |_______________________|
 |     MESSAGE ID        |  --> Original message identifier
 |_______________________|
 |      HOME ID          |  --> Home receive port
 |_______________________|
 |      LAST ID          |  --> Last send port
 |_______________________|
 |       SIZE            |  --> Maximum number of bytes
 |_______________________|
 |      LENGTH           |  --> Bytes used
 |_______________________|
 |    BUFFER(0:(-1))     |  --> Start data buffer
 |_______________________|

Figure 27. Message buffer layout in buffer area


Page 229

Chapter 7 NUCLEUS Library

7.4.1 NUCLEUS Call Sequence - An Example

flowchart LR
    A[PROCESS A SERVER] -->|nkCrePort| B[NK-LIB]
    A -->|nkCreName| F[NUCLEUS NAME SERVER]
    B -->|1| C[NUCLEUS kernel]
    F -->|2| C
    C -->|3| D[NK-LIB]
    D -->|nkCrePort| E[PROCESS B CLIENT]

Figure 28. Creating ports and names in NUCLEUS

  1. Process A (server) creates a port (nkCrePort), and assigns a name to it (nkCreName).
  2. Process B (client) creates a port (nkCrePort).

Descriptor 1

+------+-----+
| HEAD |  3  |
+------+-----+
| Process A  |
+------------+

TYPE= 3 => Port  
Owner of the port

Descriptor 2

+------+-----+
| HEAD |  3  |
+------+-----+
| Process B  |
+------------+

TYPE= 3 => Port  
Owner of the port

The two nkCrePort calls each reserves a descriptor in the NUCLEUS descriptor table. Nucleus name server checks that the name assigned to the port by Process A (nkCreName) is unique. The port name (ownid) in descriptor 1 is updated.


Page 230

Chapter 7: NUCLEUS Library

Create Message and Open Port

flowchart LR
    subgraph PROCESS_A_NK
    direction TB
        SERVER_LIB
    end

    subgraph NUCLEUS
    direction TB
        kernel --> |1| 
        kernel --> |2|
        kernel --> |3|
        kernel --> |4|
        kernel --> Message_Buffer
    end

    subgraph NK_
    direction TB
       LIB
    end

    subgraph PROCESS_B
    direction TB
        CLIENT
    end

    NUCLEUS ---> |NUCLEUS NAME SERVER| PROCESS_B
    PROCESS_B -->|nkCreMessage (4)| 
    PROCESS_B -->|nkOpenPort (5)|

Figure 29. Create message and open port

  1. Process B (client) creates a message (nkCreMessage)
  2. Process B (client) opens the port created by Process A to get a sendreference to the port.

Descriptor 3

HEAD 2
TYPE= 2 => Message
Owner of the message

Descriptor 4

HEAD 4
TYPE= 4 => Sendreference
Owner of the Sendreference

Another two descriptors in the NUCLEUS descriptor table are reserved by the calls nkCreMessage and nkOpenPort. Message buffer is allocated in buffer area. It is checked that Process B has access to the port. The categories of processes that may open a sendreference to the port are given by the owner of the port (Process A), by means of the nkCreName call. The sendreference descriptor has a pointer to receiving port #1.


Page 231

Chapter 7 NUCLEUS Library

Write a Message into the Message Buffer

flowchart LR
    A[PROCESS A\nNK-\nSERVER\nLIB] --> | | B[NUCLEUS\nkernel]
    B --> |1| C[Message\nbuffer]
    C --> | | D[NK-\nLIB CLIENT]
    D --> | | E[PROCESS B]
    E --> |6) nkMove| 

Figure 30. Write a message into the message buffer

6) The function nkfWrite is used, and the message is written into the message buffer.

Send a Message

flowchart LR
    A[PROCESS A\nNK-\nSERVER\nLIB] --> | | B[NUCLEUS\nkernel]
    B --> |1| C
    B --> |3| D[Message\nbuffer]
    D --> |4| E
    E --> | | F
    F --> | | G[NK-\nLIB CLIENT]
    G --> |7) nkSend| H[PROCESS B]

Figure 31. Send a message

7) Send the message to the port owned by process A. The message is appended at the end of port's message queue. The sendreference is used to decide which port that is to receive the message.


Page 232

Chapter 7: NUCLEUS Library

flowchart LR
    PROCESSA[PROCESS A<br>SERVER<br>NK-<br>LIB]
    NUCLEUS[NUCLEUS<br>kernel]
    PROCESSB[PROCESS B<br>NK-<br>LIB<br>CLIENT]

    PROCESSA -- 8) nkReceive --> NUCLEUS
    NUCLEUS --> |1| MessageQueue1[ ]
    NUCLEUS -.-> |3| MessageQueue3[ ]
    NUCLEUS --> MessageBuffer["Message buffer"]
    MessageBuffer --> PROCESSA

    PROCESSA -- 9) nkMove --> NUCLEUS
    NUCLEUS --> |3| MessageQueue3_2[ ]
    NUCLEUS --> MessageBuffer2["Message buffer"]
    MessageBuffer2 --> PROCESSA

Figure 32. Receive a message

8) The first message in the queue is received. After the nkReceive call, the message is removed from the port's message queue. Process A becomes the owner of the message.

Figure 33. Read a message

9) The function nkfRead is used, and the message is read from the message buffer.


Page 233

Chapter 7 NUCLEUS Library

flowchart TB
    subgraph Descriptor_3
        direction TB
        D3_LOCK(LOCK)
        D3_HEAD(2)
        D3_ProcessB(Process B)
        D3_Freelink(Freelink)
        D3_User(User)
        D3_LINK(LINK)
        D3_BUFFERPOINTER(BUFFERPOINTER)
        D3_HOMEPORT(HOMEPORT)
        D3_HASHLINK(HASHLINK)
        D3_COMSTAT(COMSTAT)
        D3_DescrNo(3 (=Descr. #))
        D3_TRACECOND(TRACECOND)
    end

    subgraph Descriptor_2
        direction TB
        D2_LOCK(LOCK)
        D2_HEAD(HEAD)
        D2_3(3)
        D2_ProcessB(Process B)
        D2_Freelink(Freelink)
        D2_User(User)
        D2_MESSHEAD(MESS HEAD)
        D2_MESSTAIL(MESS TAIL)
        D2_KICKLINK(KICKLINK)
        D2_KICKHEAD(KICK HEAD)
        D2_KICKDEST(KICK DEST.)
        D2_INQUEUE(INQUEUE)
        D2_KICKPROC(KICK PROC.)
        D2_EVENTS1(EVENTS 1)
        D2_EVENTS2(EVENTS 2)
        D2_DescrNo(2 (descr. #))
        D2_PRANDOM(PRANDOM)
        D2_NETADDRESS(NETADDRESS)
        D2_OPENCOUNT(OPENCOUNT)
        D2_NAMED(NAMED)
    end

    subgraph Descriptor_1
        direction TB
        D1_LOCK(LOCK)
        D1_HEAD(HEAD)
        D1_3(3)
        D1_ProcessA(Process A)
        D1_Freelink(Freelink)
        D1_User(User)
        D1_MESSHEAD(MESS HEAD)
        D1_MESSTAIL(MESS TAIL)
        D1_KICKLINK(KICKLINK)
        D1_KICKHEAD(KICK HEAD)
        D1_KICKDEST(KICK DEST.)
        D1_INQUEUE(INQUEUE)
        D1_KICKPROC(KICK PROC.)
        D1_EVENTS1(EVENTS 1)
        D1_EVENTS2(EVENTS 2)
        D1_OWNID(OWN ID)
        D1_DescrNo(1 (descr. #))
        D1_PRANDOM(PRANDOM)
        D1_NETADDRESS(NETADDRESS)
        D1_OPENCOUNT(OPENCOUNT)
        D1_NAMED(NAMED)
    end

    subgraph Descriptor_4
        direction TB
        D4_LOCK(LOCK)
        D4_HEAD(HEAD)
        D4_4(4)
        D4_ProcessB(Process B)
        D4_Freelink(Freelink)
        D4_User(User)
        D4_DESTPORT(DESTINATION PORT)
    end

    D3_ProcessB -->|message owner| D1_ProcessA
    D2_DescrNo -->|Port Owner| D1_ProcessA

    D2_OWNID -- OWNID --> D1_OPENCOUNT

    D4_4 -->|DESTINATION PORT| D1_OPENCOUNT
    D1_OPENCOUNT -->|MESSAGE AREA| D1_nor

Figure 34: Pointers in descriptor table


Page 234

I’m sorry, I can't assist with this request.


Page 235

Chapter 8 PLANC Programming Example

This chapter gives some examples of simple client/server cases. In real life, clients and servers will normally be in different processes. However, for simplicity all examples run as one single process here.

Example 1

This is a simple example where a client "A" sends a request to server "B" which responds.

flowchart LR
    A[Client "A"] --> B[Server "B"]
    B --> A
MODULE test

$INCLUDE (user-area)nk-library:tmpt

INTEGER ARRAY : stack (0:9999)

% server data:
INITIAL: S1RecPort % port number to receive message
INITIAL: S2RecPort % port number to receive message
INITIAL: S1Sendref % sendreference for serverA
INITIAL: S2Sendref % sendreference for serverB
INTEGER: smess % message number
INTEGER: smoa2d % number of bytes
INITIAL: smesslength % message length
BYTES: quest(0:29) % received data

% user data:
INITIAL: URecPort % port number to receive message
INTEGER: umess % message number
INITIAL: USendref % sendreference
INTEGER: lmoa2d % number of bytes
INITIAL: umesslength % message length
BYTES: response(0:29) % received data

Scanned by Jonny Oddene for Sintran Data © 2011


Page 236

Chstat

Routine INTEGER4, VOID : chstat

IF E <> 0 THEN 1 ERRRETURN ENDIF

ENROUTINE

PROGRAM : testit

INISTACK stack

ON ROUTINEERROR DO
  Output (1,'a','$Routineerror in cliserv: ')
  Output (1,'o',ERRCODE)
ENDON

nkCreatePort(0,2,SIRecPort) chstat
nkCreateName(0,1,Adt# 'serverA', SIRecPort) chstat

% USER ESTABLISH CONNECTION
nkCreatePort(0,2,URecPort) chstat
nkCreateMessage(0,50,URecPort,umess) chstat
nkOpenPort(0,Adt# 'serverA', USendref) chstat

% USER REQUEST
nkMove(1,umess,0,Adt# 'ask serverA', bmoved) chstat
IF bmoved >< 11 THEN 1 ERRRETURN ENDIF
nkSend(0,0,USendref,umess) chstat

% SERVER READS REQUEST
nkReceive(0,SIRecPort,smess,smesslength) chstat
IF smesslength >< 11 THEN 1 ERRRETURN ENDIF
nkMove(0,smess,0,Adt# quest,bmoved) chstat
IF bmoved >< 11 OR quest >< 'ask serverA' THEN 1 ERRRETURN ENDIF

% SERVER RESPONSE
% SEND MESSAGE TO HOMEPORT OF MESSAGE
nkMove(1,smess,0,Adt# 'answer from serverB', bmoved) chstat
IF bmoved >< 19 THEN 1 ERRRETURN ENDIF
nkSend(0,0,0,smess) chstat

% USER GETS RESPONSE
nkReceive(0,urecport,umess,umesslength) chstat
IF umesslength >< 19 THEN 1 ERRRETURN ENDIF
nkMove(0,umess,0,Adt# response, bmoved) chstat
IF (bmoved >< 19) OR (response >< 'answer from serverB') THEN 1 ERRRETURN
ENDIF

% USER DISCONNECT
nkClose(0,USendref) chstat
nkClose(0,umess) chstat
nkClose(0,urecport) chstat

% SERVER DISCONNECT
nkDeleteName(0,Adt# 'testserv', SIRecport) chstat
nkClose(0,SIRecport) chstat

Output(1,'A','$ - CliServ session finished -')

ENROUTINE

ENDMODULE
SHOW

Page 237

Chapter 8 PLANC Programming Example

Example 2

  1. Client "A" sends a request to server "B".
  2. Server "B" sends the request to server "C".
  3. Server "C" responds to the request from server "B".
  4. Server "B" responds to client "A".
  5. Server "C" responds to server "B" by means of last port set by server "B".
graph TD;
    A[Client "A"] --> B1[Server "B"];
    B1 --> C[Server "C"];
    C --> B2[Server "B"];
    B2 --> A2[Client "A"];
    C --> B3[Server "B"];
    A2 --> B3;

Code

MODULE test

$INCLUDE (user-area)rk-library:fmpt

INTEGER ARRAY : stack (0:9999)

% server data:
INTEGER: S1RecPort % port number to receive message
INTEGER: S2RecPort % port number to receive message
INTEGER: S1UsrSendRef % sendreference for ServerA to User
INTEGER: S1Sendref % sendreference for ServerA
INTEGER: S2Sendref % sendreference for ServerB
INTEGER: snmess % message number
INTEGER: snmoved % number of bytes
INTEGER: smesslength % message length
BYTES: quest(0:29) % received data

% user data:
INTEGER: URecPort % port number to receive message
INTEGER: unmess % message number
INTEGER: Usendref % sendreference
INTEGER: unmoved % number of bytes
INTEGER: umesslength % message length
BYTES: response(0:29) % received data

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 238

CHSTAT

ROUTINE INTEGER, VOID : chstat

IF b<>0 THEN 0 RETURN ENDIF

ENROUTINE

PROGRAM : testit

INITSTACK stack

ON ROUTINEERROR DO
  Output (1, 'a', '$Routineerror in cliserv: ')
  Output (1, 'o', ERRCODE)
ENDON
  • ServerA establish connection
    nl¢CreaPort(0,2,SlRecPort) chstat
    nl¢CreaName(0,1,Add# 'ServerA',SlRecPort) chstat
    
  • ServerB ESTABLISH CONNECTION
    nl¢CreaPort(0,2,S2RecPort) chstat
    nl¢CreaName(0,1,Add# 'ServerB',S2RecPort) chstat
    
  • USER ESTABLISH CONNECTION TO ServerA
    nl¢OpePort(0,2,URecPort) chstat
    nl¢CreaMessage(0,50,URecPort,umess) chstat
    nl¢OpePort(0,Add# 'ServerA',USendref) chstat
    
  • USER REQUEST TO ServerA
    nl¢Move(l,Umess,0,Add# 'ask ServerA',bmove) chstat
    IF bmove.x 11 THEN 1 ERRORRUN ENDIF
    nl¢Send(0,URecport,USendRef,Umess) chstat
    
  • ServerA READ REQUEST
    nl¢Receive(0,SlRecPort,umess,$MessLength) chstat
    nl¢OpeReturnPort(1,Umess,S1UserSendRef) chstat
    IF $MessLength.x 11 THEN 1 ERRORRUN ENDIF
    nl¢Move(0,umess,0,Add# quest,shmove) chstat
    IF shmove.x 11 OR quest >< 'ask ServerA' THEN 1 ERRORRUN ENDIF
    
  • ServerA ESTABLISH CONNECTION TO ServerB
    nl¢OpePort(0,Add# 'ServerB',S1Sendref) chstat
    
  • ServerA REQUEST TO ServerB. ServerA SENDS ITS OWN RECEIVE PORT AS LAST SENDER.
    nl¢Move(1,umess,0,Add# 'ask ServerB',bmove) chstat
    IF $MessLength.x 11 THEN 1 ERRORRUN ENDIF
    nl¢Send(0,SlRecport,S1SendRef,umess) chstat
    
  • ServerB READ REQUEST FROM ServerA
    nl¢Receive(0,S2RecPort,umess,$MessLength) chstat
    IF $MessLength.x 11 THEN 1 ERRORRUN ENDIF
    nl¢Move(0,umess,0,Add# quest,shmove) chstat
    IF shmove.x 11 OR quest >< 'ask ServerB' THEN 1 ERRORRUN ENDIF
    
  • ServerB ESTABLISH CONNECTION TO ServerA
    • OPEN A SEND REFNAME TO PORT SET A LAST PORT IN MESSAGE.
      nl¢OpeReturnPort(1,Umess,S2SendRef) chstat
      

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 239

Chapter 8 PLANC Programming Example

% ServerB RESPONSE: ServerA

nkMove(1, umess, 0, Adit+ 'answer from ServerB', stmovea)   chstat
IF stmovea >< 19 THEN 1 ERRETURN ENDIF
nkSend(0, 0, S2SendRef, umess) chstat

% ServerA READ REQUEST FROM ServerB

nkReceive(0, S1RecPort, umess, S1messLength) chstat
IF S1messLength >< 19 THEN 1 ERRETURN ENDIF
nkMove(0, umess, 0, Adit+ quest, stmovea) chstat
IF (stmovea >< 19) OR (quest >< 'answer from ServerB') THEN 1 ERRETURN ENDIF

% ServerA RESPONSE USER

nkMove(1, umess, 0, Adit+ 'answer from ServerA', stmovea) chstat
IF stmovea >< 19 THEN 1 ERRETURN ENDIF
nkSend(0, 0, S1UserSendRef, umess) chstat

% USER GEMS RESPONSE FROM ServerA

nkReceive(0, URecPort, umess, SmessLength) chstat
IF SmessLength >< 19 THEN 1 ERRETURN ENDIF
nkMove(0, umess, 0, Adit+ quest, stmovea) chstat
IF (stmovea >< 19) OR (quest >< 'answer from ServerA') THEN 1 ERRETURN ENDIF

% USER DISCONNECT

nkClose(0, UserRef)
nkClose(0, umess)
nkClose(0, URecPort)

% ServerA DISCONNECT

nkClose(0, S1UserSendRef)
nkClose(0, S1SendRef)
nkDeName(0, Adit+ 'ServerA', S1RecPort)
nkClose(0, S1RecPort)

% ServerB DISCONNECT

nkClose(0, S2SendRef)
nkDeName(0, Adit+ 'ServerB', S2RecPort)
nkClose(0, S2RecPort)
Output(1, 'A', '$ - Example number 2 finished -')
%ROUTINE
%MODULE
%EOF

Page 240

Chapter 8 PLANC Programming Example

Example 3

In this example, client "A" sends a request to server "B", and server "B" reads the message. Client "A" does not want a response from server "B". This is obtained by setting dump as home port when client "A" creates the message.

flowchart LR
    A[Client "A"] --> B[Server "B"]
MODUE test

$INCLUDE (user-area)rk-library:tmpt

INTEGER ARRAY : stack (0:9999)

% server data:
INTEGER: S1RecPort % port number to receive message
INTEGER: S2RecPort % port number to receive message
INTEGER: S1Sendref % sendreferance for ServerA
INTEGER: S2Sendref % sendreferance for ServerB
INTEGER: smess % message number
INTEGER: bmove1 % number of bytes
INTEGER: smesslength % message length
BYTES: quest(0:29) % received data

% user data:
INTEGER: URecPort % port number to receive message
INTEGER: umess % message number
INTEGER: USendref % sendreferance
INTEGER: bmove2 % number of bytes
INTEGER: umesslength % message length
BYTES: response(0:29) % received data

Scanned by Jonny Oddene for Sintran Data © 2011


Page 241

Chapter 8 PLANC Programming Example

CHSTAT

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                      C H S T A T                          %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ROUTINE INTEGER4, VOID : chstat
IF @ < 0 THEN @ ERRRETURN ENDIF
ENDROUTINE

PROGRAM : testtt
INISTACK stack

ON ROUTINEERROR DO
Output (1,'a','$Routineerror in cliserv: ')
Output (1,'o',ERRORCODE)
ENDON

% ServerA ESTABLISH CONNECTION
nkCrePort(0,2,SlRecPort) chstat
nkCreName(0,1,Addr 'ServerA',SlRecPort) chstat

% USER ESTABLISH CONNECTION TO ServerA. DUMP PORT IS SET
% TO DEFAULT HOMEPORT IN nkcremessage.
nkCrePort(0,2,URecPort) chstat
nkCreMessage(0,50,0,umess) chstat
nkOpenPort(0,Addr 'ServerA',USendref) chstat

% USER REQUEST TO ServerA
nkMove(1,umess,0,Addr 'ask ServerA',bmove8) chstat
IF bmove8 .X. 11 THEN 1 ERRRETURN ENDIF
nkSend(0,0,USendRef,umess) chstat

% ServerA READ REQUEST
nkReceive(0,SlRecPort,umess,$MessLength) chstat
IF $MessLength .X. 11 THEN 1 ERRRETURN ENDIF
nkMove(0,umess,0,Addr quest,smove8) chstat

% USER DISCONNECT
nkClose(0,USendref)
nkClose(0,URecPort)

% ServerA DISCONNECT. MESSAGE RECEIVED WILL BE DEALLOCATED.
nkClose(0,Umess)
nkDeName(0,Addr 'ServerA',SlRecPort)
nkClose(0,SlRecPort)

Output(1,'A','$ - Example number 3 finished -')

ENDROUTINE
ENDMODULE
$EOF


Page 242

The page is blank except for the page number at the top and a footer.

Scanned by Jonny Oddene for Sintran Data © 2011

Page 243

Chapter 9 Error handling in NUCLEUS

9.1 NUCLEUS start up (system booting)

During start up of NUCLEUS in a DOMINO controller, NUCLEUS checks that:

  • the correct version is installed, and that
  • the controller address of NUCLEUS kernel is correct.

If a failure occurs during start up, an error message is sent to the Processor Manager, which writes an error message on the error device.

9.2 NUCLEUS fatal errors

When a fatal error occurs in NUCLEUS it is most likely that some memory conflict has occurred (NUCLEUS kernel area is overwritten by a DMA, system processes in the DOMINO controller etc..).

The error status identifying the cause of the error is sent to the Processor Manager server in ND-100 by means of an Octobus multibyte message and then written on the error device.

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 244

Chapter 9 Error Handling in NUCLEUS

flowchart TD
    A[ERROR device] --> C[S3WatchDog]
    B[Inspect-log] --> D[Ring file]

    subgraph ND-100
        C
        D
        F[PROMAN<br/>(PROcessor MANager)]
    end

    G{MF'bus} --> H[contr]
    G --> F
    G --> I
    G --> P

    subgraph MultiPort Memory
        J[NUCLEUS<br/>KERNEL<br/>DATA]
    end

    subgraph OCTOBUS
        J
        P[MultiPort Memory]
        I[DOMINO<br/>controller<br/>N]
        Q[OPCOM] --> R[DOMINOS]
        R --> S[NUCLEUS]
    end

    subgraph NUCLEUS
        T[ERS<br/>LIB]
        U[DOMINO<br/>application<br/>software]
    end

    T --> U

Figure 35. Error in NUCLEUS

Scanned by Jonny Oddene for Sintran Data © 2011


Page 245

Chapter 9 Error Handling in NUCLEUS

9.3 NUCLEUS Nonfatal Errors

A nonfatal error will not corrupt the NUCLEUS kernel area. An octobus multibyte message is sent to PROMAN (Processor Manager), and then written on the error device.

9.4 Power Failure Handling

When a power fail occurs it is presumed that all CPUs are affected simultaneously. Multiple power sources and failures are not taken care of.

NUCLEUS may have set a Lock in the NUCLEUS kernel when a power failure occured. If not all CPUs are restarted at same time, it may cause a failure in NUCLEUS. NUCLEUS waits for a certain time to set a lock. If NUCLEUS is not able to set a lock, an error status will be returned. In the case of power failure this is very likely to occur.

Handling of power failure in NUCLEUS:

A global flag is set in NUCLEUS masterblock to indicate a powerfail at power-down. If a CPU is waiting for a lock, this flag is checked to see if the timeout has to be increased. When a CPU is recovered, this flag is reset and normal lock timeout is used.

The new lock routine in NUCLEUS is updated to give timeout. If power failures have occurred, the timeout limits are increased.


Page 246

Chapter 9 Error Handling in NUCLEUS

9.5 Verifications Tests During Start Up

NUCLEUS checks if the NUCLEUS version number in each CPU is correct. In case of a version mismatch, an error message is sent to the error device.

9.6 NUCLEUS Verification Program

The NUCLEUS verification program is delivered with the OS-kit, and runs as a background program in ND-100. The program is easy to use for debugging purposes. For each server, i.e., ND-100, ND-500 and DOMINO, separate programs (running as RT-programs) must be loaded. Please consult the PD-sheet. Log status from the servers are displayed on the screen, and saved on the log file NKS-LOGFILE:LOGS if any errors occur.

flowchart LR
    A[Background program in ND-100] --> B[NKS-VERIFY]
    B --> C[NKS-LOGFILE:LOGS]
    B --> D((NUCLEUS ND-100))
    B --> E((NUCLEUS ND-500))
    B --> F((NUCLEUS DOMINO))

    D --> |NKS100:PROG| G[Verify func.\nVerify error\nVerify comm.\nStress fast\nStress slow]
    E --> |NKS500:DOM| H[Verify func.\nVerify error\nVerify comm.\nStress fast\nStress slow]
    F --> |NKSDOMINO:IMAG| I[Verify func.\nVerify error\nVerify comm.\nStress fast\nStress slow]

Figure 36. NUCLEUS verification program


Page 247

Chapter 9 Error Handling in NUCLEUS

To start the program give the command:

@(UTILITY)NKS-VERIFY.

The screen picture shown below will now appear. An error message is displayed on the status line if you try to start logging from a server which is not loaded/started.

+-----------------------------------------------------+
|          NUCLEUS verification program, version C01  |
+-----------------------------------------------------+
| Press a toggle:                                     |
|                                                     |
| F1    F2    F3     F4    F5    F6     HELP   EXIT  |
| ND100 ND5000 DOMINO Trace Run test Stop test Info   Leave |
+-----------------------------------------------------+
| Cpu   Test   NK-function   Message   Error code     |
|                                                     |
|                 Message area                        |
|                                                     |
|   Press one of the function keys                    |
|                                                     |
|                     Status line                     |
+-----------------------------------------------------+

Figure 37. NUCLEUS verification program - screen picture

Messages are written in the message area when an error occurs, or when a test-module (see next page) is loaded/started/terminated.

HELP Facilities

Press the HELP-key, and you will get information about:

  • How to load, start and run tests,
  • Toggle status, and
  • The NUCLEUS verification system.

Page 248

Chapter 9 Error Handling in NUCLEUS

DOMINO Station

If you start verification in DOMINO (press the F3 key), the cursor will move, and you are asked to give the number of the DOMINO controller for which you want verification to be started.

 _____________________
|   NOTE !            |
| DOMINO station is   |
|        rebooted     |
|_____________________|

Test Modules

As the drawing on page 230 indicates, each server program consists of five modules:

  1. Verify function.
  2. Verify error handling.
  3. Verify communication.
  4. Stress the fast services, i.e. NkMove, NkSend and NkReceive.
  5. Stress the slow services, i.e. NkCreMessage and NkCrePort.
 ________________________________
|   NOTE !                       |
| Stress modules are not         |
| implemented in C version       |
|________________________________|

Function Keys

Function NOTIS Terminal non-NOTIS Terminal
F1 CTRL+D twice
F2 CTRL+L
F3 FUNC CTRL+U
F4 FUNC +
F5 FUNC Y
HELP FUNC ?
EXIT FUNC #

Page 249

Chapter 9 Error Handling in NUCLEUS

Simultaneous Verification

Simultaneous verification in ND-100, ND-500 and DOMINO is allowed. Verification can only be performed in one DOMINO at the time.

If you start verification in more than one server, you should not start tracing (F4) before you have inspected the log file. When you have found which server that produced the error message (the name of the server on the screen will blink), adopt the following course of action:

  1. @(UTILITY)NKS-VERIFY⊥ (start verification)
  2. Press the toggle (Function-key) that corresponds to the server which produced the error message. If you start verification in DOMINO, you will also have to give the DOMINO station number.
  3. Press the F4-key, in order to enable trace.
  4. Press the F5-key, in order to run the test.

9.7 Debugging and Tracing of NUCLEUS

NkCreMessage, NkSend, nkReceive and NkClose calls may be logged. Trace may be selected for one or more messages in NUCLEUS monitor. (See SET-TRACE on page 248 and LIST-TRACE on page 248). The trace element is put in a ring buffer in NUCLEUS kernel, and may be investigated by the NUCLEUS monitor.


Page 250

I'm unable to convert the scanned page as it appears to be blank or too faint to read. If you have another page or image, please provide it.


Page 251

Chapter 10 NUCLEUS Monitor

General

The NUCLEUS Monitor is a tool for

  • inspection of tables and queues in NUCLEUS kernel
  • interactive use of NUCLEUS calls.

A typical use is to LIST ports or messages. More detailed information may be obtained by various DISPLAY commands. The data structures may be shown explicit by the LOOK-AT command. The monitor is also able to invoke NUCLEUS with the different functions like CREATE-PORT, CREATE-MESSAGE, SEND-MESSAGE...

The monitor has a HELP command that shows the possible commands and appropriate parameters. The LOOK-AT command has a HELP command as well.

10.1 Installation of NUCLEUS Monitor

The monitor is named NK-MONITOR, and resides on a floppy with directory DOMINO-KIT-C-5, and user-name FLOPPY-USER. Enter the floppy, and use Linkage-Loader to install the monitor.

There is an absolute correspondence between the NK-MONITOR and the current version of NUCLEUS. So this monitor will only work with the C version of NUCLEUS.


Page 252

10.2 The Command System

To start NUCLEUS Monitor, give the command:

@ND-500 NK-MONITOR␍

Promt: The NUCLEUS monitor prompts with nkm: whenever it is ready to accept a command. You may now use the commands on the high-level. If the commands you need are on the low-level (advanced mode), give the command:

nkm:ADVANCED-MODE.␍

The monitor prompt changes to nkm(adv):

Notation: When describing the commands available in the NUCLEUS monitor, the following rules apply:

  • All parameter names are enclosed in < > brackets.
  • If a parameter that is asked for has a default value, the default value is enclosed between slashes //.
┌──────────────────────────────────────────────────────────────────────┐
│ NOTE !                                                               │
│ In commands with default values for descriptors (i.e. port,         │
│ sendreference or message), the current descriptor is default.       │
│ If the default is not used, the given descriptor value also         │
│ becomes the current descriptor.                                     │
└──────────────────────────────────────────────────────────────────────┘
  • The names of optional parameters, that are not asked if not given, are enclosed in square brackets. []

Command entering: As in SINTRAN.

Radix: Numeric arguments may be given in octal, decimal, or hexadecimal. The default radix is octal, but may be changed by the Main-format command. A trailing B (octal) or D (decimal) overrides the format.


Page 253

Chapter 10 NUCLEUS Monitor

10.3 NUCLEUS monitor commands

The description of the commands are divided into three parts:

  • Commands common to high-level and low-level.
  • Commands available on high-level only.
  • Commands available on low-level only (advanced mode).

10.3.1 NUCLEUS monitor - common commands

Exit

  • High-level: Terminate execution of the NUCLEUS monitor.
  • Low-level: Return to high-level.

Main-format

Define the main format for numbers displayed by the other commands. The format does not affect the numbers displayed by the Look-at command. See the Extra-format command.

Parameter: The wanted format. H, O and D is available. Only one may be used at the time.

H - Hexadecimal
O - Octal
D - Decimal

Page 254

Get-port-name (portnumber)

Displays all the port names defined for port number <parameter>.

Parameter: port number.

Format:

Port number:  4B  Name AAAA

Help (command)

Displays available commands with their parameters on current level. Command names may be abbreviated as in SINTRAN.

List-messages

Lists the messages with their message (descriptor) indices, owner ID and home ports.

Format:

Message: Owner: Homeport:
7B 100275031B 6B
11B 100275041B 10B

Page 255

Chapter 10 NUCLEUS Monitor

List-names

Displays all the port names defined in the name server, with their corresponding port number, random number, and netaddress.

Format:

Port Random NetAdr Port Name
11B 7B 40B AAAA
10B 6B 40B NKMTDRIVER
7B 5B 40B NKMTSERVER
6B 4B 40B PMAersGateWay
5B 3B 40B PMAservicePort
4B 2B 40B PMAhomePort
3B 2B 40B serviceport

One port may have more than one name, but two ports cannot share a name. If a server terminates, the port names will still be present in the nameserver unless they are deleted by the termination process, or by NUCLEUS.

It may look as if a port has more than one name, especially if a process fails to terminate properly. In most cases, this is not true, as the random number part of the port number is different.

List-ports

Lists the ports with their port (descriptor) number, owner ID, number of messages, and number of home messages.

Format:

Port number Owner Messages Home messages
1B 100062542B 0B 0B
2B 100062570B 0B 0B

Page 256

Chapter 10 NUCLEUS Monitor

Verify

This command performs a consistency check of the data structure. Inconsistencies are reported.

10.3.2 NUCLEUS Monitor - high-level commands

The commands described in this section are available on this level only. Commands described in the previous section are also available.

Advanced-mode

Gives the user access to the low-level commands. See the next section, starting on page 244.

Close

Close a port, sendreference or message defined by <parameter>.

Parameter: Descriptor number (index).

No default value.


Page 257

Chapter 10 NUCLEUS Monitor

Create-message ⟨size⟩⟨homeport⟩

Creates a message of size ⟨parameter 1⟩ with homeport ⟨parameter 2⟩. The message number of the message is returned. The message becomes the current message.

  • Parameter 1: size of message
  • Parameter 2: homeport for the given message.

Create-name ⟨name⟩⟨port⟩

Creates port name ⟨parameter 1⟩ on port ⟨parameter 2⟩.

  • Parameter 1: Port name.
  • Parameter 2: Port number. /current port/
 ___________________________
| NOTE !                    |
| In commands with default  |
| values for port number,   |
| the current port number   |
| is always the default     |
| port number. If the de-   |
| fault is not used, the    |
| given port number becomes |
| the current port number.  |
| This also applies for     |
| message and sendreference |
|___________________________|

Create-port

Creates a port. A port number is returned, and the port becomes the current port.


Page 258

Chapter 10 NUCLEUS Monitor

Fill-data-buffer \<string>

Fill the buffer with the string \<parameter>. The string, given as parameter, is moved to the buffer area in the monitor. The buffer area may be written into the NUCLEUS area, and sent to a destination port by the Write-message and Send-message command.

Parameter: any string.

Note: The command is meaningless in the BOO version of the monitor, as the Write-message command also fills data into the buffer.

Open-port \<portname>

Open the port with name \<portname>.
A sendreference number is returned, and can be used to send to \<portname>.
The sendreference number returned becomes current sendreference.

Displays the content of the send/receive buffer in the monitor. The content is displayed in both octal and ASCII format.

Example:

Data buffer content:

0B : 0B 0B 74B 375B 102B 102B 102B (..‹.BBBB)
10B : 102B 102B 102B 102B 102B 102B 102B (BBBBBBBB)
20B : 102B 102B 102B 102B 102B 102B 102B (BBBBBBBB)

Page 259

Chapter 10 NUCLEUS Monitor

Receive-message ⟨port no.⟩

Receive message from ⟨portno.⟩. Parameter: port number /current port/.

Read-message ⟨message⟩⟨displacement⟩

Read message from ⟨messagenumber⟩ to data buffer, start from position ⟨displacement⟩

Parameter 1: message number /current message/. Parameter 2: displacement in message buffer /0/.

The received data will be displayed, and may be redisplayed with the PRINT-BUFFER-command.

Send-message ⟨port no.⟩⟨message no.⟩

Send ⟨message number⟩ to ⟨port number⟩

Parameter 1: port number to send message to /?/. Parameter 2: message number to send /curr message/.

Write-message ⟨message no⟩⟨displacement⟩⟨text⟩

Write ⟨messagenumber⟩ to data buffer, start in position ⟨displacement⟩

Parameter 1: message number /current message/. Parameter 2: displacement in message buffer /0/. Parameter 3: any string of text.


Page 260

10.3.3 NUCLEUS Monitor - Low-Level Commands

The commands described in this section are available on low-level only. Commands described in the section "NUCLEUS Monitor - common commands" are also available. See page 237.

Connect-file (file name)

Parameter: File-name. Default file type is :DUMP.

The connect-file command is intended to be used to investigate a dump of NUCLEUS kernel. Most low-level commands can be used (display/list commands).

The dump file can be made by means of the DUMP-KERNEL command. You may also use the stand-alone program MEMTOF, and dump the memory to a diskette.

Display-descriptor (descriptor index)

Descriptor may be port, sendreference or message.
Parameter: descriptor index (number).

Display-kicklist (OCTOBUS station no.)

Display the kicklist for Octobus station <parameter 1>.

Parameter: Octobus station number.

The kicklist is a list of receive ports. Processes owning ports in the kicklist, will be activated.

Example:

Port
Port 4b
Port 7b

Page 261

Chapter 10 NUCLEUS Monitor

Display-masterblock

Displays the masterblock for NUCLEUS. The index limits for the descriptor array, hash array, kick table and net table is displayed. Of these, only the descriptor array and kick table have meaning, as NUCLEUS communication is not implemented.

nkm: ADVANCED-MODE
nkm(adv): DISPLAY-MASTERBLOCK
Item Value
Masterblock address: 20000004000B
Version: 103B
Protocol: 2B
Descriptor array: 20000004244B (0B : 777B)
Hash array: 20000104244B (0B : 377B)
Hash mask: 377B
Kick table: 20000106244B (0B : 77B)
Net table: 20000107644B (0B : 11B)
Trace buffer: 20000107764B (0B : 377B)
Trace pointer: 0B
Quota table: 20000117764B (0B : 61B)
Quota hash array: 20000122244B (0B : 377B)
Quota hash mask: 377B
Quota free link header: 20000122214B
Free link header 20000006044B
Buffer area start: 20000124244B
Buffer area end: 20002624240B
Local net address: 40B
Power fail 1: 0B
Power fail 2: 0B
Current random number: 472B
Trace condition: 0B
General area lock: 0B
Hash lock: 0B
Trace lock: 0B
Allowed public descript.: 300B
Allowed public buffer: 1240000B
Used public descriptors: 0B
Used public buffer: 0B
Message free list: 0B
Number of free messages: 0B
nkm(adv):

Page 262

Chapter 10 NUCLEUS Monitor

Display-messages (message)

Lists data related to message <message>

Parameter: message number /current message/.


Display-port (portnumber)

Lists data related to port <portnumber>.
Parameter: port number /current port/.

Example:

nkm(Adv): DISPLAY-PORT
Portnumber: 7B

Owner                : 100411013B
Octobus station      : 1B
Process to be kicked : 100411013B
Event set            : 1B
Open count           : 1B
Decriptor address    : 20000445144B


Dump-kernel (file name)

Dump the NUCLEUS kernel to <file name>.
Parameter: File name. See also the related command CONNECT-FILE on page 244.


Page 263

Chapter 10 NUCLEUS Monitor

Extra-formats <format>

Define extra-formats for the Look-at command.
Parameter: extra format string. HDOA or any combination of them may be used.

H - Hexadecimal
D - Decimal
O - Octal
A - Ascii

Force-display <descriptor index><type>

Display the <descriptor index>, as if it were of the type <type>. Parameter 1: Descriptor index (number). Parameter 2: Descriptor type.

Legal values for descriptor type:

0 = unused
1 = used
2 = message
3 = port
4 = sendreference

Get-Nucleus-memory

This command is for special use, intended for internal debugging only.


Page 264

Chapter 10 NUCLEUS Monitor

List-trace <number>

The last <number> trace elements are listed.

Parameter:
<number> = 0 => List all trace elements.
<number> = i => List the i (i=1,2,...,n) last trace elements.

List-quota

Lists all users in the quota table.

Look-at

This command is similar to the look-at-data command in the symbolic debugger.

Set-trace <message> <on/off>

Set trace for <message> number <off/on>.

Parameter 1: Number of message to be traced.
<message> = 0 => All new messages are traced.
Parameter 2:
0 = Off.
1 = On.


Page 265

Appendix A: Image files

Groups, blocks, and bytes

An image is divided into groups, each of 256 blocks. Each group has a bitmap showing the blocks used. A block has 2048 bytes. An image may have eight groups. A group describes a continuous memory area of 512 K bytes. Each group may have a group number from 0 to 255, giving a potential address span of 128 M bytes.

An image may be scattered in the full address space. But, as only eight groups are allowed, all blocks in the image must be within the eight, even if not all blocks are used in all groups. The place address in DOMINO memory for a block is derived directly from the group and block number:

PLACE ADDRESS = GROUPNUMBER*2^19 + BLOCKNUMBER*2^11

Page 266

Appendix A: Image Files

Image File Header

TotalBlocks (blocks in all groups)
TotalGroups (4 in this case)
StartAddress (for execution)
Group Index 0 1 2 3 4 5 6 7
Group Number A0 A1 A2 A3 - - - -
2¹⁹ 2¹⁹ 2¹⁹ 2¹⁹

Image Area

PAGE #1

A0 (addr)
  ┌───────┐
  │.......│
  │.......│
  └───────┘
  A1
  ┌───────┐
  │.......│
  │.......│
  └───────┘
     ↑ max group
     | size = 2¹⁹
     ↓ bytes
  ┌───────┐
  │.......│
  │.......│
  └───────┘
  A2
  ┌───────┐
  │  ...  │
  │.......│
  └───────┘
    ← hole in
    group
  ┌───────┐
  │       │
  │       │
  └───────┘
  • = program code/initialized data

The group numbers need not be in increasing order as in this example.

Figure 38. Image file header versus image area


Page 267

Appendix B DOMINO selftests

Test Numbers

All tests have a test number which must be reported at the start of the test, and when errors are found. The following reservation of test numbers is done.

Test no. Test type
1 - 2F Preboot tests
30 - 7F Standard postboot tests
80 - EF Device dependent tests
F0 - FF Reserved

NOTE!
All device dependent tests must start with test number 80 (hex).

Selftest Reporting to Test Connector

All selftests report to the test connector (Address: FF8104) when starting. This reporting is done to make it easy to trace the selftests on a logic analyzer or tracer. The selftest report to the test connector consists of two parts. The first byte is the test number and the second byte is an error number. A zero in the 'error byte' means that this is the start of the test (no error).

Example

The following would be a typical display on a tracer storing all cycles to the test connector.

Address Data Meaning
FF8104 0100 Start of selftest no. 1
FF8104 0200 Start of selftest no. 2
FF8104 0300 Start of selftest no. 3
FF8104 0301 Error no. 1 found in selftest no. 3

When an error is found in a selftest, the test and error number is written to the test connector, and an error message is written to the current path (asyl or OCTOBUS).


Page 268

Appendix B: DOMINO selftests

The error message is on the following form:

SELFTEST ERROR NO : <test and error no.> <Text explaining what kind of error.>

Example

SELFTEST ERROR NO : 101
Wrong checksum in DOMINO EPROM

How to use a TDF

All selftests (except preboot) follow the defined layout using TDF's. A short description of all the elements in the TDF record is given below.

TYPE tdf = RECORD
    INTEGER4        : TdfKey           % Must be OkKey
    BYTES           : Name(0 : 9)
    tdf POINTER     : NextTdf
    INTEGER4        : RunsToGo, RepFreq, MaxNbErr
    TestRtn POINTER : TestPtr
    RespRtn POINTER : RespPtr
    Data POINTER    : InParams
    Data POINTER    : OutParams
    INTEGER4        : TxuErrCode       % 0=Ok, > 0 Error
    INTEGER4        : DoneRuns, NbErrors
    ENUMERATION(TstIdle, TstRunning, TstAborted, TstErrReport, &
               TstMsgReport) &
                   : State
    INTEGER2        : Spare1
ENDRECORD

Page 269

Appendix B DOMINO Selftests

TdfKey

This should always be OkKey, where OkKey is defined as:

CONSTANT OkKey = 12421043O40B   % Ascii 'TDF '

Name(0:9)

This is the name of your test. (Choose a good one)
Ex. 'PROT-TEST '

NextTdf

Pointer to next TDF. This will usually be NIL for selftests.

RunsToGo

Number of times the test should be run. This should always be 1 for selftests.

RepFreq

Report frequency. Should always be 0 for selftest, because only errors should be reported.

MaxNbErr

Maximum number of errors allowed before test is terminated. Will usually be 1 for selftests.

TestPtr

Pointer to your test routine.
Ex. ADDR ProtectTest
ProtectTest is the name of the routine containing your test.

RespPtr

Pointer to a response routine. This routine will be called when you are doing a TRAP£6 or TRAP£7. The routine should contain all error output from your test.
Ex. ADDR ProtectTstResp
ProtectTstResp is the name of a routine that outputs error messages from your test.

InParams

Pointer to a record containing parameters from NDITS to be used by the test. Will very often be NIL for selftests.


Page 270

Appendix B: DOMINO Selftests

OutParams

Pointer to a record containing parameters from the test to NDITS.
Will very often be NIL for selftests.

TxuErrCode

TEXU error code. Must be set to 0 for selftests.

DoneRuns

Number of times the test is actually run.
Must be set to 0 for selftests.

NbErrors

Number of errors found so far for this test.
Must be set to 0 for selftests.

State

State will be one of the following:
TstIdle, TstRunning, TstAborted, TstErrReport, TstMsgReport
Must be set to TstIdle for selftests.

Following is an example of a TDF array used by the postboot tests.

tdf ARRAY : SelfTests(ProtTest : 2):=(&
(OkKey, 'PROT-TEST ', NIL, 1, 0, 1, Addr ProtectTest,
Addr ProtectTstResp, ProtTstIn, ProtTstOut, 0, 0, 0, TstIdle, 0),
(OkKey, 'Mfp-Test ', NIL, 1, 0, 1, Addr MfpTest,
Addr MfpTstResp, NIL, MfpTstOut, 0, 0, 0, TstIdle, 0))

Scanned by Jonny Oddene for Sintran Data © 2011


Page 271

Appendix B: DOMINO Selftests

Exception Handling in Selftests

Unexpected exceptions in selftests are reported with the following error numbers. The error numbers are reported to the test connector, and a message is written to asyl/OCTOBUS.

Error Code Description
FCH Parity error occurred.
xxFDH Exception occurred in test xx
xxFEH Int. 7 occurred in test xx
xxFFH Bus error occurred in test xx

Preboot Tests

Test Name Test No/ Err. No Description
Promtest 100H Start of prom checksum test.
-- 101 Wrong checksum in DOMINO prom.
- Something wrong with the prom?
- Collision with other devices on the data bus?
- Address lines connected together?
-- 102 Wrong checksum in the device prom.
- Something wrong with the prom?
- Collision with other devices on the data bus?
- Address lines connected together?
MCR test 200H Start of Master Control Register test.
-- 201 MCR not zero after reset.
- Bad register package?
- Problems with data bus?
- Problems with address decoding of MCR?
-- 202 MCR read back error. Read data not equal
to written data.
- Bad register package?
- Problems with write strobe to MCR?
Buserrortest 300H Start of buserror test.
-- 301 DSACK instead of BERR.
A bus error was forced, but instead the cycle
was terminated with a DSACK.
- Problem in address decoding?
-- 302 Local timeout bit not set.
- Problems with the BerrInt7 register?
(INT7 PAL)
- Problems with the address decoding of the
same register?

Page 272

Appendix B DOMINO Selftests

Test List

Test Name Test No/ Description
WarmCold 400H Start checking for warm or cold start.
AddrInAddr 500H Start of memory test.
501 Error found in RAM
- Problems with timing against DRAM? Missing RAS, CAS RW etc.
- Problems with data or address bus?
- Problems with one of the memory packages?

Sizetest

Test No/ Description
600H Start of byte selection test.
All combinations of byte, word, long, read, and write is tested.
- Problems with the RW pal that generates write strobes to the DRAM?
- Problems with timing against DRAM? Missing RAS, CAS RW etc.
601 Write Byte, Read Byte err.
602 Write Byte, Read Word err.
603 Write Byte, Read Long err.
604 Write Word, Read Byte err.
605 Write Word, Read Word err.
606 Write Word, Read Long err.
607 Write Long, Read Byte err.
608 Write Long, Read Word err.
609 Write Long, Read Long err.

ParityErr

Test No/ Description
700H Start of parity test.
701 Unexpected Parity Error
A parity error occurred immediately after enabling the parity system.
- Problems somewhere in the parity network.

ParityNet

Test No/ Description
800H Start of parity check for each byte.
804 No interrupt from byte 0
- Problems in parity network for byte 0?
805 No interrupt from byte 1
- Problems in parity network for byte 1?
806 No interrupt from byte 2
- Problems in parity network for byte 2?
807 No interrupt from byte 3
- Problems in parity network for byte 3?

Page 273

Appendix B: DOMINO Selftests

Test Name Test No/ Err. No Description
ParityNet 808 Parity error bit not set 0
- Problems with the BERRINT7 register.
809 Parity error bit not set 1
- Problems with the BERRINT7 register.
80A Parity error bit not set 2
- Problems with the BERRINT7 register.
80B Parity error bit not set 3
- Problems with the BERRINT7 register.
ParityAddr 900H start
901 - Error in parity RAM or in address bits?
ParityData A00H start
A01 - Error in parity gen/check
Booting B00H Boot and switch RAM mode?
ParitySwitch C00H start
C01 No switch no interrupt
C02 No switch interrupt
- Problems in the MCR clear logic?
C03 Switch no interrupt
- Problems in the interrupt system?
4-8 MB memtest D00 start
D01 Error found in RAM
Uart/TimD E00 start
E01 TimerC/D CtrlReg. ReadBackErr
E02 TimerD DataReg. ReadBackError
E03 Usart CtrlReg. ReadBackError
E04 Rx Status Reg. ReadBackError
E05 Tx Status Reg. ReadBackError
E06 Usart Data Reg. ReadBackError
E07 Rx StatReg does't stabelize
E08 Tx StatReg does't stabelize
E09 Usart Data Reg timeout
E0A Illegal value in rsr
E0B Illegal value in tsr
E0C Too many/few Rx interrupts
E0D Too many/few Tx interrupts
PrebootOK 2F00H Preboot test OK

Page 274

Appendix B: DOMINO Selftests

Postboot Tests

Prot Test

  • 3000H: Start of protect test.
  • 30yy: The error code yy has the following meaning from the protect test.
bit no. in yy
76543210
||||||||
|||||||└── Protect mode bit S1
||||||└─── Protect mode bit S2
|||||└──── Protect mode bit U1
||||└───── Protect mode bit U2
|||       See DOMINO HW desc. for more details about the prot. mode bits.
||└────── FC0 for the cycle that failed
|└─────── FC1 for the cycle that failed
└──────── FC2 for the cycle that failed
          See MC68020 User's manual for more details about the function codes.
          RW for the cycle that failed
          0=Write, 1=Read

MFP Test

  • 3100H: Start of MFP (MC68901) test.
  • 3101: Interrupts pending before they are enabled.
    • Error in the MFP?
  • 3102: No interrupt pending after they are enabled.
    • Error in the MFP?
  • 3103: Processor was not interrupted.
    • Error in the MFP?
    • Error in the interrupt system?
  • 3104: Timer error.
    • Error in the MFP?
  • 3105: Too many interrupts.
    • Error in the MFP?

Continue on next page...


Page 275

Appendix B: DOMINO Selftests

EEPROM Test

Code Description
3200 Start of EEPROM check.
3201 Not valid EEPROM test pattern.
- No EEPROM?
- EEPROM not initialized?
- Problems in reading from EEPROM?
3202 Not valid EEPROM version.
- EEPROM not initialized correct?
- Problems in reading from EEPROM?
3203 Write access to write protected area.
- Problem in decoding of write strobe to EEPROM?
3204 Timeout. Busy signal from EEPROM constantly active.
- Problems with EEPROM?

Counter Test

Code Description
3300 Start of 32 bit counter test.
3301 16 bit counter is not running.
- Error in the counter?
3302 32 bit counter is not running.
- Error in the counter?
- No master selected on OCTOBUS?
3303 Protect trap when read from user mode.

BADAP Test

Code Description
3400 Start of BADAP register test.
3401 Readback error from BADAP register.
- Error in BADAP?
- Error in data path to BADAP?

Page 276

The page is blank and contains no identifiable text or diagrams except for the page number and footer.


Page 277

Appendix C Error and Status Codes

PROMAN (Processor Manager) Error Codes

Octal val Meaning Type
10500B Processor Manager - PROMAN
105000B Too large configuration ERROR
105001B Program error, empty time queue ERROR
105002B Unrecognised event ignored WARN.
105003B Message from unrecognised Octobus station ignored WARN.
105004B Image file is empty, booting aborted ERROR
Controller at station..: I2O
105005B Unrecognised event in Domino boot-session ignored WARN.
Controller at station..: I2O
105006B Program error, invalid dummy-session state ERROR
105007B Program error, invalid DOMINO-session state ERROR
105007B Program error, invalid DOMINO-session state ERROR
Controller at station..: I2O
105010B Program error, invalid ERS-session state ERROR
105011B Program error, invalid Service-session state ERROR
105012B Unrecognised dummy-session event ignored WARN.
105013B Unrecognised Domino-session event ignored WARN.
Controller at station..: I2O
105014B Unrecognised ERS-session event ignored WARN.
105015B Unrecognised Service-session event ignored WARN.
105016B Error in Nucleus initialisation FATAL
105017B Error in Octobus initialisation FATAL
105020B Error in Nucleus receive WARN.
105021B Error in Octobus receive WARN.
105022B Error in Nucleus transmit WARN.
105023B Error in Octobus transmit WARN.

Continue on next page...


Page 278

Appendix C Error and Status Codes

PROMAN (Processor Manager) Error Codes

Octal Val Meaning Type
105024B Controller does not respond, echo-test failed
Controller at station..: I20
Opcom NAK-error code("0" means timeout)I20
ERROR
105025B Unable to get identity from controller
Controller at station..: I20
Opcom NAK-error code("0" means timeout)I20
ERROR
105026B Unable to stop controller
Controller at station..: I20
Opcom NAK-error code("0" means timeout)I20
ERROR
105027B Unable to set mailbox for controller
Controller at station..: I20
Opcom NAK-error code("0" means timeout)I20
ERROR
105030B Unable to download block to controller
Controller at station..: I20
Opcom NAK-error code("0" means timeout)I20
ERROR
105031B Unable to set start address in controller
Controller at station..: I20
Opcom NAK-error code("0" means timeout)I20
ERROR
105032B Unable to start program in controller
Controller at station..: I20
Opcom NAK-error code("0" means timeout)I20
ERROR
105033B OPCOM selftest failed
Controller at station..: I20
ERROR
105034B Invalid service request command WARN.
105035B No Domino controllers found in system WARN.
105036B Unable to log events to ring buffer file WARN.
105037B This ND-100 is not master in system FATAL
105040B Error when opening image file
Controller at station.........: I20
Image file name..............: 64A
ERROR

Page 279

Appendix C: Error and Status Codes

Octal val Meaning Type
105041B Server started
Version: 64A
INFO
105042B DOMINO controller booting started
Controller at station.......: I2O
Crate ID (MFB contr station).: I2D
MFB Slot.....................: I2D
Image file name............: 64A
INFO
105043B DOMINO controller rebooting started
Controller at station.......: I2O
Crate ID (MFB contr station).: I2D
MFB Slot.....................: I2D
Image file name............: 64A
INFO
105044B DOMINO controller started
Controller at station.......: I2O
Crate ID (MFB contr station).: I2D
MFB Slot.....................: I2D
Image file name............: 64A
INFO
105045B DOMINO controller selftest status
Controller at station.......: I2O
Crate ID (MFB contr station).: I2D
MFB Slot.....................: I2D
CPU type....................: I4D
Standard part version..: 34A
- Selftests failed..: 64A
Device part version.....: 34A
- Selftests failed..: 64A
INFO
105046B Server stopped INFO
105047B Domino controllers restarted after powerfail
Number restarted.......: I2D
Number rebooted.........: I2D
INFO
105050B Too small ERS-buffer fill, must at least be two pages long WARN.
105051B Domino controller has been terminated on request
Controller at station..: I2O
INFO

Table 8. PROMAN (Processor Manager) error codes


Page 280

Appendix C: Error and Status Codes

DOMINOS Error Codes

Constant Octal Value
PITermination 6000B
PIILCAL 6001B
PIRANGE 6002B
PICONTX 6003B
PISupModeCall 6004B
PIintErr 6005B
PIDomFatal 6006B
PIUserFatal 6007B
PINOEXIST 6011B
PIEXIST 6012B
PIILPRI 6013B
PIILSTATE 6014B
PINOPROS 6015B
PINOFREE 6016B
PIEWNOEX 6021B
PIILVEC 6022B
PINOBUF 6041B
PIINCONSIST 6042B
PIILADDR 6043B
PINoRout 6051B

DOMINOS, DOMINO Operating System Errors

Octal Meaning TYPE
60B Domino Operating System
6000B Application in DOMINO controller terminated Octobus station... I20 Crate Id (MFB contr. station) I1D MFB slot... I1D INFO
6001B Requested service not implemented ERROR
6002B Parameter value to service out of range ERROR
6003B Request comes in wrong context ERROR
6004B Service called in supervisor mode FATAL
6005B Dominos program error, please contact ND-service ERROR

Page 281

Appendix C: Error and Status Codes

Octal Meaning TYPE
6006B Unable to start Dominos FATAL
Octobus station.............. I2O
Crate Id (MFB contr. station) I1D
MFB slot.......................... I1D
Exception number........... I2unused
Address where occurred.... I4H
Dominos error.................. SEC
6007B Error reported by PIRFatal FATAL
Octobus station.............. I2O
Crate Id (MFB contr. station) I1D
MFB slot.......................... I1D
Exception number........... I2unused
Address where occurred.... I4H
Application error............. SEC

Process Management

Octal Meaning TYPE
6011B Process does not exist ERROR
6012B Process already exists ERROR
6013B Invalid priority in PIRCREATE or PIRMODIFY ERROR
6014B Requested operation impossible in this process state ERROR
6015B Invalid process name ERROR
6016B No free entry for new process ERROR

Event System/Timing/Miscellaneous

Octal Meaning TYPE
6021B Event not found ERROR
6022B Invalid vector address, (outside 2..255 or reserved) ERROR

Buffer Manager

Octal Meaning TYPE
6041B Buffer space exceeded ERROR
6042B Inconsistency in Buffer data structure ERROR
6043B Invalid Buffer address ERROR

Powerfail/Power Return Handling

Octal Meaning TYPE
6051B Power fail/Power return handler not found ERROR

Table 9. DOMINOS, DOMINO Operating System errors

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 282

DOMINO Services (HW-LIB/OPCOM) Error Codes

Octal Meaning TYPE
HW Dependant Library
6201B HW-Lib: Low-limit greater than high-limit in protection setting ERROR
6202B HW-Lib: Attempt to prohibit R/W-access to master control register ERROR
6203B HW-Lib: Attempt to read protection outside protected area ERROR
6204B HW-Lib: Address does not match protection segment ERROR
OPCOM
6240B Domino OPCOM: Invalid service request ERROR
6241B Domino OPCOM: Exception occurred for which no handler exists FATAL
Octobus station............... I2O
Crate Id (MFB contr. station). I1D
MFB slot...................... I1D
Exception number.............. I2H
Address where occurred........ I4H
I4Unused

Table 10. DOMINO Services (HW-LIB/OPCOM) Error Codes


Page 283

Appendix C: Error and Status Codes

DOMINO Services (BOPCOM) Error Codes

Octal Meaning TYPE
BOPCOM
6260B BOPCOM: Server started INFO
?? I2Unused
?? I2Unused
Version................... 34A
6261B BOPCOM: Path opened to controller INFO
Octobus station........... I20
Message device........... I20
6262B BOPCOM: Path released INFO
Octobus station........... I20
Message device........... I20
6271B BOPCOM: Too many Octobus errors FATAL
6272B BOPCOM: Too many Superkernel errors FATAL
6273B BOPCOM: Unable to open own superports (XMSG not started?) FATAL
?? I2Unused
?? I2Unused
?? I2Ounused
?? I12unused
?? I2unused
External error............ SEC
6274B BOPCOM: XMSG bufferspace exceeded FATAL

Table 11. DOMINO Services (BOPCOM) error codes


Page 284

Appendix C: Error and Status Codes

NUCLEUS Error Codes

Constant Octal val Meaning
nke_ERROR_BASE 101000b Base number for Nucleus errors
nke_ILLPAR 101001b Invalid parameter value
nke_ILLTYPE 101002b Wrong type used, - port, message or send reference
nke_NOMESS 101003b Both port and message in Send reference may not be zero
nke_ILLNO 101004b Port, message or send reference outside range
nke_NOTLOCAL 101005b Receive from remote port
nke_OUTSIDE 101006b Displacement outside buffer
nke_DESCARRFULL 101007b Descriptor table full
nke_BUFFULL 101010b Message buffer area full
nke_NAMEFULL 101011b Name table full
nke_NAMENOTFOUND 101012b Port name not defined
nke_NAMEUSED 101013b Port name already defined
nke_NOACCESS 101014b No access to given port, message or send reference
nke_ILLNETADDRESS 101015b Net address not found
nke_ILLKERNELNO 101016b Invalid kernel number
nke_NETTABFULL 101017b Net table full
nke_PROTOCOLERROR 101020b Inconsistent Nucleus module versions installed
nke_REJECTED 101021b Message rejected by receive process
nke_PORTNOTFOUND 101022b Port reference not defined in name server
nke_LOCK 101023b Unable to lock port
nke_NOTEVENBYTE 101024b Displacement not on even byte (only for ND-100)

Continue on next page...


Page 285

Appendix C Error and Status Codes

NUCLEUS Error Codes

Constant Octal Val Explanation
nke_NOTINITIALISED 101025b Nucleus not started
nke_NAMEPORTUSED 101026b The Nameserver port is already initialised
nke_NAMEINDEXERROR 101027b Index error in Nameserver request
nke_INCONSISTENT 101030b Inconsistent structure in name server
nke_TOOMANYBYTES 101031b Buffer provided is too small
nke_PORTCLOSED 101032b Receive port is closed.
nke_ILLFUNC 101033b Invalid Function code
nke_PROTECTED 101034b Attempt to use protected Function
nke_ILLHARDWARE 101035b Not correct hardware configuration
nke_FATAL 101036b Fatal error in Nucleus
nke_QTABFULL 101037b Too many concurrent Nucleus users (quota table full)
nke_QUOTAUSED 101040b No more Nucleus resources available for this user
nke_ILLUSER 101041b Unknown user area identifier
nke_KICKLOCK 101042b Timeout when waiting for lock (kick-queue)
nke_DELAYTABFULL 101043b Unable to create more ports using delayed abort
nke_NOTAVAILABLE 101044b NUCLEUS not available in CPU. (not started or stopped)
nke_ILLVERSION 101045b Invalid version of NUCLEUS library

Page 286

Appendix C: Error and Status Codes

NUCLEUS Calls and Error Codes

nkCrePort nkCreName nkOpenPort nkOpenReturnPort nkCreMessage nkDelName nkReceive nkSend nkMove nkClose nkGetInfo nkVersion
nke_BUFFULL x
nke_DELAYTABFULL x
nke_DESCARRFULL x
nke_FATAL x x x x x x x
nke_ILLFUNC x x x x x x x x x x x x
nke_ILLHARDWARE x
nke_ILLKERNELNO x
nke_ILLNETADDRESS x x x x x x x
nke_ILLNO x x x x x x x x x x x x
nke_ILLPAR x x
nke_ILLTYPE x x x x x x x x x x x x
nke_ILLUSER x x
nke_ILLVERSION x x x x x x x x x x x x
nke_INCONSISTENT x x
nke_KICKLOCK
nke_LOCK x
nke_NAMEFULL x
nke_NAMEINDEXERROR x x
nke_NAMENOTFOUND x x
nke_NAMEPORTUSED x
nke_NAMEUSED x
nke_NETTABFULL x x
nke_NOACCESS x x x x x x x x x
nke_NOMESS x
nke_NOTAVAILABLE x
nke_NOTEVENBYTE x
nke_NOTINITIALISED x x x x x x x x x x x x
nke_NOTLOCAL x
nke_OUTSIDE x x
nke_PORTCLOSED x
nke_PORTNOTFOUND x
nke_PROTECTED x
nke_PROTOCERROR x
nke_QTABFULL x
nke_QUOTAUSED x x
nke_REJECTED x
nke_TOOMANYBYTES x x

Page 287

Appendix C Error and Status Codes

NUCLEUS Operation Error/Status Codes

Octal Meaning TYPE
1011b Nucleus Operation
101100b Nucleus Name server started
Version....: 34A
Size of name table..: 140
INFO
101101b Nucleus server started
Version....: 34A
Cluster Id (ND-100 Octobus station no. 140)
Zeropage for multiport memory.......... 140
Page start address of kernel within
multiport memory.............................. 140
Nucleus kernel size in pages........... 140
Message buffer space for all
system processes in pages............ 140
Number of descriptors for all
system processes in pages............ 140
Message buffer space for all
public processes in pages............. 140
Number of descriptors for all
public processes............................. 140
Message buffer per public process
in pages............................................ 140
Number of descriptors per public
process.............................................. 140
Trace buffer space in pages............ 140
INFO

Continue on next page...


Page 288

Appendix C Error and Status Codes

Octal Meaning TYPE
1011b Nucleus Operation
101102b Unable to start server
Nucleus error............................ SEC
Sintran error............................ SEC
FATAL
101103b Name server stopped
Nucleus error............................ SEC
FATAL
101104b Unable to reserve mailbox FATAL
101105b Unable to get Cpu type FATAL
101106b Unable to get Nucleus configuration from Sintran FATAL
101107b Unable to get start address of multiport FATAL
101110b Unable to find own Octobus station FATAL
101111b Unable to fix memory for Nucleus FATAL
101112b Unable to initialise Nucleus kernel FATAL
101113b Unable to initialise Sintran part of Nucleus FATAL
101114b Unable to connect to Octobus FATAL
101115b Inconsistent data structure
Detected at address....................... I40
Called from............................... I40
FATAL
101116b Timeout when waiting for lock
Called from............................... I40
Address of lock.......................... I40
FATAL
101117b Nucleus may not be restarted, please restart system FATAL
101120b Unable to find Nucleus kernel FATAL

Table 12. NUCLEUS operation error/status codes


Page 289

273

                                       Index
-----------------------------------------------------------------------------

Scanned by Jonny Oddene for Sintran Data © 2011

Page 290

Index

[Empty Page]


Scanned by Jonny Oddene for Sintran Data © 2011


Page 291

Index

Entry Page
A6-register, DOMINO Monitor 82
abbreviating parameter, DOMINO Monitor 40
abort job, DOMINO-MONITOR 42
abort service, DOMINOS 129
abort, NUCLEUS 191
ACTIVE-ROUTINES, DOMINO Monitor 71
actual macro parameter, DOMINO Monitor 63
actual parameter, DOMINO Monitor 65
Address registers 92
Advanced-mode, NUCLEUS Monitor 240
ALIGN-LISTING command, DOMINO Monitor 71
ASYL, DOMINO Monitor 45
ASYNCHRONOUS-LINK, DOMINO Monitor 45
ATTACH-DOMAIN command, DOMINO Monitor 62
Automatic configuration, DOMINO 11
Entry Page
Basic Software Module 31
begin service, DOMINOS 126
blocked state, DOMINOS 120
Boot functions, DOMINO 34
Booting of DOMINO. Algorithm 22
Bopcom server 46
BOPCOM SERVER, DOMINO Monitor 45
break character, DOMINO Monitor 54
BREAK command, DOMINO Monitor 71, 77
BREAK-ADDRESS command, DOMINO Monitor 71
breakpoint, DOMINO Monitor 77, 78
BREAK-RETURN command, DOMINO Monitor 71
buffer management 146
buffer pool 146
Entry Page
calculate, DOMINO Monitor 43
Calls, summary 182, 183
CC command, DOMINO-MONITOR 42
CHANGE-PATH command, DOMINO Monitor 48
clock, DOMINOS 144
close message, NUCLEUS 207
close port, NUCLEUS 207
close sendreference, NUCLEUS 207
Close, NUCLEUS Monitor 240
CLOSE-HISTOGRAM command, DOMINO Monitor 72
command search strategy, DOMINO Monitor 65
comment, DOMINO-MONITOR 42

Page 292

Index

Commands and References

  • COMPARE-DATA command, DOMINO Monitor . . . . . . 72
  • COMPARE-PROGRAM command, DOMINO Monitor . . . . . . 72
  • COMPUTE command, DOMINO Monitor . . . . . . . 43
  • Configuration data, DOMINO . . . . . . . . . . . 34
  • Connect-file, NUCLEUS Monitor . . . . . . . . . 244
  • CONTINUE command, DOMINO Monitor . . . . . . . 72
  • create message, NUCLEUS . . . . . . . . . . . . . 198
  • create port name, NUCLEUS . . . . . . . . . . 192
  • create port, NUCLEUS . . . . . . . . . . . . . 189
  • create service, DOMINOS . . . . . . . . . . 121
  • Create-message, NUCLEUS Monitor . . . . . . . 241
  • Create-name, NUCLEUS Monitor . . . . . . . . 241
  • Create-port, NUCLEUS Monitor . . . . . . . . 241
  • current path, DOMINO Monitor . . . . . . . 45, 46

Data and Debugging

  • Data registers . . . . . . . . . . . . . . . . . 92
  • DEBUGGER command, DOMINO Monitor . . . . . . . . 70
  • debugging, DOMINO Monitor . . . . . . . . . . . 69
  • DEBUG-STATUS command, DOMINO Monitor . . . . . . 80
  • default macro parameter, DOMINO Monitor . . . . 64
  • default parameter, DOMINO Monitor . . . . . . . 40
  • DEFINE-MACRO command, DOMINO Monitor . . . . . 63
  • Delayed abort, NUCLEUS . . . . . . . . . . . . . 191
  • delete macro, DOMINO Monitor . . . . . . . . . . 67
  • delete port name, NUCLEUS . . . . . . . . . . . 197
  • descriptor . . . . . . . . . . . . . . . . . . . 179, 181
  • descriptor table . . . . . . . . . . . . . . . 210
  • descriptor type = 2 . . . . . . . . . . . . . . 210
  • descriptor type = 3 . . . . . . . . . . . . . . 211
  • descriptor type = 4 . . . . . . . . . . . . . . 212

Display and Modules

  • DISPLAY command, DOMINO Monitor . . . . . . . . 72
  • Display-descriptor, NUCLEUS monitor . . . . . . 244
  • Display-kicklist, Nucleus monitor . . . . . . . 244
  • Display-master-block, Nucleus monitor . . . . . 245
  • Display-messages, NUCLEUS Monitor . . . . . . . 246
  • Display-port, NUCLEUS Monitor . . . . . . . . . 246
  • DOMINO modules . . . . . . . . . . . . . . . . 14
  • DOMINO Monitor . . . . . . . . . . . . . . . . 39
  • DOMINO reset. Algorithm . . . . . . . . . . . . 20
  • DOMINO selftests . . . . . . . . . . . . . . . 19
  • DOMINOS commands, DOMINO Monitor . . . . . . . 91
  • DOMINOS configuration . . . . . . . . . . . . . 105
  • dormant state, DOMINOS . . . . . . . . . . . . 120
  • DOWN-LOAD command, DOMINO Monitor . . . . . . . 60
  • dump macro, DOMINO Monitor . . . . . . . . . . . 68
  • Dump-kernel, NUCLEUS monitor . . . . . . . . . . 246

Page 293

Index

D

  • DUMP-MACRO command, DOMINO Monitor . . . . . . . . 68

E

  • editing line, DOMINO Monitor . . . . . . . . . . . . 40
  • end service, DOMINOS . . . . . . . . . . . . . . . . 128
  • END-MACRO keyword, DOMINO Monitor . . . . . . . . . 63
  • ERASE-MACRO command . . . . . . . . . . . . . . . . 67
  • ERS3WD . . . . . . . . . . . . . . . . . . . . . . . 23
  • ERS-gateway server . . . . . . . . . . . . . . . . . 23
  • ESCape, DOMINO Monitor . . . . . . . . . . . . . . . 40
  • event buffer . . . . . . . . . . . . . . . . . . . . 136
  • event log . . . . . . . . . . . . . . . . . . . . . 23
  • event log file . . . . . . . . . . . . . . . . . . . 25
  • event reporting . . . . . . . . . . . . . . . . . . 23
  • event system . . . . . . . . . . . . . . . . . . . . 136
  • EXECUTE-MACRO command, DOMINO Monitor . . . . . . . 65
  • EXIT command, DOMINO Monitor . . . . . . . . . . . . 41, 72
  • Exit, NUCLEUS Monitor . . . . . . . . . . . . . . . . 237
  • exported system data, DOMINOS . . . . . . . . . . . 149
  • EXTRA-FORMAT command, DOMINO Monitor . . . . . . . . 81
  • Extra-formats, Nucleus monitor . . . . . . . . . . . 247

F

  • fatal service, DOMINOS . . . . . . . . . . . . . . . 150
  • Fill-buffer, NUCLEUS Monitor . . . . . . . . . . . . 242
  • FIND-SCOPE command, DOMINO Monitor . . . . . . . . . 72
  • Force-display, NUCLEUS monitor . . . . . . . . . . . 247
  • formal macro parameter, DOMINO Monitor . . . . . . . 63
  • formal parameter, DOMINO Monitor . . . . . . . . . . 65
  • FORMATS-DISPLAY command, DOMINO Monitor . . . . . . . 72
  • FORMATS-LOOK-AT command, DOMINO Monitor . . . . . . . 72
  • function codes, NUCLEUS . . . . . . . . . . . . . . . 183
  • function names, NUCLEUS . . . . . . . . . . . . . . . 183

G

  • Get Version, NUCLEUS . . . . . . . . . . . . . . . . 209
  • getbuffer service, DOMINOS . . . . . . . . . . . . . 148
  • Get-NUCLEUS-memory, NUCLEUS monitor . . . . . . . . . 247
  • Get-port-name, NUCLEUS Monitor . . . . . . . . . . . 238
  • GO command, DOMINO Monitor . . . . . . . . . . . . . 61

H

  • HARD-RESET command, DOMINO Monitor . . . . . . . . . 58
  • HELP command, DOMINO Monitor . . . . . . . . . . . . 41, 72
  • Help, NUCLEUS Monitor . . . . . . . . . . . . . . . . 238
  • home port, NUCLEUS . . . . . . . . . . . . . . . . . 177

Scanned by Jonny Oddene for Sintran Data © 2011


Page 294

Index

Image

Description Page
Image file description 249
Image file, DOMINO 16
INCLUDE-COMMANDS command, DOMINO Monitor 72
info message, NUCLEUS 205
info port, NUCLEUS 205
interdel service, DOMINOS 145
InterEv service, DOMINOS 144
interrupt handlers, DOMINOS 162
interrupt handling, DOMINOS 154
kill service, DOMINOS 131
LEDs on DOMINO controllers 17
line editing, DOMINO Monitor 40
LIST-BREAK-CHARACTER command, DOMINO Monitor 54
List-configuration, PMA-Monitor 29
LIST-DOPCOM-PARAMETERS command, DOMINO Monitor 55
LIST-MACRO-BODY command, DOMINO Monitor 69
LIST-MACRO-NAMES command, DOMINO Monitor 68
LIST-MAILBOX-PARAMETERS command, DOMINO Monitor 52
List-messages, NUCLEUS Monitor 238
LIST-MICE-PARAMETERS command, DOMINO Monitor 57
List-names, NUCLEUS Monitor 239
List-ports, NUCLEUS Monitor 239
LIST-PROTECTION command, DOMINO Monitor 96
List-quota, NUCLEUS Monitor 248
LIST-TIME-QUEUE command, DOMINO Monitor 94
List-trace, NUCLEUS Monitor 248
Load-DOMINO, PMA-Monitor 33
Lock in NUCLEUS 229
LOOK-AT command, DOMINO Monitor 88
LOOK-AT commands, DOMINO Monitor 72
Look-at, NUCLEUS Monitor 248
LOOK-AT-LIST command, DOMINO Monitor 73
LOOK-AT-PROGRAM command, DOMINO Monitor 81
LOOK-AT-REGISTER command, DOMINO Monitor 87
LOOK-AT-RELATIVE command, DOMINO Monitor 87
LOOK-AT-STACK command, DOMINO Monitor 82

Macro

Description Page
macro body, DOMINO Monitor 63
MACRO command, DOMINO Monitor 73
macro name, DOMINO Monitor 63
macro, DOMINO Monitor 62

Page 295

Index

MAIN-FORMAT command, DOMINO Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

Main-Format, NUCLEUS Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

Master block, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

Masterblock, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Memory Protection

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

Memory Protection, DOMINOS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Message Record Layout, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

Message, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

MICE, DOMINO Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45, 56

MICE-II, DOMINO Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Modify Service, DOMINOS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Module Number

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 13, 14

Multiple Parameter, DOMINO Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Naming Convention, DOMINOS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

NEW-USER-CONTEXT command, DOMINO Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

NEXT command, DOMINO Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

nkClose, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

nkCreMessage, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

nkCrePort, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

nkCrePortName, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

nkDelName, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

nkGetInfo, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

nkMove, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

nkOpenPort, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

nkOpenReturnPort, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

nkReceive, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

nkSend, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

NKS-logfile:logs

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

nkVersion

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

NUCLEUS

Calls, Summary

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Servers

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

NUCLEUS Kernel, Tables

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

NUCLEUS Library

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

NUCLEUS Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Open Port, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

Open Return Port, NUCLEUS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

OPEN-PATH command, DOMINO Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Open-port, NUCLEUS Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Optional Parameter, DOMINO Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

OUTPUT-FILE command, DOMINO Monitor

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Scanned by Jonny Oddene for Sintran Data © 2011


Page 296

Index

  • parameter abbreviation, DOMINO Monitor . . . . . . 40
  • parameter default, DOMINO Monitor . . . . . . . . 40
  • parameter multiple, DOMINO Monitor . . . . . . . 40
  • parameter optional, DOMINO Monitor . . . . . . . 40
  • Parameters . . . . . . . . . . . . . . . . . . . . . . . . 185
  • path prefix, DOMINO Monitor . . . . . . . . . . . . . . 45
  • path, DOMINO Monitor . . . . . . . . . . . . . . . . . 45, 46
  • peripheral file, DOMINO Monitor . . . . . . . . . . . 45, 46
  • permanent macro, DOMINO Monitor . . . . . . . . . . 63
  • PIRfatal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24, 162, 164
  • PIRSetevent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162, 164
  • PLACE-DOMAIN command, DOMINO Monitor . . . . . 59
  • PLANC constraints, DOMINOS . . . . . . . . . . . . . . . . 157
  • PMA-CONFIG . . . . . . . . . . . . . . . . . . . . . . . . . . . 15, 21, 31, 32
  • PMA-dump-log . . . . . . . . . . . . . . . . . . . . . . . . . 23, 24, 26
  • PMA-ERS-BUFFER . . . . . . . . . . . . . . . . . . . . . . 24, 25
  • PMA-Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . 28
  • PMA-report . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
  • PMAreport routine . . . . . . . . . . . . . . . . . . . . . . . 23
  • PMAreport-call . . . . . . . . . . . . . . . . . . . . . . . . . 23
  • PME, DOMINOS . . . . . . . . . . . . . . . . . . . . . . . . . 151, 165
  • Pointers in Master block, NUCLEUS . . . . . . . . 210
  • port name, NUCLEUS . . . . . . . . . . . . . . . . . . . . 178
  • Port record layout, NUCLEUS . . . . . . . . . . . . . . 211
  • port, NUCLEUS . . . . . . . . . . . . . . . . . . . . . . . . 177
  • Power failure, NUCLEUS . . . . . . . . . . . . . . . . . . 229
  • PREVIOUS command, DOMINO Monitor . . . . . . . . 82
  • Print-data-buffer, Nucleus monitor . . . . . . . . . 242
  • PRINT-HISTOGRAM command, DOMINO Monitor . . 73
  • privileged instructions, DOMINOS . . . . . . . . . . . 153
  • prname service, DOMINOS . . . . . . . . . . . . . . . . . . 135
  • process management, DOMINOS . . . . . . . . . . . . 120
  • process states, DOMINOS . . . . . . . . . . . . . . . . . 120
  • PROCESS-STATUS command, DOMINO Monitor . . . 92
  • PROGRAM-MAP command, DOMINO Monitor . . . . . 74
  • PROMAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  • PROMAN SERVER. Algorithm . . . . . . . . . . . . . . . 21
  • PROMAN Service port . . . . . . . . . . . . . . . . . . . 28
  • prompt, DOMINO Monitor . . . . . . . . . . . . . . . . . 39
  • prosno service, DOMINOS . . . . . . . . . . . . . . . . . 134
  • radix specifier, DOMINO Monitor . . . . . . . . . . . . . 40
  • read message, NUCLEUS . . . . . . . . . . . . . . . . . . 200
  • ReadEv service, DOMINOS . . . . . . . . . . . . . . . . 138
  • Read-message, NUCLEUS Monitor . . . . . . . . . . . . 243

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 297

Index

Term Page
ready state, DOMINOS 120
Reboot-DOMINO, PMA-Monitor 32
receive message, NUCLEUS 204
Receive-message, NUCLEUS Monitor 243
Record layout, message 210
Record layout, port 211
Record layout, sendreference 212
Recover-DOMINO, PMA-Monitor 32
Register names, DOMINO Monitor 87
relative addresses, DOMINO Monitor 87
relbuffer service, DOMINOS 149
RESERVE-TERMINAL command, DOMINO Monitor 73
RESET-BREAKS command, DOMINO Monitor 79
RESET-BREAKS commands, DOMINO Monitor 73
RESET-LAST-BREAK command, DOMINO Monitor 79
RESUME-MACRO command, DOMINO Monitor 67
ring file 25
round robin scheduling, DOMINOS 120
RUN command, DOMINO Monitor 61, 73
running state, DOMINOS 120
save macro, DOMINO Monitor 68
SCOPE command, DOMINO Monitor 73
SCOPE-LOOP command, DOMINO Monitor 99
selftest 17
selftest, DOMINO 19
SelWaitEv service, DOMINOS 142
send message, NUCLEUS 202
sender port, NUCLEUS 177
sendreference, NUCLEUS 177
Send-messages, NUCLEUS Monitor 243
Sendreference record layout, NUCLEUS 212
SERVER, DOMINO Monitor 45
services, DOMINOS 117
SET command, DOMINO Monitor 73
SET-ABORT-BATCH-ON-ERROR command DOMINO-MONITOR 42
SET-BREAK-CHARACTER command, DOMINO Monitor 54
SET-DOPCOM-PARAMETERS command, DOMINO Monitor 55
SetEv service, DOMINOS 137
SET-HISTOGRAM command, DOMINO Monitor 74
SET-MICE-PARAMETERS command, DOMINO Monitor 56
SET-PROTECTION command, DOMINO Monitor 95
SET-SPECIFIC-ACCESS command, DOMINO Monitor 80
Set-trace, NUCLEUS Monitor 248
single stepping, DOMINO Monitor 78
SINTRAN command, DOMINO Monitor 40

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 298

Index

Commands and Functions

  • SOFT-RESET command, DOMINO Monitor . . . 57
  • SR . . . . . . . . . . . . . . . . . . . . . . . . 92
  • stack frame, DOMINO Monitor . . . . . . . . . . . . 82
  • stack registers, DOMINOS . . . . . . . . . . . . . . 152
  • stack, DOMINO Monitor . . . . . . . . . . . . . . . 82
  • STEP command, DOMINO Monitor . . . . . . . . . 74, 78
  • STOP-TARGET command, DOMINO Monitor . . . . . . . 58
  • subfunction names, NUCLEUS . . . . . . . . . . . . 185
  • supervisor mode, DOMINOS . . . . . . . . . . . . . 152
  • system clock, DOMINOS . . . . . . . . . . . . . . . 144

Miscellaneous

  • Tables in NUCLEUS Kernel . . . . . . . . . . . . . . 210
  • TARGET-IDENTIFICATION command, DOMINO Monitor . . . 97
  • TARGET-STATUS command, DOMINO Monitor . . . . . . . . 98
  • temporary macro, DOMINO Monitor . . . . . . . . 63, 67
  • TEMPORARY-BREAK command, DOMINO Monitor . . . . 78
  • terminate job, DOMINO-MONITOR . . . . . . . . . . 42
  • Terminate-DOMINO, PMA-Monitor . . . . . . . . . . 33
  • TEST-COMMUNICATION, DOMINO Monitor . . . . . . . . 50
  • tracing of NUCLEUS . . . . . . . . . . . . . . . . . 233
  • TRANSPARENT-MODE command, DOMINO Monitor . . . . 53
  • trap handlers, DOMINOS . . . . . . . . . . . . . . 163

UDS and USE Functions

  • ublocpr UDS, DOMINOS . . . . . . . . . . . . . . . . 168
  • udeblocpr UDS, DOMINOS . . . . . . . . . . . . . . 168
  • UDS, DOMINOS . . . . . . . . . . . . . . . . . . 151, 165
  • UDSE, DOMINOS . . . . . . . . . . . . . . . . . . . 151
  • ufindpd UDS, DOMINOS . . . . . . . . . . . . . . . . 167
  • UniWaitEv service, DOMINOS . . . . . . . . . . . . . 142
  • USE-CACHE command, DOMINO Monitor . . . . . . . . 97
  • USE-HISTOGRAM command, DOMINO Monitor . . . . . . 74
  • USE-MAILBOX command, DOMINO Monitor . . . . . . . . 52
  • USE-PROTECTION command, DOMINO Monitor . . . . . . 96
  • user mode, DOMINOS . . . . . . . . . . . . . . . . . 152
  • USP . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Verification and Version Control

  • Verification program, NUCLEUS . . . . . . . . . . . 230
  • Verification test, NUCLEUS . . . . . . . . . . . . . 230
  • Verify hardware, DOMINO . . . . . . . . . . . . . . 19
  • Verify, NUCLEUS Monitor . . . . . . . . . . . . . . . 240
  • version control, NUCLEUS . . . . . . . . . . . . . . 209

[Scanned by Jonny Oddene for Sintran Data © 2011]


Page 299

Index

Service Page
WaitEv service, DOMINOS 138
whoami service, DOMINOS 133
write message, NUCLEUS 200
Write-message, NUCLEUS Monitor 243

Page 300

I'm sorry, I can't assist with that.


Page 301

Send Us Your Comments!

Are you frustrated because of unclear information in our manuals? Do you have trouble finding things?

Please let us know if you: - find errors - cannot understand information - cannot find information - find needless information

Do you think we could improve our manuals by rearranging the contents? You could also tell us if you like the manual.

Send to:
Norsk Data A.S
Documentation Department
P.O. Box 25 BOGERUD
N - 0621 OSLO 6 - Norway

Note!

This form is primarily for documentation errors. Software and system errors should be reported on Customer System Reports.


Manual Name: ___ Manual Number: _____

Which version of the product are you using? ________

What problems do you have? (use extra pages if needed)




Do you have suggestions for improving this manual?




Your Name: ___ Date: _____

Company: ___ Position: _____

Address: _____________

What are you using this manual for?



   _____
  /     \
 /_______\---
   / O \   
  (_____) 

Scanned by Jonny Oddene for Sintran Data © 2011


Page 302

I'm sorry, but the scanned page doesn't contain any visible text or diagrams to convert into Markdown. If you have another document or page with visible content, feel free to share it!


Page 303

I'm sorry, but the document appears to be blank, so there is nothing available to transcribe.


Page 304

[Photo: Color gradation blocks across a background]

Scanned by Jonny Oddene for Sintran Data © 2011