Prev: AFE9 Up: Map Next: B07E
B016: perform comparisons
do < compare
B016 20 90 AD JSR $AD90 type match check, set C for string
B019 B0 13 BCS $B02E branch if string
do numeric < compare
B01B A5 6E LDA $6E get FAC2 sign (b7)
B01D 09 7F ORA #$7F set all non sign bits
B01F 25 6A AND $6A and FAC2 mantissa 1 (AND in sign bit)
B021 85 6A STA $6A save FAC2 mantissa 1
B023 A9 69 LDA #$69 set pointer low byte to FAC2
B025 A0 00 LDY #$00 set pointer high byte to FAC2
B027 20 5B BC JSR $BC5B compare FAC1 with (AY)
B02A AA TAX copy the result
B02B 4C 61 B0 JMP $B061 go evaluate result
do string < compare
B02E A9 00 LDA #$00 clear byte
B030 85 0D STA $0D clear data type flag, $FF = string, $00 = numeric
B032 C6 4D DEC $4D clear < bit in comparrison evaluation flag
B034 20 A6 B6 JSR $B6A6 pop string off descriptor stack, or from top of string space
returns with A = length, X = pointer low byte, Y = pointer high byte
B037 85 61 STA $61 save length
B039 86 62 STX $62 save string pointer low byte
B03B 84 63 STY $63 save string pointer high byte
B03D A5 6C LDA $6C get descriptor pointer low byte
B03F A4 6D LDY $6D get descriptor pointer high byte
B041 20 AA B6 JSR $B6AA pop (YA) descriptor off stack or from top of string space
returns with A = length, X = pointer low byte, Y = pointer high byte
B044 86 6C STX $6C save string pointer low byte
B046 84 6D STY $6D save string pointer high byte
B048 AA TAX copy length
B049 38 SEC set carry for subtract
B04A E5 61 SBC $61 subtract string 1 length
B04C F0 08 BEQ $B056 branch if str 1 length = string 2 length
B04E A9 01 LDA #$01 set str 1 length > string 2 length
B050 90 04 BCC $B056 branch if so
B052 A6 61 LDX $61 get string 1 length
B054 A9 FF LDA #$FF set str 1 length < string 2 length
B056 85 66 STA $66 save length compare
B058 A0 FF LDY #$FF set index
B05A E8 INX adjust for loop
B05B C8 INY increment index
B05C CA DEX decrement count
B05D D0 07 BNE $B066 branch if still bytes to do
B05F A6 66 LDX $66 get length compare back
B061 30 0F BMI $B072 branch if str 1 < str 2
B063 18 CLC flag str 1 <= str 2
B064 90 0C BCC $B072 go evaluate result
B066 B1 6C LDA ($6C),Y get string 2 byte
B068 D1 62 CMP ($62),Y compare with string 1 byte
B06A F0 EF BEQ $B05B loop if bytes =
B06C A2 FF LDX #$FF set str 1 < string 2
B06E B0 02 BCS $B072 branch if so
B070 A2 01 LDX #$01 set str 1 > string 2
B072 E8 INX x = 0, 1 or 2
B073 8A TXA copy to A
B074 2A ROL A * 2 (1, 2 or 4)
B075 25 12 AND $12 AND with the comparison evaluation flag
B077 F0 02 BEQ $B07B branch if 0 (compare is false)
B079 A9 FF LDA #$FF else set result true
B07B 4C 3C BC JMP $BC3C save A as integer byte and return
Prev: AFE9 Up: Map Next: B07E