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

⟦8c53a2c15⟧ TextFile

    Length: 19200 (0x4b00)
    Types: TextFile
    Names: »kkmonret4s«

Derivation

└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦80d78256e⟧ »kkmon4filer« 
            └─⟦this⟧ 

TextFile

(
message monchange release 7.0 to 7.14
clear temp mondef moncentral monprocs,
montabinit monprocfnc1 monprocfnc2 mons1 mons2,
mdef mcentral mprocs,
mtabinit mprocfnc1 mprocfnc2 ms1 ms2
contract entry.kkmon4filer mondef moncentral monprocs,
montabinit monprocfnc1 monprocfnc2 mons1 mons2

skip 36.1
c=copy mess.no 1
mdef=assign mondef

skip 36.1
c=copy mess.no 1
mcentral=set 1 disc3
mcentral=edit moncentral

skip 36.1
c=copy mess.no 1
mprocs=set 1 disc3
mprocs=edit monprocs

skip 36.1
c=copy mess.no 1
mtabinit=set 1 disc3
mtabinit=edit montabinit

skip 36.1
c=copy mess.no 1
mprocfnc1=set 1 disc3
mprocfnc1=edit monprocfnc1

skip 36.1
c=copy mess.no 1
mprocfnc2=set 1 disc3
mprocfnc2=edit monprocfnc2

skip 36.1
c=copy mess.no 1
ms1=set 1 disc3
ms1=edit mons1

skip 36.1
c=copy mess.no 1
ms2=set 1 disc3
ms2=edit mons2

head cpu
end)



$def
;********************
f


$central
;********************
l./c6:/,l-4,d./ria179/,d./e./,i/
b. w.
c6:  al  w3     1
     jl         -1  ; hard stop
;
; power up
;
c25: jl. w3     d37. ; init cpu1
     al  w3     b49 ; power up element
     gp  w3     b91 ;
     ri         a179; goto start proc
e.
;
/,l./d35:/,g 2/.(2)/ x3/,f

$procs
;********************
l./e50  /,r/e50/c99/,
l./e58:/,l1,i/
m. -------------------- 
c.-1
/,l./i55:/,l./e./,l1,i/
z.,m. ++++++++++++++++++++
/,l./end of service for cpu(i)/,
l./segment3/,l./b127/,l1,i/
g2=g3
/,l./e3:/,l./g2;8:/,r/g2/h8/,
l./h72;72:/,i/
m. --------------------
c.-1
/,l./h3=g6/,i/
z.,m. ++++++++++++++++++++
/,l./78clockdriver/,l./remoterprocess/,i/
h8:              ; driver
                 ; w0 : undef
                 ; w1 = sender
                 ; w2 = buf
                 ; w3 = proc
p.<:ttydriv:>

m. --------------------
c.-1
/,f
$tabinit
;*****************
i/
z.,m. ++++++++++++++++++++
/,l./f0:/,l./h22/,i/
m. ------------------
c.-1
/,l./h24/,i/
z.,m. ++++++++++++++++++++
/,l./b.i10/,d./j6:/,i/
b. w.
h1:  0,r.a180>1     ; reg dump
h0:  jl.    0       ; dummy loop
/,l./dummyexternal/,i/
m. --------------------
c.-1
/,l./h23:/,l2,i/
z.,m. ++++++++++++++++++++
/,l./segment5:/,l./;get n/,d./gpw1/,i/
     al  w1     1024;
     ls  w1     6   ; core size is initiality set to 32 K words
/,l./,b89/,r/b89/  0/,l./a66/,r/a66/  0/,l./b86/,r/b86/  0/,f
$procfnc1
;********************
l./b60:/,l./d8:/,l-1,i/
m. -------------------- 
w.
c.-1
/,l./d12:/,l-2,i/
z.,m. ++++++++++++++++++++
/,l./;pro/,i/
m. --------------------
c. -1

