|
|
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: 28483 (0x6f43)
Description: Bits:30009218 RYDOPTEXT
Types: 8-hole paper tape
Notes: Gier Text
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.
[ e n d ]