X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=fltpoint.c;h=2205a79f4c0d8d5a30d20216b8f08d17d84c7808;hp=911e0085ae2729b6c513cf16f975061a86287adb;hb=8d3be1d337e375df002669f8452fcc8a92524b0d;hpb=261f8d9198c4235bcdced4403ba391553e6bd0d1 diff --git a/fltpoint.c b/fltpoint.c index 911e008..2205a79 100644 --- a/fltpoint.c +++ b/fltpoint.c @@ -2,7 +2,7 @@ // Floating point to IEEE-754 conversion routines // // by James Hammons -// (C) 2018 Underground Software +// (C) 2019 Underground Software // // Since there are no guarantees vis-a-vis floating point numbers in C, we have // to utilize routines like the following in order to guarantee that the thing @@ -15,6 +15,7 @@ #include #include #include +#include "error.h" // // Check for IEEE-754 conformance (C99 compilers should be OK here) @@ -171,6 +172,27 @@ void DoubleToExtended(double d, uint8_t out[]) } +// +// Convert a double to a DSP56001 style fixed point float. +// Seems to be 23 bits of float value with 1 bit (MSB) for the sign. +// +uint32_t DoubleToDSPFloat(double d) +{ + if (d >= 1) + { + warn("DSP value clamped to +1."); + return 0x7FFFFF; + } + else if (d <= -1) + { + warn("DSP value clamped to -1."); + return 0x800000; + } + + return trunc(round(ldexp(d, 23))); +} + + // // Convert a host native floating point number to a fixed point number. //