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

⟦70e1fe4df⟧ TextFile

    Length: 14592 (0x3900)
    Types: TextFile
    Names: »edlc«

Derivation

└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦this⟧ »edlc« 
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »edlc« 

TextFile

;edit of tpascallib 80 07 21 13 30
;insert description
tnpascallib=set 10
tnpascallib=edit tpascallib
l./version/,r/8/8 hcø 1
;Anders Lindgård
;hcø 80 07 17 13 30 0/,
l./s.s10w./,i/
;
;     12    description         page 8
;           initproc
;           reserveproc
;           releaseproc
;           include 
;           exclude
;           sendmessage
;           waitanswer
;           waitmessage
;           sendanswer
;           waitevent
;           getevent
;           testevent
;           createinternal
;           startinternal
;           stopinternal
;           modifyinternal
;           removeprocess
;           regretmessage
;          (fpproc)
;           connectcuri
;           unstackcuri
;           moncall
;           monitormode
;           cpumask
;           systemaddress
;           sendfurther
/,
l./;segment5-6/,
l./replace(<prog/,
l./a10/,r/10/20/,
l1,i/

a8: 2<12+10           ;sep=NL, l=10
    <:i:>,0,0,0       ;program name= i
    4<12+10           ;sep=SP, l=10
a9: 0,r.4             ; file name
    2<12+2            ;sep=NL, l=2
   -4<12+0            ;sep='end', l=0
a10: 0,0              ; first of process, command stack
a4: 0,r.10            ; tail
/,
l./h51/,d4,
l./jl.a5./,
l1,i/

    ds. w3     a10.+2 ; save first of process, command pointer
    al. w3     a2.    ; w3:=name address
    al. w1     a4.    ; w1:=tail address
;ks -1501
    jd         1<11+42; lookup entry
ks-1601
    se  w0     0      ; if res<>0 then
    jl.        c1.    ; goto error lookup
    dl. w3     a10.+2 ; w3:=first of proc, w2:=command
    bz  w0     x1+16  ; w0:=content
;ks -1502
    sn  w0     2      ; if program then
    jl.        a11.   ; goto pascal
    se  w0      0     ; if not text file
    jl.         c2.   ; goto error 
    dl. w1     a2.+2  ; move name
    ds. w1     a9.+2  ;
    dl. w1     a2.+6  ;
    ds. w1     a9.+6
    al. w1     a10.   ; w1:=top of prog stack
a12:al  w2     x2-2   ; rep:
    al  w1     x1-2   ; decrease pointers
    rl  w0  x1        ;
    rs  w0  x2        ; move one word
    se. w1  a8.       ; if w1<> start of prog stack
    jl.        a12.   ; then goto rep
;ks -1503
    rs  w2  x3+h8     ; cur command :=command pointer
    al  w2  0         ; ok:=true, warning:=false;
    jl      x3+h7     ; goto fp-endprogram

a11:rl  w2  x3+h51    ;
    rs. w2     a1.    ; move fp-mode bits to program
    sz  w2     2.1    ; remove list-bit
    al  w2  x2-2.1    ;
    rs  w2  x3+h51    ;
    rl. w2     a10.   ;
;ks-1504
/,
l./40:createentry/,d3,
i/
;            all functions>0 are alllowed. Sensible or not.
/,l./slw240/,r/sl/sh/,r/40/ 0/,
l1,d,
l./;segment7-8/,
l./writestring/,
l./b.a5w./,r/5/8/,
l./a5:/,l1,i/
/,
l./rsw0x2/,
i/
;  correction for writing datastructures outside process
     sz  w3    255    ;if last char= <0> then
m.  **** hcæ124æ change in writestring ****
/,l./dl.w1a0.+2/,i/
a7:                   ; write:
/,
l./rsw0x2/,i/
     rl. w3      a3.  ; w3:=switch
     sz  w3      255  ; if outside then skip
/,
l./6146/,d,i@
\f


; segment 12
; monitor code procedures
; call parameters :
;  w0 - see each procedure
;  w1 - see each procedure
;  w2 - abs add of proc table entry
;  w3 - return - 2
;
;
; the organization of the code
;
;  description         (i1)  8<12 + 0
;  initproc            (i2)  8<12 + 2
;  reserveproc         (i3)  8<12 + 4
;  releaseproc         (i4)  8<12 + 6
;  include             (i5)  8<12 + 8
;  exclude             (i6)  8<12 + 10
;  send message        (i9)  8<12 + 12
;  wait answer         (i10) 8<12 + 14
;  wait message        (i11) 8<12 + 16
;  send answer         (i12) 8<12 + 18
;  wait event          (i13) 8<12 + 20
;  get event           (i14) 8<12 + 22
;  test event          (i15) 8<12 + 24
;  create internal     (i16) 8<12 + 26
;  start  internal     (i17) 8<12 + 28
;  stop   internal     (i18) 8<12 + 30
;  modify internal     (i19) 8<12 + 32
;  remove process      (i20) 8<12 + 34
;  regret message      (i21) 8<12 + 36
;  (fpproc)            (i22) 8<12 + 38
;  connectcuri         (i23) 8<12 + 40
;  unstackcuri         (i24) 8<12 + 42
;  mon call            (i25) 8<12 + 44
;  monitormode         (i26) 8<12 + 46
;  cpumask             (i27) 8<12 + 48
;  systemaddress       (i28) 8<12 + 50
;  sendfurther         (i29) 8<12 + 52

;  error return
;
; b-variables are global variables for all procedures
; c-variables are error returns
;
\f


b. b20, c10, i35 w.
m.             begin hcæ124æ code procedures
0,r.(:512*12+2-k:)>1

     jl.        i0.    ;+0
     jl.        i0.    ;+2
     jl.        i0.    ;+4
     jl.        i0.    ;+6
     jl.        i0.    ;+8
     jl.        i0.    ;+10
     jl.        i0.    ;+12
     jl.        i0.    ;+14
     jl.        i0.    ;+16
     jl.        i0.    ;+18
     jl.        i0.    ;+20
     jl.        i0.    ;+22
     jl.        i0.    ;+24
     jl.        i0.    ;+26
     jl.        i0.    ;+28
     jl.        i0.    ;+30
     jl.        i0.    ;+32
     jl.        i0.    ;+34
     jl.        i0.    ;+36
     jl.        i0.    ;+38
     jl.        i0.    ;+40
     jl.        i0.    ;+42
     jl.        i0.    ;+44
     jl.        i0.    ;+46
     jl.        i0.    ;+48
     jl.        i0.    ;+50
     jl.        i0.    ;+52

b0:  0                 ; saved w0: (sometimes addr of name)
b1:  0                 ; saved w1: 
b2:  0                 ; saved w2: proc table entry
b3:  0                 ; saved w3: (increased) return

b4:  0                 ; first of process
b5:  0, r.5            ; local name

i0:                    ; common entry:
ks -1300               ; entry test
     al  w3  x3+2      ;   (increase entry);
     ds. w1     b1.    ;
     ds. w3     b3.    ;   save (registers);

     bl  w2  x3-1      ;   w2 := rel entry;
     am        (66)    ;
     rl  w3    +22     ;   w3 := first of process;
     rs. w3     b4.    ;   save (first of process);
; w3 = first of process

     jl.     x2+2      ;   switch to:

     jl.        i1.    ;   description
     jl.        i2.    ;   initproc
     jl.        i3.    ;   reserveproc
     jl.        i4.    ;   releaseproc
     jl.        i5.    ;   include
     jl.        i6.    ;   exclude
     jl.        i9.    ;   sendmessage
     jl.        i10.   ;   waitanswer
     jl.        i11.   ;   waitmessage
     jl.        i12.   ;   sendanswer
     jl.        i13.   ;   waitevent
     jl.        i14.   ;   get event
     jl.        i15.   ;   testevent
     jl.        i16.   ;   createinternal
     jl.        i7.    ;   startinternal
     jl.        i7.    ;   stop internal
     jl.        i7.    ;   modify internal
     jl.        i20.   ;   remove process
     jl.        i21.   ;   regret message
     jl.        i7.    ;   fpproc
     jl.        i23.   ;   connectcuri
     jl.        i24.   ;   unstackcuri
     jl.        i25.   ;   moncall
     jl.        i26.   ;   monitormode
     jl.        i27.   ;   cpumask
     jl.        i28.   ;   system address
     jl.        i29.   ;   send further
 
\f


; replace of spaces with binary zero in file name
; call: save w0 = name address
;       w3 = return
; exit: w3 = local name address
;       all other regs undef

b. a10, f10 w.

f0:  0                 ; start of filename
f1:  0                 ; saved return

i8:                    ; replaces spaces:
     ds. w3     f1.    ;   save (filename addr, return);
     rl. w3  b0.       ;   w3:=name address of name padded
     al. w2  b5.       ;   w2:=local name address
     dl  w1  x3+2      ;
     ds  w1  x2+2      ;   move name
     dl  w1  x3+6      ;
     ds  w1  x2+6      ;
     rs. w2  f0.       ;  save local name address

     al  w2  x2+8      ;   wordaddr := top of filename;

a0:                    ; next word:
     al  w2  x2-2      ;   decrease (wordaddr);
     rl  w0  x2        ;   word := filename (wordaddr);

     al  w3     0      ;   shift := 0;
a1:                    ; next char:
     al  w3  x3-8      ;   shift := shift - 8;
     ld  w1  x3        ;   w0 := first char(s);
     ls  w1    -16     ;   w1 := char (shift);
     se  w1     32     ;   if char <> space then
     jl.        f2.    ;     return;

     ac  w1  x3        ;
     ls  w0  x1        ;   w0 := first char(s) leftjustified;
     rs  w0  x2        ;   filename (wordaddr) := word;

     se  w3    -24     ;   if not all chars in word tested then
     jl.        a1.    ;     goto next char;

     se. w2    (f0.)   ;   if not all filename converted then
     jl.        a0.    ;     goto next word;
f2:  al. w3     b5.    ;    w3:=name address local
     jl.        (f1.)  ;    return
e.


; monitor procedure process description
;
; the procedure sets up a monitor call
;
;
; call:  w0: name address (may be padded with blank)
;        w2: proc table entry
;        w3: return-4
;               +0 : segm<12 + rel

b. a10 w.
p.<:fpnames:>

i1:                    ;
     jl. w3     i8.    ;   remove spaces;

     jd         1<11+4 ; process description
;ks -1301

     jl.        i7.    ;   return;

i2:  jl. w3      i8.   ;   remove spaces
     jd          1<11+6;   initialize process
;ks-1302
     jl.         i7.   ;   return

i3:  jl. w3      i8.   ;   remove spaces
     jd          1<11+8;   reserve process
;ks-1303
     jl.         i7.   ;   return

i4:  jl. w3      i8.   ;   remove spaces
     jd          1<11+10;  release process
ks-1304
     jl.         i7.   ;   return

i5:  jl. w3      i8.    ; remove spaces
     rl. w1      (b1.)  ; w1:=device
     jd          1<11+12;  include user
ks-1305
     jl.         i7.   ;   return

i6:  jl. w3      i8.   ; remove spaces
     rl. w1     (b1.)  ; w1:=device
     jd          1<11+14;  exclude user
ks-1306
     jl.         i7.   ;   return


i9:  rl. w2      b3.   ;
     al  w0  x2+2      ; advance return
     rs. w0      b3.
     jl. w3      i8.   ;   remove spaces
     rl. w1      b1.   ;   w1:=address(message)
     al  w2  x2        ; flag:=first param
ks-1307
     jd          1<11+16;  send message
     al  w0      x2    ;   w0:=buffer address
ks-1309
     jl.         i7.   ;   return

i10: rl. w1  b1.       ; w1:=messageaddress
     rl. w2 (b0.)      ;   w2:=buffer address
ks-1308
     jd          1<11+18;  wait answer
ks-1310
     jl.         i7.   ;   return

i11:                   ;
     al  w0       -1   ; result:=-1;
;     jd      1<11+20   ;  wait message
     jl.     i7.       ;  return

i12: rl. w2  b3.       ; advance return
     al  w0  x2+2      ;
     rs. w0  b3.       ;
     rl  w0  x2        ; w0:=result
     rl. w1  b1.       ; w1:=message address
     rl. w2 (b0.)      ;    w2:=buffer
ks-1312
     jd      1<11+22   ;   send answer
     jl.      i7.      ;  return

i13: rl. w2      b0.   ; w2:=buffer address
     jd      1<11+24   ;  wait event
     rl  w0  4         ;  w0:=next buffer
     jl.     i7.       ;  return

i14:                   ;
     rl. w2 (b0.)      ; w2:=buffer
ks-1314
     jd      1<11+26   ;  getevent
     jl.     i7.       ;  return

i15:                   ;
     rl. w2 (b0.)      ; w2:=buffer
ks-1315
     jd      1<11+66   ;  test event
     rs. w1  (b1.)     ; flag:=w1
     rs. w2  (b0.)     ; buffer:=nex buffer;
     jl.     i7.       ;  return

i16:                   ; create intenal:
    jl. w3      i8.    ; remove spaces
    rl. w1      b1.    ; w1:=param address
    jd        1<11+56  ; create internal process
    jl.         i7.    ; return

i20:                   ; remove process
    jl. w3      i8.    ; remove spacess
ks-1320
    jd        1<11+64  ; remove process
    jl.         i7.    ; return

i21:                   ; regret message:
    rl. w2     (b0.)   ; w2:=buffer
ks-1321
    jd        1<11+82  ; regret message
    jl.         i7.    ; return

i23:                   ; connectcuri:
    jl. w3      i8.    ; remove spaces
    rs. w3      b0.    ; save name address
ks-1323
    am.        (b4.)   ;
    jl  w3      h29-4  ; stack current input
    rl. w3      b0.    ; w3:=name address
ks-1423
    am.         (b4.)  ;
    jl  w3      h27-2  ; connect current input
    jl.         i7.    ; return

i24:                   ; unstackcuri:
ks-1324
     am.        (b4.)  ;
     jl  w3      h30-4 ; unstackcuri
     jl.          i7.  ; return


i25:                   ; moncall:
    rl. w2       b3.   ;
    al  w0  x2+6       ; advance return
    rs. w0       b0.   ;
    rl  w3  x2         ; w3:=call(w3)
    rl  w1  x2-2       ; w1:=call(w1);
    rl  w0  x2-4       ; w0:=monitor call number
    hs. w0  a1.        ;
    rl. w0 (b0.)       ; w0:=call(w0);
    rl. w2 (b1.)       ; w2:=call(w2);
    jd      1<11+0     ; call monitor
a1=k-1
    rs. w0 (b0.)       ; call(w0):=w0;
    rs. w2 (b1.)       ; call(w2):=w2;
    jl.     i7.        ; return

i26:                   ;monitor mode:
    jd      1<11+28    ;
    jl.     i7.        ; return

i27:rl. w0  b0.        ; w0:=mask
    jd      1<11+30    ; set cpu mask
    jl.     i7.        ; return

i28:jl. w3  i8.        ; remove spaces
    rl. w0  (b1.)      ; w0:=func
    jd      1<11+32    ; system address
    jl.     i7.        ; return

i29:jl. w3  i8.        ; remove spaces
    rl. w2 (b1.)       ; w2:=buf
    jd      1<11+34    ; send further
    jl.     i7.        ; return


e.                     ;
 
\f


; error return
c6:  am         13-19  ;13:    illegal zonestate:
c1:  am         1     ;19 -   file cannot be looked up
c2:  am         1     ;18 -   file   does not exist
c3:  am         1     ;17 -   file cannot be removed
c4:  am         1     ;16 -   file cannot be changed
c5:  al  w1     15    ;15 -     -    -    -  connected for i/o
     rl. w2     b0.+4 ;
     rl  w3  x2+4     ;   w3 := add of rt error
ks-1398
     rs. w3     b0.+4 ;
     rl  w2  x2+8     ;   w2 := stacktop
     rl. w3     b0.+6 ;   w3 := add where error occurred
     al  w0    -1     ;
ks-1399
     jl.       (b0.+4);   jump to rt error

; normal return

i7:  rl. w2     b0.+4 ;
     rl  w2  x2+8     ;   w2 := stacktop
ks -1397
     jl.       (b0.+6);   return
m.             end   hcæ124æ codeprocedures
e.
0,r.(:13*512-k+2:)>1
e.
@,f
scope user tnpascallib
mode list.no
▶EOF◀