|
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: 21504 (0x5400) Types: TextFile Names: »monmaster«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦80d78256e⟧ »kkmon4filer« └─⟦this⟧
\f m. monmaster - hcmasterprocess b.i30 w. i0=80 12 30, 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. s. c120,d70 w. b127=k,c70,k=k-2 ; c101=k ; start of rhmaster mirror 0,r.1 c102 =k c105=k ; start of hcdriver mirror 0,r.1 c106=k c110=k ; start of hcdriver p.<:rhdr:> c111=k c115=k ; start of hcmaster p.<:hcmt:> \f b. i24,n20 w. ; table of preoccupied claims: ; mess buf area internal n0=0 , n1=0 , n2=1 ; proc func n3=6 , n4=0 , n5=1 ; std driver ; rhmaster mirror ; hcdriver mirror n6=20 , n7=0 , n8=1 ; rhdriver n9=a5-n0-n3-n6-24, n10=a4-n1-n4-n7 , n11=a3-n2-n5-n8-2 ; hcmaster i10: rs. w3 i12. ; save return to autoloader; ; process description for process functions: ; ; rel address contents rl w1 (b6) ; proc := first internal; jl. w2 i18. ; init description; a48 , a107 ; interval low a49 , a108 ; - high a11 , 0 ; name 0 : zero a11+2 , <:pro:> ; name 2-6: <:procfunc> a11+4 , <:cfu:> ; a11+6 , <:nc:> ; a17 , b60-b60+8 ; first address a18 , b61 ; top address a301 , 0 ; priority a26 , a89 ; interrupt mask a27 , b62 ; user exception address a170 , 0 ; user escape address a32 , 0 ; status = not monitor mode a33 , b63 ; ic = waiting point a182 , 0 ; base = no relocation a183 , 8 ; lower write limit = first core ;*** a184 , core size ; top write limit: special a185 , 6<12+b54 ; interrupt levels a42 , a107 ; catalog base low a43 , a108 ; - - high a44-2 , a107 ; max interval low a44 , a108 ; - - high a45-2 , a107 ; std - low a45 , a108 ; - - high a302 , 0 ; save area address a10 , 0;(end of words) ; kind = 0 a12 , 0 ; stop count a13 , a102 ; state = waiting for message a19 , n0 ; buf claim a20 , n1 ; area claim a22 , 8.7777 ; function mask a10 , 0;(end of bytes) ; (kind = 0) rs w0 x1+a184 ; top write limit(proc func) := core size; ; process description for std driver al w1 x1 +a4 ; proc := next internal; jl. w2 i18. ; init description; a48 , a107 ; interval low a49 , a108-1 ; - high a11 , <:dri:> ; name = <:driver proc:> a11+2 , <:ver:> ; a11+4 , <:pro:> ; a11+6 , <:c:> ; a17 , 8 ; first address a18 , b60 ; top address a301 , -1 ; priority a26 , a89 ; interrupt mask a27 , b87 ; user exception address a170 , 0 ; user escape address a171 , b60 ; initial cpa a172 , 0 ; - base a173 , 8 ; - lower write limit a174 , b60 ; - upper - - a175 , 6<12+b54 ; - interrupt levels a32 , 0 ; status = not monitor mode a33 , b85 ; ic = central waiting point a34 , 0 ; parent = undef a181 , b60 ; current cpa a182 , 0 ; - base a183 , 8 ; - lower write limit a184 , b60 ; - 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 , b86 ; save area address a10 , 0 ;(end of words) ; kind = 0 a12 , 0 ; stopcount a13 , a95 ; state = running a19 , n3 ; buf claim a20 , n4 ; area claim a21 , n5-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 rhdriver al w1 x1 +a4 ; proc := next internal; jl. w2 i18. ; init description; a48 , a107 ; interval low a49 , a108-1 ; - high a11 , <:rhm:> ; name = rhdriver a11+2 , <:ast:> ; a11+4 , <:erm:> ; a11+6 , <:i:> ; 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 , c101 ; - lower write limit a174 , c102 ; - upper - - a175 , b54<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 , c101 ; - lower write limit a184 , c102 ; - upper - - a185 , b54<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 , a99 ; state = running a19 , 0 ; buf claim a20 , 0 ; area claim a21 , 0 ; 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 rhdriver mirror al w1 x1 +a4 ; proc := next internal; jl. w2 i18. ; init description; a48 , a107 ; interval low a49 , a108-1 ; - high a11 , <:rhd:> ; name = rhdriver a11+2 , <:riv:> ; a11+4 , <:erm:> ; a11+6 , <:i:> ; a17 , c105 ; first address a18 , c106 ; top address a301 , 0 ; priority a26 , a89 ; interrupt mask a27 , 0 ; user exception address a170 , 0 ; user escape address a171 , c106 ; initial cpa a172 , 0 ; - base a173 , c105 ; - lower write limit a174 , c106 ; - upper - - a175 , b54<12+b54 ; - interrupt levels a32 , 0 ; status = not monitor mode a33 , c105 ; ic = central waiting point a34 , 0 ; parent = undef a181 , c106 ; current cpa a182 , 0 ; - base a183 , c105 ; - lower write limit a184 , c106 ; - upper - - a185 , b54<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 , a99 ; state = running a19 , 0 ; buf claim a20 , 0 ; area claim a21 , 0 ; 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 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 a11+2 , <:riv:> ; a11+4 , <:er:> ; a11+6 , 0 ; a17 , c110 ; first address a18 , c111 ; top address a301 , 0 ; priority a26 , a89 ; interrupt mask a27 , 0 ; user exception address a170 , 0 ; user escape address a171 , c111 ; initial cpa a172 , 0 ; - base a173 , 8 ; - lower write limit a174 , c111 ; - upper - - a175 , 6<12+b54 ; - interrupt levels a32 , 0 ; status = not monitor mode a33 , c110 ; ic = central waiting point a34 , 0 ; parent = undef a181 , c111 ; current cpa a182 , 0 ; - base a183 , 8 ; - lower write limit a184 , c111 ; - 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 , n6 ; buf claim a20 , n7 ; area claim a21 , n8-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 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 , c115 ; first address ;*** a18 , core size ; top address a301 , 0 ; priority a26 , a89 ; interrupt mask a27 , c115 ; 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 , c115 ; 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 , n9 ; buf claim a20 , n10 ; area claim a21 , n11-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.rhdriver); al w2 x2-(:a4*3:) ; jl w3 b36 ; link(timer q,internal.driver proc) jl. w3 i14. ; take control b3 ; (first name table entry, b6 ; first internal, b29+1*a4 ; driver proc); jl. w3 i14. ; take control b76 ; (first secondary interrupt, k ; irrellevant, b29+1*a4 ; driver proc); jl (10) ; goto start ; take control ; comment: searches through the specified part of name table and initializes driver ; proc address. i14: rl w1 (x3) ; entry := param 1; i15: am (x3 +2) ; next: sn w1 (0) ; if entry = top entry (i.e. param 2) jl x3 +6 ; then return; rl w2 x1 +0 ; proc := nametable(entry); sn w2 0 ; if end of table then jl x3 +6 ; then return; rl w0 x3 +4 ; if driverproc(proc) = 0 then rx w0 x2+a250 ; driverproc(proc) := param 3; se w0 0 ; rs w0 x2+a250 ; al w1 x1 +2 ; entry := entry + 2; jl. i15. ; goto next; ; procedure init description ; call: w1 = process description address, w2 = init table ; exit: w0 = core size, w1 = unchanged i18: dl w0 x2 +2 ; move words: al w2 x2 +4 ; move contents to outpointed am x1 ; relatives in process description rs w0 x3 ; se w3 a10 ; until kind is moved; jl. i18. ; i19: dl w0 x2 +2 ; move bytes: al w2 x2 +4 ; move contents to outpointed am x1 ; relatives in process description hs w0 x3 ; se w3 a10 ; until kind is moved; jl. i19. ; rl w0 b12 ; jl x2 ; i12:0 ; after loading: jl. i10. ; goto initialize segment; c70= k-b127 + 2 k=i10 ; e. ; i. e. ; end of masterproc \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); ; 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. ; ; 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; 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. ▶EOF◀