home *** CD-ROM | disk | FTP | other *** search
- *------------------------------------------------------------------
- * math.asm: ZC library interface to Motorola fast floating point
- * library supplied by Commodore.
- * Maintenance Notes:
- * 06Jun89 - Created by Jal
- *------------------------------------------------------------------
-
- AG_OpenLib equ $00030000
- AO_MathLib equ $00008005
- bias SET -30
-
- libref MACRO
- _LVO\1 EQU bias
- bias SET bias-6
- ENDM
-
- *------------------------------------------------------------------
- * Note: these *Must* be in the same order as the mathbas_lib.fd
- * file.
- *------------------------------------------------------------------
-
- libref SPFix
- libref SPFlt
- libref SPCmp
- libref SPTst
- libref SPAbs
- libref SPNeg
- libref SPAdd
- libref SPSub
- libref SPMul
- libref SPDiv
- libref SPFloor ; needs release 1.2+
- libref SPCeil ; needs release 1.2+
-
- XREF _Alert
- XREF _exit
- XREF _MathBase
- XREF _OpenLibrary
- XREF _CloseLibrary
- XREF __MathBaseClose
-
- *------------------------------------------------------------------
-
- SECTION DATA,DATA
-
- MathBase dc.l 0
- MATHName dc.b 'mathffp.library',0
-
- SECTION CODE,CODE
-
- *
- * Called at exit if we opened the MathBase library.
- *
-
- MathBaseClose:
- move.l MathBase,-(A7)
- jsr _CloseLibrary
- addq #4,A7
- rts
-
- *
- * Make sure the MathBase is loaded correctly
- *
-
- .flopen:
- movem.l D0-D1/A0-A1,-(A7) ; save temporary registers
- pea 0 ; any version will do....
- pea MATHName ; Load the name of library
- jsr _OpenLibrary ; Open the library
- addq #8,A7
- move.l D0,_MathBase ; Save the return code
- bne.s 1$ ; If non-zero then OK
-
- pea 0 ; Parameter for Alert.
- pea AG_OpenLib!AO_MathLib ; Signal an error.
- jsr _Alert
- addq #8,A7
- pea 100 ; push return code
- jsr _exit ; and exit
- 1$:
- move.l D0,MathBase ; A private copy
- move.l #MathBaseClose,__MathBaseClose
- movem.l (A7)+,D0-D1/A0-A1 ; restore temporaries
- rts
-
- *-------------------------------------------------------------------
- * Do a one or two parameter MathBase function.
- *-------------------------------------------------------------------
- .fldo2:
- move.l 12(A7),D1
- .fldo1:
- move.l 8(A7),D0
- tst.l _MathBase
- bne.s 1$
- jsr .flopen
- 1$:
- movem.l A6,-(A7)
- move.l _MathBase,A6
- add.l 4(A7),A6
- jsr (A6)
- movem.l (A7)+,A6
- addq #4,A7 ; unstack the function offset.
- rts
-
- *********************************************************************
- *
- * multiply
- *
- XDEF fpmul
- fpmul:
- pea _LVOSPMul
- jmp .fldo2
-
- *********************************************************************
- *
- * divide
- *
- XDEF fpdiv
- fpdiv:
- pea _LVOSPDiv
- jmp .fldo2
-
- *********************************************************************
- *
- * add
- *
- XDEF fpadd
- fpadd:
- pea _LVOSPAdd
- jmp .fldo2
-
- *********************************************************************
- *
- * subtract
- *
- XDEF fpsub
- fpsub:
- pea _LVOSPSub
- jmp .fldo2
-
- *********************************************************************
- *
- * negate
- *
- XDEF fpneg
- fpneg:
- pea _LVOSPNeg
- jmp .fldo1
-
- *********************************************************************
- *
- * compare
- *
- XDEF fpcmp
- fpcmp:
- pea _LVOSPCmp
- jmp .fldo2
-
- *********************************************************************
- *
- * convert long to float
- *
- XDEF _fpltof
- _fpltof:
- pea _LVOSPFlt
- jmp .fldo1
-
- *********************************************************************
- *
- * Convert float to long
- *
- XDEF _fpftol
- _fpftol:
- pea _LVOSPFix
- jmp .fldo1
-
- *********************************************************************
- *
- * Implement the abs function.:
- *
- XDEF _abs
- _abs:
- pea _LVOSPAbs
- jmp .fldo1
-
- *********************************************************************
- *
- * Implement the floor function.:
- *
- XDEF _floor
- _floor:
- pea _LVOSPFloor
- jmp .fldo1
-
- *********************************************************************
- *
- * Implement the ceil function.:
- *
- XDEF _ceil
- _ceil:
- pea _LVOSPCeil
- jmp .fldo1
-
- END
-