DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦117597e52⟧ TextFile

    Length: 39168 (0x9900)
    Types: TextFile
    Names: »mdef        «

Derivation

└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
    └─⟦2ba378e4a⟧ 
        └─⟦this⟧ »mdef        « 

TextFile

b.i. a800,  b300,  q70  w.

m.                mondef - monitor definitions 17.0 beta
;--------------------------------------------------------------------------
;                      REVISION HISTORY 
;--------------------------------------------------------------------------
; DATE      TIME OR            DESCRIPTION
;           RELEASE
;--------------------------------------------------------------------------
;88.03.24  14.1A HSI   start of description
;                      remove double definition of a78
;                      insert csp-printer kind (q14=14)
;88.03.24  18.41 hsi   version 1B
;
;88.04.19  15.0  tsh   complete definition of all ioc/dlc processes,
;                      areas, pseudo and internal processes included.
;                      (area, pseudo and internal process descriptions
;                      not included in compiling yet)
;
;88.04.21 13.48  hsi   IFP/IDA main; define field: controller state
;88.05.04 11.30  kak   relative address of device no. changed from 22 to 48 in external ifp/ida processes
;88.05.24 7.45   kak   mask for RC9000 included
;88 05 29 14.25  hsi   define b-names for monitor constants
;88 05 30 13.35  hsi   define names for model10 interrupt pointers in main 
;                      proceses (a202-a206)
;88 06 01        tsh   update of mainprocess due to changed protocol
;88 08 16 13.24  hsi   timeout on operations to main
;88 11 21 13.39 kak  bit 12-14 in message buffer state field is used to result or
;                    a disjunction of results (chained operations)
;                    and the final result is extracted from this field
;89 03 16 09.46 kak  release 15.1
;----------------------------------------------------------------------------
;89 04 05 13.27        START OF RELEASE 16.0
;
;89 04 05 13.27 HSI shine up pd for internal and area processes
;89 04 07 10.12 HSI define logical volume fields in disk process
;----------------------------------------------------------------------------
;90 05 30 11.08 kak    START OF RELEASE 17.0


; release number of monitor base text:
  a135=17         ; release number
  a136=0          ; version number

b.i30 w.
i0=90 10 01 
i1=08 00 00 

a133=i0, a134=i1  ; will be set to newest correction
; if newtime (i0,i1) > oldtime (a133,a134) then oldtime:=newtime;
c.i0-a133
  c.i0-a133-1, a133=i0, a134=i1, z.
  c.i1-a134-1,          a134=i1, z.
z.

i10=i0, i20=i1

i15=i10/100000 , i10=i10-i15*100000 , i25=i20/100000 , i20=i20-i25*100000 
i14=i10/10000  , i10=i10-i14*10000  , i24=i20/10000  , i20=i20-i24*10000 
i13=i10/1000   , i10=i10-i13*1000   , i23=i20/1000   , i20=i20-i23*1000
i12=i10/100    , i10=i10-i12*100    , i22=i20/100    , i20=i20-i22*100
i11=i10/10     , i10=i10-i11*10     , i21=i20/10     , i20=i20-i21*10

i2:  <:                              date  :>
     (:i15+48:)<16+(:i14+48:)<8+46
     (:i13+48:)<16+(:i12+48:)<8+46
     (:i11+48:)<16+(:i10+48:)<8+32

     (:i25+48:)<16+(:i24+48:)<8+46
     (:i23+48:)<16+(:i22+48:)<8+46
     (:i21+48:)<16+(:i20+48:)<8+ 0

i3:  al. w0  i2.       ; write date:
     rs  w0  x2+0      ;   first free:=start(text);
     al  w2  0         ;
     jl      x3        ;   return to slang(status ok);

     jl.     i3.       ;
e.
j.


; rc 4000 system tape
; per brinch hansen
;     this tape is an autoload version of the rc 4000 multiprogramming
; system. it is written in the slang 3 language and consists of
; 10 segments surrounded by a global block:
;
; global block, definitions:
;     a names define system constants;
;     b names define entries in the monitor table;
; segment 1; start monitor segment 10:
;     contains a jump to segment 10;
; segment 2, monitor:
;     contains interrupt response code and monitor procedures;
; segment 3, external processes:
;     contains send message and code for input/output;
; segment 4, process descriptions:
;     contains name table, process descriptions, and message buffers;
; segment 5, initialize monitor:
;     executed and removed immediately after loading;
; segment 6, process functions:
;     contains code for catalog administration and the
;     creation and removal of processes;
; segment 7, initialize process functions:
;     executed and removed immediately after loading;
; segment 8, operating system s:
;     contains code which allows the operators to
;     create and control new process from consoles;
; segment 9, initialize catalog
;     starts the multiprogramming system and is
;     itself immediately executed as a part of the
;     process s; it can initialize the backing store
;     with catalog entries and binary programs
;     input from paper tape or magnetic tape;
; segment 10: move monitor:
;     allocates segment 2 - 9 after autoloading


