Login

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

 ifndef included_div32_16
 define included_div32_16

var_x=xOP2   ;output
var_b=xOP2   ; 4 bytes, result gets copied to bottom anyways
var_n=xOP3
div32_16:
;HLDE/BC, BC>HL
;770+16{0,10}+{0,20+{0,22+{0,21}}}
;min: 770
;max: 993
;avg: 868.125

  push bc
  ld a,b
  srl a
  cpl
  ld b,a
  ld a,c
  rra
  cpl
  ld c,a
  inc bc
  ld a,d
  add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  ld d,a
  ld a,e
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl : add hl,bc : jr c,$+4 : sbc hl,bc
  rla : adc hl,hl
  ld e,a
  pop bc
  bit 0,c
  ret z
;HL is the remainder
;r-Q*E = HL-DE
  sbc hl,de
  ret nc
  add hl,bc
  dec de
  ret c
  add hl,bc
  dec de
  ret
 endif