.macro Add_16 a_low, a_hi, b_low, b_hi ; a = a + b CLC LDA b_low ADC a_low STA a_low LDA b_hi ADC a_hi STA a_hi .endmacro .macro Sub_16 a_low, a_hi, b_low, b_hi ; a = a - b SEC LDA a_low SBC b_low STA a_low LDA a_hi SBC b_hi STA a_hi .endmacro .macro mult_16 low_, hi_ ; [low, hi] = [low, hi]*2 CLC ROL low_ ROL hi_ .endmacro ;;Se below for some fast 16bit logic ;;http://6502.org/tutorials/compare_beyond.html ;; exampel 4.1.1 ;;Larger then operation. IF a < b then jump to label .macro Lag_16 a_low, a_hi, b_low, b_hi, label ; [low, hi] = [low, hi]*2 LDA a_hi ; compare high bytes CMP b_hi BCC label ; if NUM1H < NUM2H then NUM1 < NUM2 BNE LABEL ; if NUM1H <> NUM2H then NUM1 > NUM2 (so NUM1 >= NUM2) LDA a_low ; compare low bytes CMP b_low BCC label ; if NUM1L < NUM2L then NUM1 < NUM2 LABEL: .endmacro