ack/mach/6500/libem/cms.s
1987-01-30 18:41:42 +00:00

52 lines
1,022 B
ArmAsm

.define Cms
.sect .text
.sect .rom
.sect .data
.sect .bss
.sect .text
! This subroutine compares two groups of bytes, bit for bit.
! The groups can consist of 2 or 4 bytes. This number is in
! register Y.
! The address of the first group is stored in zeropage locations
! ADDR and ADDR+1, the address of the second group in ADDR+2 and ADDR+3
! The routine returns a 0 on equality, a 1 otherwise.
Cms:
lda SP+2
ldx SP+1
sta ADDR ! address of first group (lowbyte)
stx ADDR+1 ! address of second group (highbyte)
clc
tya
adc SP+2
sta SP+2
sta ADDR+2 ! address of second group (lowbyte)
txa
adc #0
sta ADDR+3 ! address of second group (highbyte)
tax
clc
tya
adc SP+2
sta SP+2 ! new stackpointer (lowbyte)
txa
adc #0
sta SP+1 ! new stackpointer (highbyte)
1: dey
lda (ADDR),y ! get byte first group
cmp (ADDR+2),y ! compare bit for bit with byte second group
bne 2f
tya
bne 1b
lda #0 ! both groups are equal
tax
rts
2: lda #0 ! there is a difference between the groups
ldx #1
rts