WINFLOAT.A 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. (* Release 3.00 *)
  2. (* Copyright (C) 1989..1991 Jensen and Partners. All Rights Reserved *)
  3. module winfloat
  4. (*emuinit2*)
  5. public FIDRQQ = 00000H
  6. public FIWRQQ = 00000H
  7. public FIERQQ = 00000H
  8. public FIARQQ = 00000H
  9. public FISRQQ = 00000H
  10. public FICRQQ = 00000H
  11. public FJERQQ = 00000H
  12. public FJARQQ = 00000H
  13. public FJSRQQ = 00000H
  14. public FJCRQQ = 00000H
  15. public FIXRQQ = 0 (* brings this module in - known to linker *)
  16. segment _DATA(DATA,68H)
  17. segment _TEXT(CODE,28H)
  18. extrn __real_in
  19. extrn __real_out
  20. extrn __real_pdef
  21. extrn __real_sdef
  22. extrn __fpmath
  23. select _TEXT
  24. extrn __sigFp
  25. win__fpmath:
  26. push ax ; push cx ; push dx; push si; push di
  27. call far __fpmath
  28. pop di; pop si; pop dx; pop cx; pop ax
  29. ret 0
  30. public __FloatInit :
  31. sub dx,dx
  32. sub ax,ax
  33. sub bx,bx
  34. call win__fpmath
  35. mov dx, cs
  36. mov ax, __sigFp
  37. mov bx, 3
  38. call win__fpmath
  39. push bp
  40. mov bp, sp
  41. sub sp,2
  42. extrn __fp_1
  43. call far __fp_1
  44. extrn __FloatInitStack
  45. call far __FloatInitStack
  46. extrn __FloatStoreCW
  47. call far __FloatStoreCW
  48. or ax, 0C00H
  49. and ax, ~001DH (* enable invalid op/underflow/overflow/divide by zero exception *)
  50. extrn __FloatLoadCW
  51. call far __FloatLoadCW
  52. mov sp,bp
  53. pop bp
  54. ret far 0
  55. public __FloatFinish:
  56. mov bx, 2
  57. call win__fpmath
  58. ret far 0
  59. ProcessFloat = 14
  60. extrn __fpmath
  61. public __FloatStoreSW :
  62. push bx
  63. mov bx, 8
  64. call win__fpmath
  65. pop bx
  66. ret far 0
  67. public __FloatStoreCW :
  68. push bx
  69. mov bx, 5
  70. call win__fpmath
  71. pop bx
  72. ret far 0
  73. public __FloatLoadCW :
  74. push bx
  75. mov bx, 4
  76. call win__fpmath
  77. pop bx
  78. ret far 0
  79. public __FloatExecSave :
  80. public __FloatExecRestore :
  81. ret far 0
  82. public __FloatSave :
  83. fsave es:[ProcessFloat]
  84. ret far 0
  85. public __FloatRestore :
  86. frstor ds:[ProcessFloat]
  87. ret far 0
  88. public __FloatJmpSave :
  89. st1_reg = 20
  90. st2_reg = 30
  91. fld st(0), st(1)
  92. fstp tbyte es:[di][st1_reg], st(0)
  93. fld st(0), st(2)
  94. fstp tbyte es:[di][st2_reg], st(0)
  95. ret far 0
  96. public __FloatJmpRestore :
  97. fld tbyte st(0), ds:[si][st1_reg]
  98. fstp st(2), st(0)
  99. fld tbyte st(0), ds:[si][st2_reg]
  100. fstp st(3), st(0)
  101. ret far 0
  102. extrn __math_excep
  103. public __FloatMathExcepDos :
  104. push bp
  105. mov bp,sp
  106. extrn __FloatStoreSW
  107. call far __FloatStoreSW
  108. mov [bp][4], ax
  109. pop bp
  110. fclex
  111. jmp far __math_excep
  112. public __FloatMathExcepOs2 :
  113. push bp
  114. mov bp,sp
  115. push ax
  116. mov ax, [bp][2]
  117. mov [bp][4], ax
  118. pop ax
  119. pop bp
  120. add sp, 2
  121. jmp far __math_excep
  122. end
  123.