- frame=(adrflg?adrval:endhdr[r5])&EVEN; lastframe=0;
- callpc=(adrflg?get(frame+2,DSP):endhdr[pc]);
+ IF adrflg
+ THEN frame=adrval;
+ word=get(adrval+6,DSP)&0xFFFF;
+ IF word&0x2000
+ THEN /* 'calls', can figure out argp */
+ argp=adrval+20+((word>>14)&3); word &= 0xFFF;
+ WHILE word DO IF word&1 THEN argp+=4; FI word>>=1; OD
+ ELSE /* 'callg', can't tell where argp is */ argp=frame;
+ FI
+ callpc=get(frame+16,DSP);
+ ELSE argp= *(ADDR *)(((ADDR)&u)+AP);
+ frame= *(ADDR *)(((ADDR)&u)+FP);
+ callpc= *(ADDR *)(((ADDR)&u)+PC);
+ FI
+ lastframe=0;