; Mathtrans.library 24.1. 1990 ; optimiert für MC68881 ; ; MatLib.asm V1.1 ; © 1989/90 Heiner Hückstädt ; Gellertstraße 12 ; 5090 Leverkusen 1 ; West-Germany ; ; PLACED IN THE PUBLIC DOMAIN ; Assemble with Manx V3.6 ; as matlib.asm ; ln matlib.o -o mathtrans.library ; Comments, donations, bug-reports are welcome. ; Please refer to the adress given above. ; This library was tested with Distant Suns, Funktion, StarChart... ; I think it should work properly. ; Have fun..... include "exec/types.i" include "exec/nodes.i" include "exec/libraries.i" include "exec/initializers.i" include "exec/resident.i" include "exec/execbase.i" VERSION EQU 33 ; Der Kompatibilität wegen REVISION EQU 8 MYPRI EQU $0 DisplayAlert EQU -90 OpenLibrary EQU -552 CloseLibrary EQU -414 STRUCTURE MyLib,LIB_SIZE * ---- STRUCTURE LN,0 ULONG ml_SysLib ULONG ml_DosLib ULONG ml_SegList UBYTE ml_Flags UBYTE ml_Pad LABEL MyLib_Sizeof mc68881 FirstAddress: moveq #0,d0 rts ;ROMTag Struktur zum Einbinden der Library InitDescription: dc.w RTC_MATCHWORD dc.l InitDescription dc.l EndCode dc.b RTF_AUTOINIT dc.b VERSION dc.b NT_LIBRARY dc.b MYPRI dc.l LibName dc.l IdString dc.l InitTab LibName: dc.b "mathtrans.library",0 even IdString: dc.b "MC68881/82 Version 1.1 (1/90) © Heiner Hückstädt Public Domain",13,10,0 even InitTab: dc.l MyLib_Sizeof ;Länge der Library Struktur dc.l FuncTable dc.l DataTable dc.l InitLibrary FuncTable: dc.l Open dc.l Close dc.l Expunge dc.l FirstAddress ; Ab hier die Library Funktionen dc.l SPAtan dc.l SPSin dc.l SPCos dc.l SPTan dc.l SPSincos dc.l SPSinh dc.l SPCosh dc.l SPTanh dc.l SPExp dc.l SPLog dc.l SPPow dc.l SPSqrt dc.l SPTieee dc.l SPFieee dc.l SPAsin dc.l SPAcos dc.l SPLog10 dc.l -1 ; Ende der Tabelle DataTable: INITBYTE LN_TYPE,NT_LIBRARY INITLONG LN_NAME,LibName INITBYTE LIB_FLAGS,LIBF_SUMUSED|LIBF_CHANGED INITWORD LIB_VERSION,VERSION INITWORD LIB_REVISION,REVISION INITLONG LIB_IDSTRING,IdString dc.l 0 InitLibrary: MOVEA.L D0,A1 MOVE.L A6,34(A1) MOVE.L A0,38(A1) move.w AttnFlags(a6),d0 btst #4,d0 beq.s not_ok move.w #1,32(a1) move.l a1,d0 rts not_ok: bra no_fpu_alert Open: ADDQ.W #1,32(A6) BCLR.B #3,42(A6) MOVE.L A6,D0 RTS Close: MOVEQ.L #0,D0 SUBQ.W #1,32(A6) BNE.S L000009 BTST.B #3,42(A6) BEQ.S L000009 BSR.S Expunge L000009: RTS Expunge: MOVEM.L D2/A5-A6,-(A7) MOVEA.L A6,A5 MOVEA.L 34(A5),A6 TST.W 32(A5) BEQ.S L00000B BSET.B #3,42(A5) MOVEQ.L #0,D0 BRA.S L00000C L00000B: MOVE.L 38(A5),D2 MOVEA.L A5,A1 JSR -252(A6) MOVEA.L A5,A1 MOVEQ.L #0,D1 MOVEQ.L #0,D0 MOVE.W 16(A5),D1 SUBA.L D1,A1 MOVE.W 18(A5),D0 ADD.L D1,D0 JSR -210(A6) MOVE.L D2,D0 L00000C: MOVEM.L (A7)+,D2/A5-A6 RTS ; MOVEQ.L #0,D0 ; RTS ; LibraryFunktionen jetzt !! SPTieee: ADD.L D0,D0 BEQ.S L000088 EORI.B #128,D0 ASR.B #1,D0 SUBI.B #130,D0 SWAP D0 ROL.L #7,D0 L000088: RTS SPFieee: SWAP D0 ROR.L #7,D0 EORI.B #128,D0 ADD.B D0,D0 BVS.S L00008B ADDQ.B #5,D0 BVS.S L000090 EORI.B #128,D0 ROR.L #1,D0 L00008A: RTS L00008B: BCC.S L00008F CMPI.B #124,D0 BEQ.S L00008C CMPI.B #126,D0 BNE.S L00008D L00008C: ADDI.B #133,D0 ROR.L #1,D0 TST.B D0 BNE.S L00008A MOVEQ.L #0,D0 RTS L00008D: ANDI.W #65279,D0 TST.L D0 BEQ.S L00008A TST.B D0 L00008E: MOVEQ.L #0,D0 RTS L00008F: CMPI.B #254,D0 BNE.S L000090 LSR.L #8,D0 LSR.L #1,D0 BNE.S L000092 BRA.S L000091 L000090: LSL.W #8,D0 L000091: MOVEQ.L #-1,D0 ROXR.B #1,D0 ORI.B #$02,CCR RTS L000092: MOVEQ.L #0,D0 RTS SPAtan: fmove.s fp0,-(sp) bsr SPTieee fatan.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPSin: fmove.s fp0,-(sp) bsr SPTieee fsin.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPCos: fmove.s fp0,-(sp) bsr SPTieee fcos.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPTan: fmove.s fp0,-(sp) bsr SPTieee ftan.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPSincos: fmovem.x fp0/fp1,-(sp) bsr SPTieee move.l d1,a0 fsincos.s d0,fp0:fp1 fmove.s fp0,d0 ;cosinus bsr SPFieee move.l d0,(a0) fmove.s fp1,d0 ;sinus bsr SPFieee fmovem.x (sp)+,fp0/fp1 rts SPSinh: fmove.s fp0,-(sp) bsr SPTieee fsinh.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPCosh: fmove.s fp0,-(sp) bsr SPTieee fcosh.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPTanh: fmove.s fp0,-(sp) bsr SPTieee ftanh.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPExp: fmove.s fp0,-(sp) bsr SPTieee fetox.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPLog: fmove.s fp0,-(sp) bsr SPTieee flogn.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPPow: fmove.s fp0,-(sp) bsr SPTieee fabs.s d0,fp0 fmove.s fp0,d0 flogn.s d0,fp0 move.l d1,d0 bsr SPTieee fmul.s d0,fp0 fmove.s fp0,d0 fetox.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPSqrt: fmove.s fp0,-(sp) bsr SPTieee fsqrt.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPAsin: fmove.s fp0,-(sp) bsr SPTieee fasin.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPAcos: fmove.s fp0,-(sp) bsr SPTieee facos.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts SPLog10: fmove.s fp0,-(sp) bsr SPTieee flog10.s d0,fp0 fmove.s fp0,d0 bsr SPFieee fmove.s (sp)+,fp0 rts no_fpu_alert: movem.l d1-d7/a0-a6,-(sp) ; move.l ExecBase,a6 bereits geladen lea intname(pc),a1 moveq.l #0,d0 jsr OpenLibrary(a6) move.l a6,a5 move.l d0,a6 moveq.l #40,d1 moveq.l #0,d0 lea alert(pc),a0 jsr DisplayAlert(a6) move.l a6,a1 move.l a5,a6 jsr CloseLibrary(a6) movem.l (sp)+,d1-d7/a0-a6 moveq #0,d0 rts intname: dc.b "intuition.library",0 even alert: dc.b 0 dc.b 40 dc.b 16 dc.b 84 dc.b 104 dc.b 105 dc.b 115 dc.b 32 dc.b 109 dc.b 97 dc.b 116 dc.b 104 dc.b 116 dc.b 114 dc.b 97 dc.b 110 dc.b 115 dc.b 46 dc.b 108 dc.b 105 dc.b 98 dc.b 114 dc.b 97 dc.b 114 dc.b 121 dc.b 32 dc.b 114 dc.b 101 dc.b 113 dc.b 117 dc.b 105 dc.b 114 dc.b 101 dc.b 115 dc.b 32 dc.b 116 dc.b 104 dc.b 101 dc.b 32 dc.b 110 dc.b 117 dc.b 109 dc.b 101 dc.b 114 dc.b 105 dc.b 99 dc.b 32 dc.b 99 dc.b 111 dc.b 112 dc.b 114 dc.b 111 dc.b 99 dc.b 101 dc.b 115 dc.b 115 dc.b 111 dc.b 114 dc.b 32 dc.b 77 dc.b 54 dc.b 56 dc.b 56 dc.b 56 dc.b 49 dc.b 47 dc.b 50 dc.b 0 dc.b 1 dc.b 0 dc.b 40 dc.b 24 dc.b 80 dc.b 108 dc.b 101 dc.b 97 dc.b 115 dc.b 101 dc.b 32 dc.b 117 dc.b 115 dc.b 101 dc.b 32 dc.b 116 dc.b 104 dc.b 101 dc.b 32 dc.b 108 dc.b 105 dc.b 98 dc.b 114 dc.b 97 dc.b 114 dc.b 121 dc.b 32 dc.b 102 dc.b 114 dc.b 111 dc.b 109 dc.b 32 dc.b 121 dc.b 111 dc.b 117 dc.b 114 dc.b 32 dc.b 111 dc.b 114 dc.b 105 dc.b 103 dc.b 105 dc.b 110 dc.b 97 dc.b 108 dc.b 32 dc.b 87 dc.b 111 dc.b 114 dc.b 107 dc.b 98 dc.b 101 dc.b 110 dc.b 99 dc.b 104 dc.b 32 dc.b 100 dc.b 105 dc.b 115 dc.b 107 dc.b 0 dc.b 0 dc.b 0 even EndCode: End