delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/11/13/12:01:14

Message-Id: <199811131631.QAA10528@remus.clara.net>
From: "Arthur" <arfa AT clara DOT net>
To: <djgpp AT delorie DOT com>
Subject: RE: fixed point + allegro
Date: Fri, 13 Nov 1998 16:30:48 -0000
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0
In-Reply-To: <01be0f0b$14c711c0$3cfaf8c8@aguia>
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3
Importance: Normal
Reply-To: djgpp AT delorie DOT com

> Hi everybody,
>
>     I need some help... i'd like to convert those fixed point routines of
> allegro to use in a C++ Compiler 16 bits. But almost all code of
> fixed point
> in allegro is in assembler.

You won't be able to convert it to 16-bit directly, as Allegro uses 32-bit
fixed-point numbers (16.16).

> Does anybody have source code of
> anyother fixed
> point functions (add, minus, mul, sub) ? I'm tring to convert allegro
> functions but i really don't understand the AT&T format yet....

Just out of interest, why are you trying to convert it to another compiler?

Fixed point is really simple. To do your own 32-bit fixed point code:

short i; // 16-bit integer
long  f, f1, f2; // 32-bit fixed (stored in long - Allegro typedefs it)

convert int to fixed: f = i << 16;
convert fixed to int: i = f >> 16;
add two fixed numbers: f1 += f2;
sub two fixed numbers: f1 -= f2;
mul two fixed numbers: f1 *= (f2 >> 16);
div two fixed numbers: f1 /= (f2 >> 16);

Allegro also checks for overflow errors on these functions, but as you can
see,  fixed point math is pretty easy to do. If you want this for a 16-bit
compiler, change all the "16" above to "8".

HTH

James Arthur
jaa AT arfa DOT clara DOT net
ICQ#15054819


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019