61 lines
		
	
	
	
		
			552 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			552 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .define .rmi2
 | |
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| .sect .text
 | |
| 
 | |
| ! 16-bit signed remainder
 | |
| ! parameters:
 | |
| !   bc: divisor
 | |
| !   de: dividend
 | |
| !   de: result (out)
 | |
| ! no check on overflow
 | |
| 
 | |
| 
 | |
| 
 | |
| .rmi2:
 | |
| 	xor	a
 | |
| 	ld	h,a
 | |
| 	ld	l,a
 | |
| 	sbc	hl,bc
 | |
| 	jp	m,1f
 | |
| 	ld	b,h
 | |
| 	ld	c,l
 | |
| 1:
 | |
| 	or	a
 | |
| 	ld	hl,0
 | |
| 	sbc	hl,de
 | |
| 	jp	m,1f
 | |
| 	ex	de,hl
 | |
| 	cpl
 | |
| 1:
 | |
| 	push	af
 | |
| 	ld	hl,0
 | |
| 	ld	a,16
 | |
| 0:
 | |
| 	add	hl,hl
 | |
| 	ex	de,hl
 | |
| 	add	hl,hl
 | |
| 	ex	de,hl
 | |
| 	jr	nc,1f
 | |
| 	inc	hl
 | |
| 	or	a
 | |
| 1:
 | |
| 	sbc	hl,bc
 | |
| 	inc	de
 | |
| 	jp	p,2f
 | |
| 	add	hl,bc
 | |
| 	dec	de
 | |
| 2:
 | |
| 	dec	a
 | |
| 	jr	nz,0b
 | |
| 	ex	de,hl
 | |
| 	pop	af
 | |
| 	or	a
 | |
| 	jr	z,1f
 | |
| 	ld	hl,0
 | |
| 	sbc	hl,de
 | |
| 	ex	de,hl
 | |
| 1:
 | |
| 	ret
 |