On 14/02/16 23:56, Philip Pemberton wrote:
Hi,
Does anyone know of a tool which can convert between Motorola's FFP
(Fast Floating Point) float format and IEEE754?
I'm trying to reverse-engineer some ancient 68k code which uses the FFP
library, but a load of the floating point constants have been hard-coded
as hex constants, which is making things hard to interpret...
I've tried to convert the 68k assembler in FFPIEEE.SA to C, but I must
have missed something because it just isn't working...
Naturally, I figured out what I was doing wrong an hour or so after I
hit send...
Enjoy!
// val is a FFP float, returns IEEE float format
// basically a direct conversion of the motorola FFPTIEEE function.
// comments are from there.
// you are not expected to understand this horrendous mess.
float ffpieee(const uint32_t val)
{
uint32_t x = val;
union {
float f;
uint32_t i;
} _fcast;
x = x + x; // delete mantissa high bit
if (x == 0) {
// if zero, branch zero as finished
return (float)x;
}
uint8_t k = x & 0xff;
k ^= 0x80; // to two's complement exponent
k >>= 1; // form 8-bit exponent
k -= 0x82; // adjust 64 to 127 and excessize
x = (x & ~0xff) | k;
x = (x << 16) | (x >> 16); // swap for high byte placement
x <<= 7; // set sign+exp in high byte
_fcast.i = x;
return _fcast.f;
}
--
Phil.
classiccmp at philpem.me.uk
http://www.philpem.me.uk/