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