37 lines
		
	
	
	
		
			540 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
	
		
			540 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define .sts
 | 
						|
! 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)
 |