Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define var_x fpOP2 ;output
- #define var_b fpOP2 ; 4 bytes, result gets copied to bottom anyways
- div32_32:
- ;3114.134cc
- ;HLIX/(var_x+4)
- ld bc,(var_x+6)
- call divide32_16
- ld a,e \ cpl \ ld e,a
- ld a,d \ cpl \ ld d,a
- ld (var_b+2),de ;top 16-bit digit
- ;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
- pop hl
- ;BCDE
- xor a
- sub e
- ld e,a
- ld a,0
- sbc a,d
- ld d,a
- sbc hl,bc
- jr nc,+_
- ld bc,(var_b+2)
- dec bc
- ld (var_b+2),bc
- ld bc,(var_x+4)
- ex de,hl
- add hl,bc
- ld bc,(var_x+4)
- ex de,hl
- adc hl,bc
- _:
- ;HLDE is the new remainder
- push de
- pop ix
- ld bc,(var_x+6)
- call divide32_16
- ld a,e \ cpl \ ld l,a
- ld a,d \ cpl \ ld h,a
- ld (var_b),hl ;low 16-bits
- ret
- divide32_16:
- ;HLIX/BC -> DE, BC>=HL
- ;max: 1262cc
- ;min: 967cc
- ;avg: 1087.25cc
- xor a
- add ix,ix \ adc hl,hl \ jp c,div1632_0_2
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_1_2
- div1632_1_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_2_2
- div1632_2_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_3_2
- div1632_3_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_4_2
- div1632_4_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_5_2
- div1632_5_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_6_2
- div1632_6_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_7_2
- div1632_7_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_8_2
- div1632_8_1:
- ld d,a
- xor a
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_9_2
- div1632_9_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_10_2
- div1632_10_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_11_2
- div1632_11_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_12_2
- div1632_12_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_13_2
- div1632_13_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_14_2
- div1632_14_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add ix,ix \ adc hl,hl \ jp c,div1632_15_2
- div1632_15_1:
- add a,a
- ld e,a
- sbc hl,bc \ ret nc \ add hl,bc \ inc e \ ret
- div1632_0_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_1_1
- div1632_1_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_2_1
- div1632_2_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_3_1
- div1632_3_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_4_1
- div1632_4_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_5_1
- div1632_5_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_6_1
- div1632_6_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_7_1
- div1632_7_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_8_1
- div1632_8_2:
- ld d,a
- xor a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_9_1
- div1632_9_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_10_1
- div1632_10_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_11_1
- div1632_11_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_12_1
- div1632_12_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_13_1
- div1632_13_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_14_1
- div1632_14_2:
- add a,a \ sbc hl,bc \ add ix,ix \ adc hl,hl \ jp nc,div1632_15_1
- div1632_15_2:
- add a,a \ ld e,a \ sbc hl,bc \ ret
- divide16:
- ;max: 958cc
- ;min: 663cc
- ;avg: 783.25cc
- xor a
- add hl,hl \ jp c,div16_0_2
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_1_2
- div16_1_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_2_2
- div16_2_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_3_2
- div16_3_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_4_2
- div16_4_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_5_2
- div16_5_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_6_2
- div16_6_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_7_2
- div16_7_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jp c,div16_8_2
- div16_8_1:
- ld d,a
- xor a
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_9_2
- div16_9_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_10_2
- div16_10_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_11_2
- div16_11_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_12_2
- div16_12_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_13_2
- div16_13_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_14_2
- div16_14_1:
- sbc hl,bc \ jr nc,$+3 \ add hl,bc \ rla \ add hl,hl \ jr c,div16_15_2
- div16_15_1:
- add a,a
- ld e,a
- sbc hl,bc \ ret nc \ add hl,bc \ inc e \ ret
- div16_0_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_1_1
- div16_1_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_2_1
- div16_2_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_3_1
- div16_3_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_4_1
- div16_4_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_5_1
- div16_5_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_6_1
- div16_6_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jp nc,div16_7_1
- div16_7_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_8_1
- div16_8_2:
- ld d,a
- xor a \ sbc hl,bc \ add hl,hl \ jr nc,div16_9_1
- div16_9_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_10_1
- div16_10_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_11_1
- div16_11_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_12_1
- div16_12_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_13_1
- div16_13_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_14_1
- div16_14_2:
- add a,a \ sbc hl,bc \ add hl,hl \ jr nc,div16_15_1
- div16_15_2:
- add a,a \ ld e,a \ sbc hl,bc \ ret
- #undefine var_x
- #undefine var_b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement