-;
+;
; Ullrich von Bassewitz, 07.04.2000
+; Christian Krueger, 12-Mar-2017, added 65SC02 optimization
;
; CC65 runtime: -= operator
;
; in ptr1, the high byte is in Y, and the decrement is in eax.
;
- .export lsubeq1, lsubeqa, lsubeq
- .importzp sreg, ptr1, tmp1
+ .export lsubeq1, lsubeqa, lsubeq
+ .importzp sreg, ptr1
+ .macpack cpu
lsubeq1:
- lda #$01
+ lda #$01
lsubeqa:
- ldx #$00
- stx sreg
- stx sreg+1
-
-lsubeq: sty ptr1+1 ; Store high byte of address
- ldy #$00 ; Address low byte
- sec
-
- sta tmp1
- lda (ptr1),y ; Load byte 0
- sbc tmp1
- sta (ptr1),y
- pha ; Save byte 0 of result for later
-
- iny ; Address byte 1
- stx tmp1
- lda (ptr1),y ; Load byte 1
- sbc tmp1
- sta (ptr1),y
- tax
-
- iny ; Address byte 2
- lda (ptr1),y
- sbc sreg
- sta (ptr1),y
- sta sreg
-
- iny ; Address byte 3
- lda (ptr1),y
- sbc sreg+1
- sta (ptr1),y
- sta sreg+1
-
- pla ; Retrieve byte 0 of result
-
- rts ; Done
+ ldx #$00
+ stx sreg
+ stx sreg+1
+
+lsubeq: sty ptr1+1 ; Store high byte of address
+
+ sec
+ eor #$FF
+ .if (.cpu .bitand ::CPU_ISET_65SC02)
+ adc (ptr1) ; Subtract byte 0
+ sta (ptr1)
+ ldy #$01 ; Address byte 1
+ .else
+ ldy #$00 ; Address low byte
+ adc (ptr1),y ; Subtract byte 0
+ sta (ptr1),y
+ iny ; Address byte 1
+ .endif
+ pha ; Save byte 0 of result for later
+ txa
+ eor #$FF
+ adc (ptr1),y ; Subtract byte 1
+ sta (ptr1),y
+ tax
+
+ iny ; Address byte 2
+ lda (ptr1),y
+ sbc sreg
+ sta (ptr1),y
+ sta sreg
+
+ iny ; Address byte 3
+ lda (ptr1),y
+ sbc sreg+1
+ sta (ptr1),y
+ sta sreg+1
+
+ pla ; Retrieve byte 0 of result
+
+ rts ; Done