|
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: 6912 (0x1b00) Types: TextFile 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◀