; global block, definitions

; size options:
; a1 = no of area processes
; a3 = no of internal processes
; a5 = no of message buffers
; a7 = no of pseudoprocesses
; a87 = inspection interval
; a109 = min aux-cat key
; a110 = max cat key
; a111 = min key for entries between standard and max interval
; a112 = no. of bs-devices
; a113 = no. of drum chains
; a114 = size of drum chains
; a115 = no. of disc chains
; a116 = size of disc chains
; a117 = no of messagebuffers assigned to consoles
; a118 = update aux cat 

a0=1<23        ; bit no 0



; predefinition of option variables:
a1=0           ;
a3=0           ;
a5=0           ;
a9=0           ; number of subdevices
a83 = 250        ; max count not resceduling internal process (<256)
a80=-1-1<11    ; all drivers included excl. rc8601
a82=-1         ; ... with statistics on
a84=-1         ; ... and test on
a85=256        ; max time slice in 0.1 ms
a89=8.4777 7777; standard interrupt mask
a90= 1<0        ; special facility mask : fpacoredump 1<0
a91=0          ;
a92=1<10+1<21  ;
a93=1<23       ;
a109=2         ;
a110=3         ;
a111=3         ;
a113=0         ; number of drums
a114=0         ;
a116=0         ;
a128=0         ; a128=0 : std monitor gen.
               ;     >0 : option gen.
               ;  a128 o. 1<1 : read special s size options in segment 6
               ;  a128 o. 1<2 : rc 6000 monitor
a123=0         ; net-identification(jobhost)
a124=0         ; home-region(jobhost)
; a125=        ; job host identification
a130=00 00 00  ; date, time of options
a131=00 00 00  ;   (yy mm dd, hh mm ss)
a197=84        ; max datatransfer per operation to-from idadisc (in segments)
a198=1<23+0<3  ; device addr of cpu
a194= 8             ; mp level
a199=2         ; device number of mainconsole
a66 = 0         ; 
a398= 8        ; lower write limit for procfunc, s and driverproc
a399= 0         ; RC9000 mask: default nothing included
                ; bit 0 include change of cpa and base adresses
                ; bit 1 process description moved to montop
a400=0         ; coroutine monitor inclusion dummy - may be removed
t.m.                monitor size options included

; a2 = size of area process description
; a4 = size of internal process description

   a112 = a113 + a115
   a118 = a112-2,  a119 = a118

; a88 = size of catalog entry
; a89 = standard interrupt mask
; a85 = max time slice in 0.1 msec
; a107 = min lower limit in bases
; a108 = max upper limit in bases

   a88=34, a107=8.4000 0001, a108=8.3777 7776

; driver options.
; the inclusion of drivers is controlled by the parameters a80, a82 and a84.
; a80 determines whether a driver shall be included, and a82 and a84 whether
; it shall be included with statistics and/or testoutput.
;
;  a80 = driver inclusion
;  a82 = statistics
;  a84 = testoutput
;
; the function of the bits in the parameters are -
;  1<0  : clock
;  1<1  : disc (dsc 801)
;  1<2  : mainproc
;  1<3  : receiver (fpa 801)
;  1<4  : transmitter (fpa 801)
;  1<5  : hostproc
;  1<6  : subprocs
;  1<7  ; host, subhost
;  1<8  ; total fpa-complex ( i.e. 1<2 - 1<7 and 1<11 - 1<15)
;  1<11 : rc8601
;  1<12 ; subdriver terminal
;  1<13 ;     -     magtape
;  1<14 ;     -     disc
;  1<15 ;     -     flexible disc


; testoptions:
; testoptions are used during debugging of the system.
; they are defined by bits in the identifier a92 as follows:
;    testcase i               a92=a92 o. 1<i   0<=i<=17
;    teststatus               a92=a92 o. 1<18
;    testcall                 a92=a92 o. 1<19
;    testoutput               a92=a92 o. 1<20
;    print w, type w
;    procfunc interrupt       a92=a92 o. 1<21
;    procfunc testbuffer      a92=a92 o. 1<22
; testoptions in s are defined by bits in the identifier a93
; as explained in s.


;** common format for all proces descriptions **

a48 = -4           ; lower name base
a49 = -2           ; upper name base
a10 =  0           ; kind
a11 =  2           ; name

\f


