
;	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