/,l./e15:/,l./;pr/,i/
z.,m. ++++++++++++++++++++
/,l./e24:/,l./g3:/,l./e.;/,l1,i/
m. -------------------- 
c.-1
/,l./g4:/,l./;the/,i/
z.,m. ++++++++++++++++++++
/,l./h1:/,l2,i/
m. --------------------
c.-1
/,l./e42:/,l./h0:/,l2,i/
z.,m. ++++++++++++++++++++
/,l./e44:/,l./e.;/,l1,i/
m. --------------------
c.-1
/,l./e48:/,l./h0:/,i/
z.,m. ++++++++++++++++++++
b. g20,h10 w.
/,l./g20:/,l./e.;/,l1,i/
m. --------------------
c.-1

/,l./e51:/,l./jlx2/,l1,i/
z.,m. ++++++++++++++++++++
/,l./n50:/,l./j0:/,l./e1./,i/
m. --------------------
c. -1
/,l./e7./,l1,i/
z.,m. ++++++++++++++++++++
/,f

$procfnc2
;****************
l./;btj1977/,i/
w.
m. -------------------- 
c.-1
/,l./m6:/,l2,i/
z.,m. ++++++++++++++++++++
/,l./jl.n0./,l1,i/
m. --------------------
c.-1

/,l./m11:/,l./;testname/,i/
z.,m. ++++++++++++++++++++
/,l./e24=k-2/,l1,i/
m. --------------------
c. -1
/,l./;testnew/,i/
z.,m. ++++++++++++++++++++
/,l./e45./,i/
m. --------------------
c. -1
/,l./b45/,l1,i/
z.,m. ++++++++++++++++++++
/,l./g8:/,l1,i/
m. --------------------
c. -1
/,l./n2./,i/
z.,m. ++++++++++++++++++++
/,l./;test/,i/
m. --------------------
c. -1
/,l./;subp/,i/
z.,m. ++++++++++++++++++++
/,l./e48./,i/
m. --------------------
c. -1
/,l./n6./,l1,i/
z.,m. ++++++++++++++++++++
/,l./d17:/,l./e./,l1,i/
m. -------------------- 
c.-1
/,l./d16:/,i/
z.,m. ++++++++++++++++++++
/,l./d15:/,l1,i/
m. --------------------
c.-1
/,l./m32:/,l./g8:/,l./;if not bs-dev/,i/
z.,m. ++++++++++++++++++++
/,l./n5=/,l1,i/
m. --------------------
c.-1
/,l./d21:/,i/
z.,m. ++++++++++++++++++++
d20: d2
/,l./d34:/,l1,i/
m. --------------------
c.-1

/,l./m64:/,l./;set/,i/
z.,m. ++++++++++++++++++++
/,l./;doc/,i/
m. --------------------
c.-1
/,l./m100:/,l./jl.e24./,l1,i/
z.,m. ++++++++++++++++++++
m101:
      jl.    e24.

m40:,m43:,m66:,m70:,m125:
m. --------------------
c.-1

/,l./m128/,l./;test/,i/
z.,m. ++++++++++++++++++++
/,l./m155:/,l./e25./,i/
m. --------------------
c. -1
/,l2,i/
z.,m. ++++++++++++++++++++
/,l./e25./,i/
m. --------------------
c. -1
/,l2,i/
z.,m. ++++++++++++++++++++
/,l./m00=m00/,i/
m. --------------------
c.-1
/,l./m155=m155/,i/
z.,m. ++++++++++++++++++++
m8=m8-n50,m13=m13-n50,m15=m15-n50,m16=m16-n50,m17=m17-n50
m34=m34-n50,m40=m40-n50,m43=m43-n50,m65=m65-n50
m66=m66-n50,m70=m70-n50,m101=m101-n50,m125=m125-n50,m149=m149-n50
m150=m150-n50,m151=m151-n50,m152=m152-n50,m153=m153-n50,m154=m154-n50
/,l./m260=/,i/
m. --------------------
c.-1
/,l./j0=/,i/
z., m. ++++++++++++++++++++
/,l./r7:/,l1,i/
h.
m. -------------------- 
c.-1