; I N T E R N A L   P R O C E S S
; ============================================================================
;
; name    rel. addr     use
; -----   ---------     ------------------------------------------------
;
; a48   = - 4      ;    lower name base
; a49   = - 2      ;    upper name base
; a10   =   0      ;    kind (0)
; a11   =   2      ;    name
  a12   =  10 ; hw ;    stop count
  a13   =  11 ; hw ;    state
  a14   =  12      ;    identification bit
  a15   =  14      ;    event queue: first
                   ;    event queue: last
  a16   =  18      ;    process queue: next
                   ;    process queue: prev
  a17   =  22      ;    first address (logical)
  a18   =  24      ;    top address   (logical)
  a19   =  26 ; hw ;    buffer claim
  a20   =  27 ; hw ;    area claim
  a21   =  28 ; hw ;    internal claim
  a22   =  29 ; hw ;    function mask
 a301   =  30      ;    priority
  a24   =  32 ; hw ;    mode_1
  a25   =  33 ; hw ;    mode_2
  a26   =  34      ;    interrupt mask
  a27   =  36      ;    user exception (interrupt) address (logical)
 a170   =  38      ;    user escape address (logical) 
 a171   =  40      ;    initial cpa
 a172   =  42      ;       -    base
 a173   =  44      ;       -    lower write limit (physical)
 a174   =  46      ;       -    top   write limit (physical)
 a175   =  48      ;       -    interrupt levels 
  a34   =  50      ;    parent description address
  a35   =  52      ;    quantum
  a36   =  54      ;    run time
  a38   =  58      ;    start run
  a39   =  62      ;    start wait
  a40   =  66      ;    wait address
\f



  a42   =  68      ;    catalog base, lower
  a43   =  70      ;    catalog base, upper
                   ;    max interval, lower
  a44   =  74      ;    max interval, upper
                   ;    standard interval, lower
  a45   =  78      ;    standard interval, upper
  a28   =  80      ;    save w0 (first of register dump)
  a29   =  82      ;      -  w1
  a30   =  84      ;      -  w2
  a31   =  86      ;      -  w3
  a32   =  88      ;    status
  a33   =  90      ;    ic
 a176   =  92      ;    cause
 a177   =  94      ;    sb
 a181   =  96      ;    current cpa  (first of fixed parameters)
 a182   =  98      ;       -    base
 a183   = 100      ;       -    lower write limit
 a184   = 102      ;       -    top   write limit
 a185   = 104      ;       -    interrupt levels 
 a186   = 106      ;    pu-index
 a302   = 108      ;    save area
                   ;        -
 a339   = 112      ;    footprint if internal break
 a340   = 114      ;    not used
 a341   = 116      ;    not used
 a342   = 118      ;    not used
 a343   = 120      ;    not used
 a305   = 122      ;    not used
 a306   = 124      ;    not used
                   ;    --------- bs claim start ---------
  a46   = 126      ;    chain_0: key_0 : entries
                   ;       -   :   -   : slices
                   ;       -   : key_1 : entries
                   ;       -   :   -   : slices
                   ;       -   : key_2 : entries
                   ;       -   :   -   : slices
                   ;       -   : key_3 : entryes
                   ;       -   :   -   : slices
                   ;    chain_1: key_0 : entries
                   ;       - - -  osv  - - -

a47=-4             ; start of internal process description
a4 = a46+(:a110<2+4:)*a112-a47 ; size of internal process

; format of save area:
;   8 words, used by deliver-result-procedures
a304 = 16  ; address of wait first event

a179 = a181 - a28  ; displacement between fixed params and first of regdump.
a178 = a181        ; top of regdump
a303 = a305        ; top of save area
\f


; internal process states:
; ---------------------------------------------------------
;

; actual bitpatterns are relevant to process functions only

a94 = 2.00001011 ; running
a95 = 2.11001000 ; waiting for cpu
a96 = 2.00001000 ; running after error
a97 = 2.10110000 ; waiting for stop by parent
a98 = 2.10100000 ; waiting for stop by ancestor
a99 = 2.10111000 ; waiting for start by parent
a100= 2.10101000 ; waiting for start by ancestor
a101= 2.11001100 ; waiting for process function
a102= 2.10001101 ; waiting for message
a103= 2.10001110 ; waiting for answer
a104= 2.10001111 ; waiting for event


; bit patterns used to test or change the above states:

a105 = 2.00100000; waiting for stop or start
a106 = 2.00001000; waiting for start

;** commen format of all external process description **
;   writeprotection array only used in connection with areas!

a401= (:a3+23:)/24 ; number of words in user and writeprotection bittable
a403 = a401*2      ; number of halfwords in user and writeprotection bittable
a404 = -a403-2     ; displacement from user bit array element to
                   ; corresponding writeprotection array element


b. j0 w.
    j0=0
a250= j0 , j0=j0+2    ; <driver  description >
                       ;  > 0 : driver process description address
                       ;  < 0 : device driven by monitor   -1: IDA801
a402= j0 , j0=j0+a403 ; <user bit table
;a48                  ; <lower name base>
;a49                  ; <upper name base>

