39 lines
		
	
	
	
		
			918 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			918 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define And
 | |
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| .sect .text
 | |
| 
 | |
| ! This subroutine performs the logical and on two groups of
 | |
| ! atmost 254 bytes. The number of bytes is in register Y.
 | |
| ! The two groups are on the stack.
 | |
| ! First the value of the stackpointer is saved in zeropage
 | |
| ! locations ADDR, ADDR+1. Then an offset of Y is added
 | |
| ! and stored in ADDR+2, ADDR+3.
 | |
| ! The result is pushed back on the stack.
 | |
| 
 | |
| 
 | |
| And:
 | |
| 	lda SP+1
 | |
| 	sta ADDR+1	! address of first group (lowbyte)
 | |
| 	lda SP+2
 | |
| 	sta ADDR	! address of first group (highbyte)
 | |
| 	clc
 | |
| 	tya
 | |
| 	adc SP+2
 | |
| 	sta SP+2	! new stackpointer (lowbyte)
 | |
| 	sta ADDR+2	! stackpointer + Y (lowbyte)
 | |
| 	lda #0
 | |
| 	adc SP+1
 | |
| 	sta SP+1	! new stackpointer (highbyte)
 | |
| 	sta ADDR+3	! stackpointer + Y (highbyte)
 | |
|     1:  dey
 | |
| 	lda (ADDR),y	! get byte first group
 | |
| 	and (ADDR+2),y	! perform logical and with second group
 | |
| 	sta (ADDR+2),y	! push result on real_stack
 | |
| 	tya
 | |
| 	bne 1b		! do it n times
 | |
| 	rts
 | |
| 
 | |
| 
 |