{Xufn.mc last edit by cal: 31-Aug-83 10:13:58 } {**************************} ufnZ2: , c2; ufnZ3: , c3; ufnZ1: TOS _ uTOS, c1; TOSH _ uTOSH, GOTO[ufnX3], c2; ufnX1: c1; ufnX2: c2; ufnX3: S _ S + 1, c3; MAR _ [rhPC, PC + 0], XC2npcDisp, c1, at[ufnB1]; Rx _ 0FF, BRANCH[ufnLoByte, ufnHiByte, 0E], c2; ufnLoByte: Rx _ MD and Rx, GOTO[UFN], c3; ufnHiByte: TT _ MD, c3; TT _ TT and ~Rx, c1; Rx _ TT LRot8, c2; GOTO[UFN], c3; ufn1: Noop, CANCELBR[ufn2, 0F], c1; ufn2: Noop, CANCELBR[ufn3, 0F], c2; ufn2incS: S _ S + 1, CANCELBR[ufn3], c2; ufn2inc2S: S _ S + 2, CANCELBR[ufn3], c2; ufn2inc3S: S _ S + 3, CANCELBR[ufn3], c2; ufn3: S _ S + 1, c3; UFN: {(S) Flush top of stack} {S:evenEmpty} MAR _ [rhS, S], S _ S + 1, c1; MDR _ TOSH, rhTT _ UFNspace{STATSspaceReal}, CANCELBR[$, 2], WriteOK, c2; TT _ (uUFNTableBaseHalf or Rx) LShift1, c3; Map _ Q _ [rhTT, TT + 0], c1; Noop, c2; rhTT _ TT _ MD, {RefBr,} c3; MAR _ [rhS, S + 0], c1; MDR _ TOS, TOS _ ib, c2; S _ S + 2, c3; fnUT: {fetch from ufnTable} {S:oddEmpty} MAR _ [rhTT, Q + 1], c1; Rx _ smallpl, CANCELBR[$, 2], c2; TOSH{ibs} _ rhTOSH{args} _ MD, c3; MAR _ [rhTT, Q + 0], c1; S _ S, Xbus _ TOSH{ibs} LRot8, XDisp, c2; TT{deflo} _ MD, DISP4[ufns, 0C], L3{ibs} _ 0C, c3; ufnIB: {optionally, push ib or ib,ib; TOS{ib}, Rx{smallpl}} {S:oddEmpty} MAR _ [rhS, S - 1], GOTO[ufn12], c1, at[0D, 10, ufns]; MAR _ [rhS, S - 1], GOTO[ufn12], c1, at[0E, 10, ufns]; ufn12: MDR _ Rx{smallpl}, PC _ PC, CANCELBR[$, 2], WriteOK, c2; Rx _ TOS LRot8, L3Disp, c3; MAR _ S _ [rhS, S + 0], BRANCH[ufn1ib, ufn2ib, 0D], c1; ufn1ib: MDR _ TOS, WriteOK, CANCELBR[ufnJoin, 2], c2; ufn2ib: MDR _ Rx or ib, WriteOK, CANCELBR[ufnJoin, 2], c2;{%%} ufnJoin: S _ S + 2, c3; ufnIV: {iVar (new) stored as end of old frame} {S:oddEmpty} apply1: Noop, c1, at[0C, 10, ufns]; Noop, c2; TOSH{args2} _ rhTOSH{args} LShift1, GOTO[apply2], c3; {except} Q _ 51'd, CANCELBR[sink2, 3], c1, at[0F, 10, ufns];{MP9051} { E N D }