home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / prog_c / zc.lzh / ZC / ZCSRC.LZH / IOLib / Math / mathbas.a < prev    next >
Encoding:
Text File  |  1989-06-06  |  3.8 KB  |  205 lines

  1. *------------------------------------------------------------------
  2. * math.asm: ZC library interface to Motorola fast floating point
  3. * library supplied by Commodore.
  4. * Maintenance Notes:
  5. * 06Jun89 - Created by Jal
  6. *------------------------------------------------------------------
  7.  
  8. AG_OpenLib    equ $00030000
  9. AO_MathLib    equ $00008005
  10. bias    SET    -30
  11.  
  12. libref    MACRO
  13. _LVO\1    EQU    bias
  14. bias    SET    bias-6
  15.     ENDM
  16.  
  17. *------------------------------------------------------------------
  18. * Note: these *Must* be in the same order as the mathbas_lib.fd
  19. * file.
  20. *------------------------------------------------------------------
  21.  
  22.     libref    SPFix
  23.     libref    SPFlt
  24.     libref    SPCmp
  25.     libref    SPTst
  26.     libref    SPAbs
  27.     libref    SPNeg
  28.     libref    SPAdd
  29.     libref    SPSub
  30.     libref    SPMul
  31.     libref    SPDiv
  32.     libref    SPFloor    ; needs release 1.2+
  33.     libref    SPCeil    ; needs release 1.2+
  34.  
  35.     XREF    _Alert
  36.     XREF    _exit
  37.     XREF    _MathBase
  38.     XREF    _OpenLibrary
  39.     XREF    _CloseLibrary
  40.     XREF    __MathBaseClose
  41.  
  42. *------------------------------------------------------------------
  43.  
  44.     SECTION    DATA,DATA
  45.  
  46. MathBase    dc.l    0
  47. MATHName    dc.b    'mathffp.library',0
  48.  
  49.     SECTION    CODE,CODE
  50.  
  51. *
  52. *    Called at exit if we opened the MathBase library.
  53. *
  54.  
  55. MathBaseClose:
  56.     move.l    MathBase,-(A7)
  57.     jsr    _CloseLibrary
  58.     addq    #4,A7
  59.     rts
  60.  
  61. *
  62. *    Make sure the MathBase is loaded correctly
  63. *
  64.  
  65. .flopen:
  66.     movem.l D0-D1/A0-A1,-(A7)    ; save temporary registers
  67.     pea    0            ; any version will do....
  68.     pea     MATHName        ; Load the name of library
  69.     jsr    _OpenLibrary        ; Open the library
  70.     addq    #8,A7
  71.     move.l  D0,_MathBase    ; Save the return code
  72.     bne.s   1$            ; If non-zero then OK
  73.  
  74.     pea    0            ; Parameter for Alert.
  75.     pea    AG_OpenLib!AO_MathLib    ; Signal an error.
  76.     jsr    _Alert
  77.     addq    #8,A7
  78.     pea     100            ;     push return code
  79.     jsr     _exit            ;     and exit
  80. 1$:
  81.     move.l    D0,MathBase    ; A private copy
  82.     move.l    #MathBaseClose,__MathBaseClose
  83.     movem.l (A7)+,D0-D1/A0-A1     ; restore temporaries
  84.     rts
  85.  
  86. *-------------------------------------------------------------------
  87. * Do a one or two parameter MathBase function.
  88. *-------------------------------------------------------------------
  89. .fldo2:
  90.     move.l    12(A7),D1
  91. .fldo1:
  92.     move.l    8(A7),D0
  93.     tst.l    _MathBase
  94.     bne.s    1$
  95.     jsr    .flopen
  96. 1$:
  97.     movem.l    A6,-(A7)
  98.     move.l    _MathBase,A6    
  99.     add.l    4(A7),A6
  100.     jsr    (A6)
  101.     movem.l    (A7)+,A6
  102.     addq    #4,A7        ; unstack the function offset.
  103.     rts
  104.  
  105. *********************************************************************
  106. *
  107. *    multiply 
  108. *
  109.     XDEF    fpmul
  110. fpmul:
  111.     pea    _LVOSPMul
  112.     jmp     .fldo2
  113.  
  114. *********************************************************************
  115. *
  116. *    divide
  117. *
  118.     XDEF    fpdiv
  119. fpdiv:
  120.     pea    _LVOSPDiv
  121.     jmp     .fldo2
  122.  
  123. *********************************************************************
  124. *
  125. *    add
  126. *
  127.     XDEF    fpadd
  128. fpadd:
  129.     pea    _LVOSPAdd
  130.     jmp     .fldo2
  131.  
  132. *********************************************************************
  133. *
  134. *    subtract
  135. *
  136.     XDEF    fpsub
  137. fpsub:
  138.     pea    _LVOSPSub
  139.     jmp     .fldo2
  140.  
  141. *********************************************************************
  142. *
  143. *    negate
  144. *
  145.     XDEF    fpneg
  146. fpneg:
  147.     pea    _LVOSPNeg
  148.     jmp     .fldo1
  149.  
  150. *********************************************************************
  151. *
  152. *    compare
  153. *
  154.     XDEF    fpcmp
  155. fpcmp:
  156.     pea    _LVOSPCmp
  157.     jmp     .fldo2
  158.  
  159. *********************************************************************
  160. *
  161. *    convert long to float
  162. *
  163.     XDEF    _fpltof
  164. _fpltof:
  165.     pea    _LVOSPFlt
  166.     jmp     .fldo1
  167.  
  168. *********************************************************************
  169. *
  170. *    Convert float to long
  171. *
  172.     XDEF    _fpftol
  173. _fpftol:
  174.     pea    _LVOSPFix
  175.     jmp     .fldo1
  176.  
  177. *********************************************************************
  178. *
  179. *    Implement the abs function.:
  180. *
  181.     XDEF    _abs
  182. _abs:
  183.     pea    _LVOSPAbs
  184.     jmp    .fldo1
  185.  
  186. *********************************************************************
  187. *
  188. *    Implement the floor function.:
  189. *
  190.     XDEF    _floor
  191. _floor:
  192.     pea    _LVOSPFloor
  193.     jmp    .fldo1
  194.  
  195. *********************************************************************
  196. *
  197. *    Implement the ceil function.:
  198. *
  199.     XDEF    _ceil
  200. _ceil:
  201.     pea    _LVOSPCeil
  202.     jmp    .fldo1
  203.  
  204.     END
  205.