|
|
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: 16896 (0x4200)
Types: TextFile
Names: »tsendmes «
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
└─⟦a957ba283⟧
└─⟦this⟧ »tsendmes «
(
message sendmessage
sendmessage=set 1 disc1
sendmessage=slang
_ sendmessage messageid waitanswer waitmessage receiver sender sendanswer,
_ getevent procdesc ownproc bufclaim areaclaim flushout address startintern,
_ regret
scope user.disc1,
_ sendmessage messageid waitanswer waitmessage receiver sender sendanswer,
_ getevent procdesc ownproc bufclaim areaclaim flushout address startintern,
_ regret
)
; *** sendmessage ***
b. g1, e20 ; insertproc
d.
p. <:fpnames:> ; fpnames
l.
k= 10000
s. j60, g3, a10 ; code procedure
h.
g0= 0 ; number of externals
e20: ; start segment
g1: g3, g2 ; head word
j1: 0 , 1 ; 1st own
j2: 0 , 3 ; 2nd own
j3: 0 , 7 ; 4th own
j4: g0 + 4, 0 ; rs entry 4: take expression
j6: g0 + 6, 0 ; - 6: end reg expression
j8: g0 + 8, 0 ; - 8: end addr expression
j13: g0 + 13, 0 ; - 13: last used
j27: g0 + 27, 0 ; - 27: out
j29: g0 + 29, 0 ; - 29: param alarm
j30: g0 + 30, 0 ; - 30: saved stack ref, w3
j54: g0 + 54, 0 ; - 54: field alarm
g2= -g1.-2 ; end of abs words
g3= -g1.-2 ; end of points
w.
e0: g0 ; external list, no ext
0 ; no of hw's to init
91 10 04 ; date of version
10 11 12 ; time of version
\f
; procedure test_array_kind;
; call return
; w0 1st form. kind
; w1 - unchanged
; w2 - unchanged
; w3 link
a0: 31 ;
a1: la. w0 a0. ; kind:= 1st_formal and 31;
sh w0 23 ; if not array
sh w0 16 ; and not zone
jl. w3 ( j29. ; then param alarm;
jl x3 ; return;
; sendmessage
e1: rl. w2 ( j13.) ; entry sendmessage
ds. w3 ( j30.) ;
rl w0 x2+6 ;
jl. w3 a1. ; test_array_kind( name );
rl w3 x2+8 ;
ea w3 x2+6 ;
al w1 10 ; if hw10 > last of name
am (x3-2) ;
sl w1 1
jl. w3 ( j54.) ; then field alarm;
al w1 1 ; if hw1 <= base of name
sh w1 (x3) ;
jl. w3 ( j54.) ; then field alarm;
wa w1 (x2+8) ;
rl w0 x2+10 ; test_array_kind( message );
jl. w3 a1. ;
al w0 x1 ;
rl w3 x2+12 ;
ea w3 x2+10 ;
al w1 16 ; if hw16 > last of message
am (x3-2) ;
sl w1 1 ;
jl. w3 ( j54.) ; then field alarm;
al w1 1 ; if hw1 <= base of message
sh w1 (x3) ;
jl. w3 ( j54.) ; then field alarm;
wa w1 (x2+12) ; w1:= message addr.
rl w3 0 ; w3:= name addr.
rl. w2 ( j1.) ; w2:= messageid;
jd 1<11+16 ; send message;
al w1 x2 ; w1:= result;
jl. ( j6.) ; return( result );
; waitanswer
e2: rl. w2 ( j13.) ; entry waitanswer
dl w1 x2+8 ; take buffer addr
so w0 16 ; if expression then
jl. w3 ( j4.) ; take expression
ds. w3 ( j30.) ;
rl w0 x2+10 ; test_array_kind( answer );
jl. w3 a1. ;
rl w0 x1 ;
rl w3 x2+12 ;
ea w3 x2+10 ;
al w1 16 ; if hw16 > last of answer
am (x3-2) ;
sl w1 1 ;
jl. w3 ( j54.) ; then field alarm;
al w1 1 ; if hw1 <= base of answer
sh w1 (x3) ;
jl. w3 ( j54.) ; then field alarm;
wa w1 (x2+12) ;
rl w2 0 ; w2:= buffer addr
rl w3 x2-2 ; messageid:=
rs. w3 ( j1.) ; word( w2 - 2 );
jd 1<11+18 ; wait answer;
rl w1 0 ;
jl. ( j6.) ; return( result )
; waitmessage
e3: rl. w2 ( j13.) ; entry waitmessage
dl w1 x2+16 ; take buffer addr
so w0 16 ; if expression then
jl. w3 ( j4.) ; take expression
ds. w3 ( j30.) ;
rs w1 x2+16 ;
rl w0 x2+6 ; test_array_kind( name );
jl. w3 a1. ;
rl w3 x2+8 ;
ea w3 x2+6 ;
al w1 8 ; if hw8 > last of name
am (x3-2) ;
sl w1 1
jl. w3 ( j54.) ; then field alarm;
al w1 1 ; if hw1 <= base of name
sh w1 (x3) ;
jl. w3 ( j54.) ; then field alarm;
wa w1 (x2+8) ;
rl w0 x2+10 ; test_array_kind( message );
jl. w3 a1. ;
al w0 x1 ;
rl w3 x2+12 ;
ea w3 x2+10 ;
al w1 16 ; if hw16 > last of message
am (x3-2) ;
sl w1 1 ;
jl. w3 ( j54.) ; then field alarm;
al w1 1 ; if hw1 <= base of message
sh w1 (x3) ;
jl. w3 ( j54.) ; then field alarm;
wa w1 (x2+12) ; w1:= message addr.
rl w3 0 ; w3:= name addr.
jd 1<11+20 ; wait message;
rl w1 0 ; w1:= result;
dl w0 x2 6 ; w3w0:= buf.receiver,buf.sender;
sh w0 0 ;
ac w0 ( 0 ;
sh w3 0 ;
ac w3 x3 ;
ds. w0 ( j3. ; receiver,sender := w3w0;
rl. w3 ( j13.) ;
rs w2 (x3+16) ;
jl. ( j6.) ; return( result );
; sendanswer
e4: rl. w2 ( j13.) ; entry sendanswer
dl w1 x2+8 ; take result
so w0 16 ; if expression then
jl. w3 ( j4.) ; take expression;
ds. w3 ( j30.) ;
rs w1 x2+8 ;
dl w1 x2+16 ; take buffer addr
so w0 16 ; if expression then
jl. w3 ( j4.) ; take expression;
ds. w3 ( j30.) ;
rs w1 x2+16 ;
rl w0 x2+10 ; test_array_kind( message )
jl. w3 a1. ;
rl w3 x2+12 ;
ea w3 x2+10 ;
al w1 16 ; if hw16 > last of message
am (x3-2) ;
sl w1 1 ;
jl. w3 ( j54.) ; then field alarm;
al w1 1 ; if hw1 <= base of message
sh w1 (x3) ;
jl. w3 ( j54.) ; then field alarm;
wa w1 (x2+12) ; w1:= message addr.
rl w0 (x2+8) ; w0:= result;
rl w2 (x2+16) ; w2:= buffer addr.
jd 1<11+22 ; send answer;
jl. ( j8.) ; return;
; getevent
e5: rl. w2 ( j13.) ; entry getevent
dl w1 x2+8 ; take buffer addr
so w0 16 ; if expression then
jl. w3 ( j4.) ; take expression;
ds. w3 ( j30.) ;
rl w2 x1 ; w2:= buffer addr.
dl w0 x2 6 ; w3w0:= buf.receiver,buf.sender;
sh w0 0 ;
ac w0 ( 0 ;
sh w3 0 ;
ac w3 x3 ;
ds. w0 ( j3. ; receiver,sender := w3w0;
jd 1<11+26 ; get event;
jl. ( j8.) ; return;
; procdesc
e6: rl. w2 ( j13.) ; entry procdesc
ds. w3 ( j30.) ;
rl w0 x2+6 ; test_array_kind( name );
jl. w3 a1. ;
rl w3 x2+8 ;
ea w3 x2+6 ;
al w1 8 ; if hw8 > last of name
am (x3-2) ;
sl w1 1
jl. w3 ( j54.) ; then field alarm;
al w1 1 ; if hw1 <= base of name
sh w1 (x3) ;
jl. w3 ( j54.) ; then field alarm;
al w3 x1 ; w3:= name addr.
wa w3 (x2+8) ;
jd 1<11+4 ; process description;
rl w1 0 ; w1:= result;
jl. ( j6.) ; return( result );
; ownproc
e7: rl. w1 ( j2.) ; entry ownproc
se w1 0 ; if saveown = 0
jl. ( j6.) ;
jd 1<11+5 ; then saveown:= own process;
rs. w1 ( j2.) ;
jl. ( j6.) ; return( saveown );
; bufclaim
e8: rl. w1 ( j2.) ; entry bufclaim
se w1 0 ; if saveown = 0
jl. a3. ;
jd 1<11+5 ; then saveown:= own process;
rs. w1 ( j2.) ;
a3: el w1 x1+26 ;
jl. ( j6.) ; return( buf claim( saveown ));
; areaclaim
e12: rl. w1 ( j2.) ; entry bufclaim
se w1 0 ; if saveown = 0
jl. a4. ;
jd 1<11+5 ; then saveown:= own process;
rs. w1 ( j2.) ;
a4: el w1 x1+27 ;
jl. ( j6.) ; return( area claim( saveown ));
; flushout
e9: rl. w2 ( j13. ; entry address
dl w1 x2+8 ; get param;
so w0 16 ; if expression
jl. w3 ( j4. ; then take expression;
ds. w3 ( j30. ; save stackref, w3;
rl w2 x1 ; w2:= char;
rl. w1 j27. ; w1:= zoneaddr;
jl w3 x1 h33-h21 ; outend;
jl. ( j8. ; return;
; address
e10: rl. w2 ( j13. ; entry address
dl w1 x2 8 ; get param;
so w0 16 ; if expression
jl. w3 ( j4. ; then take expression;
ds. w3 ( j30. ;
al w0 31 ; test param
la w0 x2 6 ;
sh w0 22 ; if variable or zone array
sh w0 16 ;
jl. ( j6. ; then return( 2. formal )
rl w1 x1 ;
jl. ( j6. ; else return((2. formal));
; startintern
e11: rl. w2 ( j13. ; entry address
ds. w3 ( j30. ;
rl w2 x2+8 ; w1:= zone descr.
rl w0 (x2 h0+4 ; w0:= share state(used share)
se w0 0 ;
sn w0 1 ;
jl. a5. ;
jl. w3 ( j29. ;
a5: al w3 x2 h1+2 ; w3:= name address
jd 1<11+58 ; start internal
rl w1 0 ; w1:= result
se w1 0 ; if result = 0 then
jl. ( j6. ; begin
jd 1<11+4 ; w0:= process desrciption
ac w0 ( 0 ; share state(used share):= -w0
rs w0 (x2 h0+4 ; end;
jl. ( j6. ; return(result)
; regret
e13: rl. w2 ( j13. ; entry address
dl w1 x2+8 ; take buffer addr
so w0 16 ; if expression then
jl. w3 ( j4.) ; take expression;
ds. w3 ( j30.) ;
rl w2 x1 ; w2:= buffer addr.
jd 1<11+82 ; regret message;
jl. ( j8.) ; return;
e19:
c. e19-e20-506
m. code too long
z.
c. 502-e19+e20
0
r.252-(:e19-e20:)>1; fill
z.
<:monprocs:>, 0 ; alarm text
e.
\f
w.
; sendmessage
g0: 1 ; first tail, 1 segm
0, r.4 ; discname
1<23+e1-e20 ; entry point
3<18+41<12+41<6 ; integer procedure( undef array name,
0 ; _ undef array message )
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; messageid
1<23+4 ; bs
0, r.4 ; discname
1 ; hw address in own core
9<18 ; own integer
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; waitanswer
1<23+4 ; bs
0, r.4 ; discname
1<23+e2-e20 ; entry point
3<18+41<12+19<6 ; integer procedure( addr int buffer,
0 ; _ undef array answer )
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; waitmessage
1<23+4 ; bs
0, r.4 ; discname
1<23+e3-e20 ; entry point
3<18+19<12+41<6+41 ; integer procedure( undef array name,
0 ; _ undef array message, addr int buf )
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; receiver
1<23+4 ; bs
0, r.4 ; discname
5 ; hw address in own core
9<18 ; own integer
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; sender
1<23+4 ; bs
0, r.4 ; discname
7 ; hw address in own core
9<18 ; own integer
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; sendanswer
1<23+4 ; bs
0, r.4 ; discname
1<23+e4-e20 ; entry point
1<18+19<12+41<6+19 ; procedure( addr int result,
0 ; _ undef array answer, addr int buf )
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; getevent
1<23+4 ; bs
0, r.4 ; discname
1<23+e5-e20 ; entry point
1<18+19<12 ; procedure( addr int buffer )
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; procdesc
1<23+4 ; bs
0, r.4 ; discname
1<23+e6-e20 ; entry point
3<18+41<12 ; integer procedure( undef array name )
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; ownproc
1<23+4 ; bs
0, r.4 ; discname
1<23+e7-e20 ; entry point
3<18 ; integer procedure
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; bufclaim
1<23+4 ; bs
0, r.4 ; discname
1<23+e8-e20 ; entry point
3<18 ; integer procedure
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; areaclaim
1<23+4 ; bs
0, r.4 ; discname
1<23+e12-e20 ; entry point
3<18 ; integer procedure
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; flushout
1<23+4 ; bs
0, r.4 ; discname
1<23+e9-e20 ; entry point
1<18+19<12 ; procedure( address integer )
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; address
1<23+4 ; bs
0, r.4 ; discname
1<23+e10-e20 ; entry point
3<18+41<12 ; integer procedure( undef )
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; startintern
1<23+4 ; bs
0, r.4 ; discname
1<23+e11-e20 ; entry point
3<18+8<12 ; integer procedure( zone )
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
; regret
g1: 1<23+4 ; last tail, bs
0, r.4 ; discname
1<23+e13-e20 ; entry point
1<18+19<12 ; procedure( addr int buffer )
0 ;
4<12+e0-e20 ; code proc, start ext. list
1<12+8 ; 1 segm, 8 bytes
d.
p. <:insertproc:> ;
▶EOF◀