User Tools

Site Tools


base:24bit_division_24-bit_result

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:24bit_division_24-bit_result [2017-03-18 10:41] (current)
verz created
Line 1: Line 1:
 +It's just an enlarged version of the 16-bit division. There'​s not enough unused page-zero locations on a C64 to have all the variables in page-zero. The remainder variable is in page-zero because is the most used.
 +<​code>​
 +; Executes an unsigned integer division of a 24-bit dividend by a 24-bit divisor
 +; the result goes to dividend and remainder variables
 +;
 +; Verz!!! 18-mar-2017
  
 +div24 lda #0         ;preset remainder to 0
 + sta remainder
 + sta remainder+1
 + sta remainder+2
 + ldx #24         ;repeat for each bit: ...
 +
 +divloop asl dividend ;​dividend lb & hb*2, msb -> Carry
 + rol dividend+1
 + rol dividend+2
 + rol remainder ;​remainder lb & hb * 2 + msb from carry
 + rol remainder+1
 + rol remainder+2
 + lda remainder
 + sec
 + sbc divisor ;​substract divisor to see if it fits in
 + tay         ;lb result -> Y, for we may need it later
 + lda remainder+1
 + sbc divisor+1
 + sta pztemp
 + lda remainder+2
 + sbc divisor+2
 + bcc skip ;if carry=0 then divisor didn't fit in yet
 +
 + sta remainder+2 ;​else save substraction result as new remainder,
 + lda pztemp
 + sta remainder+1
 + sty remainder
 + inc dividend ;and INCrement result cause divisor fit in 1 times
 +
 +skip dex
 + bne divloop
 + rts
 +
 +dividend .ds 3
 +divisor .ds 3
 +remainder .equ $fb ; remainder is in zero-page to gain some cycle/byte ($fb-$fd)
 +pztemp .equ $fe
 +
 +</​code>​
base/24bit_division_24-bit_result.txt ยท Last modified: 2017-03-18 10:41 by verz