|
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◀