1 #ifndef FIXEDPOINT_HPP
\r
2 #define FIXEDPOINT_HPP
\r
4 typedef long Fixed32; // 16.16 FixedPoint
\r
5 typedef unsigned char Iangle; // Integer angle (0..255)
\r
7 /* Macros for Type Conversion */
\r
8 #define INT_TO_FIXED(x) ((x) << 16)
\r
9 #define FIXED_TO_INT(x) ((x) >> 16)
\r
10 #define ROUND_FIXED_TO_INT(x) (((x) + 0x8000) >> 16)
\r
12 // Loads Fixed32 datafiles
\r
13 void initFixed32(void);
\r
15 // Common math functions
\r
16 Fixed32 FixedMul(Fixed32 num1, Fixed32 num2);
\r
17 Fixed32 FixedDiv(Fixed32 numer, Fixed32 denom);
\r
18 void CosSin(Iangle theta, Fixed32 *Cos, Fixed32 *Sin);
\r
20 Fixed32 FixedMulASM(Fixed32 num1, Fixed32 num2);
\r
21 #pragma aux FixedMulASM = \
\r
25 "shrd eax, edx, 16" \
\r
26 parm caller [eax] [edx] \
\r
30 Fixed32 FixedDivASM(Fixed32 numer, Fixed32 denom); // No rounding!
\r
31 #pragma aux FixedDivASM = \
\r
33 "shrd eax, edx, 16" \
\r
36 parm caller [edx] [ebx] \
\r
38 modify [eax ebx edx];
\r