dvu2.s 472 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. .define .dvu2
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! 16-bit divide
  8. ! parameters:
  9. ! bc: divisor
  10. ! de: dividend
  11. ! de: quotient (out)
  12. ! hl: remainder (out)
  13. ! no overflow detection
  14. .dvu2:
  15. or a
  16. ld h,d
  17. ld l,e
  18. sbc hl,bc
  19. jp m,3f
  20. jp c,3f ! bc > de?
  21. ld hl,0
  22. ld a,16
  23. 0:
  24. add hl,hl
  25. ex de,hl
  26. add hl,hl
  27. ex de,hl
  28. jr nc,1f
  29. inc hl
  30. or a
  31. 1:
  32. sbc hl,bc
  33. inc de
  34. jp p,2f
  35. add hl,bc
  36. dec de
  37. 2:
  38. dec a
  39. jr nz,0b
  40. ret
  41. 3:
  42. ld hl,0
  43. ex de,hl
  44. ret