50 lines
		
	
	
	
		
			939 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			939 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define Cmu4
 | |
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| .sect .text
 | |
| 
 | |
| ! This subroutine compares two unsigned fourbyte integers.
 | |
| ! If T is first pushed and than S the routine will return:
 | |
| !    -1   if S < T,
 | |
| !     0   if S = T,
 | |
| !     1   if S > T.
 | |
| 
 | |
| 
 | |
| Cmu4:
 | |
| 	lda #ARTH
 | |
| 	sta ADDR
 | |
| 	lda #0
 | |
| 	sta ADDR+1
 | |
| 	jsr Sdo		! store S in zeropage ARTH - ARTH+3
 | |
| 	lda #ARTH+4
 | |
| 	sta ADDR
 | |
| 	jsr Sdo		! store T in zeropage ARTH+4 - ARTH+7
 | |
| 	lda ARTH+7
 | |
| 	cmp ARTH+3
 | |
| 	bcc 3f		! S (lowbyte+3) < T (lowbyte+3)
 | |
| 	bne 2f		! S (lowbyte+3) < T (lowbyte+3)
 | |
| 	lda ARTH+6
 | |
| 	cmp ARTH+2
 | |
| 	bcc 3f		! S (lowbyte+2) < T (lowbyte+2)
 | |
| 	bne 2f		! S (lowbyte+2) < T (lowbyte+2)
 | |
| 	lda ARTH+5
 | |
| 	cmp ARTH+1
 | |
| 	bcc 3f		! S (lowbyte+1) < T (lowbyte+1)
 | |
| 	bne 2f		! S (lowbyte+1) < T (lowbyte+1)
 | |
| 	lda ARTH+4
 | |
| 	cmp ARTH
 | |
| 	bcc 3f		! S (lowbyte+0) < T (lowbyte+0)
 | |
| 	bne 2f		! S (lowbyte+0) < T (lowbyte+0)
 | |
| 	lda #0
 | |
| 	tax		! S = T
 | |
| 	rts
 | |
|     2:	lda #0		! S > T
 | |
| 	ldx #1
 | |
| 	rts
 | |
|     3:	lda #0x0FF	! S < T
 | |
| 	tax
 | |
| 	rts
 | |
| 
 | |
| 
 |