.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