home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / asmkurs / 881+asm.txt < prev    next >
Text File  |  1980-01-10  |  24KB  |  652 lines

  1. FPU assembler programming
  2.  
  3. By Erik H. Bakke
  4.  
  5. Written  13/10-93
  6.  
  7.  
  8. --- I ------------------------- INTRODUCTION ---------------------- I ---
  9.  
  10. 1.1 Introduction
  11.  
  12. Many people have asked me to explain how to program the 68881/68882/040
  13. floating point coprocessors, and here it is, a guide in the "magic art"
  14. I have tried to keep this text as system neutral as possible, but it
  15. may, as the other articles in this series be influenced by the fact
  16. that I usually program at Amiga computers.
  17. If you need more information about the topics discussed herein, please
  18. contact the author.
  19.  
  20. 1.2 Index
  21.  
  22.   Chapter I--------Introduction--------------------
  23.   1.1  Introduction
  24.   1.2  Index
  25.   Chapter II-----The Coprocessor interface---------
  26.   2.1  The Interface mechanics
  27.   2.2  The Floating Point Coprocessor
  28.   Chapter III----Floating Point Programming--------
  29.   3.1  Floating Point Data Formats
  30.   3.2  Floating Point Constant ROM
  31.   3.3  Floating Point Instructions
  32.        1...Data transfer instructions
  33.        2...Dyadic operations
  34.        3...Monadic operations
  35.        4...Program control instructions
  36.        5...System control instructions
  37.   Chapter IV-------The 68040 FPU-------------------
  38.   4.1  Differences
  39.   4.2  Instruction set
  40.   Chapter V------------Sources---------------------
  41.   5.1  Sourcecodes
  42.  
  43.  
  44.  
  45. --- II -------------------THE COPROCESSOR INTERFACE -------------- II ---
  46.  
  47. 2.1  The Interface Mechanics
  48.  
  49. A coprocessor may be thought of as an extension to the main CPU,
  50. extending its register set and instructions.
  51. Different coprocessors that can be interfaced to the 68020+ CPU's
  52. are the 68881/2 FPU and 68851 MMU.
  53. Coprocessor instructions are placed inline with ordinary CPU codes,
  54. all recognized by being LINE-F instructions.  (Having the op-code
  55. format of $Fxxx)  In assembler, they are generally noted as cpXXXX
  56. instructions.
  57.  
  58. The coprocessors require a communication protocol with the CPU for
  59. various reasons:
  60.  
  61. -----------------------------------------------------------
  62. 1.  The CPU must recognize that a coprocessor is to receive
  63.     the LINE-F op-code, and establish contact with that
  64.     coprocessor.
  65.  
  66. 2.  The coprocessor may need to signal it's internal status
  67.     to the CPU.
  68.  
  69. 3.  The coprocessor may need to read/write data to/from
  70.     system memory or CPU registers.
  71.  
  72. 4.  The coprocessor may have to inform the CPU of error
  73.     conditions, such as an illegal instruction or divide by
  74.     zero.  The CPU will have to process the corresponding
  75.     exceptions.
  76. -----------------------------------------------------------
  77.  
  78. This protocol is called the MC68000 coprocessor interface.  Knowledge
  79. of this interface is not required of a programmer who wishes to
  80. utilize a coprocessor, therefore I will not go into specific detail
  81. about the interface, but briefly sum up the main mechanisms.
  82.  
  83.   The coprocessor instructions are F-line instructions that have
  84.   all bits in the upper nibble set to generate $Fxxx op-codes.
  85.   Up to 8 coprocessors may reside on the bus (The Amiga coprocessors
  86.   are NOT part of this system, and should not be counted in).
  87.   Each of these co-processors have their own 3-bit address.
  88.   Two such addresses are reserved by Motorola:
  89.                          %000   MC68851 PMMU
  90.                          %001   MC68881/2 FPU
  91.   
  92.   It is perfectly possible to install 6 FPU's in the same
  93.   system.
  94.   
  95.   The general format of a coprocessor op-code is shown below:
  96.   
  97.   15    1211  9 8   6 5         0
  98.   ================================
  99.   1 1 1 1 Cp-ID Type  Instruction dependent
  100.   
  101.   Followed by a number of coprocessor defined extension words and
  102.   effective address extension words.
  103.   
  104.   If the instruction is not accepted by the coprocessor it is
  105.   addressed to (if the CP is not present) the CPU will take
  106.   an F-line exception.
  107.  
  108. 2.2 The Floating Point Coprocessor
  109.  
  110.   The Motorola floating point coprocessor has the number 68881 or
  111.   68882.  The 68882 is considerably faster than the 881, due
  112.   to optimized internal design.  In addition, the 68040 CPU has an
  113.   internal FPU has is even faster than the 882.  There are other
  114.   differences between the 881/2 and the 040, but I'll return to
  115.   those later.  The 68881 and 68882 are pin compatible, and available
  116.   in speeds up to 20Mhz and 50MHz respectively
  117.   The FPU implements IEEE compatible floating point formats, and
  118.   implements instructions to perform arithmetics on these formats,
  119.   as well as several trancendental functions, such as SIN(x),E^x
  120.   and so on.  In addition the FPU has an on-chip constant ROM where
  121.   different mathematical constants are stored.
  122.  
  123. 2.2.1  The floating point registers
  124.  
  125.   The FPU has 8 floating point registers, each 80 bits wide.
  126.   These are named FP0-FP7, just as D0-D7 in the CPU.  In addition
  127.   the FPU have 3 32-bit registers:
  128.   
  129.   Control Register       FPCR
  130.   
  131.   31.................15..........7..........0
  132.                        Exeception    Mode
  133.                         Enable      Control
  134.   
  135.   Status Register       FPSR
  136.   
  137.   31.......23........15..........7..........0
  138.   Condition  Quotient   Accrued   Exception
  139.     Codes              Exception   Status
  140.   
  141.   Instruction Address Register    FPIAR
  142.  
  143.   31.......23........15..........7..........0
  144.  
  145. 2.2.1.1  Floating point data registers
  146.  
  147.   The data registers always contain an 80 bit wide extended precision
  148.   floating point number.  Before any floating point data is used in
  149.   calculation, it is converted to extended-precision.
  150.   For example, the instruction   FMOVE.L #10,FP3  converts the
  151.   longword #10 to extended precision before transferring it to register
  152.   FP3.  All calculations with the FPU uses the internal registers
  153.   as either source or destination, or both.
  154.   
  155. 2.2.1.2  Floating Point Status Register
  156.  
  157.   This register is split in two bytes, the exception enable byte, and
  158.   the mode control byte.
  159.  
  160. 2.2.1.2.1  Exception Enable byte
  161.  
  162.   This register contains a bit for each of the possible eight
  163.   exceptions that may be generated by the FPU.  Setting or clearing
  164.   one of these bits will enable/disable the corresponding exception.
  165.  
  166.   The exception bytes are organized this way:
  167.   
  168.   Bit   Name    Meaning
  169.   ========================
  170.   7     BSUN    Branch/Set on UNordered
  171.   6     SNAN    Signalling Not A Number
  172.   5     OPERR   OPerand ERRor
  173.   4     OVFL    OVerFLow
  174.   3     UNFL    UNderFLow
  175.   2     DZ      Divide by Zero
  176.   1     INEX2   INEXact operation
  177.   0     INEX1   INEXact decimal input
  178.  
  179. 2.2.1.2.2  Mode control byte
  180.  
  181.   This register controls the rounding modes and rounding precisions.
  182.   A result may be rounded or chopped to either double, single or
  183.   extended precision.  For most usage of the FPU, however, this
  184.   register could be set to all zeroes, which will round the result
  185.   to the nearest extended precision value.
  186.   Mode control byte:
  187.   
  188.   Bit   Name    Meaning
  189.   ========================
  190.   7     PREC1   Precision bit 1
  191.   6     PREC0   Precision bit 0
  192.   5     RND1    Rounding bit 1
  193.   4     RND0    Rounding bit 0
  194.   3     ----    -----
  195.   2     ----    -----
  196.   1     ----    -----
  197.   0     ----    -----
  198.  
  199.   PREC=00  Round to extended precision
  200.   PREC=01  Round to single precision
  201.   PREC=10  Round to double precision
  202.   
  203.   RND=00   Round toward nearest possible number
  204.   RND=01   Round toward zero
  205.   RND=10   Round toward the smallest number
  206.   RND=11   Round toward the highest number
  207.   
  208. 2.2.1.3  Floating point Status Register
  209.  
  210.   This register is just what you may think it is, the parallell to
  211.   the CPU CCR register, and reflects the status of the last
  212.   floating point computation.  The quotient byte is used with
  213.   floating point remaindering operations.  The exception status
  214.   byte tells what exceptions that occured during the last operation.
  215.   The accrued exception byte contains a bitmask of the exceptions
  216.   that have occurred since the last time this field was cleared.
  217.  
  218.   Status bits:
  219.   
  220.   Bit   Name    Meaning
  221.   =============================
  222.   7     ----    -----
  223.   6     ----    -----
  224.   5     ----    -----
  225.   4     ----    -----
  226.   3     N       Negative
  227.   2     Z       Zero
  228.   1     I       Infinity
  229.   0     NAN     Not A Number
  230.  
  231. 2.2.1.4  Floating point Instruction Address Register
  232.  
  233.   This register contains the address of the instruction currently
  234.   executing.  The FPU can execute instructions in parallell with
  235.   the CPU, so that time-consuming instrcutions, such as division
  236.   and multiplication don't tie up the CPU unnecessary.  This means
  237.   that if an exception occurs in the floating point operation,
  238.   the address that are pushed on to the stack is not necessarily
  239.   the address of the instruction that caused the exception.
  240.   The exception handler would have to read this register to find
  241.   the address of the offending instruction.
  242.  
  243.  
  244.  
  245. --- III ----------------FLOATING POINT PROGRAMMING ------------- III ---
  246.  
  247.  
  248. 3.1  Floating Point Data Formats
  249.  
  250.   The FPU can handle 3 integer formats, and 2 IEEE compatible formats.
  251.   In addition, it has an extended-precision format and can handle a
  252.   Packed-Decimal Real format.
  253.  
  254. 3.1.1  Integer Formats
  255.  
  256.   The 3 integer formats that are supported by the FPU are compatible
  257.   with the formats used by the 68000 CPU's.  They are Byte (8 bits),
  258.   Word (16 bits), and Longword (32 bits).
  259.  
  260. 3.1.2  Real Formats
  261.  
  262.   The FPU supports 4 real formats, the Single precision (32 bits),
  263.   Double precision (64 bits), Extended precision (80 bits), and
  264.   Packed-decimal string (80 bits)
  265.  
  266. 3.1.2.1 Single Precision
  267.  
  268.   The single precision format is indicated with the extension .S
  269.   It consists of a 23-bit fraction, an 8-bit exponent, and 1 bit
  270.   indicating the sign of the fraction.  The Single Precision format
  271.   is defined by IEEE and uses excess-127 notation for the exponent.
  272.   A hidden 1 is assumed as the most significant digit of the fraction.
  273.   The format is defined as follows:
  274.   
  275.         30       22                    0
  276.       S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
  277.       
  278.       S=Sign of fraction
  279.       E=Exponent
  280.       F=Fraction
  281.   
  282.   The single precision format takes 4 bytes when written to memory.
  283.  
  284. 3.1.2.2 Double Precision
  285.  
  286.   The double precision format is indicated with the extension .D
  287.   It consists of a 52-bit fraction, an 11-bit exponent, and 1 bit
  288.   indicating the sign of the fraction.  As the single precision,
  289.   this format is also defined by the IEEE, and uses excess-1023
  290.   notation for the exponent.  A hidden 1 is assumed as the most
  291.   significant digit of the fraction.  The format is defined as
  292.   follows:
  293.   
  294.         62          51                      0
  295.       S EEEEEEEEEEE FFFFFFF........FFFFFFFFFF
  296.       
  297.       S=Sign of fraction
  298.       E=Exponent
  299.       F=Fraction
  300.       
  301.   The double precision format takes 8 bytes when written to memory.
  302.  
  303. 3.1.2.3 Extended precision
  304.  
  305.   The extended precision is indicated with the extension .X
  306.   This is the format that is used in all computations, and
  307.   consists of a 64-bit mantissa, a 15-bit exponent and 1 bit
  308.   indicating the sign of the mantissa.  A hidden 1 is not assumed,
  309.   so all digits of the mantissa are present.  Excess-16383
  310.   is used for the exponent.  When data of this format is written
  311.   to memory, it is "exploded" by 16 zero-bits between the mantissa
  312.   and the exponent in order to make it longword aligned.
  313.   The extended-precision format is defined as follows:
  314.   
  315.     79              63                             0
  316.   S EEEEEEEEEEEEEEE MMMMMMMMMMMMMMM............MMMMM
  317.   
  318.   When written to memory, it looks like this:
  319.     94            80          63                   0
  320.   S EEEEEEEEEEEEEEE 000...000 MMMMMMMM...........MMM
  321.   
  322.   When written to memory, this format takes 12 bytes when written
  323.   to memory
  324.  
  325. 3.1.2.4  Packed-decimal string
  326.  
  327.   To simplify input/output of floating point numbers, a special
  328.   96-bit packed-decimal format.
  329.   This format consists of 17 BCD digits mantissa, some padding
  330.   bits, 4 BCD digits exponent, 2 control bits, 1 bit indicating
  331.   the sign of the exponent, and 1 indicating the sign of the
  332.   mantissa.
  333.   Bits 68-79 are stored as zero bits unless an overflow occurs
  334.   during the conversion.
  335.   Positive and negative infinity is represented by numbers that are
  336.   outside the range of the floating point representation used.
  337.   If the result of an operation has no mathematical meaning, a NAN
  338.   is produced.  In the case of a NAN or infinity, bits 92 and 93
  339.   are both 1.
  340.  
  341. 3.2  Floating point Constant ROM
  342.  
  343.   The FPU have an on-chip ROM where frequently used mathematical
  344.   instructions are stored.  How to retrieve these constants will be
  345.   discussed below.  Each constant has its own address in the ROM:
  346.   
  347.   Offset     Constant
  348.   =============================
  349.   $00        Pi
  350.   $0b        Log10(2)
  351.   $0c        e
  352.   $0d        Log2(e)
  353.   $0e        Log10(e)
  354.   $0f        0.0
  355.   $30        ln(2)
  356.   $31        ln(10)
  357.   $32        10^0
  358.   $33        10^1
  359.   $34        10^2
  360.   $35        10^4
  361.   .
  362.   .
  363.   .
  364.   $3e        10^2048
  365.   $3f        10^4096
  366.  
  367. 3.3  Floating Point Instructions
  368.  
  369.   The FPU provides an extension to the normal 68000 instruction set.
  370.   The floating point instructions can be divided into 5 groups:
  371.   
  372.      1...Data transfer instructions
  373.      2...Dyadic instructions (two operands)
  374.      3...Monadic instructions (one operand)
  375.      4...Program control instructions
  376.      5...System control instructions
  377.      
  378.   The syntax and addressing modes for these instructions are the same
  379.   as those of the ordinary 68000 instructions.
  380.  
  381. 3.3.1  Data Transfer Instructions
  382.  
  383.   Instruction Syntax     Op. Sizes      Operation
  384.   ==================================================================
  385.   FMOVE  FPm,FPn      | X             | The FMOVE instruction
  386.   FMOVE  <ea>,FPn     | B/W/L/S/D/X/P | copies data from the
  387.   FMOVE  FPm,<ea>     | B/W/L/S/D/X   | source operand to the
  388.                       |               | destination operand
  389.   ==================================================================
  390.   FMOVE  FPm,<ea>(#k) | P             | When writing a .P real, an
  391.   FMOVE  FPm,<ea>(Dn) | P             | optional rounding precision
  392.                       |               | may be specified as a constant
  393.                       |               | or in a data register
  394.                       |               | See below for details
  395.   ==================================================================
  396.   FMOVE  <ea>,FPcr    | L             | These two FMOVE's copies
  397.   FMOVE  FPcr,<ea>    | L             | data to/from control registers
  398.   ==================================================================
  399.   FMOVECR #ccc,FPn    | X             | This instruction retrieves a
  400.                       |               | constant from the ROM, where
  401.                       |               | ccc is the offset to be read
  402.   ==================================================================
  403.   FMOVEM <ea>,<list>  | L/X           | Moves multiple FP registers
  404.   FMOVEM <ea>,Dn      | X             | The register list may be
  405.   FMOVEM <list>,<ea>  | L/X           | specified as in 68000 assembler,
  406.   FMOVEM Dn,<ea>      | X             | or be contained as a bitmask
  407.                       |               | in a data register
  408.   ==================================================================
  409.   
  410.   When writing floating point numbers to the memory using the .P
  411.   format, an optional precision may be specified as a constant or
  412.   in a data register.
  413.   
  414.   Meaning of the precision:
  415.   
  416.   -64<=k<=0  Rounded to |k| decimal places
  417.   0<k<=17    Mantissa is rounded to k places
  418.   
  419.   Register bit mask of the MOVEM instruction:
  420.   
  421.   Addressing mode    Bit 7   Bit 6 -------- Bit 1   Bit 0
  422.   =========================================================
  423.   -(An)           |   FP7  |  FP6  |------|  FP1  |  FP0  |
  424.   All other modes |   FP0  |  FP1  |------|  FP6  |  FP7  |
  425.   =========================================================
  426.  
  427. 3.3.2  Dyadic Operations
  428.  
  429.   Dyadic operations are operations computing with two operands.
  430.   The first operand may be addressed with any addressing mode,
  431.   while the second operand (destination) must be an FPU register.
  432.   
  433.   Instruction  Function
  434.   ===================================================
  435.   FADD       | Add two FP numbers
  436.   FCMP       | Compare two FP numbers
  437.   FDIV       | FP Division
  438.   FMOD       | FP Modulo
  439.   FMUL       | Multiply two FP numbers
  440.   FREM       | Get IEEE remainder
  441.   FSCALE     | Scale exponent
  442.   FSGLDIV    | Single-precision Division
  443.   FSGLMUL    | Single-precision Multiplication
  444.   FSUB       | FP Subtraction
  445.   ===================================================
  446.   
  447.   FSCALE adds the first operand to the exponent of the second
  448.   operand.
  449.   FREM returns the remainder of a division as specified by the IEEE
  450.   definition.
  451.  
  452. 3.3.3  Monadic Operations
  453.  
  454.   Monadic operations are operations computing with only one operand.
  455.   The operand may be addressed with any addressing mode.
  456.   The syntax of monadic operations are:
  457.   
  458.     Instruction.Size  <ea>,FPn
  459.   
  460.   Instruction  Function
  461.   ====================================================
  462.   FABS       | Absolute value
  463.   FACOS      | FP Arc Cosine
  464.   FASIN      | FP Arc Sine
  465.   FATAN      | FP Arc Tangent
  466.   FATANH     | FP Hyperbolic Arc Tangent
  467.   FCOS       | FP Cosine
  468.   FCOSH      | FP Hyperbolic Cosine
  469.   FETOX      | FP e^x
  470.   FETOXM1    | FP e^(x-1)
  471.   FGETEXP    | Get exponent
  472.   FGETMAN    | Get mantissa
  473.   FINT       | FP Integer
  474.   FINTRZ     | Get integer and round down
  475.   FLOGN      | FP Ln(n)
  476.   FLOGNP1    | FP Ln(n+1)
  477.   FLOG10     | FP Log10(n)
  478.   FLOG2      | FP Log2(n)
  479.   FNEG       | Negate a floating point number
  480.   FSIN       | FP Sine
  481.   FSINH      | FP Hyperbolic Sine
  482.   FSQRT      | FP Square Root
  483.   FTAN       | FP Tangent
  484.   FTANH      | FP Hyperbolic Tangent
  485.   FTENTOX    | FP 10^x
  486.   FTWOTOX    | FP 2^x
  487.   ====================================================
  488.  
  489.   There is one more monadic operation that uses a double
  490.   destination operand, the FSINCOS instruction:
  491.  
  492.   FSINCOS <ea>,FPc:FPs        Calculates sine and cosine
  493.   FSINCOS FPm,FPc:FPs         of the same argument
  494.  
  495.   All trigonometric operations operate on values in
  496.   radians.
  497.  
  498. 3.3.4 Program Control Instructions
  499.  
  500. 3.3.4.1  Instructions
  501.   This group of instructions allows control of program flow based
  502.   on condition codes generated by the FPU.  These instructions are
  503.   parallells to the 68000 instructions with the same names.
  504.  
  505.   Instruction      Formats  Operation
  506.   =====================================================================
  507.   FBcc <Label>    | W/L   | Branch on FPU conditions
  508.   FDBcc Dn,<Label>| W     | Test FPU conditions, decrement and branch
  509.   FNOP            |       | No Operation   (Like NOP)
  510.   FScc <ea>       | B     | Set on FPU conditions
  511.   FTST <ea>       | All   | Test FP number at <ea>
  512.   FTST FPn        | X     | Test FP number in FPn
  513.   =====================================================================
  514.  
  515. 3.3.4.2 Condition codes
  516.  
  517.   The FPU condition codes that may be acted upon are divided into two
  518.   groups, with and without NAN exception.
  519.  
  520. 3.3.4.2.1  Condition codes with NAN
  521.  
  522.   Symbol  Meaning
  523.   ===========================================
  524.   GE    | Greater or equal
  525.   GL    | Greater or less
  526.   GLE   | Greater, less or equal
  527.   LE    | Less or equal
  528.   LT    | Less
  529.   NGE   | Not (greater or equal)
  530.   NGL   | Not (greater or less)
  531.   NGLE  | Not (greater, less or equal)
  532.   NGT   | Not greater
  533.   NLE   | Not (less or equal)
  534.   NLT   | Not less
  535.   SEQ   | Signalling equal
  536.   SNE   | Signalling unequal
  537.   SF    | Signalling Always FALSE
  538.   ST    | Signalling Always TRUE
  539.   ===========================================
  540.  
  541. 3.3.4.2.2  Condition codes without NAN
  542.  
  543.   Symbol  Meaning
  544.   ===========================================
  545.   OGE   | Ordered and greater or equal
  546.   OGL   | Ordered and greater or less
  547.   OR    | Ordered
  548.   OGT   | Ordered and greater
  549.   OLE   | Ordered and less or equal
  550.   OLT   | Ordered less
  551.   UGE   | Unordered or greater or equal
  552.   UEQ   | Unordered or equal
  553.   UN    | Unordered
  554.   UGT   | Unordered or greater
  555.   ULE   | Unordered or less or equal
  556.   ULT   | Unordered or less
  557.   EQ    | Equal
  558.   NE    | Unequal
  559.   F     | Always FALSE
  560.   T     | Always TRUE
  561.  
  562. 3.3.4.2.3  Notes
  563.  
  564.   You might wonder why there are different symbols for (unequal) and
  565.   (greater or less).
  566.   Floating point numbers may represent an infinity, something that is
  567.   impossible in the 68000 CPU.  In addition, they may represent illegal
  568.   values (NAN).
  569.   For detailed information on how these condition code symbols relate to the
  570.   condition code flags, consult programming references for the 68881 FPU.
  571.  
  572. 3.3.5  System Control Instructions
  573.  
  574.   This group consists of 3 instructions, FSAVE, FRESTORE and FTRAPcc.
  575.   FSAVE and FRESTORE are priviliged instructions and are used to save
  576.   and restore the FPU state frame to memory.
  577.  
  578.   FSAVE <ea>     Copies the internal registers to the specified state frame
  579.   FRESTORE <ea>  Loads the internal registers with the specified state frame.
  580.  
  581.   The TRAPcc instruction can generate an exception dependant on the condition
  582.   codes.
  583.  
  584.   FTRAPcc                        If the specified condition is true, TRAP.
  585.   FTRAPcc #<data>.(W/L)
  586.  
  587.  
  588. --- IV --------------------------- THE 68040 FPU ----------------- IV ---
  589.  
  590.  
  591. 4.1  Differences
  592.  
  593.   The FPU that is built-in in the 040, and indeed in the yet to come 060
  594.   are highly optimized.  It omits some instructions that are found on
  595.   the 68881/2, but the ones that are unimplemented, are usually emulated
  596.   in software.  By avoiding the emulated instructions, a program can get
  597.   a multiple speed increase when run on the 040.
  598.   The 040 also omits the Packed Decimal format (.P)  When it is attempted
  599.   written, the 040 will respond with an illegal format exception.
  600.  
  601. 4.2  Instruction set of the FPU-40  (Or whatever it is called)
  602.  
  603. 4.2.1  68881/2 instructions that are unimplemented
  604.  
  605.   Type        Instructions
  606.   =================================================================
  607.   Monadic    | FACOS,FASIN,FATAN,FATANH,FCOS,FCOSH,FETOX,FETOXM1,
  608.              | FGETEXP,FGETMAN,FINT,FINTRZ,FLOG10,FLOG2,FLOGN,
  609.              | FLOGNP1,FSIN,FSINCOS,FSINH,FTAN,FTANH,FTENTOX,
  610.              | FTWOTOX
  611.   Dyadic     | FMOD,FREM,FSCAL,FSGLDIV,FSGLMUL
  612.   Transfer   | FMOVECR
  613.   =================================================================
  614.  
  615. 4.2.2  68881/2 instructions that WORK on an 040
  616.  
  617.   FABS     ADD       FBcc      FCMP      FDBcc     FDIV      FMOVE
  618.   FMOVEM   FMUL      FNEG      FNOP      FRESTORE  FSAVE     FScc
  619.   FSQRT    FSUB      FTRAPcc   FTST
  620.  
  621.  
  622. --- V ----------------------------- SOURCES ----------------------- V ---
  623.  
  624. 5.1  Sourcecodes
  625.  
  626.   There are no sourcecodes in this text, but in the same archive as you
  627.   got this file there should be an assembler source for a julia fractal
  628.   using the FPU.
  629.   The program is a very simple one, and doesn't use the most advanced
  630.   operations, but illustrates clearly how to program for the FPU.
  631.   The program is written for Amiga computers with AGA chipset and at
  632.   least OS 2.0, but it should be easy to degrade to earlier Amiga
  633.   versions and to other platforms.
  634.  
  635.  
  636. ************************************************************************************************
  637. *             This text was written by Erik H. Bakke 14/10-93   © 1993 Bakke SoftDev           *
  638. *                                                                                              *
  639. * This text is freely redistributable as long as all files are kept together and in unmodified *
  640. * form.                                                                                        *
  641. *             Permission is granted to include this text in the HowToCode archive              *
  642. ************************************************************************************************
  643. *  Error corrections, comments and questions should be directed to the author:                 *
  644. *                                                                                              *
  645. *                               e-mail:   db36@hp825.bih.no                                    *
  646. *                               phone:    +47-5630-5537   (13:00-21:00 GMT)                    *
  647. *                               Post:     Erik H. Bakke                                        *
  648. *                                         Bjørnen                                              *
  649. *                                         N-5227 SØRE NESET                                    *
  650. *                                         NORWAY                                               *
  651. ************************************************************************************************
  652.