dvi4.s 902 B

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