home *** CD-ROM | disk | FTP | other *** search
- ** Revision Header * Header built automatically - do not edit! *************
- *
- * (C) Copyright 1991 by Olaf `Olsen' Barthel, all rights reserved
- *
- * Name .....: FPInit.asm
- * Created ..: Monday 26-Aug-91 11:20
- * Revision .: 1
- *
- * Date Author Comment
- * ========= ======== ====================
- * 26-Aug-91 Olsen Created this file!
- *
- ****************************************************************************
-
- include "exec/types.i"
- include "exec/execbase.i"
-
- CALL macro
- xref _LVO\1
- jsr _LVO\1(a6)
- endm
-
- XDEF ___fpinit
- XDEF ___fpterm
-
- XREF _XCEXIT
-
- csect text,0,0,1,2
-
- ; VOID __fpinit(VOID);
- ;
- ; This routine is called by the c.o startup code
- ; in order to set up and initialize math libraries or, just
- ; like done here, to initialize the '881/'882/'040 chip.
-
- ___fpinit:
- move.l (4).w,a6 ; Grab SysBase
-
- cmp.w #37,LIB_VERSION(a6) ; Kickstart 2.x?
- blt.s 2$
-
- cmp.w #175,SoftVer(a6) ; Kickstart 2.x, rev 37.175?
- blt.s 2$
-
- move.w AttnFlags(a6),d0 ; Get attention flags
-
- btst #AFB_68020,d0 ; '020 or higher installed?
- beq.s 2$
-
- btst #AFB_68881,d0 ; '881 or higher installed?
- bne.s 1$
-
- btst #AFB_68040,d0 ; If no '881 present, an '040
- beq.s 2$ ; will do as well
-
- 1$ fmove.l #00000010,fpcr ; Rounding = to nearest,
- ; Precision = extended
- rts
-
- 2$ move.l #1,-(sp) ; Exit & fail
- jmp _XCEXIT
-
- ; VOID __fpexit(VOID);
- ;
- ; This routine is called by the c.o startup code
- ; in order to close and release math libraries or, just
- ; like done here, to reset the '881/'882/'040 chip.
-
- ___fpterm:
- rts
-
- pea (a5) ; Save A5
-
- move.l (4).w,a6 ; Grab SysBase
-
- move.w AttnFlags(a6),d0 ; Get attention flags
-
- btst #AFB_68881,d0 ; '881 or higher installed?
- bne.s 3$
-
- btst #AFB_68040,d0 ; If no '881 present, an '040
- beq.s 5$ ; will do as well
-
- 3$ lea 4$,a5 ; Get address of FPU reset routine,
- CALL Supervisor ; call it in supervisor mode,
- bra.s 5$ ; and return
-
- 4$ clr.l -(sp)
- frestore (sp)+
- rte
-
- 5$ move.l (sp)+,a5 ; Restore A5,
- rts ; and return
-
- end
-