DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦6c7344aee⟧ TextFile

    Length: 31488 (0x7b00)
    Types: TextFile
    Names: »kkmonsimt«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »kkmonsimt« 

TextFile

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