; ; File: FixMath.a ; ; Contains: xxx put contents here xxx ; ; Written by: xxx put writers here xxx ; ; Copyright: © 1991-1992 by Apple Computer, Inc., all rights reserved. ; ; Change History (most recent first): ; ; <8> 2/11/92 MH Move conditional assembly directive to immediately following ; copyright notice. This matches the public interface, and reduces ; assembler overhead in case the file is included more than once. ; <7> 1/30/91 gbm sab, #38: Change the ‘already including this file’ variable to ; all uppercase (for security reasons) ; ; To Do: ; ; Version: 2.94 ; Created: Friday, October 20, 1989 at 9:16:04 PM ; File: FixMath.a ; ; Copyright Apple Computer, Inc. 1984-1988 ; All Rights Reserved ; ; 1.0 CCH 11/ 9/1988 Adding to EASE. ; END EASE MODIFICATION HISTORY ;•1.1 CCH 9/14/1988 Updated EASE with the current rev of this file. IF &TYPE('__INCLUDINGFIXMATH__') = 'UNDEFINED' THEN __INCLUDINGFIXMATH__ SET 1 ; These calls support three types of fixed point numbers, each 32 bits long. ; The bits are interpreted as shown. The '-' represents the sign bit. ; ; Type <---------Integer Portion--------> <-------Fractional Portion------> ;LongInt -xxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx. ;Fixed -xxxxxxx xxxxxxxx.xxxxxxxx xxxxxxxx ;Fract -x.xxxxxxxx xxxxxxxx xxxxxxxx xxxxxx ; ; Type LongInt can represent integers between +/-2147483647. Type Fixed can ; represent fractional quantities between +/-32768, with about 5 digits of ; accuracy. Type Fract can represent fractional quantities between +/-2 with ; about 9 digits of accuracy. These numeric representations are useful for ; applications that do not require the accuracy of the floating point routines, ; and which need to run as fast as possible. The Graf3D three dimensional ; graphics package resides on top of these routines. Although FixMul is in the ; file ToolTraps, it is shown below to show how it handles different types. ; Additional fixed point routines are described in the Inside Macintosh chapter, ; “Toolbox Utilities.” ; FUNCTION FixMul(x, y: Fixed): Fixed; ; FixMul returns x * y. Note that FixMul effects "type * Fixed --> type": ; Fixed * Fixed --> Fixed ; LONGINT * Fixed --> LONGINT ; Fixed * LONGINT --> LONGINT ; Fract * Fixed --> Fract ; Fixed * Fract --> Fract ; FUNCTION FracMul(x, y: Fract): Fract; ; FracMul returns x * y. Note that FracMul effects "type * Fract --> type": ; Fract * Fract --> Fract ; LONGINT * Fract --> LONGINT ; Fract * LONGINT --> LONGINT ; Fixed * Fract --> Fixed ; Fract * Fixed --> Fixed ; FUNCTION FixDiv(x, y: Fixed): Fixed; ; FixDiv returns x / y. Note that FixDiv effects "type / type --> Fixed": ; Fixed / Fixed --> Fixed ; LONGINT / LONGINT --> Fixed ; Fract / Fract --> Fixed ; LONGINT / Fixed --> LONGINT ; Fract / Fixed --> Fract ; FUNCTION FracDiv(x, y: Fract): Fract; ; FracDiv returns x / y. Note that FracDiv effects "type / type --> Fract": ; Fract / Fract --> Fract ; LONGINT / LONGINT --> Fract ; Fixed / Fixed --> Fract ; LONGINT / Fract --> LONGINT ; Fixed / Fract --> Fixed ; FUNCTION FracSqrt(x: Fract): Fract; ; FracSqrt returns the square root of x. Both argument and result are regarded ; as unsigned. ; FUNCTION FracCos(x: Fixed): Fract; ; FUNCTION FracSin(x: Fixed): Fract; ; FracCos and FracSin return the cosine and sine, respectively, given the ; argument x in radians. ;The following routines are accessed via the glue code ;which will call the trap on a 128K ROM machine _FracCos OPWORD $A847 _FracSin OPWORD $A848 _FracSqrt OPWORD $A849 _FracMul OPWORD $A84A _FracDiv OPWORD $A84B _FixDiv OPWORD $A84D ENDIF ; ...already included