|
|
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: 39168 (0x9900)
Types: TextFile
Names: »mdef «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
└─⟦2ba378e4a⟧
└─⟦this⟧ »mdef «
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◀