42 lines
		
	
	
	
		
			598 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			598 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define .sts
 | |
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| .sect .text
 | |
| ! use trp.z
 | |
| 
 | |
| ! object size given by 2-byte integer on
 | |
| ! top of stack.
 | |
| ! parameters:
 | |
| !   on stack
 | |
| ! checks if #bytes is even or 1,
 | |
| ! else traps
 | |
| 
 | |
| 
 | |
| 
 | |
| .sts:
 | |
| 	pop ix		! save return address
 | |
| 	pop de		! # bytes to transfer
 | |
| 	pop hl		! destination address
 | |
| 	srl d		! divide de by 2
 | |
| 	rr e
 | |
| 	jr nc,1f	! see if it was odd
 | |
| 	ld a,e		! yes, must be 1
 | |
| 	or d
 | |
| 	jr nz,.trp.z	! no, error
 | |
| 	pop de		! transfer 1 byte,
 | |
| 			! padded with zeroes
 | |
| 	ld (hl),e
 | |
| 	jp (ix)
 | |
| 1:
 | |
| 	pop bc
 | |
| 	ld (hl), c
 | |
| 	inc hl
 | |
| 	ld (hl),b
 | |
| 	inc hl
 | |
| 	dec de
 | |
| 	ld a,e
 | |
| 	or d
 | |
| 	jr nz,1b
 | |
| 	jp (ix)
 |