?login_element?
?pathlinks? – Rev 1485
Blame |
Last modification |
View Log
| Download
ifndef included_div64_32
define included_div64_32
include "div32_16.asm"
include "../../common/mul16.asm"
var_x=xOP2 ;output
var_b=xOP2 ; 4 bytes, result gets copied to bottom anyways
var_n=xOP3
div64_32:
;var_n / var_x
;HLDE is the remainder
;BCIX is the quotient
;440+2{0,96}+2*div32_16+2*mul16
;min: 2408cc
;max: 3908cc
;avg: 3356.274cc
ld hl,(var_n+6)
ld de,(var_n+4)
ld bc,(var_x+6)
call div32_16
push de
;Need to adjust the remainder
push hl
ld bc,(var_x+4)
call mul16
;DEHL
ld b,d
ld c,e
ex de,hl
ld hl,(var_n+2)
or a
sbc hl,de
ex de,hl
pop hl
sbc hl,bc
jr nc,div64_32_adjust_done
div64_32_adjust0;_:
pop bc
dec bc
push bc
ld bc,(var_x+4)
ex de,hl
add hl,bc
ld bc,(var_x+6)
ex de,hl
adc hl,bc
jr nc,div64_32_adjust0;-_
div64_32_adjust_done:
;HLDE is the new remainder
ld bc,(var_x+6)
call div32_16
push de
;Need to adjust the remainder
;(HL:(00-DE*(var_x+4))
push hl
ld bc,(var_x+4)
call mul16
;DEHL
ld b,d
ld c,e
ex de,hl
ld hl,(var_n)
or a
sbc hl,de
ex de,hl
pop hl
sbc hl,bc
jr nc,div64_32_adjustq;+_
pop bc
dec bc
push bc
ld bc,(var_x+4)
ex de,hl
add hl,bc
ld bc,(var_x+6)
ex de,hl
adc hl,bc
div64_32_adjustq;_:
;HLDE is the new remainder
pop ix
pop bc
ret
endif