/,l./p46:/,l./;create per/,i/
z.,m. ++++++++++++++++++++
/,l./p35:/,l./;set/,i/
m. -------------------- 
c.-1

/,l./p39:/,l./m32;/,l1,i/
z.,m. ++++++++++++++++++++
/,l./p42:/,l./;pr/,i/
m. -------------------- 
c.-1

/,l./p44:/,l./n49:/,l./w./,i/
z.,m. ++++++++++++++++++++

n49:
h.
   r7. ,r7. ,r7. ,r7. ,r7. ,r7. ,r7. ,p27.,p28.,p29.
   p30.,p31.,p32.,r7. ,p34.,p35.,r7. ,r7. ,r7. ,r7. 
   p40.,r7. ,r7. ,r7. ,r7. ,r7. ,r7. ,r7. ,r7. ,r7. 
   r7. ,r7. ,r7. ,r7. ,r7. ,r7. ,r7. ,r7. ,r7. ,r7. 
   r7. ,r7. 
/,l./j5=/,l./;recordcatb/,i/
m. --------------------
c. -1
/,l./interruptadd/,i/
z.,m. ++++++++++++++++++++
/,l./e28:/,l-1,i/
m. --------------------
c.-1
/,l./g11:/,l./;def/,i/
z.,m. ++++++++++++++++++++
/,f
$s1
;********************
l./d90,c100/,r/c100/c110/,
f

$s2
;********************
l./first free addr/,l./jlw3b36/,l-2,i/

; process description for rhdriver

     al  w1  x1 +a4      ;    proc := next internal;
     jl. w2     i18.     ;    init description;

a48    , a107              ; interval low
a49    , a108-1            ;    -     high
a11    , <:rhd:>           ;  name = rhdriver
a12+2  , <:riv:>           ; 
a11+4  , <:er:>            ;
a11+6  ,                   ;
a17    , c101              ; first address
a18    , c102              ; top address
a301   ,  0                ; priority
a26    , a89               ; interrupt mask
a27    ,   0               ; user exception address
a170   , 0                 ; user escape address
a171   ,   c102            ; initial cpa
a172   , 0                 ;    -    base
a173   , 8                 ;    -    lower write limit
a174   , c102              ;    -    upper   -     -
a175   , 6<12+b54          ;   -    interrupt levels
a32    , 0                 ; status = not monitor mode
a33    , c101              ; ic = central waiting point
a34    , 0                 ; parent = undef
a181   , c102               ; current cpa
a182   , 0                 ;    -    base
a183   , 8                 ;    -    lower write limit
a184   , c102               ;    -    upper   -     -
a185   , 6<12+b54          ;    -    interrupt levels
a42    , a107              ; catalog base low
a43    , a108-1            ;    -     -   high
a44-2  , a107              ; max interval low
a44    , a108-1            ;  -     -     high
a45-2  , a107              ; std interval low
a45    , a108-1            ;  -     -     high
a302   ,   0               ; save area address

a10    , 0 ;(end of words) ; kind = 0

a12    , 0                 ; stopcount
a13    , a95               ; state = running
a19    , i3                ; buf claim
a20    , i4                ; area claim
a21    , i5-1              ; internal claim
a24    , 1<7               ; (protection register)
a25    , 0                 ; (protection key)
a22    , 8.7777            ; function mask

a10    , 0 ;(end of bytes) ; (kind = 0)
; process description for initial operating system, hcmaster

     al  w1  x1 +a4      ;    proc := second internal;
     jl. w2     i18.     ;    init description;

