home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga ACS 1998 #6
/
amigaacscoverdisc1998-061998.iso
/
games
/
descent
/
source
/
fix
/
fix.inc
< prev
next >
Wrap
Text File
|
1998-06-08
|
3KB
|
106 lines
;THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
;SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
;END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
;ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
;IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
;SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
;FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
;CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
;AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
;COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
;
; $Source: f:/miner/source/fix/rcs/fix.inc $
; $Revision: 1.7 $
; $Author: matt $
; $Date: 1994/01/19 23:12:00 $
;
; Header for fixed-point library
;
; $Log: fix.inc $
; Revision 1.7 1994/01/19 23:12:00 matt
; Made fix_atan2() left-handed, like our coordinate system
;
; Revision 1.6 1993/10/20 01:08:49 matt
; Add fix_asin(), improved fix_atan2()
;
; Revision 1.5 1993/10/19 23:53:36 matt
; Added fix_atan2()
;
; Revision 1.4 1993/10/19 22:32:12 matt
; Added fix_acos()
;
; Revision 1.3 1993/09/13 12:09:42 matt
; Added extf,extfa macros to generate externdef's of fixed-point types
;
; Revision 1.2 1993/09/10 11:54:12 matt
; Added missing 'endif' at end of file
;
; Revision 1.1 1993/08/24 12:59:36 matt
; Initial revision
;
;
;
ifndef fix_inc
fix_inc equ 1
include types.inc
include psmacros.inc
;Fixed-point types
fix typedef dword
fixang typedef word
;Externdef macros for fixed-point types
extgen fix,f ;generates extf
extgen fixang,fa ;generates extfa
;Some handy constants
f0_0 equ 0
f1_0 equ 10000h
f2_0 equ 20000h
f3_0 equ 30000h
f10_0 equ 0a0000h
f0_5 equ 8000h
f0_1 equ 199ah
;Macros
;fixed-point multiply. one parm in eax, other passed to macro. result in eax
;trashes edx
fixmul macro n
imul n
shrd eax,edx,16
endm
;fixed-point divide. numerator in eax, divisor passed to macro. result in eax
;trashes edx. made sure parameter is not edx
fixdiv macro n
mov edx,eax
sar edx,16
shl eax,16
idiv n
endm
;fixed-point multiply and divide. result in eax
;trashes edx. made sure neither parameter is edx
fixmuldiv macro a,b
imul a
idiv b
endm
;Functions
extn fix_fastsincos ;ax=ang, ret eax=sin, ebx=cos
extn fix_sincos ;ax=ang, ret eax=sin, ebx=cos
extn fix_asin ;takes eax=sin, ret ax=angle
extn fix_acos ;takes eax=cos, ret ax=angle
extn fix_atan2 ;takes eax,ebx = cos,sin, ret ax=angle
extn long_sqrt ;takes eax, returns ax
extn fix_sqrt ;takes eax, returns eax
extn quad_sqrt ;takes eds:eax, returns eax
endif