53 lines
		
	
	
	
		
			591 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			591 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define .sar
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
! use .mli2
 | 
						|
! use .trp.z
 | 
						|
 | 
						|
! 2-byte descriptors
 | 
						|
! any size array elements
 | 
						|
! parameters:
 | 
						|
!    on stack
 | 
						|
! uses .mli2
 | 
						|
! adapted from .aar and .sts
 | 
						|
 | 
						|
 | 
						|
 | 
						|
.sar:
 | 
						|
	pop hl
 | 
						|
	pop ix
 | 
						|
	ex (sp),hl
 | 
						|
	ld c,(ix+0)
 | 
						|
	ld b,(ix+1)
 | 
						|
	xor a
 | 
						|
	sbc hl,bc
 | 
						|
	ld c,(ix+4)
 | 
						|
	ld b,(ix+5)
 | 
						|
	ex de,hl
 | 
						|
	call .mli2
 | 
						|
	pop ix
 | 
						|
	pop de
 | 
						|
	add hl,de
 | 
						|
	srl b		! bc contains #bytes to transfer
 | 
						|
	rr c		! divide bc by 2
 | 
						|
	jr nc,1f
 | 
						|
	ld a,c
 | 
						|
	or b
 | 
						|
	jr nz,.trp.z
 | 
						|
	pop bc
 | 
						|
	ld (hl),c
 | 
						|
	jp (ix)
 | 
						|
1:
 | 
						|
	pop de
 | 
						|
	ld (hl),e
 | 
						|
	inc hl
 | 
						|
	ld (hl),d
 | 
						|
	inc hl
 | 
						|
	dec bc
 | 
						|
	ld a,b
 | 
						|
	or c
 | 
						|
	jr nz,1b
 | 
						|
	jp (ix)
 |