home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 354.lha / mathtrans_v1.1 / MatLib.asm < prev    next >
Assembly Source File  |  1990-03-10  |  8KB  |  539 lines

  1.  
  2. ;    Mathtrans.library 24.1. 1990
  3. ;    optimiert für MC68881
  4. ;
  5. ;    MatLib.asm V1.1
  6. ;    © 1989/90    Heiner Hückstädt    
  7. ;            Gellertstraße 12
  8. ;            5090 Leverkusen 1
  9. ;            West-Germany
  10. ;    
  11. ;    PLACED IN THE PUBLIC DOMAIN
  12.  
  13. ;    Assemble with Manx V3.6
  14.  
  15. ;        as matlib.asm
  16. ;        ln matlib.o -o mathtrans.library
  17.  
  18. ;    Comments, donations, bug-reports are welcome.
  19. ;    Please refer to the adress given above.
  20.  
  21. ;    This library was tested with Distant Suns, Funktion, StarChart...
  22. ;    I think it should work properly.
  23.  
  24. ;    Have fun.....    
  25.  
  26.  
  27.  
  28.     include "exec/types.i"
  29.     include "exec/nodes.i"
  30.     include "exec/libraries.i"
  31.     include "exec/initializers.i"
  32.     include "exec/resident.i"
  33.     include "exec/execbase.i"
  34.  
  35. VERSION  EQU 33 ; Der Kompatibilität wegen
  36. REVISION EQU 8
  37. MYPRI    EQU $0
  38.  
  39.  
  40. DisplayAlert EQU -90
  41. OpenLibrary  EQU -552
  42. CloseLibrary EQU -414
  43.  
  44.   STRUCTURE MyLib,LIB_SIZE
  45. * ---- STRUCTURE LN,0
  46.     ULONG ml_SysLib
  47.     ULONG ml_DosLib
  48.     ULONG ml_SegList
  49.     UBYTE ml_Flags
  50.     UBYTE ml_Pad
  51.     LABEL MyLib_Sizeof
  52.  
  53.  
  54.     mc68881
  55.  
  56. FirstAddress:
  57.  
  58.     moveq    #0,d0
  59.     rts
  60.  
  61. ;ROMTag Struktur zum Einbinden der Library
  62.  
  63. InitDescription:
  64.  
  65.     dc.w    RTC_MATCHWORD
  66.     dc.l    InitDescription
  67.     dc.l    EndCode
  68.     dc.b    RTF_AUTOINIT
  69.     dc.b    VERSION
  70.     dc.b    NT_LIBRARY
  71.     dc.b    MYPRI
  72.     dc.l    LibName
  73.     dc.l    IdString
  74.     dc.l    InitTab
  75.  
  76. LibName:    dc.b "mathtrans.library",0
  77.         even
  78.  
  79.  
  80. IdString:    dc.b "MC68881/82 Version 1.1 (1/90)  © Heiner Hückstädt  Public Domain",13,10,0
  81.         even
  82.  
  83. InitTab:    dc.l MyLib_Sizeof ;Länge der Library Struktur
  84.         dc.l FuncTable
  85.         dc.l DataTable
  86.         dc.l InitLibrary
  87.  
  88. FuncTable:    dc.l Open
  89.         dc.l Close
  90.         dc.l Expunge
  91.         dc.l FirstAddress
  92.  
  93. ; Ab hier die Library Funktionen 
  94.  
  95.         dc.l SPAtan 
  96.         dc.l SPSin
  97.         dc.l SPCos
  98.         dc.l SPTan
  99.         dc.l SPSincos
  100.         dc.l SPSinh
  101.         dc.l SPCosh
  102.         dc.l SPTanh
  103.         dc.l SPExp
  104.         dc.l SPLog
  105.         dc.l SPPow
  106.         dc.l SPSqrt
  107.         dc.l SPTieee
  108.         dc.l SPFieee
  109.         dc.l SPAsin
  110.         dc.l SPAcos
  111.         dc.l SPLog10    
  112.         dc.l -1
  113.  
  114. ; Ende der Tabelle
  115.  
  116. DataTable:    INITBYTE LN_TYPE,NT_LIBRARY
  117.         INITLONG LN_NAME,LibName
  118.         INITBYTE LIB_FLAGS,LIBF_SUMUSED|LIBF_CHANGED
  119.         INITWORD LIB_VERSION,VERSION
  120.         INITWORD LIB_REVISION,REVISION
  121.         INITLONG LIB_IDSTRING,IdString
  122.         dc.l 0
  123.  
  124. InitLibrary:
  125.     MOVEA.L   D0,A1
  126.     MOVE.L    A6,34(A1)
  127.     MOVE.L    A0,38(A1)
  128.  
  129.     move.w    AttnFlags(a6),d0
  130.     btst      #4,d0
  131.     beq.s     not_ok
  132.     move.w    #1,32(a1)
  133.     move.l    a1,d0
  134.     rts
  135.  
  136. not_ok:
  137.     bra          no_fpu_alert
  138.  
  139. Open:      
  140.     ADDQ.W    #1,32(A6)
  141.     BCLR.B    #3,42(A6)
  142.     MOVE.L    A6,D0
  143.     RTS
  144. Close:       
  145.     MOVEQ.L   #0,D0
  146.     SUBQ.W    #1,32(A6)
  147.     BNE.S     L000009
  148.     BTST.B    #3,42(A6)
  149.     BEQ.S     L000009
  150.     BSR.S     Expunge
  151. L000009:
  152.     RTS       
  153. Expunge:
  154.     MOVEM.L   D2/A5-A6,-(A7)
  155.     MOVEA.L   A6,A5
  156.     MOVEA.L   34(A5),A6
  157.     TST.W     32(A5)
  158.     BEQ.S     L00000B
  159.     BSET.B    #3,42(A5)
  160.     MOVEQ.L   #0,D0
  161.     BRA.S     L00000C
  162. L00000B:
  163.     MOVE.L    38(A5),D2
  164.     MOVEA.L   A5,A1
  165.     JSR       -252(A6)
  166.     MOVEA.L   A5,A1
  167.     MOVEQ.L   #0,D1
  168.     MOVEQ.L   #0,D0
  169.     MOVE.W    16(A5),D1
  170.     SUBA.L    D1,A1
  171.     MOVE.W    18(A5),D0
  172.     ADD.L     D1,D0
  173.     JSR       -210(A6)
  174.     MOVE.L    D2,D0
  175. L00000C:
  176.     MOVEM.L   (A7)+,D2/A5-A6
  177.     RTS       
  178. ;    MOVEQ.L   #0,D0
  179. ;    RTS       
  180.  
  181. ;    LibraryFunktionen jetzt !!
  182.  
  183. SPTieee:
  184.     ADD.L     D0,D0
  185.     BEQ.S     L000088
  186.     EORI.B    #128,D0
  187.     ASR.B     #1,D0
  188.     SUBI.B    #130,D0
  189.     SWAP      D0
  190.     ROL.L     #7,D0
  191. L000088:
  192.     RTS       
  193.  
  194. SPFieee:
  195.     SWAP      D0
  196.     ROR.L     #7,D0
  197.     EORI.B    #128,D0
  198.     ADD.B     D0,D0
  199.     BVS.S     L00008B
  200.     ADDQ.B    #5,D0
  201.     BVS.S     L000090
  202.     EORI.B    #128,D0
  203.     ROR.L     #1,D0
  204. L00008A:
  205.     RTS       
  206. L00008B:
  207.     BCC.S     L00008F
  208.     CMPI.B    #124,D0
  209.     BEQ.S     L00008C
  210.     CMPI.B    #126,D0
  211.     BNE.S     L00008D
  212. L00008C:
  213.     ADDI.B    #133,D0
  214.     ROR.L     #1,D0
  215.     TST.B     D0
  216.     BNE.S     L00008A
  217.     MOVEQ.L   #0,D0    
  218.     RTS    
  219. L00008D:
  220.     ANDI.W    #65279,D0
  221.     TST.L     D0
  222.     BEQ.S     L00008A
  223.     TST.B     D0
  224. L00008E:
  225.     MOVEQ.L   #0,D0
  226.     RTS    
  227. L00008F:
  228.     CMPI.B    #254,D0
  229.     BNE.S     L000090
  230.     LSR.L     #8,D0
  231.     LSR.L     #1,D0
  232.     BNE.S     L000092
  233.     BRA.S     L000091
  234. L000090:
  235.     LSL.W     #8,D0
  236. L000091:
  237.     MOVEQ.L   #-1,D0
  238.     ROXR.B    #1,D0
  239.     ORI.B     #$02,CCR
  240.     RTS
  241. L000092:
  242.     MOVEQ.L   #0,D0
  243.     RTS
  244.  
  245. SPAtan:
  246.     fmove.s    fp0,-(sp)
  247.     bsr    SPTieee    
  248.         fatan.s d0,fp0
  249.         fmove.s fp0,d0
  250.     bsr    SPFieee    
  251.     fmove.s    (sp)+,fp0
  252.         rts
  253. SPSin:
  254.     fmove.s    fp0,-(sp)
  255.     bsr    SPTieee    
  256.         fsin.s  d0,fp0
  257.         fmove.s fp0,d0
  258.     bsr    SPFieee    
  259.     fmove.s    (sp)+,fp0
  260.     rts
  261. SPCos:
  262.     fmove.s    fp0,-(sp)
  263.     bsr    SPTieee    
  264.         fcos.s  d0,fp0
  265.         fmove.s fp0,d0
  266.     bsr    SPFieee    
  267.     fmove.s    (sp)+,fp0
  268.     rts
  269. SPTan:
  270.     fmove.s    fp0,-(sp)
  271.     bsr    SPTieee    
  272.         ftan.s  d0,fp0
  273.         fmove.s fp0,d0
  274.     bsr    SPFieee    
  275.     fmove.s    (sp)+,fp0
  276.     rts
  277. SPSincos:
  278.     fmovem.x fp0/fp1,-(sp)
  279.     bsr    SPTieee
  280.     move.l    d1,a0
  281.     fsincos.s d0,fp0:fp1
  282.     fmove.s    fp0,d0 ;cosinus
  283.     bsr    SPFieee
  284.     move.l    d0,(a0)
  285.     fmove.s    fp1,d0 ;sinus
  286.     bsr    SPFieee
  287.     fmovem.x (sp)+,fp0/fp1
  288.     rts
  289. SPSinh:
  290.     fmove.s    fp0,-(sp)
  291.     bsr    SPTieee    
  292.         fsinh.s d0,fp0
  293.         fmove.s fp0,d0
  294.     bsr    SPFieee    
  295.     fmove.s    (sp)+,fp0
  296.     rts
  297. SPCosh:
  298.     fmove.s    fp0,-(sp)
  299.     bsr    SPTieee    
  300.         fcosh.s d0,fp0
  301.         fmove.s fp0,d0
  302.     bsr    SPFieee    
  303.     fmove.s    (sp)+,fp0
  304.     rts
  305. SPTanh:
  306.     fmove.s    fp0,-(sp)
  307.     bsr    SPTieee    
  308.         ftanh.s d0,fp0
  309.         fmove.s fp0,d0
  310.     bsr    SPFieee    
  311.     fmove.s    (sp)+,fp0
  312.     rts
  313. SPExp:
  314.     fmove.s    fp0,-(sp)
  315.     bsr    SPTieee    
  316.         fetox.s d0,fp0
  317.         fmove.s fp0,d0
  318.     bsr    SPFieee    
  319.     fmove.s    (sp)+,fp0
  320.     rts
  321. SPLog:
  322.     fmove.s    fp0,-(sp)
  323.     bsr    SPTieee    
  324.         flogn.s d0,fp0
  325.         fmove.s fp0,d0
  326.     bsr    SPFieee    
  327.     fmove.s    (sp)+,fp0
  328.     rts
  329. SPPow:
  330.     fmove.s    fp0,-(sp)
  331.     bsr    SPTieee
  332.     fabs.s    d0,fp0
  333.     fmove.s    fp0,d0
  334.     flogn.s d0,fp0
  335.     move.l    d1,d0
  336.     bsr    SPTieee
  337.     fmul.s    d0,fp0
  338.     fmove.s fp0,d0
  339.     fetox.s d0,fp0
  340.     fmove.s    fp0,d0
  341.     bsr    SPFieee
  342.     fmove.s    (sp)+,fp0
  343.     rts
  344. SPSqrt:
  345.     fmove.s    fp0,-(sp)
  346.     bsr    SPTieee    
  347.         fsqrt.s d0,fp0
  348.         fmove.s fp0,d0
  349.     bsr    SPFieee    
  350.     fmove.s    (sp)+,fp0
  351.     rts
  352. SPAsin:
  353.     fmove.s    fp0,-(sp)
  354.     bsr    SPTieee    
  355.         fasin.s d0,fp0
  356.         fmove.s fp0,d0
  357.     bsr    SPFieee    
  358.     fmove.s    (sp)+,fp0
  359.     rts
  360. SPAcos:
  361.     fmove.s    fp0,-(sp)
  362.     bsr    SPTieee    
  363.         facos.s d0,fp0
  364.         fmove.s fp0,d0
  365.     bsr    SPFieee    
  366.     fmove.s    (sp)+,fp0
  367.     rts
  368. SPLog10:
  369.     fmove.s    fp0,-(sp)
  370.     bsr    SPTieee    
  371.         flog10.s d0,fp0
  372.         fmove.s fp0,d0
  373.     bsr    SPFieee    
  374.     fmove.s    (sp)+,fp0
  375.     rts
  376.  
  377.     
  378. no_fpu_alert:
  379.  
  380.         movem.l d1-d7/a0-a6,-(sp)
  381. ;    move.l    ExecBase,a6        bereits geladen
  382.     lea    intname(pc),a1
  383.     moveq.l    #0,d0
  384.     jsr    OpenLibrary(a6)
  385.     move.l  a6,a5    
  386.     move.l    d0,a6
  387.     moveq.l #40,d1
  388.     moveq.l #0,d0
  389.     lea    alert(pc),a0
  390.     jsr    DisplayAlert(a6)
  391.     move.l  a6,a1
  392.     move.l    a5,a6
  393.     jsr    CloseLibrary(a6)
  394.  
  395.         movem.l (sp)+,d1-d7/a0-a6
  396.     moveq    #0,d0
  397.     rts
  398. intname:
  399.     dc.b    "intuition.library",0
  400.     even
  401. alert:
  402.     dc.b    0
  403.     dc.b    40
  404.     dc.b    16
  405.     dc.b    84
  406.     dc.b    104
  407.     dc.b    105
  408.     dc.b    115
  409.     dc.b    32
  410.     dc.b    109
  411.     dc.b    97
  412.     dc.b    116
  413.     dc.b    104
  414.     dc.b    116
  415.     dc.b    114
  416.     dc.b    97
  417.     dc.b    110
  418.     dc.b    115
  419.     dc.b    46
  420.     dc.b    108
  421.     dc.b    105
  422.     dc.b    98
  423.     dc.b    114
  424.     dc.b    97
  425.     dc.b    114
  426.     dc.b    121
  427.     dc.b    32
  428.     dc.b    114
  429.     dc.b    101
  430.     dc.b    113
  431.     dc.b    117
  432.     dc.b    105
  433.     dc.b    114
  434.     dc.b    101
  435.     dc.b    115
  436.     dc.b    32
  437.     dc.b    116
  438.     dc.b    104
  439.     dc.b    101
  440.     dc.b    32
  441.     dc.b    110
  442.     dc.b    117
  443.     dc.b    109
  444.     dc.b    101
  445.     dc.b    114
  446.     dc.b    105
  447.     dc.b    99
  448.     dc.b    32
  449.     dc.b    99
  450.     dc.b    111
  451.     dc.b    112
  452.     dc.b    114
  453.     dc.b    111
  454.     dc.b    99
  455.     dc.b    101
  456.     dc.b    115
  457.     dc.b    115
  458.     dc.b    111
  459.     dc.b    114
  460.     dc.b    32
  461.     dc.b    77
  462.     dc.b    54
  463.     dc.b    56
  464.     dc.b    56
  465.     dc.b    56
  466.     dc.b    49
  467.     dc.b    47
  468.     dc.b    50
  469.     dc.b    0
  470.     dc.b    1
  471.     dc.b    0
  472.     dc.b    40
  473.     dc.b    24
  474.     dc.b    80
  475.     dc.b    108
  476.     dc.b    101
  477.     dc.b    97
  478.     dc.b    115
  479.     dc.b    101
  480.     dc.b    32
  481.     dc.b    117
  482.     dc.b    115
  483.     dc.b    101
  484.     dc.b    32
  485.     dc.b    116
  486.     dc.b    104
  487.     dc.b    101
  488.     dc.b    32
  489.     dc.b    108
  490.     dc.b    105
  491.     dc.b    98
  492.     dc.b    114
  493.     dc.b    97
  494.     dc.b    114
  495.     dc.b    121
  496.     dc.b    32
  497.     dc.b    102
  498.     dc.b    114
  499.     dc.b    111
  500.     dc.b    109
  501.     dc.b    32
  502.     dc.b    121
  503.     dc.b    111
  504.     dc.b    117
  505.     dc.b    114
  506.     dc.b    32
  507.     dc.b    111
  508.     dc.b    114
  509.     dc.b    105
  510.     dc.b    103
  511.     dc.b    105
  512.     dc.b    110
  513.     dc.b    97
  514.     dc.b    108
  515.     dc.b    32
  516.     dc.b    87
  517.     dc.b    111
  518.     dc.b    114
  519.     dc.b    107
  520.     dc.b    98
  521.     dc.b    101
  522.     dc.b    110
  523.     dc.b    99
  524.     dc.b    104
  525.     dc.b    32
  526.     dc.b    100
  527.     dc.b    105
  528.     dc.b    115
  529.     dc.b    107
  530.     dc.b    0
  531.     dc.b    0
  532.     dc.b    0
  533.  
  534.     even    
  535. EndCode:    
  536.     End
  537.  
  538.  
  539.