a48    , a107              ; interval low
a49    , a108              ;    -     high
a11    , <:hcm:>           ; name = <:hcmaster:>
a11+2  , <:ast:>           ;
a11+4  , <:er:>            ;
a11+6  , 0                 ;
a17    , c105              ; first address
;*** a18    , core size         ; top address
a301   , 0                 ; priority
a26    , a89               ; interrupt mask
a27    ,   0               ; user exception address
a170   , 0                 ; user escape address
;*** a171   , core size         ; initial cpa
a172   , 0                 ;    -    base
a173   , 8                 ;    -    lower write limit
;*** a174   , core size         ;    -    upper   -     -
a175   ,   6<12+b54       ;    -    interrupt levels
a32    , 0                 ; status = not monitor mode
a33    , c105              ; ic = start init
a34    , 0                 ; parent = undef
;*** a181   , core size         ; current cpa
a182   , 0                 ;    -    base
a183   , 8                 ;    -    lower write limit
;*** a184   , core size         ;    -    upper   -     -
a185   ,   6<12+b54        ;    -    interrupt levels
a42    , a107              ; catalog base low
a43    , a108-1            ;    -     -   high
a44-2  , a107              ; max interval low
a44    , a108-1            ;  -      -    high
a45-2  , a107              ; std interval low
a45    , a108-1            ;  -      -    high
a302   , 0                 ; save area address

a10    , 0;(end of words)  ; kind = 0

a12    , 0                 ; stopcount
a13    , a95               ; state = running
a19    , i6                ; buf claim
a20    , i7                ; area claim
a21    , i8-1              ; internal claim
a24    , 1<7               ; (protection register, for compatibility reasons)
a25    , 0                 ; (protection key, for compatibility reasons)
a22    , 8.7777            ; function mask

a10    , 0;(end of bytes)  ; (kind = 0)

     rs  w0  x1+a18      ;    top address(s) :=
     rs  w0  x1+a171     ;    initial cpa(s) :=
     rs  w0  x1+a174     ;    initial upper write limit(s) :=
     rs  w0  x1+a181     ;    current cpa(s) :=
     rs  w0  x1+a184     ;    current upper write limit(s) := core size;
     al  w2  x1+a16      ;
     rl  w1      b2      ;
     jl  w3     b36      ; link(timer q,internal.hcmaster)
     al  w2  x2 -a4      ; w2:=addr(internal.driver proc.timer q)
     jl  w3     b36      ; link(timer q, internal.driver proc);
/,l./e.;endofop/,i/
c101=k
; p.<:rhdr:>
c102=k
c105=k
; p.<hcmt:>
c106=k
/,l1,i/
\f



; segment 10
; rc 05.08.70 bjørn ø-thomsen
;
; this segment moves segment 2 - 9 in this way:
;
; segment 2 is moved to cell 8 and on, after which
; control is transferred to the last moved word with the
; following parameters:
;     w2 = top load address (= new address of last  moved 
;                              word + 2)
;     w3 = link
;
; after initializing itself, the program segment returns
; to this segment with:
;     w2 = load address of next segment
;
; the next segment will then be moved to cell(w2) and on,
; after which it is entered as described above.
;
; when initialize catalog (segment 9) is entered, the values
; of the two switches (writetext, medium) may be found in
; the words x3-4 and x3-2.
;
; segment 10 is entered from segment 1 in its last word
;   entry conditions:
;     w0,w1 = init catalog switches
;     w2    = start address of segment 2




s.   i10,  j10
w.
                j3.     ;   length of segment 10
j0:              0      ; init cat switch: writetext
j1:              0      ; init cat switch: medium


; return point from initializing of some segment

i0:  rl. w1     j2.     ; get load address;
i1:  wa  w1  x1+0       ; calculate top address:
     rx. w1     j2.     ;   change(old load address, top address);
     al  w1  x1+2       ;   skip segment length;

; now w1, w2 = old, new load address

