|
|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 6912 (0x1b00)
Types: TextFileVerbose
Names: »lmitxt055«
└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
└─⟦093e2ad1c⟧
└─⟦this⟧ »lmitxt055«
;;
;; rc3502 sis instructions.
;;
;; file: lmitxt055
;;
;;
;
;;
.instruction lpush ;
;;
;; param:: none;
;; stack:: r2a, r1a: addr -> ;
;;
,,cjs cget4 ; r1a,r2a:= cget4; (*zrdw=r1a,w87=r2a*)
,,cjs getshare ; r1:= getshare(r1a); (*zrd=r1*)
q:=lpushe1,, ;
zdx:=w6:=w2,,cjp b1 xept ; if nill(r1) then exception(lpushe1);
w5:=w1+msgstack,, ; (*zrdx=r1+stack*)
rdx:=w5,,cjs cread1 ; r1stack:= cread1(r1+stack);
bus:=w3:=w1,s,ldct xept ;
w5:=w7,,cjp b1 lpush10 ; if not nill(r1stack)
q:=lpushe2,,jrp b1 ; then exception(lpushe2);
lpush10: ;
w6:=w8,,cjs cread21 ; r2:= cread21(r2a);
w1 xor rd,s,ldct xept ;
w2 xor zd,s,cjp not zro lpush20; if r1 = r2 then
,,cjp not zro lpush20 ; exception(lpushe3);
q:=lpushe3,,jrp not zro ;
lpush20: ;
w4:=w1,, ;
w1:=w3,, ; (*w34=r2*)
q:=lpushe4,, ;
w3:=w2,s, ; if locked(r2) then
w6:=zdw,,cjp b0 xept ; exception(lpushe4);
w5:=rdw,,cjs cwrite1 ; cwrite1(r1a,nill);
w1:=w4,, ;
w6:=zdx,, ;
w5:=rdx,,cjs cwrite21 ; cwrite21(r1+stack,r2);
w5:=w5-msgstack,, ;
w2:=w8,, ;
w1:=w7,,cjs cwrite65 ; cwrite65(r2a,r1);
w5:=w5+msgtype,, ;
w8:=w5,,cjs cread1 ; r1kind:= cread1(r1+kind);
bus:=w3,s, ;
bus:=w1,s,cjp b1 cfin4 ; if not nill(r2) and
w6:=w3,,cjp not zro cfin4 ; r1kind = headerkind then
w5:=w4+msgsize,, ; begin (* copy buf. descr. *)
,,cjs cread1 ; size:= cread1(r2+size);
lpushr1= msgsadr - msgsize ;
w5:=w5+lpushr1,, ;
w7:=w1,,cjs cread21 ; addr:= cread21(r2+addr);
lpushr2= msgsadr - msgtype ;
w5:=w8+lpushr2,, ;
w6:=zdx,,cjs cwrite21 ; cwrite(r1+addr,addr);
w5:=w5-lpushr1,, ;
w1:=w7,,cjs cwrite1 ; cwrite1(r1+size,size);
,,cjp cfin4 ; goto cfin4;
.p ;
;;
.instruction lpop ;
;;
;; param:: none;
;; stack:: r2a, r1a: addr -> ;
;;
,,cjs cget4 ; r1a,r2a:= cget4; (*zrdw=r1a,w87=r2a*)
w6:=zdw,, ;
w5:=rdw,,cjs cread1 ; r1:= cread1(r1a);
bus:=w1,s,ldct xept ; if not nill(r1) then
w2:=w8,,cjp b1 lpop10 ; exception(lpope1);
q:=lpope1,,jrp b1 ;
lpop10: ;
w1:=w7,,cjs cread65 ; r2:= cread65(r2a);
zd:=w6,s,ldct xept ; if locked(r2) then
rd:=w5,,cjp b0 lpop20 ; exception(lpope3);
w2:=zdw,,cjp not b1 lpop30 ; if nill(r2) then
q:=lpope2,,jrp not b1 ; exception(lpope2);
lpop20: ;
q:=lpope3,,jrp not b0 ;
lpop30: ;
w1:=rdw,,cjs cwrite65 ; cwrite65(r1a,r2);
w5:=w5+msgstack,, ;
bus:=40,w1:=w1-w1,, ; r2stack:= nill;
w2:=swp,,cjs cexch21 ; r2stack :=: cexch(r2+stack);
w6:=w8,, ;
w5:=w7,,cjs cwrite21 ; cwrite21(r2a,r2stack);
w6:=zd,, ;
w5:=msgtype,, ;
w5:=w5+rd,,cjs cread1 ; r2kind:= cread1(r2+kind);
bus:=40,w1,s, ; if r2kind=headerkind then
w3:=swp,,cjp not zro cfin4 ; begin (*clear buf. descr.*)
lpopr1= msgsize - msgtype ;
w5:=w5+lpopr1,, ;
,,cjs cwrite1 ; cwrite1(r2+size,0);
lpopr2= msgsadr - msgsize ;
w5:=w5+lpopr2,, ;
w1:=w3,,cjs cwrite1 ; cwrite1(r2+addr,nill);
,,cjp cfin4 ; end; goto cfin4;
.p ;
.instruction lrese ;; (* reserve reference *)
;;
;; time :: 41x = 8,90us
;; param:: none;
;; stack:: refadr: addr -> refadr: addr;
;;
,,cjs readluc ; readluc;
w1:=bd--,h w s,cjs readluct; refadr.d:= waitmem-1; readluct;
w2:=bd,h w s,cjs read12t ; refadr.b:= waitmem; readnextt(refadr);
bus:=80,,h , ;
w4:=swp,h , ; w4:= lockbit;
w3:=bd,h w s,cjs rterror ; ref.b:= waitmem; therror;
,,cjp b1 nillerr ; if nill(ref) then goto nillerror;
,,cjp b0 lockerr ; if lock(ref) then goto lockerror;
w3:=w3 ior w4,,cjs writenext; writenext(refadr,ref.b or lockbit);
slu:=zd,,cjp fetch ; slu:= regset.lu;(*=slu+2*); goto fetch;
;
lockerr: ;lockerror:
q:=llocke,, ; q:= llockerror;
,,cjp xept ; goto exception;
.p ;
;;
.instruction llock ;; (* lock type on msg *)
;;
;; time :: 97x = 21,2us
;; param:: ldisp: word;
;; stack:: minsize: word; refadr: addr -> refadr: addr;
;;
,,cjs readcont ; ldisp:= readcont;
w0:=w3,,cjs readluc ; readluc;
w4:=bd,h w s,cjs readluct ; minsize:= waitmem; readluct;
w1:=bd--,h w s,cjs readluct; refadr.d:= waitmem-1; readluct;
w2:=bd,h w s,cjs read12t ; refadr.b:= waitmem; read12t(refadr);
w6:=bd,h w s,cjs rterror ; ref.b:= waitmem; therror;
w1:=w1++,,cjp b1 nillerr ; if nill(ref) then goto nillerror;
w1:=w1++,,cjp b0 lockerr ; if lock(ref) then goto lockerror;
slu:=slu++,,cjs read12 ; read12(refadr+2);
llocktype= msgtype - 1 ;
w5:=llocktype,h , ; ltype:= msgtype - 1;
w5:=w5+bd,h w s,cjs readnextt; ref.d:= waitmem; readnextt(ref.type);
w7:=llocke1,h , ;
q:=bd,h w s,cjs rterror ; if waitmem = chtype then
q:=w7,,cjp b0 xept ; exception(locktypeerror);
slu:=slu++,,cjs readnext ; readnext(ref.size);
q:=llocke2,h , ;
bd-w4,h w s,cjs rterror ; if waitmem < minsize then
w1:=w0--,,cjs not acy xept ; exception(llocksizeerror);
w2:=spb,,cjs readnext ; readnext(ref.saddr.b);
w3:=bd,h w s,cjs readnextt ; sad.b:= waitmem; readnextt(ref.saddr.d);
w4:=bd,h w s,cjs terror ; sad.d:= waitmem; terror;
w1:=w1+rd0,, ; l.d:= sf + ldisp;
slu:=slu++,,cjs writenext ; writenext(spb,l.d,sad.b);
w3:=w4,,cjs writenext ; writenext(spb,l.d+2,sad.d);
slu:=slu++,,cjp fetch ; slu:= slu + 4; goto fetch;
;;
;; end of lmitxt055
;;
.p ;
«eof»