mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
The code comes from the RGBDS source and documentation zip files found on this website: http://www.otakunozoku.com/1999/08/01/rednex-gameboy-development-system/ The same website reports: "Best of all, it’s free! That’s right! Free! The executables are free to use, either for personal hobby use, or full blown commercial productions — I know of at least a dozen commercial games you can purchase that are written with RGBDS — and the source code is free to modify. "The only thing I ask is that you do not charge for either distributing the executables or source code, and any derivative works you give credit to the original authors of the tools. That means you have to say “Thanks” to the original authors SurfSmurf and Otaku." Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
85 lines
2.4 KiB
HTML
85 lines
2.4 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
|
<HTML>
|
|
<HEAD>
|
|
<TITLE>xAsm Fixed-point expression</TITLE>
|
|
</HEAD>
|
|
|
|
<BODY BGCOLOR="#692764" TEXT="#F5A0D8" LINK="#8AAEE6" VLINK="#2B9DA4" ALINK="#95F0DA">
|
|
<I><H2>Fixed-point expressions
|
|
</H2></I>
|
|
<HR>
|
|
|
|
<P>Fixed point constants are basically normal 32-bit constants where the upper 16 bits are used for the integer part and the lower 16 bits are used for the fraction (65536ths). This means that you can use them in normal integer expression and indeed some integer operators like plus and minus don't care whether the operands are integer or fixed-point. You can easily convert a fixed-point number to an integer by shifting it right 16 bits. It follows that you can convert an integer to a fixed-point number by shifting it left.
|
|
<P>Some things are different for fixed-point math though. Which is why you have the following functions to use:
|
|
|
|
<TABLE BORDER=1>
|
|
<TR>
|
|
<TD><B><I>Name</I></B></TD>
|
|
<TD><B><I>Operation</I></B></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD>DIV(x,y)</TD>
|
|
<TD>x/y</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD>MUL(x,y)</TD>
|
|
<TD>x*y</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD>SIN(x)</TD>
|
|
<TD>sin(x)</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD>COS(x)</TD>
|
|
<TD>cos(x)</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD>TAN(x)</TD>
|
|
<TD>tan(x)</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD>ASIN(x)</TD>
|
|
<TD>sin<SUP>-1</SUP>(x)</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD>ACOS(x)</TD>
|
|
<TD>cos<SUP>-1</SUP>(x)</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD>ATAN(x)</TD>
|
|
<TD>tan<SUP>-1</SUP>(x)</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD>ATAN2(x,y)</TD>
|
|
<TD>(x,y) angle</TD>
|
|
</TR>
|
|
</TABLE>
|
|
<P>These functions are extremely useful for automatic generation of various tables. A circle has 65536.0
|
|
degrees. Sine values are between [-1.0;1.0]<BR>
|
|
<BR>
|
|
<TABLE BORDER=0 BGCOLOR="Black" CELLPADDING=8 WIDTH="50%">
|
|
<TR>
|
|
<TD><FONT COLOR="#00FF00">
|
|
<PRE>; --
|
|
; -- Generate a 256 byte sine table with values between 0 and 128
|
|
; --
|
|
ANGLE SET 0.0
|
|
REPT 256
|
|
DB (MUL(64.0,SIN(ANGLE))+64.0)>>16
|
|
ANGLE SET ANGLE+256.0
|
|
ENDR</PRE>
|
|
</FONT></TD>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<H3>See also:</H3>
|
|
<UL>
|
|
<LI><A HREF="symbols.htm">Symbols</A>
|
|
<LI><A HREF="expr_int.htm">Integer and Boolean expressions</A>
|
|
<LI><A HREF="expr_str.htm">String expressions, functions and formatting</A>
|
|
<LI><A HREF="miscfunc.htm">Other functions</A>
|
|
</UL>
|
|
|
|
<BR><HR>
|
|
<FONT SIZE="-1"><I><P ALIGN=RIGHT>Last updated 21 June 1997 by <A HREF="mailto:surfsmurf@matilde.demon.co.uk">Carsten Sorensen</A></P></I></FONT>
|