; move segment:

     sh  w2  x1        ;   if new addr > old addr then
     jl.        i2.    ;     begin

     ds. w2     j5.    ;     save (old, new);
     ws  w2     2      ;     diff := new - old;
     sh  w2     i5     ;    (at least size of move loop);
     al  w2     i5     ;

     al. w1     j2.    ;     from := last of segment;
                       ; move to higher:
i4:  rl  w0  x1        ;     move word(from)
     am      x2        ;       to word(from + diff);
     rs  w0  x1        ;
     al  w1  x1-2      ;
     sn. w1     j0.    ;     if exactly all moveloop moved then
     jl.     x2+i4.    ;       goto the moved moveloop...

     sl. w1    (j4.)   ;     if not all moved then
     jl.        i4.    ;       goto move to higher;

     rl. w1     j4.    ;     old := old + diff;
     wa  w1     4      ;
     wa. w2     j2.    ;     top address := top address + diff;
     rs. w2     j2.    ;
     rl. w2     j5.    ;     restore(new);
                       ;     end;

i2:  rl  w0  x1+0       ;   move word from old
     rs  w0  x2+0       ;     to new address;
     al  w1  x1+2       ;   update old addr;
     al  w2  x2+2       ;   update new addr;
     se. w1    (j2.)    ;   if old addr <> top addr
     jl.        i2.     ;   then goto move segment;

; now the segment has been moved
; jump to the last moved word

     al. w3     i0.     ;   insert return;
     jl      x2-2       ;   goto word(top addr - 2);

     ;;+++++++++++++++++++++++++++++++++++++
     ;; init of timer
     ;;++++++++++++++++++++++++++++++++++++
     ;; entry i9.
     ;; return address in w2.
     ;; destroyed w1.
b.   c40  w.           ;


                       ; constants for timer initialisation.
                       ; cr = control reg. in timer (1 ,2 ,3 )
                       ; interupt disabled from timer by 0<6
c10: 1<7+0<6+000<3+0<2+0<1+0; cr 1 operate all timers
c11: 1<7+0<6<000<3+0<2+0<1+1; cr 1 preset all timers.
c20: 1<7+0<6+000<3+0<2+0<1+0; cr 2 select cr 3.
c21: 1<7+0<6+000<3+0<2+0<1+1; cr 2 select cr 1.
c30: 1<7+0<6+000<3+0<2+1<1+0; cr 3 no prescale.
c31: 1<7+0<6+000<3+0<2+1<1+1; cr 3 prescale.
                       ; device addrs for clock.
c0:  1<23+0<3+2.100    ;addrs for write cr 1 or 3.
                       ;         read nothing.

c1:  1<23+1<3+2.100    ; addrs write cr 2.
                       ; addrs read status reg..
c2:  1<23+2<3+2.100    ; addrs write most sgnf. byte
                       ;               buffer reg..
                       ; addrs read timer no 1 counter.
c3:  1<23+3<3+2.100    ; addrs write timer no 1 latches.
                       ; addrs read least sgnf. bytes
                       ;               buffer reg..
c4:  1<23+4<3+2.100    ; addrs write most sgnf. byte buffer
                       ;reg..
                       ; 
                       ; addrs read timer no 2 counter.
c5:  1<23+5<3+2.100    ; addrs write timer 2 latches.
                       ; read least sgnf. byte buffer reg..
c6:  1<23+6<3+2.100    ; addrs write most sgnf. byte buffer
                       ;reg..
                       ; addrs read timer 3 counter.
c7:  1<23+7<3+2.100    ; addrs write write timer no 3 latches.
                       ; addrs read least sgnf. byte buffer
                       ;reg..

c12: 10                ; most sgnf. byte to rtimer 0.
c14: 127               ; leats sgnf. byte to timer 1.
c22: 10                ; most sgnf. byte to timewr 2.
c24: 127               ; least sgnf. byte to timer 2.
c32: 0                 ; most sgnf. byte to timer 3.
c34: 49                ; least sgnf. byte to timer 3.



