|
|
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: 31488 (0x7b00)
Types: TextFile
Names: »kkmonsimt«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »kkmonsimt«
(kkmonsim=slang list.no xref.no
)
\f
s.a450,b136 ,d100,e100 w.
p.<:fpnames:>
k=h55
; predefinition of option variables:
a1=0 ;
a3=0 ;
a5=0 ;
a6=22
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
a91=0 ;
a92=1<10+1<21 ;
a93=1<23 ;
a109=2 ;
a110=3 ;
a111=2 ;
a112=0
a113=0 ; number of drums
a114=0 ;
a115=0
a116=0 ;
a118=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
a180=16
b53=0
b54=22
b60=100000
b61=100500
; 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.
a200= -14 ; first of internal process description
a194= -14 ; process descr addr(other comp) if type>2
a192= -12 ; process type 0 useal internal process
; 2 master process (this computer)
; 3 master mirror process
; 5 mirror process
a190= -10 ; process description addr of master process
a188= -8,a189= -7 ; computer number<12 + internal claim (other computer)
a186= -6, a187= -5 ; cpu running mask,allowed cpu mask
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-a200
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
a46 = j0 ; bs claims start
j0=j0+(:a110<2+4:)*a112 ;KK top of bs-claims list
; a200 = first of internal process
; j0 = top - - -
a4 = j0-a200 ; 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
0,0
rs. w1 b25. ; save fp base
jl. d50. ; goto start
b65: 0-0-0 ; 8: base of controller description table
b66: 0 ; 10: power up entry
b67: 0-0-0 ; first controller table entry
b68: 0-0-0 ; top controller table entry
b69: b69 ; queue head: software timeout
b69 ; (for devices)
b70: 0 , 0 ; time when last inspected
b72: 0-0-0 ; b53 ; start of interrupt table
b73: 0-0-0 ; b54 ; max external interrupt number
b0: 0-0-0 ; b53 - b16 ; (relative start of interrupt table
b74: a198 ; device address of this cpu
b75: 0 ; after powerfail (0==false, else true)
b18: 0 ; current buffer address
b19: 0 ; current receiver
b20: 0 ; address of simple wait event procedure
b21: 0-0-0 ; owner of std-driver-locations
b101:0 ; return from subprocs
b102:0-0-0 ; a66 ; start of table(subproc-drivers)
b103:0 ; address of entry for send message for linkdriver areas
b76: 0 ; start of secondary interrupt chain
b1: 0 ; 66: current process
b2: b2 ; time slice queue head: next process
b2 ; last process
b3: 0-0-0 ; 72: name table start
b4: 0-0-0 ; 74: first device in name table
b5: 0-0-0 ; 76: first area in name table
b6: 0-0-0 ; 78: first internal in name table
b7: 0-0-0 ; 80: name table end
b8: b8 ; mess buf pool queue head: next buf
b8 ; last buf
0-0-0 ; 86: first byte of mess buf pool area
0-0-0 ; 88: last byte of mess buf pool area
a6 ; 90: size of message buffer
b22: 0-0-0 ; 92: first drum chain in name table
b23: 0-0-0 ; 94: first disc chain in name table
b24: 0-0-0 ; 96: chain end in name table
b25: 0 ; 98: main cat chain table
0-0-0 ;(100) not used ???
b10: a85 ; maximum time slice
b11: 0 ;104: time slice (of current process)
0 ;106: zero (earlier: micro seconds)
b13: 0 , 0 ;108:110: time (unit of 0.1 milli seconds)
b14: 0 ; last sensed clock value
0 ; (not used)
b12: 0-0-0 ;116: number of storage bytes
a111<12 + a109 ;118: min global key, min aux cat key ?????
b15: 0 , 0 ; clockchange, after set clock:
; newtime - oldtime
b26 = b5 ; use area processes as pseudo processes
b55: 0 ; interrupt addr for cpu1
b57: 0 ; cur proc(cpu0) (when b1 is cur proc(cpu1))
b58: 0 ; relative addr of curr proc at cpu1
b56: 0 ; current process (cpu(i)) i=1,...,last cpu
b105: 0 ; master process description addr
b106: 0 ; proc descr addr(systrm)
b107: 0 ; - - - (sysrec)
b108: 0 ; - - - (sysdma)
b109: 0 ; computer number (this computer)
; definition of general registers in rc8000
b90 = 8.14 * 2 ; ilevc : interrupt level limit copy
b91 = 8.15 * 2 ; inf : current interrupt stack element address
b92 = 8.17 * 2 ; size : top available core address
b93 = 8.20 * 2 ; montop : 1 < 11 - top monitor procedure number
b94 = 8.62 * 2 ; clock
b95 = 8.57 * 2 ; ir : used to clear selected bits in interrupt reg
b97 = 8.60 * 2 ; dswr : data swithes
b98 = 8.61 * 2 ; regsel : register swithes
b99 = 8.60 * 2 ; display
;
; definition of interrupt stack.
; parameters are relative to base of stack element (i.e. 1,3,5,..)
b.j0
j0=-1 , j0=j0+2 ; base of stack element
a326=j0 , j0=j0+2 ; regdump
a327=j0 , j0=j0+2 ; exception routine
a328=j0 , j0=j0+2 ; escape routine
a329=j0 , j0=j0+2 ; monitor call entry
a330=j0 , j0=j0+2 ; external interrupt entry
a331=j0 , j0=j0+2 ; interrupt limits, disabled/enabled
a325=j0-a326 ; size of interrupt stack element
e.
; elementary link-procedures:
; procedure remove(elem);
; comment: removes a given element from its queue and leaves the element linked to itself.
; call: w2=elem, w3=link
; exit: w0, w1, w2=unchanged, w3=next(elem)
; return address: link
b. i1 w.
d5: rs. w3 i0. ; save return;
rl w3 x2 ; w3 := next(elem);
rx w2 x2+2 ; w2 := prev(elem); prev(elem) := elem;
rs w3 x2 ; next(w2) := next(elem);
rx w2 x3+2 ; w2 := elem; prev(next(elem)) := old prev(elem);
rs w2 x2 ; next(elem) := elem;
jl. (i0.) ; return;
; procedure link(head, elem);
; comment: links the element to the end of the queue
; call: w1=head, w2=elem, w3=link
; exit: w0, w1, w2=unchanged, w3=old last(head);
d6: rs. w3 i0. ; save return;
rl w3 x1+2 ; old last:=last(head);
rs w2 x1+2 ; last(head):=elem;
rs w2 x3+0 ; next(old last):=elem;
rs w1 x2+0 ; next(elem):=head;
rs w3 x2+2 ; last(elem):=old last;
jl. (i0.) ; return;
i0: 0 ; saved return: remove, link
e.
; procedure update time(slice);
; comment: senses the timer and updates current time slice and time;
;
; call: w3=link
; exit: w0=undef, w1=unchanged, w2=slice, w3=unchanged
; return address: link
b. i9 w.
d7: gg w2 b94 ;
al w0 x2 ; new value:=sense(timer);
ws. w2 b14. ; increase:=new value-clock;
rs. w0 b14. ; clock:=new value;
sh w2 -1 ; if increase<0 then
wa. w2 i9. ; increase:=increase+size of clock;
; comment: timer overflowed...;
al w0 x2 ;
wa. w2 b11. ; slice:=slice+increase;
rs. w2 b11. ;
wa. w0 b13.+2 ;
rs. w0 b13.+2 ; time low:=time low+increase;
sx 2.01 ;
jl. i8. ; if carry then
jl x3 ;
i8: al w0 1 ; time high:=time high+1;
wa. w0 b13. ;
rs. w0 b13. ;
jl x3 ; return;
i9: 1<16 ; increase when timer overflows;
; procedure remove internal(internal, proc state);
; comment: removes the internal process from the timer queue and sets its state
; after this a new current process is selected.
; call: w0=proc state, w1=cur, w3=link
; exit: w0, w1=undef, w2=cur+a16, w3=undef
; return address: link
d9: rs. w3 i0. ; save(return);
hs w0 x1+a13 ; state(cur):=proc state;
jl. w3 d7. ; update time(slice);
rs w2 x1+a35 ; quantum(cur):=slice;
dl. w3 b13.+2 ;
ds w3 x1+a39+2 ; start wait(cur):=time;
al w2 x1+a16 ;
rl. w3 i0. ;
jl. d5. ; remove(cur+a16);
; return;
i0: 0 ; saved return
; procedure link internal(proc);
; comment: links the internal process to the timer queue. the timer queue is kept as a
; sorted list, according to the priority. (the smaller the priority is, the better
; is the priority).
; if the time quantum is less than the maximum time slice, the process will be
; linked up in front of other processes with the same priority. otherwise in the
; rear (the time quamtum of the process is transferred to runtime(proc), except
; the amount which is already used of the next quantum).
; call: w1=proc, w3=link
; exit: w0, w1, w2, w3=undef
d10: bz w0 x1+a13 ; if state(proc) = running then
sn w0 a95 ;
jl x3 ; return;
rs. w3 i0. ; save(return);
al w0 a95 ;
hs w0 x1+a13 ; state(proc):=running;
al w2 x1+a16 ;
rl w3 x1+a301 ; priority:=priority(proc);
rl w1 x1+a35 ;
sl. w1 (b10.) ; if quantum(proc)>=max slice then
jl. i3. ; goto insert in rear;
al w3 x3-1 ; (code facility);
al. w1 b2. ; worse:=timer q head;
i1: rl w1 x1 ; next: worse:=next(worse);
sl w3 (x1-a16+a301) ; if priority(worse)<priority then
jl. i1. ; goto next;
i2: ; insert process:
jl. w3 d6. ; link(worse, proc+a16);
se. w3 b2. ; if proc is not linked as the front
jl. (i0.) ; internal then return;
rl. w1 b1. ;
jl. w3 d7. ; update time(slice);
rs w2 x1+a35 ; quantum(cur):=slice; (may actually be >= max slice);
sh. w2 (b10.) ; if old quantum <= max slice then
jl. (i0.) ; return;
; the following will take care of the round-robin time scheduling;
rl. w2 (b2.) ; proclink := second proc in timer queue;
jl. w3 d5. ; remove(proclink);
rl w3 x2-a16+a301; priority:=priority(proc); (as above)
rl w1 x2-a16+a35 ; quantum:=quantum(proc); (as above)
; the process has been in front of the queue for more than the max time slice.
; the run time should be updated with all the quantum, but this would give the process a
; complete time slice next time. instead the used quantum is split in two parts:
; the amount by which it exceeds a multiplum of the max slice, and the rest. these parts
; are the increase in runtime and the new quantum.
; finally the process is inserted in the rear of the timer queue, according to priority.
i3: al w0 a85-1 ; w0 := mask for extracting new quantum;
la w0 2 ; quantum(proc) := quantum(proc) extract slice;
rs w0 x2-a16+a35;
ws w1 0 ;
al w0 0 ;
aa w1 x2-a16+a36+2; add the remaining part of quantum to
ds w1 x2-a16+a36+2; runtime(proc);
; at this point there is at least one process in the timer queue,
; i.e. either the dummy process or a 'better' process
; the following is intended for skipping quickly the dummy process:
rl. w1 b2.+2 ; worse := rear of timer queue; (normally dummy process);
sl w3 (x1-a16+a301); if priority >= priority(worse) then
jl. i5. ; goto found; (only in case of inserting dummy process)
al w3 x3+1 ; (code facility)
i4: rl w1 x1+2 ; next: worse:=last(worse);
sn. w1 b2. ; if worse<>timer q head and
jl. i5. ;
sh w3 (x1-a16+a301) ; priority(worse)>priority then
jl. i4. ; goto next;
; notice: the loop went one step to far . . .;
i5: rl w1 x1 ; now w1 has been repaired;
jl. i2. ; goto insert proc;
e.
; dummy internal process:
d50:; start eksekvering
b. i10 w.
al. w1 e12. ;
al. w2 b2. ;
ds. w2 e3. ; init dummy1
al. w1 b2. ;
al. w2 e2. ;
ds. w2 e13. ; init dummy2
al. w1 e2. ;
al. w2 e12. ;
ds. w2 b2.+2 ; init b2, b2+2
jl. w3 d57. ;
rl. w1 b2. ;
al. w2 e42. ;
jl. w3 d6. ; link sss
jl. w3 d57. ;
rl. w1 b2. ;
al. w2 e22. ; link ddd
jl. w3 d6. ;
jl. w3 d57. ;
i5: jl. w3 h25.-2 ; input char
sh w2 31 ;
jl. i5. ;
al w2 x2-97 ;
sh w2 3 ; if char<>a,b,c,d then
sh w2 -1 ;
jl. i10. ; stop
al. w1 e22. ; s-proc
sz w2 2.10 ;
al. w1 e42. ; d-proc
sz w2 2.01 ;
jl. i6. ; insert
jl. w3 d53. ; remove
jl. w3 d57. ;
jl. i5. ; next char
i6: jl. w3 d54. ; insert
jl. w3 d57. ;
jl. i5. ; next char
i10: jl. w3 d59.
al w2 0 ;
jl. h7. ; stop
e.
d59: b. i10 w.
rs. w3 i3. ;
rl. w1 i8. ; segment
rl. w2 e99. ;
sh w1 -1 ;
ac w1 x2 ;
wa w1 4 ; then add segment
rs. w1 i8. ;
al. w1 b65.-4 ;
ls w2 9 ;
al w2 x2-2 ;
wa w2 2 ;
ds. w2 i7. ; first and last addr
al. w3 i9. ;
jd 1<11+52;
jd 1<11+8 ;
al. w1 i5. ;
jd 1<11+16; output
al. w1 i10. ;
jd 1<11+18;
jl. (i3.) ; return
i3: 0
i5: 5<12 ;
i6: 0
i7: 0
i8: -3,0,r.5
i9: <:kklp5:>,0,0,0,0,0;
i10: 0,r.8
e.
d53:; test and remove
b. i5 w.
sn w1 (x1) ;
jl x3 ; return
ds. w1 i1. ;
ds. w3 i3. ;
al w1 x1-a16 ; proc addr
al w0 a103 ; state=wait for answer
jl. w3 d9. ; remove
rl. w1 b2. ;
al w1 x1-a16 ;
rs. w1 b1. ; insert curr
al w0 a95 ;
rs w0 x1+a13 ; running
dl. w1 i1. ;
dl. w3 i3. ;
jl x3 ;
i0:0,i1:0,i2:0,i3:0
e.
d54:; test and insert
b. i5 w.
sn. w1 (b2.) ;
jl x3 ; return
ds. w1 i1. ;
ds. w3 i3. ;
al w1 x1-a16 ; proc addr
rs. w1 b1. ;
jl. w3 d10. ; insert
dl. w1 i1. ;
dl. w3 i3. ;
jl x3 ;
i0:0,i1:0,i2:0,i3:0
e.
d55: ; print state priority time quantum
b. i5 w.
ds. w1 i1. ;
ds. w3 i3. ;
wa. w2 b25. ;
rl w2 x2 ;
sn. w2 b2. ;
jl. i4. ;
al w2 x2-a16 ;
bz w0 x2+a13 ;
jl. w3 h32.-2 ;
1<23+32<12+8 ;
rl w0 x2+a301 ;
jl. w3 h32.-2 ;
1<23+32<12+8 ;
rl w0 x2+a35 ;
jl. w3 h32.-2 ;
1<23+32<12+8 ;
i4: al w2 10 ;
jl. w3 h26.-2 ;
dl. w1 i1. ;
dl. w3 i3. ;
jl x3
i0:0,i1:0,i2:0,i3:0
e.
d56: ; print addr
b. i3 w.
ds. w1 i1. ;
ds. w3 i3. ;
al w0 x1 ;
ws. w0 b25. ;
jl. w3 h32.-2 ;
1<23+32<12+6 ;
al w2 58 ;
jl. w3 h26.-2 ;
dl. w1 i1. ;
dl. w3 i3. ;
jl x3
i0:0,i1:0,i2:0,i3:0
e.
d57:; print proc chain
b. i5
w.
ds. w1 i1. ;
ds. w3 i3. ;
al. w0 i4. ;
jl. w3 h31.-2 ;
al. w1 b2. ;
i5: jl. w3 d56. ;
dl w2 x1+2 ;
ws. w1 b25. ; - fpbase
ws. w2 b25. ; - fpbase
jl. w3 d58. ;
wa. w1 b25. ;
jl. w3 d55. ; print state,prio,time-q
se. w1 b2. ;
jl. i5. ;
rl. w1 b1. ;
ws. w1 b25. ;
al w0 x1+a16 ;
jl. w3 h32.-2 ;
1<23+32<12+6
al w2 10 ;
jl. w3 h34.-2 ;
dl. w1 i1. ;
dl. w3 i3. ;
jl x3 ;
i0: 0
i1: 0
i2: 0
i3: 0
i4:<:<10><10>proc-addr next prev state priori time-q<10>:>
e.
d58:b.i3 w.
ds. w1 i1.
ds. w3 i3.
al w0 x1
jl. w3 h32.-2
1<23+32<12+8
al w0 x2
jl. w3 h32.-2
1<23+32<12+8
dl. w1 i1.
dl. w3 i3.
jl x3
i0:0
i1:0
i2:0
i3:0
e.
e0: 0,r.(:a186-a200:)>1 ; first of dummy1
2.000 000 000 001 ; cpu mask: only cpu(0) allowed
0 ; a48 lower base
0 ; a48 upper base
e1: 0 ; a10 kind
0,0,0,0 ; a11 name
0 ; stop count,state
0 ; a14 id-bit
0,0 ; a15 next event,last event
e2: 0 ; a16 next process
e3: 0 ; last process
0 ; a17 first address
0 ; a18 top address
0 ; a19,a20 buffer, area claims
0 ; a21,a22 internal claim, function mask
1<23 - 3 ; a301 priority = almost greatest integer
r.(:a27-a301:)>1
0 ; interrupt address
r.(:a170-a27:)>1
0 ; escape address
0 ; all params
r.(:a28-a171:)>1
; the following sequence will be executed in the registers,
; until a technical panel is mounted, and data-switches all zero:
gg w3 b97 ; test for panel:
se w3 0 ; if data-switches <> 0 then
jl 0 ; goto test for panel;
jl. 0 ; (i.e. when panel and dswr=0: an exception will occur here)
r.(:a32-a31:)>1
1<23 ; status
r.(:a33-a32:)>1
0 ; ic
r.(:a181-a33:)>1
8 ; cpa
0 ; base
8 ; lower write limit
2047<12 ; upper write limit
b54 ;+0<12 ; interrupt levels
r.(:a302-a185:)>1
0 ; save area address
r.(:a303-a302:)>1 ; (fill up for save area, used during upstart)
e9: ; top of dummy process
; dummy2 internal process:
e10: 0,r.(:a186-a200:)>1 ; first of dummy2
2.000 000 000 010 ; cpu mask: only cpu(1) allowed
0 ; a48 lower base
0 ; a48 upper base
e11: 0 ; a10 kind
0,0,0,0 ; a11 name
0 ; stop count,state
0 ; a14 id-bit
0,0 ; a15 next event,last event
e12: 0 ; a16 next process
e13: 0 ; last process
0 ; a17 first address
0 ; a18 top address
0 ; a19,a20 buffer, area claims
0 ; a21,a22 internal claim, function mask
1<23 - 2 ; a301 priority = almost greatest integer
r.(:a27-a301:)>1
0 ; interrupt address
r.(:a170-a27:)>1
0 ; escape address
0 ; all params
r.(:a28-a171:)>1
; the following sequence will be executed in the registers,
; until a technical panel is mounted, and data-switches all zero:
gg w3 b97 ; test for panel:
se w3 0 ; if data-switches <> 0 then
jl 0 ; goto test for panel;
jl. 0 ; (i.e. when panel and dswr=0: an exception will occur here)
r.(:a32-a31:)>1
1<23 ; status
r.(:a33-a32:)>1
0 ; ic
r.(:a181-a33:)>1
8 ; cpa
0 ; base
8 ; lower write limit
2047<12 ; upper write limit
b54 ;+0<12 ; interrupt levels
r.(:a302-a185:)>1
0 ; save area address
r.(:a303-a302:)>1 ; (fill up for save area, used during upstart)
e19: ; top of dummy process
e20: 0,r.(:a186-a200:)>1 ; first of s-proc
2.000 000 000 001 ; cpu mask: only cpu(0) allowed
0 ; a48 lower base
0 ; a48 upper base
e21: 0 ; a10 kind
<:sss:>,0,0,0 ; a11 name
a95 ; stop count,state
0 ; a14 id-bit
0,0 ; a15 next event,last event
e22: 0 ; a16 next process
e23: 0 ; last process
0 ; a17 first address
0 ; a18 top address
0 ; a19,a20 buffer, area claims
0 ; a21,a22 internal claim, function mask
0 ; a301 priority = almost greatest integer
r.(:a27-a301:)>1
0 ; interrupt address
r.(:a170-a27:)>1
0 ; escape address
0 ; all params
r.(:a28-a171:)>1
; the following sequence will be executed in the registers,
; until a technical panel is mounted, and data-switches all zero:
gg w3 b97 ; test for panel:
se w3 0 ; if data-switches <> 0 then
jl 0 ; goto test for panel;
jl. 0 ; (i.e. when panel and dswr=0: an exception will occur here)
r.(:a32-a31:)>1
1<23 ; status
r.(:a33-a32:)>1
0 ; ic
r.(:a181-a33:)>1
8 ; cpa
0 ; base
8 ; lower write limit
2047<12 ; upper write limit
b54 ;+0<12 ; interrupt levels
r.(:a302-a185:)>1
0 ; save area address
r.(:a303-a302:)>1 ; (fill up for save area, used during upstart)
e29: ; top of s-proc process
e40: 0,r.(:a186-a200:)>1 ; first of driverproc
2.000 000 000 001 ; cpu mask: only cpu(1) allowed
0 ; a48 lower base
0 ; a48 upper base
e41: 0 ; a10 kind
<:ddd:>,0,0,0 ; a11 name
a95 ; stop count,state
0 ; a14 id-bit
0,0 ; a15 next event,last event
e42: 0 ; a16 next process
e43: 0 ; last process
0 ; a17 first address
0 ; a18 top address
0 ; a19,a20 buffer, area claims
0 ; a21,a22 internal claim, function mask
-1 ; a301 priority = almost greatest integer
r.(:a27-a301:)>1
0 ; interrupt address
r.(:a170-a27:)>1
0 ; escape address
0 ; all params
r.(:a28-a171:)>1
; the following sequence will be executed in the registers,
; until a technical panel is mounted, and data-switches all zero:
gg w3 b97 ; test for panel:
se w3 0 ; if data-switches <> 0 then
jl 0 ; goto test for panel;
jl. 0 ; (i.e. when panel and dswr=0: an exception will occur here)
r.(:a32-a31:)>1
1<23 ; status
r.(:a33-a32:)>1
0 ; ic
r.(:a181-a33:)>1
8 ; cpa
0 ; base
8 ; lower write limit
2047<12 ; upper write limit
b54 ;+0<12 ; interrupt levels
r.(:a302-a185:)>1
0 ; save area address
r.(:a303-a302:)>1 ; (fill up for save area, used during upstart)
e49: ; top of dummy process
e99:(:(:e99-b65+4:)>9+1:)
e.
e.
▶EOF◀