udiv.s



;
; Ullrich von Bassewitz, 07.08.1998
;
; CC65 runtime: division for unsigned ints
;

       	.export		tosudiva0, tosudivax, udiv16
	.import		popsreg
	.importzp	sreg, ptr1, ptr4

tosudiva0:
       	ldx	#0
tosudivax:
       	sta	ptr4
       	stx	ptr4+1 	       	; Save right operand
       	jsr	popsreg		; Get left operand

; Do the division

 	jsr	udiv16

; Result is in sreg, remainder in ptr1

 	lda	sreg
 	ldx	sreg+1
 	rts

; Do (sreg/ptr4) -> sreg (see mult-div.s from "The Fridge").
; This is also the entry point for the signed division

udiv16:	lda	#0
 	sta	ptr1+1
 	ldy	#16
L0:	asl	sreg
 	rol	sreg+1
 	rol	a
 	rol	ptr1+1
 	pha
 	cmp	ptr4
 	lda	ptr1+1
 	sbc	ptr4+1
	bcc	L1
	sta	ptr1+1
	pla
	sbc	ptr4
	pha
	inc	sreg
L1:	pla
	dey
	bne	L0
	sta	ptr1
	rts




Valid HTML 4.0! udiv.s.html; generated on Sat Oct 13 22:41:33 2001 by ca65html
uz@cc65.org