|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 30720 (0x7800) Types: TextFile Names: »netrefinp«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦fd91a6c89⟧ »tm68net« └─⟦this⟧
;ali time 5 0 (networkref=set 100 permanent networkref.17 networkref=typeset if ok.yes c=copy message.no networkref ) *pl 297,18,240,4,3**pn 0,0* *lw 170**ps 0**sj* H. C. Ørsted Institute Computer Department Universitetsparken 5 DK-2100 København Ø *nl4* *ct* Reference manual for the RC4000 microcomputer network "networkref" *nl6* Anders Lindgård *sj* *nl19**lm 120* 79/1 *lm120**nl* June 1979 version 1979-11-12 *nl* *rj**pn 5,0**ps 18* *lm0* *ns 1,2,Foreword* --------*nl**np* This manual is intended as a referencemanual both for the user of the system and for the systemsprogrammer. It thus contain many details which the user do not need to know for practical use of the system. *np* This manual describes only the RC4000 part of the system. The micro- computer part is described by Eivind Sørensen elsewhere. *nl**np* The RC4000 part of the system was designed and implemented by the author. The microcomputer part by Eivind Sørensen. *nl**np* This manual is stored as a textfile on the RC4000 backing store under the name "networkref". *ps18* *rj* *nl6* *ld24* *ns 1,2,Introduction* ------------*nl**np* The HCØ M6800 microcomputer network is a hierarchical star network controlled by the RC4000 computer.*nl2* It supports datacollection and control of experimental setups, where a local microcomputer perform the datacollection and control, while the RC4000 provides, back-up facilities and datahandling.*nl2* The network supports local peripherals known to computational activities inside RC4000 except for typewriter terminals. *ns 1,2,System design* -------------*nl**np* A network design was selected to be able to support clusters of experiments at long distances where cabling costs else might be prohibitive.*nl2* Primary design criteria for as well hardware and software are to develop the system as a number of simple modules with welldefined and simple interfaces and to isolate the modules from each to other to minimize the effects of component breakdown. Each experiment is connected to its own small microcomputer. This computer is further connected through the network to the central system using cheap serial lines just like terminals. In the central system a microcomputer is frontend to the main multiprogrammed computer acting as a multiplexer for a number of local microcomputers, *nl2* Control in the system is hierarchical with the RC4000 as the ultimate master. It is implemented having a monitor program in a read-only-store in each local microcomputer. Through this monitor the multiprogrammed computer may load programs into the local microcomputer directly eliminating the need for a local load device. On the other hand the local microcomputer may be disconnected from the central system and connected again without any harm on the local user program and collected data.*nl2* The idea of having a monitor in the local microcomputer gives us the posibility to provide users with a much more atractive machine than the naked hardware. There are standard driver programs for the types of peripherals supported and a communication package for exchanging blocks of data with the RC4000. This implies that the individual user programs usually are very short and thus relatively easy to develop. Another advantage is that it is possible for the central computer to read parts of the store when a user program is running.*nl2* In the central system the multiplexer microcomputer is much like a local microcomputer. The same monitor as for the local microcomputers is used. The multiplexer program is a user program just like a datacollection program in a local microcomputer. The software and its interfaces thoughout the system are very uniform and closely related to the RC4000 multiprogramming monitor (Brinch Hansen , 1973). This uniformity made it easy for us to develop the system software and will make it easy to maintain it. The software is designed to give the users a strong support and is at the same time flexible.*nl2* High datatransmission speed between the local microcomputer and the central system is not considered important and this is the main argument for selecting cheap serial lines with a transmission speed of 50k baud. Users who needs high datacollection rates usually only need this for a very limited time so the local microcomputer store can provide buffering until the central system has received the data. The datatrans- mission is implemented with a number of (logical) channels between the RC4000 and the local microcomputer. *nl2* *ns 1,2,Structure of the network* ------------------------*nl**np* The network is strictly hierarchial in control, i.e. a master may perform actions like start, stop, load the store at an absolute address in a slave. Only a master may send messages to a slave. A slave can thus only give answers to messages. Theese restrictions are basically due to the implementation of processes and their way of communication in the RC4000. *nl2* To simplify the system there are only 5 levels in the hierarchy. *ns 1,2,Structure of a microcomputer in the Network* --------------------------------------------*nl**np* A microcomputer is build around the Motorola M6800 central processor. The store is divided into a user part and a monitor part. The user part is of minimum 16 k bytes and maximum 57 k bytes. The monitor part is 4 k bytes EPROM for a monitor program and 1 k bytes for variables to the monitor. The monitor program may be called from the user program to perform input/output on the user peripherals. The monitor program receives messages from the master and performs control functions towards the user program. Other messages from the master are forwarded to the user program which may wait for such messages, and is expected to perform the necessary actions. *nl2* The monitor program implements a number of processes. Each process is identified by a name. Processes may send messages to each other using message buffers. Processes may be divided into system processes and peripheral processes for user devices. *nl* *sj* The system processes are: 1. the master 2. the clock 3. the user process (only one) *rj**nl* and they exist to any time. Peripheral processes for user devices are created by calling a monitor procedure 'create peripheral'. *ns 1,2,Process and computer communication* ----------------------------------*nl**np* The philosophy behinds this monitor follows that of the RC4000 monitor. Procedures like 'send message', 'wait answer', 'wait message', 'send answer' and 'wait event' are essentially copied from the RC4000 monitor.*nl2* In hardware the communication between two microcomputers goes through three serial channels. A command channel, for information from the master to the slave. A request channel for the other way. A data channel for block transfers between the two computers initiated by information send through the command channels and the request channel.*nl2* In software there are 8 channels between a master and a slave. Each channel is controlled using messages and answers in a single messagebuffer. 7 of the channels may be used for any purpose and simoultaneusly. The 8th channel is for restarting a slave from scratch called an autoload message. A channel is identified by a channel index.*nl2* The user process wil be either a multiplexer program for up to 15 slave microcomputers, a device control program for up to 15 peripherals known internally in the RC4000 or a datacollection and control program.*nl2* It is intended that a single microcomputer will only run one single type of task, for example being a multiplexer computer, or datacollection computer. *ns 1,2,The RC4000 monitor program* --------------------------*nl**np* In the RC400 monitor the network is simulated as a number of processes shown in figure x. Closest to the interface hardware is the 'main micro' process which has three subprocesses 'dma', 'trm' and 'rec' which control the DMA-transfer, the transmitter registers and the receiver registers respectively. Below the 'main-micro' there is a process for each local microcomputer and each local peripheral to be known in the RC4000 system. The process structure reflects the connection of computers in the system and is at present a fixed structure which can only be altered by changing the RC4000 monitor. * ns 1,2,Handling of a message.**np* When a message is received by a "local" process a channel index is selected if possible, else the buffer is queued until a channel index becomes available.*nl2* An autoload message has allways channelindex= max channelindex and is allways served. The autoload message rejects all messages in the system originating from this process or any process lower in the hierarchy. The "local" process now set up a primitive message in the message buffer (buf + 16 and buf + 18) where the first word contain the message and the second the receiver of this primitive message concatenated with the channelindex. The message buffer is then send to the "main" process.*nl2* The "main" process performs a numbers of conversations with the "trm" process and the "rec" process for each message received from "local".*nl2* Messages are not necessarily handled to completion in the same order as send to the "local". As the system works it may be regarded as the main process has 4 queues. One for autoload, one for other even messages, one for input and one for output. The "user" process in the "local" may how- ever answer messages send to it in any order.*nl2* For an even message "main" sends the messagebuffer to "trm". When an answer is received from "trm" the messagebuffer is send to "rec" to wait for a primitive answer. "rec" returns the messagebuffer to "main" which then returns it to "local" where the final answer is set up and the channel index released. The messagebuffer is returned to the sender.*nl2* For input "main" first exequtes the same sequence of operations as for an even message. When the answer comes from "rec" the messagebuffer is send to the "dma" process which performs block input-output. When the "dma" has answered to "main" a "release block" primitive message is send through "trm" and "rec" and the answer goes to "local".*nl2* For output "main" first sends a "find block index" primitive message through "trm" and "rec" Then "dma" perform the operation and finally an output primitive message is send through. All theese operations uses the same message buffer.*nl2* If the sender is stopped during the handling of an input or output message the messagebuffer is returned to the sender with halfwords=bytes=0. This may often be the case when the operating system uses swopping for storemultiplexing between several processes. For input the block is held in the physical main M6800 computer ready for a new input message, as "main" issues a "wait block" message instead of the "release block" message. In order to prevent data blocks from tying up store indefinetely in the main M6800 the data blocks are released for other use after 30 sec. *nl* *ns 1,2,Format of a messagebuffer when used by the subprocesses.* ---------------------------------------------------------*nl**np* *sj* Contain a message buffer address + 8 <operation><12+<mode> +10 <first address> +12 <last address> +14 <coroutine number><+16<first address local> +16 <primitive message 1. word> +18 <identification word> +20 <save message or answer> +22 <save original receiver> Contain an answer before it is returned to the sender. + 8 <status><12+<result> +10 <bytes> +12 +14 <coroutine index><16 +16 <primitive answer 1. word> +18 <identification word> +20 <save message or answer> +22 <save original receiver> *rj* *nl2* When a message buffer is processed by the system it is used to store all information used by the various subprocesses when handling the message in the system. *nl2* The coroutine index is used by the "main" process for selecting the next piece of code to be executed when the message is returned from "dma", "trm" or "rec". The primitive message to be executed by "trm" is stored in buffer index +16 and +18. When a message is broken up into several messages as is the case for blocktransfer messages the original message may be stored in buffer index +20 while some other message is handled. Save original receiver contain the process description address of "local" when the message is handled by the system processes. Buffer address +4 will contain the process description address of the "main" system process. *nl2* When an answer has been generated buffer address +8 will contain status bit for operation performed in the RC4000. Result is the result to be delivered by "wait answer". *ps**lm20**ld24* Network local microcomputer *lm 0* *ns 1,2,General rules**np* Operations can only be initiated by an internal process that has reserved the device. Some local microcomputers further require that the user has function bit 8 in the function mask. The number of messages which the system handles concurrently is limited. Normally the user may expect to be able to have 7 channels open simoultaneonsly. A eight is reserved for an autoload message. The number of blocktransfers which may be handled simoultaneonsly by the system is further limited. *ns 1,2,Sense operation**np* The state of the 'user process' concatenated with the state of the monitor is delivered as an answer. *ns 1,2,Input operation.**np* A segment of 256 words is input to a storage area within the sending process. If the sender is stopped before the operation has taken place halfwords and characters are zero else they are 512 and 768. *sj* Transfer completed *rj* *nl2**np* A message is forwarded to the user program in the M6800. The even part of the 2. word of the message may be read by the userprogram. Intended for syncronizing the RC4000 user program and the M6800 user program. *sj* Output operation Equivalent to input operation. *rj* *nl2* Start user operation*nl* The user process is started if it was in the state 'waiting for start' else it is a dummy operation.*nl2* Stop user operation*nl* The user process is stopped i.e. set in the state 'waiting for start'. If that was already the case it is a dummy operation.*nl2* Autoload operation*nl* Initializes the microcomputer. The microcomputer is included in the network and is ready to be loaded with a program. All pending transfers to that microcomputer are rejected and so are pending transfers to microcomputers lower in the hierarchy. All processes lower in the hierarchy are locked (see lock processes). *nl2* Lock processes operation.*nl* All processes lower in the hierarchy are reserved by the calling proces, without regard to other reservations. All pending transfers to that microcomputer are rejected and so are all transfers to microcomputers lower in the hierarchy.*nl2* Unlock processes operation*nl* For all processes lower in the hierarchy reservations are cancelled. *nl2* *sj* Messages and answers: *ld8* Operation: message answer sense 0<12+mode status word not used program status word input 3<12+mode status first address bytes last address program status word first address local transfer completed 4<12+mode status block number<1 not used program status word output 5<12+mode status first address bytes last address program status word first address local start user 2<12+mode status not used program status word stop user 6<12+mode status not used program status word autoload 8<12+mode status not used program status word lock processes 10<12+mode 0 unlock processes 12<12+mode 0 *nl2* *ld16* *rj* mode*nl* Legal mode values are 0,1,2,3,4,5,6,7. For odd operations mode 0 specifies input or output at the absolute address given by first address local. If mode >0 the input or output message is handed over to the user program.*nl2* status bits *sj* 1<22 data overrun 1<21 timeout *rj* *nl* Status bit 0 - 6 are taken from the primitive answer see below*nl2* program status word is taken from the promitive answer, see below *nl6* *lm20* *ps* Formats for communication between computers.*nl* (primitive messages and answers) *lm 0* *sj* A primitive message or primitive answer consist of two 24 bit words. Message *rj* *nl2* The first word of a message or an answer is identified by a zero in the least significant bit. The second word by a one. A message has a zero in the most significant bit of the first word. An answer has a one. The second word of a message or an answer identifies the receiver (bit 0 through 19) and the communication by a channelindex 'ch' (bit 19 through 22). Thus the format allows up to 8 messages to be handled simoultaneously. The 'receiver' part of the second word is split into five 'levels' of 4 bit each, allowing a dept in the computer hierarchy of five, where the 'netmain' is level 0. (see below) *nl2* *ns 1,2,Message:**np* 'opcode' (bit 1 through 7 is interpreted as an operation and a mode, with the 4 most significant bits as operation and the 3 least significant bit as mode.*nl* *sj* opcodes 0<3 sense device 2<3 start user 4<3 transfer completed 6<3 stop user 8<3 autoload local 10<3 find free block number 12<3 release blocknumber 14<3 wait block 3<3 input block 5<3 output block Mode is not used by the system but is forwarded to the receiver of the primitive message *rj* *nl2* The address part of a message (bit 8 through 22) is used by the odd operations to give an address in the local microcomputer from where input or output should start.*nl2* The release block number operation uses only bit 16 through 18, which gives the index of a block to be released. The wait block operation is used in connection with input to signal that this block has to wait for a new input operation to take place. In transfer completed this field is a free parameter. In all other even operations the address part is undefined. *ns 1,2,Answer**np* 'Status' (bit 1 through 7) gives status for the operation performed. All bits zero indicates succesfull operation. In the RC4000 theese bit will be part of status in the answer.*nl* *sj* status bit meaning 1<0 rejected, timeout on communication channel 1<1 rejected, receiver does not exist 1<2 rejected, after autoload 1<3 rejected, illegal address 1<4 rejected, master clear 1<5 rejected, illegal operation 1<6 rejected, device disconnected *rj* *nl2* If bit 2 and 6 are both set the identification of a local micro- computer is inconsistent with the identification assumed by its master.*nl* 'no' (bit 8 through 11) gives the number of the receiver on the 'level' (bit 12 through 15). This information may also be decoded from the second word.*nl* 'block' is the block index used in this transfer. Has only meaning if the operation in the message is odd or an 'find free block' "release block" or a "wait block" operation.*nl2* *sj* 'userstatus' (bit 19 throgh 22) gives information about current state of the user process value meaning 0 no process or stopped 1 running 2 waiting for message 4 waiting for answer 8 waiting for event *rj**nl2* In the RC4000 this value is put into the program status word of the answer.*nl2* The primitive messages are served by the monitor program in the local microcomputer. The monitor may be in two states. One "unnamed" where it does not know its own identification word, and the othe "named" where an autoload message has defined the identification word. In the unnamed state only autoload messages are accepted from the master. In the named state the monitor itself serves the message if the whole identification word matches the identification word of the primitive message. If any bit in the next lower level is set, the primitive message is handed over the user program. As a convention the RC4000 monitor program sets all 4 bit in the next lower level for input-output messages when mode is different from zero in the RC4000 message, and also for "transfer completed". *ns 1,2,Conventions for data blocks* ---------------------------*nl**np* When data blocks are transferred between a local microcomputer user program and the RC4000 the standard programs will use the first part of the block as a header to describe details of the transfer in a standard way. A block is regarded as 256 words of 24 bit and has the following format (RC4000 halfwords used for relative addresses). *nl2* *sj* Block layout + 0 <size of header=h in bytes (8 bit)> + 2 <size of data block=s in bytes (8 bit)> + 4 <block number of this block> + 6 <information type> + 8 <record size> + 10 <status> + 12 <device number of local peripheral> +hx3/2 <first datum> +(hx3 + sx3 +3)/2 <last datum> *rj* *nl2* <size of header> h gives the number of bytes of the header part of this block. May vary from block to block.*nl2* <size of data> s gives the number of bytes of data in this block. Must fulfill s <768 - h.*nl2* <block number> gives the blocknumber of this block. It is assumed that blocknumbers are unique. The block number is encoded into <first address local> together with some part of <information type>. see below. When data are stored on the RC4000 backing store <block number> is used as segment address.*nl2* <information type> is used as follows:*nl2* The last four bit (bit 20 to 23) gives the size of a datum in bytes.*nl* The next four bit (bit 16 to 19) give the data type of the information.*nl2* *sj* datatype 0 = ISO characters 1 = integers (2. complement) 2 = integers (positive) 3 = BCD integers The next four bit (bit 12 to 15) gives the information as follows 0 = data 1 = message block 2 = answer block *rj**nl2* This information is also found in the <first address local> part of the message area (or primitive message) which is a free parameter when the user program is the receiver of the input-output message.*nl* <record size> gives the number of 8 bit bytes in a record.*nl2* *sj* <status> is used as follows: If all bits are zero the block is a normal block: Bit 1<0 hard error 1<2 device could not be created 1<3 device recognizes message as unintelligible 1<4 device is disconnected 1<5 device does not exist 1<6 device gives parity error 1<7 device gives timeout 1<10 last block *rj* *nl2* <device number of local peripheral> is used to identify where device data comes from or goes to. May be omitted. *ns 1,2,Primitive message convention.* ------------------------------*nl**np* As the <first address local> is a free parameter when the local user process is destination for input-output messages <mode> 0 in the RC4000 message it can be used to give a easy identification of a block. If this word is greater than zero it is the block number. If less than zero it is a message block or an answer block. An answer block further has the sign bit of the last byte (bit 16) equal to one. Message blocks and answers blocks should be numbered sequentially to ensure that they will be processed sequentially by the system. *ns 1,2,ALGOL procedures and variables.**np* On the algol level the microcomputers may be handled by the primitive procedures described below.*nl2* *sj* Procedures: netoperat (name,operation); netabsio (name,operation,first address,data); netprogload (name,program); *rj* *nl2* Multibuffered block transfers between an RC4000 user program and the local microcomputer user program are most effectively handled using "send message" "wait answer" directly. For an example of use see appendix I.*nl2* Besides the procedures some standard variables exist and are used or set by the procedures.*nl2* *sj* Variables: op_sense op_start op_stop op_transfer op_autoload op_input op_output net_error net_io_s_w net_prog_s_w *rj* *nl2* The first 5 may be used in the call of "netoperat" as operation code. The 2 next in "netabsio". "neterror" is a boolean initialized to true and will cause the procedures to write error messages on current output.*nl2* The last 2 variables contain the statusword for the last operation issued, "netiosw", and the local user program status word, "netprogsw". Theese two variables are set by the 3 procedures after each operation.*nl* *lw 180* *ld 12* *ps0* *qr* 1979-03-01 Anders Lindgård *nl2* *ct* integer procedure net_operat *nl1* *rj**np* Executes either a sense,start,stop,autoload or transfer completed operation on a microcomputer in the RC4000 microcomputer network. *nl2* Call: net_operat(name,operation,block)*nl* *lm55* *mt 1, net_operat**cm 6 spaces*(return value, integer). The result of the operation. If operation was executed then 1. *nl* 0 operation illegal. *nl* <6 operation rejected. Result of wait answer. *nl* >8 reservation error. Result of reserve process +8. *nl* *mt 1, name*(call value, string). The name of the microcomputer. *nl* *mt 1, operation*(call value, integer). Operation code Must be either a sense, start, stop, autoload or transfer completed operation. The standard variables op_sense, op_start, op_stop, op_autoload, op_transfer may be used. *nl* *mt 1, block*(call value, integer). Only used by transfer completed, where it is communicated to the M6800 user process as a blocknumber (even). *lm 0* *nl1* *np* The procedure assign values from the answer area to to the standard variables net_io_s_w and net_prog_s_w. *ns 1,2*Warnings* --------*np* In case of an error a warning is written on current output, but the program is not terminated. If neterror has been set to false no warning is written. *se/* /nl/**netoperat <name> operation error /nl/**netoperat <name> not reserved <result> /nl/**netoperat <name> result <result> wait answer /nl/**netoperat <name> status <bitpattern> /se*/ *ns 1,2,Language* --------*nl* ALGOL *ns 1,2,Maintenance level* -----------------*nl* user *ps0* *qr* 1979-03-01 Anders Lindgård *nl2* *ct* integer procedure net_abs_io *nl1* *rj**np* Performs an input operation from or an output operation to a microcomputer in the RC4000 microcomputer network. One segment is transferred to or from an absolute address in the local microcomputer. *nl2* Call: net_abs_io(name,operation,data_block,first_address)*nl* *lm55* *mt 1, net_abs_io**cm 6 spaces*(return value, integer). The result of the operation. If operation was executed then 1. *nl* 0 operation illegal. *nl* <6 operation rejected. Result of wait answer. *nl* >8 reservation error. Result of reserve process +8. *nl* *mt 1, name*(call value, string). The name of the microcomputer. *nl* *mt 1, operation*(call value, integer). Operation code Must be either an input or output operation. The standard variables op_input, op_output may be used. *nl* *nl* *mt 1, data_block*(call or return value, integer array). The data are transferred to or from this array. Must have at least 256 elements. This is however not checked. *nl* *mt 1, first_address*(call value, integer). First byte address in local microcomputer. *lm 0* *nl1**np* The procedure assign values from the answer area to to the standard variables net_io_s_w and net_prog_s_w. *ns 1,2*Warnings* --------*np* In case of an error a warning is written on current output, but the program is not terminated. If neterror has been set to false no warning is written. *se/* /nl/**netabsio <name> operation error /nl/**netabsio <name> not reserved <result> /nl/**netabsio <name> result <result> wait answer /nl/**netabsio <name> status <bitpattern> /se*/ *ns 1,2,Language* --------*nl* ALGOL *ns 1,2,Maintenance level* -----------------*nl* user *ps0* *qr* 1979-03-01 Anders Lindgård *nl2* *ct* integer procedure net_prog_load *nl1* *rj**np* Loads a program found on the RC4000 backing store into a microcomputer in the RC4000 microcomputer network. The program is loaded to address 0 and forward in the local microcomputer. The program is fetched from segment one of the backing store area and is assumed that tail(10) contains the number of halfwords to be transferred. This convention is used by the general table driven assembler genas. *nl2* Call: net_prog_load(name,program)*nl* *lm55* *mt 1, net_prog_load**cm 6 spaces*(return value, integer). The result of the operation. If operation was executed then 1. *nl* 0 operation illegal. *nl* <6 operation rejected. Result of wait answer. *nl* >8 reservation error. Result of reserve process +8. *nl* *mt 1, name*(call value, string). The name of the microcomputer. *nl* *mt 1, program*(call value, string). The name of the backing store file which holds the program. *lm 0* *nl1**np* The procedure assign values from the answer area to to the standard variables net_io_s_w and net_prog_s_w. *ns 1,2*Warnings* --------*np* In case of an error a warning is written on current output, but the program is not terminated. If neterror has been set to false no warning is written. *se/* /nl2/**netprogload <name> not reserved <result> /nl/**netprogload <name> result <result> wait answer autoload /nl/**netprogload <name> status autoload <bitpattern> /nl/**netprogload <program> lookup result <result> /nl/**netprogload <program> areasize <segments> load size <halfwords> /nl/ Further warnings may come from the procedure net_abs_io /se*/ *ns 1,2,Language* --------*nl* ALGOL *ns 1,2,Maintenance level* -----------------*nl* user *ef* ▶EOF◀