41 lines
		
	
	
	
		
			781 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			781 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define Set
 | |
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| .sect .text
 | |
| 
 | |
| ! This subroutine creates a set of n (n <= 256) bytes.
 | |
| ! In this set a certain bit, which number is in registerpair AX,
 | |
| ! is set. The rest is zero.
 | |
| 
 | |
| 
 | |
| Set:
 | |
| 	stx ARTH	! save bitnumber (lowbyte)
 | |
| 	sta ARTH+1	! save bitnumber (highbyte)
 | |
| 	jsr Zer		! create n zerobytes
 | |
| 	lda ARTH
 | |
| 	and #0x07	! n mod 8 (bitnumber in byte)
 | |
| 	tax
 | |
| 	lda #1
 | |
| 	cpx #0
 | |
| 	beq 2f
 | |
|     1:	asl a		! set bit (n mod 8)
 | |
| 	dex
 | |
| 	bne 1b
 | |
|     2:	sta ARTH+2
 | |
| 	ldx #3
 | |
|     1:	lsr ARTH+1	! shiftright n 3 times (= n div 8)
 | |
| 	ror ARTH	! this is the bytenumber
 | |
| 	dex
 | |
| 	bne 1b
 | |
| 	ldy ARTH	! load bytenumber
 | |
| 	lda SP+1
 | |
| 	ldx SP+2
 | |
| 	stx ADDR	! address of set (lowbyte)
 | |
| 	sta ADDR+1	! address of set (highbyte)
 | |
| 	lda ARTH+2	! get bit
 | |
| 	sta (ADDR),y	! store byte with bit on
 | |
| 	rts
 | |
| 
 | |
| 
 |