8-bit Divide

From NESdev Wiki
Revision as of 19:55, 20 April 2008 by Bregalad (talk | contribs) (fixed a stupid mispelling)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

The following code divide two 8-bit integers (range 0...255) and outputs a 16-bit result using only real calculation, no lockup table so the size of the code is very small.

;8-bit divide
;by Bregalad
;Enter with A = Dividend, Y=Divisor
;Output with YA = (1/256)*(A/Y)
Division
        sta Dvd         ;Stores divident
	sty Dvs	        ;Stores divisor
	lda #$00
	sta Res         ;Clear result

	ldy #$10        ;The loop is for 16-bit result
-	asl Dvd
	rol A		;Shift divisor in 1 bit
	cmp Dvs         ;Check if fractional dividend is greater than divisor
	bcc +
	sbc Dvs 	;Substract (C is always set)
+	rol Res	        ;Shift result (1 if substation was done, 0 otherwise)
	rol Res2
	dey
	bne -
	lda Res
	ldy Res2
	rts