|
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: 23808 (0x5d00) Types: TextFile Names: »mondef«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦3b4b74406⟧ »kkmon3filer« └─⟦this⟧ └─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦b8ddea98b⟧ »kkmon3filer« └─⟦this⟧
b.a800,b200 w. m. mondef - monitor definitions ; release number and date of monitor base text: a133=79 07 24 ; date of monitor a134=12 00 00 ; time of monitor a135=7 ; release number a136=0 ; version number b.i30 w. i0=81 08 01, i1=12 00 00 ; 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 ; predefinition of option variables: a1=0 ; a3=0 ; a5=0 ; a9=0 ; number of subdevices 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=2 ; 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) a198=1<23+0<3 ; device addr of cpu a199=2 ; device number of mainconsole a400=0 ; coroutine monitor inclusion (default no) ; **** definition of coroutine monitor formats: ; ; coroutine description; a694 = -6 ; next in semaphore queue a696 = -4 ; previous in semaphore queue a698 = -2 ; priority a700 = 0 ; save ic (return) a702 = 2 ; next coroutine a704 = 4 ; prev coroutine a706 = 6 ; timer a708 = 8 ; mask f. waitchained a710 = 10 ; save w0(for test purposes only) or result a712 = 12 ; save w1 a714 = 14 ; save w2 a716 = 16 ; testmask a718 = 18 ; ident a720 = 20 ; user exit (0 or exit addr) a722 = 22 ; return address for waitsem,waitchained,cwaitanswer a724 = 24 ; ref. to operation (waitchained) or buf (cwaitanswer) ; operation: a670 = +0 ; next operation a672 = +2 ; prev operation a674 = +4 ; type ; chained semaphore: a650 = +0 ; next coroutine a652 = +2 ; prev coroutine a654 = +4 ; next operation a656 = +6 ; prev operation ; simple semaphore: a660 = +0 ; next coroutine a662 = +2 ; prev coroutine a664 = +4 ; count ; second process extension. ; contains key variables of the coroutine system . a538 = -12 ; start of testbuffer a540 = -10 ; start of next record in test buffer a542 = -8 ; top of test buffer a544 = -6 ; test output flag (1 = on) a546 = -4 ; next in active queue a548 = -2 ; prev in active queue a550 = 0 ; current coroutine a552 = 2 ; next in timer queue a554 = 4 ; prev in timer queue a556 = 6 ; name of the testoutput process a566 = 16 ; start of testoutput message a582 = 32 ; last event pointer a584 = 34 ; message decriptor pointer(cur) a586 = 36 ; start of table containing references to user defined procedures a588 = 38 ; first message buffer extension a590 = 40 ; start of common message-answer area a616 = 56 ; name of 'clock' a626 = 66 ; start of 'clock'-message a630 = 70 ; answer descriptor for answer from 'clock' t.m. monitor size options included ; a2 = size of area process description ; a4 = size of internal process description ; a8 = size of pseudoprocesses a112 = a113 + a115 a8=0 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<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. a48 = -4 ; lower limit(interval) a49 = -2 ; upper limit(interval) a10 = 0 ; kind a11 = 2 ; name a12 = 10, a13 = 11 ; stop count, state a14 = 12 ; identification bit a15 = 14 ; next event ; last event a16 = 18 ; next process ; last process a17 = 22 ; first address (logical) a18 = 24 ; top address (logical) a19 = 26, a20 = 27 ; buffer claim, area claim a21 = 28, a22 = 29 ; internal claim, function mask a301= 30 ; priority a24 = 32, a25 = 33 ; mode (= protection register, protection key) a26 = 34 ; interrupt mask a27 = 36 ; user exception address (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 - - (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 a42 = 68, a43 = 70 ; catalog base a44 = 74 ; max interval a45 = 78 ; standard interval a28 = 80 ; save w0, = first of regdump a29 = 82 ; - w1 a30 = 84 ; - w2 a31 = 86 ; - w3 a32 = 88 ; - status a33 = 90 ; - ic (logical) a176= 92 ; - cause a177= 94 ; - sb a176= 96 ; top of regdump a181= 96 ; current cpa = first of fixed parameters a182= 98 ; - base a183= 100 ; - lower write limit (physical) a184= 102 ; - top - - (physical) a185= 104 ; - interrupt levels a179= a181-a28 ; (displacement between fixed params and first of regdump) ; a180: ; see c29 a302= 106 ; save area address ; save area for g20-g24, b18, b19 a303= 124 ; top of save area a46 = 124 ; bs claims start ; chain0: key0: slices , entries ; key1: - , - ; key2: - , - ; key3: - , - ; (........................) ; chain1: key0: - , - ; (........................) ; bs claims top ; calculate size of process- a4=a46+(:a110<1+2:)*a112-a48 a4 = a4 ; size of internal process a35 = 52 ; <quantum> a36 = 54 ; <run time> a38 = 58 ; <start run> a39 = 62 ; <start wait> a40 = 66 ; <wait address> a42 = 68, a43 = 70 ; <catalog base> a44 = 74 ; <max interval> a45 = 78 ; <standard interval> b. j0 w. j0 = 80 a28 = j0, j0 = j0+2 ; save w0, = first of regdump a29 = j0, j0 = j0+2 ; - w1 a30 = j0, j0 = j0+2 ; - w2 a31 = j0, j0 = j0+2 ; - w3 a32 = j0, j0 = j0+2 ; - status a33 = j0, j0 = j0+2 ; - ic a176= j0, j0 = j0+2 ; - cause a177= j0, j0 = j0+2 ; - sb a178= j0 ; top of regdump a181= j0, j0 = j0+2 ; current cpa = first of fixed parameters a182= j0, j0 = j0+2 ; - base a183= j0, j0 = j0+2 ; - lower write limit a184= j0, j0 = j0+2 ; - top - - a185= j0, j0 = j0+2 ; - interrupt levels a179= a181-a28 ; (displacement between fixed params and first of regdump) ; a180: see c29 a302= j0, j0 = j0+2 ; save area address j0 = j0+14; save area for g20-g24, b18, b19 a303= j0 ; top of save area a305= j0, j0 = j0+2 ; first process extension a306= j0, j0 = j0+2 ; second process extension a46 = j0 ; bs claims start j0=j0+(:a110<2+4:)*a112 ;KK top of bs-claims list ; a48 = first of internal process ; j0 = top - - - a4 = j0-a48 ; size of internal process e. a23 = 27 ; use area processes as pseudoprocesses ; format of save area: ; 8 words, used by deliver-result-procedures a304 = 16 ; address of wait first event ; internal process states: ; actual bitpatterns are relevant to process functions only a95 = 2.01001000 ; running 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 \f ; format of area process description: a401=(:a3+23:)/24 ; number of words in user bittable a403=a401*2 ; number of bytes in bit table b.j0, j0=0 a349= j0 ; <start of process> a250= j0 , j0=j0+2 ; <driver proc descr address> a402= j0 , j0=j0+a403 ; <user bit table> a48 = j0 , j0=j0+2 ; <lower limit> a49 = j0 , j0=j0+2 ; <upper limit> a10 = 0 ; <kind> a11 = 2 ; <name> a50 = 10, a51 = 11 ; <process descr addr of bs device> a52 = 12 ; <reserved> a53 = 14 ;******** <users> a60 = 16 ; <first slice> a61 = 18 ; <number of segments> a62 = 20 ; <document name> a411= 28 ; number of times written a412= 30 ; number of times read a349=a349-j0, a250=a250-j0 , a402=a402-j0, a48=a48-j0, a49=a49-j0 e. a2 = a412+2-a349 ; size of area process ; format of pseudo process a48 = -4 ; <lower limit> a49 = -2 ; <upper limit> a10 = 0 ; <kind> a11 = 2 ; <name> a50 = 10 ; <main process> a60 = 16 ; <mess descr> \f ; format of device description: ; 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 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 ; 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= j0, j0 = j0+2 ; driver description addr (abs addr) a410=j0, j0=j0+a403 ; <user bit table> ; the last of these fields should have been adjacent to the ; field 'interval low' i.e. relative to a48: j0 = j0 - a48 a220=a220-j0, a221=a221-j0 a225=a225-j0, a226=a226-j0, a227=a227-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, a250=a250-j0, a410=a410-j0 ; some of the above given field were known under another name ; in the earlier versions of this monitor: ; a50 = a235 ; device address ; a56 = a245 ; interrupt address e. ; a48 lower interval ; a49 upper interval ; a10 kind ; a11 name ; a52 reserver ; a53 users a54 = 16 ; next message a55 = 18 ; previous message ; a70 optional parameters ; etc ; format of peripheral process description: ; a402 start of user table ; a250 driver process description address a48 = -4, a49 = -2 ; <interval> a10 = 0 ; <kind> a11 = 2 ; <name> a50 = 10 ; <device number*64> a52 = 12 ; <reserved> a53 = 14 ; <users> a54 = 16 ; <next message> a55 = 18 ; <last message> a56 = 20 ; <interrupt address> ; optional parameters for peripheral devices: a70 = 22 ; <parameter 0> a71 = 24 ; <parameter 1> a72 = 26 ; <parameter 2> a73 = 28 ; <parameter 3> a74 = 30 ; <parameter 4> a75 = 32 ; <parameter 5> a76 = 34 ; <parameter 6> a77 = 36 ; <parameter 7> a78 = 38 ; <parameter 8> ; parameters used in connection with subprocesses: a63 = a70+14 a64 = a63+2 ; format of controller description a310= 0 ; first of channel program a311= 2 ; first of std status 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 ; format of message buffer: a139=-2 ; mess flag (saved w2 in send message) a140= 0 ; links: next buffer, previous buffer a141= 4 ; receiver (or result) a142= 6 ; sender a145= 8 ; start of message/answer a150= a145 ; operation < 12 + mode status word a151= a145+2 ; first storage address number of bytes a152= a145+4 ; last storage address number of chars a153= a145+6 ; first segment number a146= 24 ; top of message/answer a6 = a146-a139 ; size of message buffer ; message buffer states: ; the possible states of a message buffer are defined by the ; values of the sender and receiver parameters: ; ; sender param: receiver param: state: ; 0 0 buffer available ; sender descr receiver descr message pending from existing sender ; sender descr -receiver descr message received from existing sender ;-sender descr receiver descr regretted message pending ;-sender descr -receiver descr regretted message received ; sender descr 1 normal answer pending ; sender descr 2 dummy answer pending (message rejected) ; sender descr 3 dummy answer pending (message unintelligible) ; sender descr 4 dummy answer pending (receiver malfunction) ; sender descr 5 dummy answer pending (receiver does not exist) ; 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. sender addr -receiver addr - 1 immediate-message received ; 7. -sender addr -receiver addr - 1 immediate-message received, but regretted by sender ('s parent) ; 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 ; receiver addr odd : immediate message ; ; ; 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 ; ; 6 imm. mess received - 7 illegal - illegal illegal - 1 illegal - ; 7 imm. mess rec.,regr - - illegal - illegal illegal - 1 illegal - ; ▶EOF◀