mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-28 16:31:01 +00:00
91 lines
2.4 KiB
Plaintext
91 lines
2.4 KiB
Plaintext
|
|
||
|
; File: FixMath.a
|
||
|
;
|
||
|
; Version 2.0a3
|
||
|
;
|
||
|
; Copyright 1984, 1985, 1986 Apple Computer, Inc. All Rights Reserved
|
||
|
;
|
||
|
|
||
|
INCLUDE 'SysEqu.a'
|
||
|
|
||
|
; This file is the implementation of the FixMath calls.
|
||
|
|
||
|
|
||
|
; FUNCTION FixDiv (x, y: Fixed): Fixed; { returns x/y, signed }
|
||
|
;
|
||
|
; FUNCTION FracDiv (x, y: Fracd): Fracd; { returns x/y }
|
||
|
;
|
||
|
; FUNCTION FracMul (x, y: Fracd): Fracd; { returns x*y }
|
||
|
;
|
||
|
; FUNCTION FracSqrt (x: Fracd) : Fracd; { returns square root of x }
|
||
|
;
|
||
|
; FUNCTION FracSin (x: Fixed) : Fracd; { returns Sin(x) }
|
||
|
;
|
||
|
; FUNCTION FracCos (x: Fixed) : Fracd; { returns Cos(x) }
|
||
|
;
|
||
|
; Type Fixed is 32-bit binary fixed-point with binary point between
|
||
|
; high and low words. Sign is kept a la 2's-complement.
|
||
|
; Type double is 64-bit IEEE binary floating point.
|
||
|
; Type Fracd is 32-bit binary fixed point-point with binary point
|
||
|
; after leading bits. Sign is kept a la 2's-complement.
|
||
|
;
|
||
|
; Exceptional cases:
|
||
|
; Fixed overflow is set to $7FFFFFFF when positive, $80000000 when
|
||
|
; negative.
|
||
|
; Division by zero yields $7FFFFFFF when x is positive or zero,
|
||
|
; and $80000000 when x is negative.
|
||
|
;
|
||
|
; Calling conventions:
|
||
|
; Fixed results are returned in D0.32, double results in D0-D1.
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
; There are two flavors of multiply, FracMul and FixMul. FracMul uses the
|
||
|
; top 35 bits of the 64-bit product: the top two are shifted off the left,
|
||
|
; the the last bit is used for rounding. FixMul uses the middle 32 bits
|
||
|
; of the product, with the attendant overflow checks, and rounds with a
|
||
|
; 32nd bit.
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
|
||
|
|
||
|
;128K Rom Fixmath Traps with auto-pop bit set
|
||
|
|
||
|
_NFracDiv OPWORD $AC4B
|
||
|
_NFixDiv OPWORD $AC4D
|
||
|
_NFracCos OPWORD $AC47
|
||
|
_NFracSin OPWORD $AC48
|
||
|
_NFracMul OPWORD $AC4A
|
||
|
_NFracSqrt OPWORD $AC49
|
||
|
|
||
|
|
||
|
FixMath PROC EXPORT
|
||
|
|
||
|
EXPORT FracMul
|
||
|
EXPORT FracDiv
|
||
|
EXPORT FixDiv
|
||
|
EXPORT FracSqrt
|
||
|
EXPORT FracSin
|
||
|
EXPORT FracCos
|
||
|
|
||
|
FracMul
|
||
|
_NFracMul ;the trap
|
||
|
;will return to caller
|
||
|
FracDiv
|
||
|
_NFracDiv ;the trap
|
||
|
;will return to caller
|
||
|
FixDiv
|
||
|
_NFixDiv ;the trap
|
||
|
;will return to caller
|
||
|
FracSqrt
|
||
|
_NFracSqrt ;the trap
|
||
|
;will return to caller
|
||
|
FracCos
|
||
|
_NFracCos ;the trap
|
||
|
;will return to caller
|
||
|
FracSin
|
||
|
_NFracSin ;the trap
|
||
|
;will return to caller
|
||
|
|
||
|
END
|
||
|
|