|
|
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: 2304 (0x900)
Types: TextFileVerbose
Names: »hlvpushpop«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system
└─⟦72244f0ef⟧
└─⟦this⟧ »hlvpushpop«
800923 hlv
>sp3
>a1 RC3502 Instruktioner: LPUSH og LPOP.
>nf
instruction lpush(0e0):
(* param:: none;
stack:: r2a, r1a: addr -> ; *)
>sp1
>in2
>nf
r2a:= memaddr(lu-3);
r1a:= memaddr(lu-7);
r1:= memaddr(r1a);
if nill(r1) or locked(r1) then exception(lpushe1);
r1stack:= memaddr(r1 + stack);
if not nill(r1stack) then exception(lpushe2);
r2:= memaddr(r2a);
if r1 = r2 then exception(lpushe3);
if locked(r2) then exception(lpushe4);
mem(r1a):= nill;
memaddr(r1 + stack):= r2;
memaddr(r2a):= r1;
r1kind:= mem(r1 + kind);
if not nill(r2) and r1kind = headerkind then
begin (* copy buffer description *)
>in2
>nf
r2size:= mem(r2 + size);
r2sadr:= memaddr(r2 + startaddr);
memaddr(r1 + startaddr):= r2sadr;
mem(r1 + size):= r2size
>in-2
>nf
end copy buffer description;
lu:= lu - 8;
ic:= ic + 1;
goto fetch;
>in-2
>np
>nf
instruction lpop(0e1):
(* param:: none;
stack:: r2a, r1a: addr -> ; *)
>sp1
>in2
>nf
r2a:= memaddr(lu-3);
r1a:= memaddr(lu-7);
r1base:= mem(r1a);
if not nill(r1base) then exception(lpope1);
r2:= mem(r2a);
if nill(r2) then exception(lpope2);
if locked(r2) then exception(lpope3);
memaddr(r1a):= r2;
r2stack:= nill;
r2stack :=: memaddr(r2 + stack);
memaddr(r2a):= r2stack;
r2kind:= mem(r2 + kind);
if r2kind = headerkind then
begin (* clear buffer description *)
>in2
>nf
mem(r2 + size):= 0;
mem(r2 + startaddr):= nill;
>in-2
>nf
end clear buffer description;
lu:= lu - 8;
ic:= ic + 1;
goto fetch;
«eof»