i9:                    ; init of timer.
     rs. w2  c29.      ; save return address.
     rl. w1  c21.      ; select control reg 1 as addrs 0.
     do. w1  (c1.)     ; write dev no 1.
     rl. w1  c11.      ; preset all timers.
     do. w1  (c0.)     ; write char dev. 0.
     rl. w1  c20.      ; select cr 3 ass addrs 0.
     do. w1  (c1.)     ; write char dev. 1.
     rl. w1  c30.      ; set cr 3 no prescale.
     do. w1  (c0.)     ; swrite  char dev. 0.
     rl. w1  c21.      ; select cr as1 as addrs 0.
     do. w1  (c1.)     ; write char dev. 1.
     rl. w1  c32.      ; load most sgnf. counter 
                       ; value  to timer bufffer.
     do. w1  (c6.)     ; write char dev. no 6.
     rl. w1  c34.      ; load least signif. byte to counter 3.
     do. w1  (c7.)     ; write char dev. no. 7.
     rl. w1  c22.      ; load most sgnf. byte to counter 2.
     do. w1  (c4.)     ; write char dev. 4.
     rl. w1  c24.      ; load least sgnf. byte to counter 3.
     do. w1  (c5.)     ; write char dev. no. 5.
     rl. w1  c12.      ; load most sgnf. byte to counter 1.
     do. w1  (c2.)     ; write char dev. no. 2.
     rl. w1  c14.      ; load least sgnf. byte to counter 1.
     do. w1  (c3.)     ; write char dev. no. 3.
     rl. w1  c10.      ; send cr 1 operate all timers
     do. w1  (c0.)     ; write char dev. no. 0.
     di. w1  (c1.)     ; data in char dev. 1.
     jl.     (c29.)    ; return from subroutine.
c29: 0                 ; return address.
e.                     ; end block init of timer.

; comment:  jump to last loaded word with
;           w2         = top load address
;           w3         = link
;           word(x3-4) = init cat switch, writetext
;           word(x3-2) = init cat switch, medium


; initialize segment 10

i3:  ds. w1     j1.     ;   save init cat switches
     rs. w2     j2.     ;   
c.-1

; get monitor mode and clear all interrupts

     gg  w3     b91    ;   w3 := inf;

     rl. w0     j6.    ;   w0 := monitor mode;
     al. w1     i6.    ;   w1 := new entry;
     al. w2     j7.    ;   w2 := regdump;

     rs  w2  x3+a326   ;   user regdump := regdump;
     rs  w0  x3-a325+a328+6; monitor status := monitor mode;
     rs  w1  x3-a325+a328+2; monitor call entry := new entry;
     jd         1<11+0 ;   call monitor;  i.e. enter below, in monitor mode;

i6:  al  w0     1      ; after monitor mode got:
     gp  w0     b91    ;   inf := 1;  i.e. prevent any response;

     al  w1     1<3    ;   device := 1;

i7:  am.       (j8.)   ; next device:
     do      x1+2      ;   reset device (device);
     al  w1  x1+1<3    ;   increase (device);
     sh  w1     255<3  ;   if device <= 255 then
     jl.        i7.    ;     goto next device;
z.
     jl.  w2    i9.    ;

     al  w2     8      ;   new load address := 8;
     jd.        i0.    ;   goto get load address;

j6:  1 < 23            ; monitor mode;
j7:  0, r. a180>1      ; regdump
j8:  1 < 23            ; device address bit
j4:  0                 ; saved old
j5:  0                 ; saved new
i5 = k - j0            ; aproximate size of moveloop

j2:              0      ;   top address
     jl.        i3.     ;   goto initialize segment 10
j3:                     ; top address of segment 10:

e.   ;  end segment 10
i.

; last segment

s.w.
     0   ; last segment empty

e. ; end of last segment
m.                end of monitor
e.  ;  end of global block

e.
/,f
▶EOF◀