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.
[email protected]
http://www.philpem.me.uk/

Reply via email to