; these fields are defined relative to the 
;common part of all process descriptions

j0=j0-a48


a250 = a250-j0 , a402 = a402 -j0 

e.
a50 = 10              ; process description address of main process
a52 = 12              ;  reserver
a57 = 14 , a58 = 15   ; <work0> , <work1>

\f


;
; A R E A   A N D   P S E U D O   P R O C E S S E S
; ===========================================================================
;
; AREA PROCESS
; ------------
;
; name    rel. addr     use
; -----   ---------     --------------------------------------------
;
;                  ;    write protect bit array (variable in size)
;                  ;    user bit array (variable in size)
; a48   = - 4      ;    lower name base 
; a49   = - 2      ;    upper name base
; a10   =   0      ;    kind (4)
; a11   =   2      ;    name
; a50   =  10      ;    address of bs device
; a52   =  12      ;    reserver
; a57   =  14 ; hw ;    work1
; a58   =  15 ; hw ;    work2
  a60   =  16      ;    first slice of area
  a61   =  18      ;    number of segments
  a62   =  20      ;    document name
  a411  =  28      ;    number of write accesses
  a412  =  30      ;    number of read  accesses

  a349= a250 - a403; <start of process>
  a405= a349       ; <writeprotection bit array>
  a2 = a412 - a349 + 2 ; size of area process description
  a23 = 27         ; use area processes as pseudoprocesses


; PSEUDO PROCESS   (uses an area process)
; ---------------------------------------
;
; name    rel. addr     use
; -----   ---------     ------------------------------------------------
;
; a48   = - 4      ;    lower name base
; a49   = - 2      ;    upper name base
; a10   =   0      ;    kind (64)
; a11   =   2      ;    name
; a50   =  10      ;    process description address of owner
; a60   =  16      ;    message description
\f


; format of device description:
; The following fields are only used by pheriperal proceses for controllers
; using channel programs:
; a220, a221, a226, a227, a230, a231 a232, a233
; The following fields are only used by pheripheral proceses for controllers
; not using channel programs ( IDA801, IFPXXX ) "intelligent" controllers (ITC)
; a228, a229

; definition of device-dependant part of device-description

b. j0 w.

j0 = 0              ; (used to set up the definitions)

; pointers to private area in device descriptor, used by driver and start-io:

a220= j0, j0 = j0+2 ; first of private area, rel to a10
a221= j0, j0 = j0+2 ; top   of private area, rel to a10

; the following word is used to indicate a transfer in progress
;   (sender descr) a.1 = 1 : transfer to driver process
;   (sender descr) a.(-2)>0: transfer to sender process
;   (sender descr)     = 0 : no transfer
; for intelligent controllers only the following two values are used:
;   -1: reset controller (after timeout)
;    0: no reset to controller
a225= j0, j0 = j0+2 ; transfer code

; pointers to channel program area, in device descriptor, used by start-io:

a226= j0, j0 = j0+2 ; first of channel program area, rel to a10
a227= a226+2,j0=j0+2; top   of channel program area, rel to a10
; pointer needed by monitor acknowledge interrupt routine for intelligent controllers:
 
a228= j0            ; <jl w2 c46>
a229= a228+2        ; after jump: w2=a229


; standard status area: used when the controller delivers an interrupt:

a230= j0, j0 = j0+8 ; channel program address
a231= a230+2        ; remaining character count
a232= a230+4        ; current status
a233= a230+6        ; event status

; device address, also used as index to controller table:

a235= j0, j0 = j0+2 ; device address

; interrupt operation, as needed by monitor interrupt response:

a240= j0, j0 = j0+2 ; <jl w2 c51> (monitor service instruction)
a241= a240+2        ; <after jl w2 ...>
a242= a241, j0=j0+2 ; next operation link
a243= a242+2,j0=j0+2; prev operation link
a244= j0, j0 = j0+2 ; timeout / result from start-io

; interrupt operation, as needed by driver process:

a245= a244+2,j0=j0+2; interrupt address in driver code (logic addr)
a246= j0, j0 = j0+2 ; <jl w1 c30> (driver service instruction)
a247= a246+2        ; <after jl w1 ...>

; which driver process governs this device ? (used by monitor):
;a250 <0             ; device driven by monitor
;a250 >0             ; driver process description adr
;a401                ; start of user bit array

;these fields are defined relative to the common part
;of an external process description


j0 = j0 - a250
a220=a220-j0, a221=a221-j0
a225=a225-j0, a226=a226-j0, a227=a227-j0
a228=a228-j0,  a229=a229-j0
a230=a230-j0, a231=a231-j0, a232=a232-j0, a233=a233-j0
a235=a235-j0
a240=a240-j0, a241=a241-j0, a242=a242-j0, a243=a243-j0,
a244=a244-j0, a245=a245-j0, a246=a246-j0, a247=a247-j0,

