Zero is deleted as a possible argument to LOI and STI.

Allowing that was an oversight.
This commit is contained in:
keie 1985-01-31 13:58:09 +00:00
parent 1f56b2aa4c
commit 6459b0bf5f

View file

@ -281,7 +281,7 @@ begin if (a<0) or (a>maxoffs)
end; end;
function argo(a:double):size; function argo(a:double):size;
begin if (a<0) or (a>maxoffs) begin if (a<=0) or (a>maxoffs)
then trap(EODDZ) then trap(EODDZ)
else if (a mod wsize<>0) and (wsize mod a<>0) then trap(EODDZ); else if (a mod wsize<>0) and (wsize mod a<>0) then trap(EODDZ);
argo:=a ; argo:=a ;
@ -683,7 +683,7 @@ begin
a:=argp(uerrorproc); a:=argp(uerrorproc);
uerrorproc:=0; { reset signal } uerrorproc:=0; { reset signal }
call(a); { call the routine } call(a); { call the routine }
intrap:=false; { Don't catch recursive traps anymore } intrap:=false; { Do not catch recursive traps anymore }
goto 8888; { reenter main loop } goto 8888; { reenter main loop }
end; end;
@ -1149,7 +1149,7 @@ end;
jmp (r2) /done jmp (r2) /done
The important thing to notice is where and how the operand fetch occurred: The important thing to notice is where and how the operand fetch occurred:
lol2, lol4, and lol6, (the mini's) have implicit operands lol2, lol4, and lol6, (the minis) have implicit operands
lolb knew it had to fetch one byte, and did so without any table lookup lolb knew it had to fetch one byte, and did so without any table lookup
lolw knew it had to fetch a word, and did so, high order byte first } lolw knew it had to fetch a word, and did so, high order byte first }
{ {
@ -1604,10 +1604,9 @@ begin
end; end;
CSA: begin k:=argw(k); if k<>wsize then trap(EILLINS); CSA: begin k:=argw(k); if k<>wsize then trap(EILLINS);
a:=popa; a:=popa;
st:= popsw - signwd(memw(a+asize)); b:=0; st:= popsw - signwd(memw(a+asize));
if (st>=0) and (st<=memw(a+wsize+asize)) then if (st>=0) and (st<=memw(a+wsize+asize)) then
b:=mema(a+2*wsize+asize+asize*st); b:=mema(a+2*wsize+asize+asize*st) else b:=mema(a);
if b=0 then b:=mema(a);
if b=0 then trap(ECASE) else newpc(b) if b=0 then trap(ECASE) else newpc(b)
end; end;
CSB: begin k:=argw(k); if k<>wsize then trap(EILLINS); a:=popa; CSB: begin k:=argw(k); if k<>wsize then trap(EILLINS); a:=popa;