dvi4.s 819 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. .dvi4:
  2. pop hl
  3. ld (retaddr),hl
  4. xor a
  5. ld (.flag1),a
  6. ld (.flag2),a
  7. ld ix,0
  8. add ix,sp
  9. ld b,(ix+7) ! dividend
  10. bit 7,b
  11. jr z,1f
  12. ld c,(ix+6)
  13. ld d,(ix+5)
  14. ld e,(ix+4)
  15. call .negbd
  16. ld (ix+7),b
  17. ld (ix+6),c
  18. ld (ix+5),d
  19. ld (ix+4),e
  20. ld a,1
  21. ld (.flag1),a
  22. 1:
  23. ld b,(ix+3)
  24. bit 7,b
  25. jr z,2f
  26. call .negst
  27. ld a,1
  28. ld (.flag2),a
  29. 2:
  30. call .dvu4
  31. ld a,(.flag1)
  32. or a
  33. jr z,3f
  34. call .negbd
  35. 3:
  36. ld (.savebc),bc
  37. ld (.savede),de
  38. ld a,(.flag2)
  39. ld b,a
  40. ld a,(.flag1)
  41. xor b
  42. jr z,4f
  43. call .negst
  44. 4:
  45. ld bc,(.savebc)
  46. ld de,(.savede)
  47. ld hl,(retaddr)
  48. jp (hl)
  49. .negbd:
  50. xor a
  51. ld h,a
  52. ld l,a
  53. sbc hl,de
  54. ex de,hl
  55. ld h,a
  56. ld l,a
  57. sbc hl,bc
  58. ld b,h
  59. ld c,l
  60. ret
  61. .negst:
  62. pop iy
  63. pop de
  64. pop bc
  65. call .negbd
  66. push bc
  67. push de
  68. jp (iy)
  69. .data
  70. .flag1: .byte 0
  71. .flag2: .byte 0
  72. retaddr:.word 0
  73. .savebc: .word 0
  74. .savede: .word 0