e.



; format of peripheral process description for devices driven by driverproc:

;a250               ; <driver process description addr>
;a402               ; <start of user bit array>
;a48 = -4           ; <lower name base>
;a49 = -2           ; <upper name base>
;a10 =  0           ; <kind>
;a11 =  2           ; <name>
;a50 = 10           ; <process description of main process>
;a52 = 12           ; <reserver>
;a57 = 14 , a58 = 15; <work1> , <work2>
 a54 = 16           ; <next message>
 a55 = 18           ; <last message>
 a56 = 20           ; <regretted flag>

; optional parameters for peripheral devices :

 a70 = 22           ; <parameter0> : <state>
 a71 = 24           ; <parameter1> : <chaintable>
 a72 = 26           ; <parameter2> : <slicelenght>

; parameters used in connection with subprocesses:
a63 = a70+14       ;  address of subkind;
a64 = a63+2        ;  address of state(subproc);

; format of controller description

a310= 0             ; first of channel program or communication area address (ITC)
a311= 2             ; first of std status (pointer also used by reset)
a312= 4             ; interrupt destination
a313= 6             ; interrupt number
a314= 8             ; size of controller description

; format of std status

a315= 0             ; top of last executed command
a316= 2             ; remaining character count
a317= 4             ; current status
a318= 6             ; event status

; format of logic channel program (as demanded by the start i/o procedure)

a321= 0             ; address code < 12 + command < 8 + modif
a322= 2             ; param 1
a323= 4             ; param 2

a320= 6             ; size of channel program entry

\f


; I O C / D L C   P R O C E S S   D E S C R I P T I O N S
;--------------------------------------------------------------------------
;--------------------------------------------------------------------------
;
; (+)     set at monitor configuration time
; ($)     set at create link time
;
; I O C   ,   D L C   A N D   S S P   M A I N   P R O C E S S :
; =============================================================
; 
;
; name    rel. addr    use
; -----   ---------    ----------------------------------------------------
;
                   ;   user bit array (variable in size)
; a48   = - 4      ;   lower name base (+)
; a49   = - 2      ;   upper name base (+)
; a10   =   0      ;   kind (ioc: 20,  dlc: 26,  ssp: 24) (+)
; a11   =   2      ;   name
; a50   =  10      ;   main process (points at itself) ($)
; a52   =  12      ;   reserver
; a57   =  14 ; hw ;   controller state
; a58   =  15 ; hw ;   not used
; a54   =  16      ;   first message in event queue (+)
; a55   =  18      ;   last message in event queue (+)
                   ;   not used
; a70   =  22      ;   test: start (next record) (+)
; a71   =  24      ;   test: top   (next record) (+)
; a72   =  26      ;   test: start (test buffer) (+)
  a73   =  28      ;   test: top   (test buffer) (+)
  a74   =  30      ;   test: test mask (bit 0  - 23) (+)
  a75   =  32      ;   test: test mask (bit 24 - 47) (+)
  a86   =  34      ;   no_of_outstanding messages
  a87   =  36      ;   timeout (In  units of 0,1 msek)
  a76   =  38      ;   device index of superviser process (0) ($)
  a77   =  40      ;   rc8000 process address of main process ($)
  a78   =  42      ;   free buffers, state of process and communication area (*)
  a81   =  44      ;   waiting queue: first message (+)
                   ;   waiting queue: last message  (+)
  a59   =  48      ;   device number	 (+)
 \f



 
      		   ;   --> communication area: controller to RC8000
  a500  =  50      ;   function
  a501  =  52      ;   message buffer address
  a502  =  54      ;   device_id (device handler index)
  a503  =  56      ;   proc_id (ext. process address of receiver)
  a510  =  58      ;   mess_0     a150
  a511  =  60      ;   mess_1     a151
  a512  =  62      ;   mess_2     a152
  a513  =  64      ;   mess_3     a153
  a514  =  66      ;   mess_4     a154
  a515  =  68      ;   mess_5     a155
  a516  =  70      ;   mess_6     a156
  a517  =  72      ;   mess_7     a157

                   ;   --> communication area: RC8000 to controller <--
  a550  =  74      ;   function
  a551  =  76      ;   message buffer address
  a552  =  78      ;   device_id (device handler index)
  a553  =  80      ;   proc_id (ext. process address of receiver)
  a560  =  82      ;   mess_0     a150
  a561  =  84      ;   mess_1     a151
  a562  =  86      ;   mess_2     a152
  a563  =  88      ;   mess_3     a153
  a564  =  90      ;   mess_4     a154
  a565  =  92      ;   mess_5     a155
  a566  =  94      ;   mess_6     a156
  a567  =  96      ;   mess_7     a157
