35 lines
		
	
	
	
		
			666 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			666 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define Dup
 | |
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| .sect .text
 | |
| 
 | |
| ! This subroutine duplicate's the top n (in register Y) bytes.
 | |
| ! N is atmost 256.
 | |
| ! The duplicating takes place as follows.
 | |
| ! The registerpair is filled with the bytes at stackpointer + N
 | |
| ! and stackpopinter + N-1.
 | |
| ! These two bytes then are pushed onto the stack.
 | |
| ! Next the offset N is decremented and the next two byte are taken
 | |
| ! care off. Until N = 0.
 | |
| 
 | |
| 
 | |
| Dup:
 | |
| 	lda SP+1
 | |
| 	ldx SP+2
 | |
| 	stx ADDR	! address of group (lowbyte)
 | |
| 	sta ADDR+1	! address of group (highbyte)
 | |
|     1:	dey
 | |
| 	lda (ADDR),y	! get lowbyte
 | |
| 	pha
 | |
| 	dey
 | |
| 	lda (ADDR),y	! get highbyte
 | |
| 	tax
 | |
| 	pla
 | |
| 	jsr Push	! push them
 | |
| 	tya
 | |
| 	bne 1b
 | |
| 	rts
 | |
| 
 | |
| 
 |