EvalExpression: ; In: a2 = EXPR* bsr Decompose tst.b d1 bne.s \End ; NAN or overflow tst.w d2 beq.s \End ; No operator, just a number bsr EvalDecomposedExpression \End: rts EvalDecomposedExpression: ; In: d0 = IMM1, d2 = OP1, a2 = EXPR* ; Out: d0 = IMM movem.l d0/d2-d4,-(sp) bsr Decompose tst.b d1 beq.s \Ok movem.l (sp)+,d0/d2-d4 ; NAN or overflow rts \Ok: tst.w d2 beq.s \LastOperation cmp.b 7(sp),d2 ; Compare operators priority bcs.s \Recurse movem.l (sp)+,d3-d4 bsr ExecOperator movem.l (sp)+,d3-d4 bra.s EvalDecomposedExpression \Recurse: bsr.s EvalDecomposedExpression \LastOperation: movem.l (sp)+,d3-d4 bsr ExecOperator movem.l (sp)+,d3-d4 rts Decompose: ; In: a2 = EXPR* ; Out: d0 == IMM, d1 = -1/0/1, d2 = OP1, a2 = EXPR* ...