\f



  a580  =  98      ;   start of save area for a550 - a567
  a581  = a580+24-2;   last  of save area for a550 - a567
  a216  = 122      ;   no of times controller was not ready to receive
                   ;   total number of operations delivered to controller
  a217  = 126      ;   (2 words, 48 bits unsigned integer)
  a218  = 128      ;   number of chained operations delivered to controller
  a200  = 130      ;   pending prepare dump message
  a201  = 132      ;   prepare dump area process
; a242  = 134      ;   interrupt queue: next
;       = 136      ;   interrupt queue: prev

  a219  = (:a550-a500:)/2 ; size of comm. area in words (used by rc8000)

  a520  = a510-8   ;   pointer to pseudo message ( a140 )
  a570  = a560-8   ;   pointer to pseudo message ( a140 )

;
;
;     (*)  states of process and communication area (a78, bit 12 - 23):
;          bit 21-23: connect state: 
;                     0 = free,             1 = during connect,
;                     2 = connected,        (3-7: not possible)
;
;          bit 20:    0 = no chain,         1 = in a chain
;          bit 19:    0 = controller ready  1 = controller busy  
;          bit 18:    0 = controller ok,    1 = controller not ok
;          bit 17:    0 = controller ok,    1 = controller after reset
;
\f




; I O C  -  D I S C   P R O C E S S   D E S C R I P T I O N :
; ===========================================================
;
;
; name    rel. addr    use
; -----   ---------    ---------------------------------------------------
;
;                  ;   user bit array (variable in size)
; a48   = - 4      ;   lower name base
; a49   = - 2      ;   upper name base
; a10   =   0      ;   kind (6) ($)
; a11   =   2      ;   name
; a50   =  10      ;   mainprocess (physical disc: main; logical disc: physical disc) ($)
; a52   =  12      ;   reserver
; a57   =  14 ; hw ;   type (*)
; a58   =  15 ; hw ;   not used
; a54   =  16      ;   first message in eventqueue ($)
; a55   =  18      ;   last message in eventqueue ($)
; a56   =  20      ;   next part of logical volume (last in chain: 0)
; a70   =  22      ;   next logical disc (last in chain: 0)
; a71   =  24      ;   chain table reference
; a72   =  26      ;   slicelength
; a73   =  28      ;   first segment
; a74   =  30      ;   number of segments ($)
; a75   =  32      ;   segments pr track ($)
; a86   =  34      ;   max transfer (segments) ($)
; a87   =  36      ;   buffer size  (segments) ($)
; a76   =  38      ;   controller device index (logical disc: dev. index of physical disc) ($)
; a77   =  40      ;   rc8000 device address (logical disc: dev. addr. of physical disc) ($)
; a78   =  42      ;   unused, state of subprocess (**) ($)
; a81   =  44      ;   next in process queue (not used) ($)
;                  ;   prev in process queue (  - " - ) ($)
; a59   =  48      ;   device number (+)
  a67   =  50      ;   control module (logical disc: control module of physical disc) ($)
  a68   =  52      ;   slave unit (logical disc: slave unit of physical disc) ($)
a215=(:a68-a50+2:)/2  ; size of ext proc description from main to top
;
;
;     (*)   type (a57 - bit encoded):
;           .....vvxxyyz: xx: 00: rc8000 catalog
;                         yy: 00: without catalog;  01: with catalog
;                          z:  0: physical disc;  1: logical disc
;                         vv: 00: not part of logical volume
;                             10: logical volume head;  
;                             01: logical volume subdisc;
;
;     (**)  state of subprocess (a78  bit 12 - 23):
;           bit 21-23: 0 = free;  1 = during connect;  2 = connected; 
;                      3 = during disconnect;  4 = after intervention
;
\f




; I O C  -  M A G N E T I C   T A P E   P R O C E S S   D E S C R I P T I O N :
; =============================================================================
;
;
; name    rel. addr     use
; -----   ---------     ---------------------------------------------------
;
;                  ;    user bit array (variable in size)
; a48   = - 4      ;    lower name base
; a49   = - 2      ;    upper name base
; a10   =   0      ;    kind (18) ($)
; a11   =   2      ;    name
; a50   =  10      ;    main ($)
; a52   =  12      ;    reserver
; a57   =  14 ; hw ;    type (*)
; a58   =  15 ; hw ;    not used
; a54   =  16      ;    first message in event queue ($)
; a55   =  18      ;    last message in event queue ($)
;                  ;    not used
; a70   =  22      ;    state of document (**) ($)
; a71   =  24      ;    not used
; a72   =  26      ;    not used
; a73   =  28      ;    not used
; a74   =  30      ;    not used
; a75   =  32      ;    remoter process ($)
; a86   =  34      ;    max transfer + 1 (octects  = buffer size + 1) ($)
; a87   =  36      ;    buffer size (octects) ($)
; a76   =  38      ;    device index in controller of device ($)
; a77   =  40      ;    rc8000 process address ($)
; a78   =  42      ;    unused, state of subprocess (***) ($)
; a81   =  44      ;    next in process queue (not used) ($)
;                  ;    prev in process queue (  - " - ) ($)
; a59   =  48      ;   device number (+)
; a67   =  50      ;    formatter ($)
; a68   =  52      ;    station ($)
;
;
;     (*)    type (a57):
;            at present none is defined 
;
;     (**)   state of document (a70):
;            0 = identified document mounted;  2 = unidentified document mounted
;            1 = no document mounted;
;
;     (***)  state of subprocess (a78 bit 12 - 23):
;            bit 21-23: 0 = free;  1 = during connect;  2 = connected;
;                       3 = during disconnect;  4 = after intervention;
\f




; I F P  -  G E N E R A L   S E Q U E N T I A L   D E V I C E :
; =============================================================
;
;
; name    rel. addr     use
; -----   ---------     ---------------------------------------
;
;                  ;    user bit array (variable in size)
; a48   = - 4      ;    lower name base
; a49   = - 2      ;    upper name base
; a10   =   0      ;    kind (28) ($)
; a11   =   2      ;    name
; a50   =  10      ;    main (ifp-main) ($)
; a52   =  12      ;    reserver
; a57   =  14 ; hw ;    not used
; a58   =  15 ; hw ;    not used
; a54   =  16      ;    first message in event queue ($)
; a55   =  18      ;    last  message in event queue ($)
;                  ;    not used
; a70   =  22      ;    not used
; a71   =  24      ;    not used
; a72   =  26      ;    not used
; a73   =  28      ;    not used
; a74   =  30      ;    not used
; a75   =  32      ;    not used
; a86   =  34      ;    max transfer + 1 (octets  = buffer size + 1) ($)
; a87   =  36      ;    buffer size (octets) ($)
; a76   =  38      ;    device index in ifp of device ($)
; a77   =  40      ;    rc8000 device address of device ($)
; a78   =  42      ;    unused, state of subprocess (*) ($)
; a81   =  44      ;    next in itc process queue (not used) ($)
;                  ;    prev in itc process queue (  - " - ) ($)
; a59   =  48      ;   device number (+)
; a67   =  50      ;    (unit ($))
; a68   =  52      ;    (device ($))
;
;
;
;     (*)     state of subprocess (a78 bit 12 - 23):
;             bit 21-23: 0 = free;  1 = during connect;  2 = connected;
;                        3 = during disconnect;  4 = after intervention;
;
\f



  
; I F P  -  C S P   T E R M I N A L / S S P   C O N S O L E    
; =============================================================
;
;
; name    rel. addr     use
; -----   ---------     ---------------------------------------
;
;                  ;    user bit array (variable in size)
; a48   = - 4      ;    lower name base
; a49   = - 2      ;    upper name base
; a10   =   0      ;    kind (csp terminal: 8, ssp console: 9) ($)
; a11   =   2      ;    name
; a50   =  10      ;    main (ifp-main) ($)
; a52   =  12      ;    reserver
; a57   =  14 ; hw ;    not used
; a58   =  15 ; hw ;    not used
; a54   =  16      ;    first message in event queue ($)
; a55   =  18      ;    last  message in event queue ($)
;                  ;    not used
; a70   =  22      ;    not used
; a71   =  24      ;    attention buffer address
; a72   =  26      ;    not used
; a73   =  28      ;    not used
; a74   =  30      ;    process address of reserver
; a75   =  32      ;    last internal which did i/o
; a86   =  34      ;    max transfer + 1 ($)
; a87   =  36      ;    buffer size ($)
; a76   =  38      ;    device index in controller of device ($)
; a77   =  40      ;    rc8000 device address of device ($)
; a78   =  42      ;    unused, state of subprocess (*) ($)
; a81   =  44      ;    next in itc process queue ($)
;                  ;    prev in itc process queue ($)
; a59   =  48      ;   device number (+)
; a67   =  50      ;    (unit ($))
; a68   =  52      ;    (device ($))
;
;
;
;     (*)     state of subprocess (a78 bit 12 - 23):
;             bit 21-23: 0 = free;  1 = during connect;  2 = connected;
;                        3 = during disconnect;  4 = after intervention;
;
\f





; P R O C E S S   K I N D S
; ============================================================================
;

    q0  =   0   ; internal process
    q4  =   4   ; area process
    q6  =   6   ; disk process (physical or logical)
    q8  =   8   ; terminal process
    q9  =   9   ; ssp console
   q14  =  14   ; printer process
   q18  =  18   ; magnetic tape process
   q20  =  20   ; ioc main process
   q24  =  24   ; ssp main process
   q26  =  26   ; dlc main process
   q28  =  28   ; general sequentil device process
   q68  =  68   ; free (external) process

\f



        
; M E S S A G E 
; ============================================================================
;
;

      a138  =  -4      ;   count, state
      a139  =  -2      ;   flag
      a140  =   0      ;   next message
                       ;   previous message
      a141  =   4      ;   receiver/result      (if receiver < 0 : claimed)
      a142  =   6      ;   sender               (if sender   < 0 : regretted)
      a150  =   8      ;   mess_0
      a151  =  10      ;   mess_1
      a152  =  12      ;   mess_2
      a153  =  14      ;   mess_3
      a154  =  16      ;   mess_4
      a155  =  18      ;   mess_5
      a156  =  20      ;   mess_6
      a157  =  22      ;   mess_7

      a145  =  a150    ;   message part of message
      a146  =  a157+2  ;   top of buffer
      a6    =  a146-a138;  size of message buffer
      a7    =  a140-a138;   size of negative part

;
;
;  state (a138 + 1):
;        bit    23 : i/o, set when the message involve an i/o transfer
;            21-22 : transfer state of message when ioc/dlc message:
;                  : 2.xxxx00x : not transfered
;                  : 2.xxxx01x : during transfer
;                  : 2.xxxx10x : transfer complete
;               20 : regretted (stopped) set when the message has been regretted
;               19 : use_copy, when set a chain was interrupted by a high-
;                  : priority operation causing the com_area (a550-a573) to be
;                  : saved in a580 - a581. the com_area must be re-established.
;               18 : answer - when set (first part of) answer has been copied
;                  : from com_area to message.
;               17 : force - when set the message is a high-priority operation
;                  : (dump or regret)
;            12-14 : result (1 or 3 or 4) or a disjunction of 1 and 3 and 4
\f



; message buffer states (according to sender/receiver fields):

; the possible states of a message buffer are defined by the values 
; of the sender and receiver fields in the buffer:
;
;         sender:        receiver:          state:
;   1.       0              0               free
;   2.    sender addr    receiver addr      message pending
;   3.    sender addr   -receiver addr      message received
;   4.   -sender addr    receiver addr      (not possible)
;   5.   -sender addr   -receiver addr      message received, but regretted by sender
;   6.
;   7.
;   8.    sender addr       1               pending answer,  result = normal
;   9.    sender addr       2                  -       -     result = rejected
;  10.    sender addr       3                  -       -     result = unintelligible
;  11.    sender addr       4                  -       -     result = malfunction
;  12.    sender addr       5                  -       -     result = unknown
;
; explanations:
;  sender addr   > 0 :  message buffer claim of the sender has been decreased
;  receiver addr > 0 :  message buffer has not been detected by the receiver, i.e. mess
;                       buf claim of sender is untouched. the message buffer may be removed
;                       from the receivers queue without further actions.
;  receiver addr < 0 :  mess buf claim of receiver has been decreased, indicating that the
;                       receiver has deposited a mess buff in the pool, while the receiver
;                       is processing the original one.
;  sender addr   < 0 :  the sender has regretted the message, or has been removed. the mess buf
;                       claim of the sender has been increased, i.e. the sender may now use
;                       the deposited message buffer.
;  1 <= receiver <= 5 : the mess buf claim of the receiver has been readjusted, i.e. the
;                       receiver has regained its deposited mess buf claim
\f


;
;
; the following table shows how the different monitor procedures react upon the possible
; bufferstates. the table contains the new state.
;
;                      <-----------------sender/parent----------------->
;                               remove                     <-------------receiver-------------><---drivers--->
;                               process/
;                      send     regret    wait     stop     wait     get      wait     send     link     next
;                      message  message   answer   process  event    event    message  answer     operation
;
; 1 free                  2     illegal   illegal     3     illegal  illegal    -      illegal  illegal    -
; 2 message pending       -        1       unch.      -        3        3       3      illegal     2       2
; 3 message received      -        5       unch.      -       2-3       3       -        8-12      2       -
; 5 mess rec, but regr.   -     illegal   illegal     -        1        5       -         1       1       -
; 8-12 pending answer     -        1         1        -      unch.      1       -      illegal  illegal    -
;
;                               modify/
;                               remove
;                               process
;
\f




; format of pu information table:
; =========================================================================
;

a350= 0             ; pu table address
a351= 2             ; inf register
a352= 4             ; mon top register
a353= 6             ; core size register
a354= 8             ; exception address offset
a355=10             ; register dump area offset

; format of pu table:

;+0                 ; no of free pu's
;+2                 ; 1.st pu: process description address or -1;
;+4                 ; 2.nd pu: ---------"------------"---- or -3;
;+6                 ; 3.rd pu: ---------"------------"---- or -5;
;+8                 ; 4.th pu: ---------"------------"---- or -7;

; define not mp offset
a8=4
▶EOF◀