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