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

⟦296068eec⟧ Bits:30009218 RYDOPTEXT, 8-hole paper tape

    Length: 28483 (0x6f43)
    Description: Bits:30009218 RYDOPTEXT
    Types: 8-hole paper tape
    Notes: Gier Text

GIER Text (HTML)

                                                head 1
clear rydop1
rydop1=set 5
permanent rydop1.7
rydop1=slang type.yes fpnames,
       s.   c50,d20
       w.
     k=h55
          0,0
               jl. w1    c7.  ; w2 peger på løbende fp-kommando
                              ; scan parameterliste
               jl.       c11. ; hop til skriveaktion for scan
               rs. w0    d1.  ;  gem  programparameter
               jl. w3    c3.  ; kald egentlig opryd
               lo  w1    0
               sn  w1     0   ; if no buf in other procs.
                              ; unanswered
               jl.       c6.   ; goto normal exit
               ld  w1    -65
               ds. w1     d0.  ;  procesarter := 0
               al. w0   c18.  ;
               jl. w3   h31.-2;
               jl.  w3     c2. ; scan
               jl.       4    ; goto aktion
               jl.      c12.  ; goto test
                              ; aktion:
               ds. w0   d5.   ; gem retur (d2) og process kind (d5)
               rl  w0   x1+10
               ls  w0    -6   ;  device number
               ds. w1    d7.  ; gem device number (d6) og PDA (d7)
               dl  w0   x1+4  ;  move name
               ds. w0     d3.
               dl  w0   x1+8  ; anden del
               ds. w0     d4. ;
               al  w1      1  ; registrering af art af proces ,
               rl. w3     d5. ;  som buffer hang på
               ls  w3     -1  ;
               ld  w1   x3+1  ;  w0w1:= 1 shift (art//2+1)
               al  w1   x1+1  ;  w0w1:=w0w1+1 ; så der altid er en bit sat
               ds. w1   d12.  ; gem procesart id-bit
               lo. w0     d10.
               lo. w1     d0.
               ds. w1     d0. ;  procesarter:= procesarter or w0w1
               rl. w0     d5.
          ; søg gennem texttabel
     al. w2   c24. ; table adress
c31: dl. w1   d12. ; type id. bit
     sz  w0 (x2+2
     jl.      c32. ;
     sz  w1 (x2+4
     jl.      c32. ;  if bit IKKE i maske then
     ba  w2 x2+1   ;  begin  pos:=pos+længde ;
     jl.      c31. ;  goto igen  end ;
                   ; meddelelse <devicenr> <typeangivelse> <procesnavn> (<buffer
adr> <pda-modtager>) 0-1
c32: al  w1     0
     rl  w0 x2+6   ; typetext (eller 0 eller -1)
     ds. w1   d12. ;  gem den
     bl  w3 x2     ;  aktion
     jl.    x3+2   ; goto S(aktion)
     jl.      c33. ; aktion 0  :  skriv devicenr
                   ;  aktion 2 :  undlad  devicenr
     al. w0   c25. ; text:= <:___-_:>
c34: jl. w3   h31.-2;  writetext(text)
     rl. w2   d11. ; første ord i typetext
     al. w0   c25. ;  text:=<:___-_:>
     sn  w2    -1  ; if  ,,typetext,, = -1 then
     jl.      c35. ;  goto  skriv procesnavn  ; slet ingen art
     sn  w2     0  ; if ,,typetext,, = 0  then
     jl.      c36. ;  goto skriv kind-nummer
     al. w0   c15.
     jl. w3  h31.-2; write(out,<: :>)
     al. w0   d11. ;
     jl. w3  h31.-2;  write(out,typetext)
     jl.      c45. ; goto skriv_space
c36: rl. w0    d5. ; w0=process_kind
     jl. w3  h32.-2
       32<12 + 4   ;  write(out,<<dddd>,processkind)
c45: al. w0   c15. ;   text:= <:_:>
c35: jl. w3  h31.-2; skriv_procesnavn:   writetext(text)
     al. w0    d8.
     jl. w3    h31.-2; write (out,procesnavn)
     rl. w0    d1.  ;
     so  w0     4   ; if  programparameter shift(-2) = 1
     jl.       c39. ;  then begim
     al  w0  x2
     jl. w3    h32.-2
     32<12 + 7      ;  write(out,<<ddddddd>,bufferadress)
     rl. w0    d7.  ; PDA(receiver)
     jl. w3    h32.-2
     32<12 + 7
c39: al. w0    c16.
     jl. w3    h31.-2; write (out, <:<10>:>)
     jl.      (d2.)  ; return from action
c33:                    ; skriv_devicenummer
     rl. w0    d6.  ; devicenummer
     jl. w3     h32.-2; write (out, <<dddd>,device)
       32<12 + 4
     al. w0    c15. ;  text:=<:_:>
     jl.       c34. ; goto skriv_kind ;
     c11: ; param alarm placeret her for at udskriftroutiner i fp kan nås
     b. a10,b10,w.
     rs. w3      b1. ; kald var  jl w3 , w2= param.adr.
     sz  w0   -2048
     jl.         a1.
     al. w0      c20.; kun første gang , hoved på fejludskr.
     jl. w3     h31.-2 ; skriv  ⨯⨯⨯ ......
a1:
     bl  w0 x2
     sn  w0       6 ; =
     jl.        a3.
     sn  w0       8
     am          c22
     al. w0      c15.;  vælg <: :> eller <:.:>
     jl. w3    h31.-2
     bl  w0 x2+1
     se  w0    10
     jl.       a2. ; skriv navn eller tal
     al  w0 x2+2
     jl. w3  h31.-2
     jl.      (b1. ; return
a2:  rl  w0 x2+2
     jl. w3  h32.-2
              1
     jl.      (b1.
a3:  ; = kun ved illegal vs. kun = skrives
     al. w0     c23.
     jl. w3  h31.-2
     jl.       (b1.
     b1:  0  ;  return adress
     e.
c8 : ;  steppingstone til h31
     jl.     h31.-2  ; kald normalt , dog jl. w3 c8. istedetfor jl. w3 h31.-2
          c4:  ; break 6
               rs.  w3   h10.+10
               al   w1     6
               rs.  w1   h10.+12
               jl.       h10.+14
          c5:  ;  programmeringsfejl
               rs.  w3   h10.+10
               al.  w0    c19.
               jl.  w3    h31.-2
               jl.        c4.+2
     c12:
     rl. w0    d1. ; udestående buffere
     sz  w0     8  ;  if -, advice  then
     jl.      c30. ;  goto unsuccesful
                   ;  advice
     al. w0   c26. ; skriv ,, Buffere frigives ...
     jl. w3  h31.-2;
     al. w2   c24. ;  texttabeladresse
c37:               ; igen37:
     dl. w1    d0. ; procesarter
     la  w0 x2+2
     la  w1 x2+4   ; beregn fælles bits
     sn  w0     0
     se  w1     0
     jl.      c38. ; if  fælles bits  then goto skriv38 ;
     ba  w2 x2+1   ; pil:= pil+objektlængde ; næste
     jl.      c37. ; goto  igen37
c38:               ;  skriv  :    <typeangivelse> <text>
                   ; typeangivelse er  typetext  intet  eller samtlige mulige ty
penumre
      al  w3     1 ;
      sz  w3 (x2+4 ; if maske(47)=1 then
      jl.      c42. ;  goto no_more_kinds
     ds. w1   d12. ; remove bits: gem fælles bits
     dl. w1    d0. ; procesarter
     ss. w1   d12. ; - de der behandles nu
     ds. w1    d0. ;  resterende procesarter
     al  w1     0
     rl  w0 x2+6
     ds. w1   d12. ; typetext
     al. w0   c17. ; write(out,<:<10>  :>
     jl. w3  h31.-2
     rl. w0   d11. ;
     sn  w0    -1
     jl.      c40. ; ingen typeangivelse
     sn  w0     0
     jl.      c41. ; ingen text
     al. w0   d11. ; skriv text
     jl. w3  h31.-2
     jl.      c40.
c41:
                   ; kind angivet ved tal
     rs. w2    d6. ; gem textpil
     dl. w1    d0. ;  procesarter
     al  w2    -1  ; skip bit 47
c44:               ; igen44:
     ld  w1    -1
     al  w2 x2+1   ; w1(23)=  art(w2) brugt
     sz  w1     1
     jl.      c43. ; hvis bit=1 then goto skriv
     sn  w0     0
     se  w0     0
     jl.      c44. ; if w0w1<>0 then goto igen44
     rl. w2    d6. ;  textpil retableres
     jl.      c40. ; goto skriv_text
c43: ds. w1    d5. ; gem bitmønster
     al  w0 x2
     as  w0     1  ; art=2⨯nummer
     jl. w3  h32.-2; skriv art
        32<12+3    ; <<ddd>
     dl. w1    d5. ; retabler
     jl.      c44. ;  goto  igen44
c40:
                   ; skriv text
     al  w0 x2+8   ; textadresse
     jl. w3  h31.-2; skriv text
     ba  w2 x2+1  ; next
     jl.      c37. ; goto igen37
c42:               ; no_more_bits:
     al  w1 x1-1   ; fjern dummy bit (1<0)
     lo  w1    0
     sn  w1    0
     jl.     c29. ;  if all_bits_removed  then  goto skriv_egen
     al  w0 x2+8  ;  text i sidste objekt
     jl. w3  h31.-2; writetext
c29:              ;  skriv_egen:
     al. w0  c27.
     jl. w3  h31.-2
     rl  w2   66  ; egen PDA
     al  w0 x2+2  ;  egen proces navn
     jl. w3  h31.-2
     al  w0 x2
     jl. w3  h32.-2;  write(out,<<dddddddd>,PDA)
        32<12+8
c30:               ; unsuccesful:
               am         1   ;  udestående buffere , sæt  modebit unsuccesful e
xecution
     c6:       al  w2     0   ;  normal exit
               al. w0    c16.
               jl. w3   h31.-2; skriv NL
               jl. w3     h7. ;
        c19:   <:<10> programfejl <0>:>
        c18:   <:<10> Buffer hænger på :<10><10> dev kind process name<10><10><0
>:>
        c17:   <:<10>  <0>:>
        c16:   <:<10>:>
        c15:   <: :>
        c25:   <:   - :>
        c20:   <:<10>⨯⨯⨯ rydop param <0>:>
        c21:   <:.:>
        c22 = c21 - c15
        c23:   <:=:>
c26:
<:<10> Buffere frigives som følger : <10><0>:>
c27: <:<10>  Hjælper intet andet , fjern og genopret denne proces :
          Egen proces er :  :>
c24:  ; tabel
b. a30 , w.
     a0= k
     h. 2,a1 w.  ; ingen devicenr
       0, 1<(:0+1:)  ; internal =0
       <:ip :>
       <: : udfør :  rydop answer.yes   i processen eller nedlæg den.<0>:>
     a1=k-a0 , a0=k
     h. 2,a2 w.
       0,1<(: 38>1+1:) ; kind=38
       -1     ; ingen kind
       <:operator : send  att  til denne proces , en gang for hver buffer.<0>:>
     a2=k-a0 , a0=k
     h. 0,a3  w.
       0,1<(:2>1+1:)
       -1
       <:clock : buffer kan ikke frigøres før den angivne tid ,
          med mindre denne proces fjernes.<0>:>
     a3=k-a0 , a0=k
     h. 0,a4  w.
       0,1<(:4>1+1:)
       <:bs :>
       <:dette skyldes hardwarefejl , hvis det gentager sig ; prøv.<0>:>
     a4=k-a0 , a0=k
     h. 0,a5  w.
       0,1<(:8>1+1:)+ 1<(:36>1+1:)+ 1<(:46>1+1:)
       <:tw :>
       <: en KONSOL (kan bestemmes på devicenr.) er lokal.
          Eller devicet har ikke fået afsluttet en TIDLIGERE I/O-operation.
          Evt. hardwarefejl<0>:>
     a5=k-a0 , a0=k
     h. 0,a6  w.
       0,1<(:10>1+1:)
       <:tr-:>
       <:dette skyldes hardwarefejl , hvis det gentager sig ; prøv.<0>:>
     a6=k-a0 , a0=k
     h. 0,a7  w.
       0,1<(:12>1+1:)
       <:tp-:>
       <:sæt punch remote , hjælper det ikke skyldes dette hardwarefejl.<0>:>
     a7=k-a0 , a0=k
     h. 0,a8  w.
       0,1<(:14>1+1:)
       <:lp :>
       <:sæt printer remote , hvis det ikke hjælper , er der hardwarefejl ,
          man kan fortsætte på trods af denne , ved at slukke og tænde igen.<0>:
>
     a8=k-a0 , a0=k
     h. 0,a9  w.
       0,1<(:16>1+1:)
       <:cr-:>
       <:dette skyldes hardwarefejl , hvis det gentager sig ; prøv . Prøv
          i såfald at slukke og tænde motoren.<0>:>
     a9=k-a0 , a0=k
     h. 0,a10  w.
       0,1<(:18>1+1:)+ 1<(:34>1+1:)
       <:mt-:>
       <:a) hvis stationen er REMOTE og KØRER , da tryk på ,,lokal,,-knap og ven
t.
               Den skal nu blive LOKAL inden 15 sekunder.
          b) hvis stationen er REMOTE og ikke kører , sættes den REMOTE ,
               idet der om nødvendigt monteres et bånd . Hvis den nu kører gås t
il a) .
          c) ELLERS , og hvis aktionerne under a) og b) IKKE lykkes , er der
               hardwarefejl . Kontroller ,,loop-sense,, lampe og vacuumkamre.<0>
:>
     a10=k-a0  ,  a0=k
     h. 0,0 w. ;  devicenr
       -1,-1   ; alle bits , så søgning stopper
       0     ; nummer for kind
       <:<10>  Der var procesarter , dette program ikke kunne hjælpe med<0>:> ;
e. ; tekster
     c7:  ;  parameterindlæsning   , kald  jl w1 c7 , med
          ;  w2= 1.-te i p.liste , retur til kald+4 , med w0=
          ;  styreparameter
          ;  kald+2 skal indeholde hop til skriveaktion , der
          ;  skal skrive ,,hoved,, hvis w0>11 = 0
     b. a10,b20,c10,w.
     al  w0    0  ;
     ds. w1   b1. ;  gem param , udhop
      rs. w2   b2. ; gem pil til første
     al  w3 x2
     ba  w3 x3+1  ; 1.-te ,,parameter,, test for venstreside
     bl  w0 x3
     se  w0    6  ;  if delimiter <> ,,=,,  then
     jl.      a10.; goto tag_param_igen ; ok: ingen vs.
     rs. w3   b2. ; gemt_pil  peger nu på  programnavn
     jl. w3   c0. ; kald fejludskrift , venstresiden ud
a2:               ; fejl :  ; fejludskrift tages efter pil er retableret
     rl. w2   b2. ; gemt_pil som kaldeparam.
     jl. w3   c0. ; kald fejludskrift
a10:              ; tag_param_igen :
     rl. w3   b2. ; retabler pil fra  gemt_pil
a0:               ; next:  ; normal næste param.
     jl. w1   c1. ; call take_next
a1:               ; next_taken:  ;
     sn  w0    8  ;  if  delimiter = ,,.,,
     jl.      a2. ;     then  goto fejl ;
     al. w0   b10.;  adr. på hovedparam
     jl. w1   c4. ; search_name(b10)
     jl.      a2. ; not_found : goto fejl
     jl.      a4. ; ,,adress,,
     jl.      a7. ; ,,advice,,
     jl.      a5. ; ,,release,,
                  ; answer_par: ; forvent  .<navn> <s>
     al. w0   b11.; navne adresse
     jl. w1   c3. ; test_point_param_and_search_name(b11)
     jl.      a2. ; not_found : goto fejl
     am       -1  ; pending : 1
     am       -1  ; received: 2
     am        3  ; begge : yes : 3
     al  w0   0   ; ingen : no : 0
     al  w1  -4   ; maske
a6:               ; set :  ; styreparameter sættes
     la. w1   b0. ; w1:= maske and parameter ; så bits er 0
     wa  w1    0  ; adder bits
     rs. w1   b0. ;
     jl.      a0. ;
a4:               ;  adress :
     al. w0   b12.;
     jl. w1   c3. ; test_point_param_and_search_name(b12)
     jl.      a2. ; not_found : goto error
     am        4  ; yes : 4
     al  w0    0  ; no : 0
     al  w1  -8+3 ;  maske
     jl.      a6. ;  goto  set
a7:               ; advice : ; forvent yes or no
     al. w0   b12.
     jl. w1   c3.
     jl.      a2.
     am       -8
     al  w0    8  ; no : 8
     al  w1  -16+7
     jl.      a6.
a5:               ; release : ; forvent 0 eller flere .<navn> parametre
     jl. w1   c1. ; take_next
     se  w0    8  ;  if delimiter <> ,,.,,
     jl.      a1. ;  then  goto  next_taken
     bl  w0 x3+1
     se  w0   10  ;  if parameterart <> navn  then
     jl.      a2. ;    goto  fejl
     al  w3 x3+2
     jd  1<11+10  ; release process
     al  w3 x3-2
     jl.      a5. ; goto  release
     b0:  0  ; styreparameter pakkes her
     b1:  0  ; returadresse
     b2:  0  ; gemt_pil
     b10:  <:adress:>
           <:advice:>
           <:releas:>
           <:answer:>
            0
     b11:  <:pendin:>
           <:receiv:>
     b12:  <:yes:>,0
           <:no:>,0
            0
     c0:  ;  fejl . kald :  jl w3  c0 , med  w0(12) = 0 for første fejl
     al  w0  -2048
     lo. w0   b0. ; adder fejlbit logisk
     rx. w0   b0. ; gl. værdi som param , gem ny-
     jl.     (b1. ; fortsæt med skriveaktion
     c1:  ; take_next  . kald :  jl w1 c1 , med w3= gammel param. pil
          ; retur til kalld+2 , med w3=ny param.pil , denne gemt i b2,
          ; og w0 = delimiter , hvis ikke listen var slut og der hoppedes
          ; helt ud
     ba  w3 x3+1  ; next
     rs. w3   b2. ; gemt_pil
     bl  w0 x3
     sl  w0    4  ;  if  delimiter >=4  then
     jl     x1    ; local return
a3:               ; slut:
     dl. w1   b1. ; w0=return param , w1=calladr+2
     jl     x1+2  ; global return to calladr+4
     c4: ;  search_name  :  kald jl w1 c4  , med w0 som navneadresse
         ; og w3 som parameterpil , retur med w3 uændret til
         ; kald+2 hvis ikke fundet eller param <> navn , ellers
         ; til kald+2+2⨯navnenummer . Navne er et d.ord
         ; og listen slutter med et 0
     b. a10,b10,w.
     ds. w1   b1. ; gem indhop og listeadresse
     rl  w2    0  ; listeadresse i w2
                  ; enter_from_c3:
     bl  w0 x3+1
     se  w0   10  ;  if art <> navn  then
     jl.     (b1. ; return to call+2
a0:               ; igen:
     al  w2 x2+4  ;  næste navn
     dl  w1 x2-2  ; load navn
     sn  w0    0  ; if navn.førsteord = 0 then
     jl.     (b1. ; return to call+2 ; not_found
     ss  w1 x3+4  ; subtraher parameternavn (kun 6 char.)
     sn  w0    0
     se  w1    0  ;  if  differens <> 0  then
     jl.      a0. ;  goto  igen
     ws. w2   b0. ; navneadresse-listeadresse
     ls  w2   -1  ; 4 bytes pr. navn , 2 pr. ordre : //2
     wa. w2   b1. ; adder kaldeadr + 2
     jl     x2    ; return , caladr+2+(nr.iliste)⨯2
     b0:  0  ; navnelisteadresse
     b1:  0  ; returadresse
     c2= b1
     e. ; routine c2, intern i c7
     c3:  ;  take point and search
          ;  kald og udhop som c4 , men henter og tester først
          ;  parameter
     ds. w1   c2. ; gem  adresser
     rl  w2    0  ; listeadresse 1 w2
     ba  w3 x3+1  ; next param.
     bl  w0 x3
     se  w0    8  ;  if skilletegn <> .  then
     jl.      a2. ;  goto  fejl ; comment dette ordner også ,,liste slut,,
     jl.     c4.+4;  enter c4
     e. ; routine c7
     c3:  ;  egentlig opryd
          ;  kald   jl  w3  c3
          ;  med  w0 = styreparameter som for ,,scan,, (c2)
          ;  retur til w3 (kald+2) med w0-w1  som efter scan
     b.  a10,b10
     w.
               ds. w0    b1.  ; gem retur og param.
               jl. w3    c0.  ; hjemkrads message-
                              ; buffere 1. gang
               jl. w3    c1.  ; fjern børn og
                              ; areaprocesser
               al  w3    500  ;  opgivtæller:=500
     a1:
               al  w3    x3-1 ;  opgivtæller tælles ned
               rs. w3    b2.
               rl. w0    b1.  ; scan parameter
               jl. w3    c2.  ; scan
               jl        x3   ; ingen aktion
               sn  w0    0    ; if all  area  mess.answered
               rs. w0    b2.  ;  sæt slut
               ds. w1   b4.   ;  gem resultat
               jl. w3   c0.   ; krads hjem
               rl. w3    b2.
               se  w3    0    ;  if opgivtæller <> 0  then
               jl.      a1.  ;  goto igen
               ; det antages , at area-processer i
               ; løbet af ,,kort tid,, har gjort sig
               ; færdige der ventes dog højst ca. 5 sek.
               dl. w1    b4.   ;  load resultat
               jl.      (b0.)  ;  return
               b0:  0  ;  return
               b1:  0  ;  parameter
               b2:  0  ; opgivtæller
                    0
               b4:  0  ;  gem resultat
               e.
     d10: 0
     d0:  0   ;  procesarter
     d1:  0   ;  programparameter
     d2:  0    ; de følgende bruges som arbejdsceller i udskr. akt.
     d5:   0
     d6:  0
     d7:  0
     d11: 0
     d12: 0,0,0 ; d2 og hertil er dummy  message og answer buffer , indhold er u
defineret
     d8:  0
     d3:  0              ; name 1.part
          0
     d4:  0              ;  name 2.part
          0              ;  name , process description adress
     c2:
     ;   scan for udestående messagebuffere
     ;   besvar M E D D E L E L S E R styret af indhopsparameter
     b.  a10,b10
     w.
       ; kald        jl     w3        c2
       ;             jl      <action>
       ;    <action> er en subroutine ,
       ;     der kaldes jl w3 <action>
       ;      x0= kind Process X1= PDA for modtager (adr. for navn)
       ;      x2= bufferadresse
       ;      registre irrel. ved retur til  w3
       ;             w0 (i  DENNE procedure)  styrer besvarelse af meddelelser :
       ;             w0(22:23)=  +1  besvar m. i køen (pending m.)
       ;                         +2  besvar m. der er modtaget (received m.)
       ; retur til  w3+2 (kaldadr+4) med x0=ant.buf
       ; i areaprocs, x1=andre, som er udestående
          ds.    w0     b3.;  gem parameter og retur
          ld     w1     48
          ds.    w1     b2.; t1:=t2:=0;
          rl     w3     86 ; message bufre start
          jl.            6 ; skip 2
     a1:  rl.    w3     b0.; igen:løb. adr
          wa     w3     90 ; adder bufferlgd
          rs.    w3     b0. ; gem den
          sl     w3    (88); if adr< øverste buffer
          jl.           a2.; celle then exit
          dl     w2  x3+6  ; w2:= sender ;w1:=
                           ; receiver
          sh     w2    -1  ; tag  abs sender
          ac     w2  x2    ;
          rl.    w0    b3. ;  parameter
          rx     w2    6  ;  forbered get_event , send ansver
                           ; abs sender i w3 , bemærk at man , da proces kan sen
de meddelelser  til
                           ; sig selv , må spørge  først om der er tale om en
                           ; meddelelse TIL proces
          sz     w0     1  ;  if -, besvar pending  or
          se     w1   (66) ;        -, message_til_EGO  then
          jl.           a4.;      goto  test_received_message
                          ; BUFFER ER PENDING MESSAGE TIL EGO
          jd        1<11+26;    get_event ; comment receive_message
          jl.           a5.;  goto  ansver_received
     a4:                  ; test_received_message:
          ac     w1     x1 ;  receiver:= - reciever
          sz     w0     2  ;  if  -, besvar received or
          se     w1   (66) ;    -,  received_by_EGO  then
          jl.          a3.;    goto  test_sendt_fra_ego
     a5:                  ;  answer_received:  BUFFER ER RECEIVED MESSAGE TIL EG
O
          al.    w1     d2. ;  dummy svar adresse
          al     w0      2 ;  reject message
          jd        1<11+22;  send answer
          jl.           a1.;  goto  igen
     a3:                   ;  test_sendt_fra_ego:
          se     w3    (66);  if abs sender <> ego  then
          jl.           a1.;  goto igen  ;
                           ;  BUFFER ER SENDT FRA EGO ELLER DØD MØJUNGE
              ; test om message (answer ign.)
          sh     w1     -1 ; if receiver  < 0
          ac     w1     x1 ; receiver:=- receiver
                           ; w1= abs receiver
          sh     w1      5 ; for svar er w1< 6 , NB her benyttes , at en PDA > 5
                           ;  (egl. er def. på svar  0<receiver<6 ,ikke abs(rece
iver)<6 )
          jl.           a1.; if answer then goto igen
             ; w1 er PDA for modtager
          rl     w0     x1 ; w0:= modtager.kind
          se     w0      6 ; if receiver is areapr.
                 ;  NB :  kind er  6  for de anonyme  perifere processer
                 ;  som areaprocesserne lever på
          am         b5
          al.    w3     b1. ; w3:=adr(t1)else x3:=adr(t2)
          rl     w2     x3
          al     w2     x2+1
          rs     w2     x3 ; tæl valgt tæller op
          sn     w0      6 ;  if ,,area-peripheral,, then
          al     w0      4 ;      kind:= 4 ; den ,,rigtige,,
          rl.    w2     b0.;  bufferadresse
          jl.    w3    (b4.); kald aktion
          jl.           a1. ;  goto  igen
     a2:  rl.    w3     b4.
          dl.    w1     b2. ; sæt resultat
          jl            x3+2; retur
          b4:             0 ; returadr
          b3:             0 ;  parameter
          b0:             0 ; bufferadr
          b1:             0 ; t1
          b2:             0 ; t2
          b5= b2-b1
     e.   ;   subr.  c2
     c1:
     b.   a10,b10
     w.
     ;   kald  jl. w3 c1
     ;   fjerner alle børn og areaprocesser
     ;   da programmet antages kørt under fp
     ;   er der normalt en messagebuffer fri
     rs.     w3     a0.  ; gem retur
     rl      w3     80   ; last internal+2 i nametable
     rl      w0     66   ; w0:=ego PDA
  a1:           ;  igen intern:
     sh     w3    (78)   ; if tableadr<first int. then
     jl.            a2.   ; goto start area
     al     w3     x3-2  ;  tæl ned
     rl     w2     x3   ;    PDA
     se     w0   (x2+50);   if ego PDA <> PDA.parentPDA
     jl.            a1.  ;  then goto igen
         ;  child , stop and remove
     ds.     w0     b1. ;  gem løbende tabeladr. og ego PDA
     dl      w1   x2+4  ;  move name
     ds.     w1     d3.
     dl      w1   x2+8
     ds.     w1     d4.
     al.     w3   d3.-2 ;
     jd     1<11+60     ;  stop intern
     se      w0      0  ;  resultat skal være 0
     jl.     w3     c5. ;  selvcheck, programfejl
     sn      w2      0  ;  resultat skal være
                   ; <>0, ellers mangler buffere
     jl.  w3        c4. ;  break 6
     al.     w1     d2. ;  svar i skraldespand
     jd         1<11 + 18; wait answer
                 ;  proces stoppet, w3 uændret
     jd         1<11+64 ;  remove
     se     w0      0
     jl.     w3     c5. ;  programfejl
     dl.     w0     b1. ;  restore tabeladr.
                        ;  og ego PDA
     jl.            a1. ;  goto igen
  a3:                   ;  igen area
  a2:                   ;  start area
     sh      w3    (76) ;  if tableadr < firstarea
     jl.           (a0.);  then return
     al      w3    x3-2 ;  tæl ned
     rl      w2     x3  ;  PDA
     rl      w0   x2+14 ;  pD. users
     am            (66) ; h:= egoPDA
     so      w0    (12 );  if -, ego user then ; comment EGO ID-BIT er i PDA+12
     jl.            a3. ;  goto igen area
          ;  remove area process
     rs.     w3     b1.  ;  gem tabeladr.
     dl      w1    x2+4  ;  flyt navn
     ds.     w1     d3.
     dl      w1   x2+8
     ds.     w1     d4.
     al.     w3    d3.-2
     jd     1<11 + 64    ;
     se      w0      0
     jl.  w3        c5.  ;  test programfejl
     rl.     w3     b1.  ;  relabler tabeladr
     jl.            a3.  ;  goto igen area
     a0:   0     ;   returadr.
     b0:   0     ;   løb. tabeladr
     b1:   0     ;   ego PDA
     e.
  c0:
      b.     a10,b10
      w.      ;  kald: jl w3 c0
              ;  hjemkrads svarbuffere NB : at kæden scannes forfra er vitalt
              ; w0-w2 udef ved returhop til  w3 (kaldeadr+2)
     rs.     w3     a0.  ;  gem returadr.
     rl      w3     66   ;  ego PDA
     al      w2   x3+14  ;  chain start in PD
     rs.     w2     b0.  ;  save it
     rl      w3     x2   ;  første bufferadr. i  x3
  a2:    ;  igen:
     al      w2     x3   ;  bufferadr. i x2
     rl      w3     x2   ;  næste i kæde  i x3
     sn.     w2     (b0.);  if bufferadr.=chain start then
     jl.            (a0.);  return
     rl     w0      x2+4 ;  w0:=  buffer.receiver
     sh      w0      5   ;  if receiver>5
     sh      w0      0   ;  or receiver<1
     jl.            a2.  ;  then goto igen  ; det var en message , der ignoreres
          ;  det var et svar
     jd    1<11 + 26     ;  release buffer med svar
     jl.            a2.  ;  goto igen
     b0:        0        ;  chain start adress
     a0:        0        ;  return adress
     e.  ;  subr.   c0
     e.  ;  segment
      e.
[end]