====== 16-Bit Comparison ====== ===== TWW Method ===== 16 bit equivalent of the CMP OPC: /*! «»«»«»«»{CMP16}«»«»«»«» Does exactly the same as CMP of two values (effectively its a val1-val2) and sets the flags as follows: (BCC/BCS) (BEQ/BNE) (BMI/BPL) If val1 = val2 : Carry = SET Zero = SET Negative = CLEAR If val1 > val2 : Carry = SET Zero = CLEAR Negative = CLEAR If val1 < val2 : Carry = CLEAR Zero = CLEAR Negative = SET */ lda val1 sec sbc val2 php lda val1+1 sbc val2+1 php pla sta temp pla and #%00000010 ora #%11111101 and temp pha plp Somewhere on ZP: temp: .byte $00 Different approach: instead of setting flags, goes to different destinations: ; Val1 ≥ Val2 ? LDA Val1 +1 ; high bytes CMP Val2+1 BCC LsThan ; hiVal1 < hiVal2 --> Val1 < Val2 BNE GrtEqu ; hiVal1 ≠ hiVal2 --> Val1 > Val2 LDA Val1 ; low bytes CMP Val2 ;BEQ Equal ; Val1 = Val2 BCS GrtEqu ; loVal1 ≥ loVal2 --> Val1 ≥ Val2 LsThan ... GrtEqu ...