[Coco] Convert floating point formats

Alex Evans varmfskii at gmail.com
Thu Aug 22 18:09:58 EDT 2019


PS, if anyone is tracking the differences in different versions of the
manuals. My manual is Revision D published in 1983.

On Wed, Aug 21, 2019 at 9:39 AM Alex Evans <varmfskii at gmail.com> wrote:
>
> Looks like multiple versions because that was typed looking directly
> at my manual and I double checked that it said PDP-11 and not PDP-1.
>
> On Tue, Aug 20, 2019 at 8:16 PM <wrcooke at wrcooke.net> wrote:
> >
> >    To the best of my knowledge there was no C compiler for a PDP-1,
> >    especially in 1985ish.
> >
> >      On August 20, 2019 at 7:07 PM Walter Zambotti
> >      <[1]zambotti at iinet.net.au> wrote:
> >      I'm looking at the manual now. I definitely have read it correctly.
> >      If you are also correct then we have a case of multiple manual
> >      versions!
> >      And if you look at the one on the CoCo archive
> >      [2]http://www.colorcomputerarchive.com/coco/Documents/Manuals/Progra
> >      mming/Microware%20C%20Compiler%20User's%20Guide%20(Microware).pdf
> >      It agrees with with me!!!
> >      However searching through the manual the term PDP-1 only appears
> >      once and the term PDP-11 appears 13 times.
> >      My guess is I have found a typo!!!
> >      And I think you are right and It should be PDP-11. Which memorably
> >      is the computer I was baptised into computing with!
> >      Walter
> >      -----Original Message-----
> >      From: Coco [mailto:[3]coco-bounces at maltedmedia.com] On Behalf Of
> >      Walter Zambotti
> >      Sent: Wednesday, 21 August 2019 7:55 AM
> >      To: 'CoCoList for Color Computer Enthusiasts'
> >      <[4]coco at maltedmedia.com>
> >      Subject: Re: [Coco] Convert floating point formats
> >      My manual says:
> >      This compiler follows the PDP-1 implementation and format in that
> >      CHARs are converted to INTs by sign extension, "SHORT" or "SHORT
> >      INT"
> >      means INT, "LONG INT" means LONG, and "LONG FLOAT" means DOUBLE. The
> >      format of DOUBLE values is as follows:
> >      -----Original Message-----
> >      From: Coco [mailto:[5]coco-bounces at maltedmedia.com] On Behalf Of
> >      Alex Evans
> >      Sent: Wednesday, 21 August 2019 6:22 AM
> >      To: CoCoList for Color Computer Enthusiasts
> >      <[6]coco at maltedmedia.com>
> >      Subject: Re: [Coco] Convert floating point formats
> >      The OS-9 C Compiler Manual page 1-5
> >      This compiler follows the PDP-11 implementation and format in that
> >      CHARs are converted to INTs by sign extension, "SHORT" or "SHORT
> >      INT"
> >      means INT, "LONG INT" means LONG, and "LONG FLOAT" means DOUBLE. The
> >      format of DOUBLE values is as follows:
> >      <figure removed>
> >      The form of the mantissa is sign and magnitude with an implied "1"
> >      bit at the sign bit position. The exponent is biased by 128. The
> >      format of the FLOAT is identical, except that the mantissa is only
> >      three bytes long. Conversion from DOUBLE to FLOAT is carried out by
> >      truncating the least significant (right-most) four bytes of the
> >      mantissa. The reverse conversion is done by padding the least
> >      significant our mantissa bytes with zeros.
> >      On Tue, Aug 20, 2019 at 6:25 AM Joel Rees <[7]joel.rees at gmail.com>
> >      wrote:
> >      >
> >
> >      2019年8月20日(火) 17:02 Walter Zambotti <[8]zambotti at iinet.net.au>:
> >
> >      Not sure why it is PDP1 but that is how it is documented in the C
> >      manual!
> >
> >      Which C manual?
> >
> >      Walter
> >      -----Original Message-----
> >      From: Coco [mailto:[9]coco-bounces at maltedmedia.com] On Behalf Of
> >      James
> >      Jones
> >      Sent: Tuesday, 20 August 2019 12:13 PM
> >      To: CoCoList for Color Computer Enthusiasts
> >      <[10]coco at maltedmedia.com>
> >      Subject: Re: [Coco] Convert floating point formats
> >      I'm a little confused by the name PDP1data; the PDP-1 had an 18-bit
> >      word, did one's complement arithmetic, and the floating point
> >      library referenced in
> >      [11]https://web.archive.org/web/20110514105011/http://www.dbit.com/~
> >      gree
> >      ng3/pdp1/pdp1.html
> >      used
> >      two words for a value, with one word for mantissa (and presumably
> >      sign
> >      bit) and one for the exponent.
> >      On Tue, Aug 13, 2019 at 11:12 PM Walter Zambotti
> >      <[12]zambotti at iinet.net.au>
> >      wrote:
> >
> >      Here is the PC side code that I ended up making to convert CoCo
> >      OS9 C
> >      PDP1 floating point numbers to modern PC IEEE754 floating point
> >      and visa
> >
> >      versa.
> >      >
> >
> >      union _Data
> >      {
> >      unsigned long long llval;
> >      double dval;
> >      unsigned int lval;
> >      unsigned char bytes[8];
> >      unsigned short words[4];
> >      unsigned int dwords[2];
> >      };
> >      typedef union _Data PDP1data;
> >      typedef union _Data IEEE754data;
> >      double ConvertDBLPDP1toIEEE754(PDP1data PDP1data) {
> >      IEEE754data iee754;
> >      unsigned long long signbit, exp, mantissa;
> >      if (PDP1data.llval == 0)
> >      {
> >      return 0.0;
> >      }
> >      signbit = PDP1data.llval & 0x8000000000000000;
> >      exp = (PDP1data.llval & 0x00000000000000ff) + 0x37e;
> >      mantissa = PDP1data.llval & 0x7fffffffffffff00;
> >      iee754.llval = signbit | (exp<<52) | (mantissa>>11);
> >      return iee754.dval;
> >      }
> >      PDP1data ConvertDblIEEE754toPDP1(double dvalue) {
> >      PDP1data PDP1data;
> >      IEEE754data IEEE754data;
> >      unsigned long long signbit, exp, mantissa;
> >      IEEE754data.dval = dvalue;
> >      // IEEE floats can have a negative zero that PDP1 floats
> >      cannot have
> >      // if the value is zero then we make it a good zero
> >      if (IEEE754data.dval == 0.0)
> >      {
> >      IEEE754data.llval = 0;
> >      return IEEE754data;
> >      }
> >      signbit = IEEE754data.llval & 0x8000000000000000;
> >      exp = ((IEEE754data.llval & 0x7ff0000000000000)>>52) - 0x37e;
> >      mantissa = IEEE754data.llval & 0x000fffffffffffff;
> >      PDP1data.llval = signbit | (exp) | (mantissa<<11);
> >      return PDP1data;
> >      }
> >      -----Original Message-----
> >      From: Coco [mailto:[13]coco-bounces at maltedmedia.com] On Behalf Of
> >      James Jones
> >      Sent: Thursday, 4 July 2019 7:38 PM
> >      To: CoCoList for Color Computer Enthusiasts
> >      <[14]coco at maltedmedia.com>
> >      Subject: Re: [Coco] Convert floating point formats
> >      On Fri, May 24, 2019 at 9:30 AM Alex Evans <[15]varmfskii at gmail.com>
> >      wrote:
> >
> >      I don't have a line to a particular solution (though they should
> >      be easy to implement), but do you mean IEEE double precision as
> >      is used on current x86 CPUs, or are you saying that there was
> >      some other floating point format used by x86 FPUs such as the
> >      8087 sometime in the past that you are interested in converting
> >      to/from. I also was under the impression that the Microware C
> >      Compiler used IEEE floating point in which case no conversion
> >      needs to be made, it is already in the right format.
> >
> >      The switch to IEEE 754 floating point came with OS-9/68000.
> >      --
> >      Coco mailing list
> >      [16]Coco at maltedmedia.com
> >      [17]https://pairlist5.pair.net/mailman/listinfo/coco
> >      --
> >      Coco mailing list
> >      [18]Coco at maltedmedia.com
> >      [19]https://pairlist5.pair.net/mailman/listinfo/coco
> >
> >      --
> >      Coco mailing list
> >      [20]Coco at maltedmedia.com
> >      [21]https://pairlist5.pair.net/mailman/listinfo/coco
> >      --
> >      Coco mailing list
> >      [22]Coco at maltedmedia.com
> >      [23]https://pairlist5.pair.net/mailman/listinfo/coco
> >
> >      --
> >      Coco mailing list
> >      [24]Coco at maltedmedia.com
> >      [25]https://pairlist5.pair.net/mailman/listinfo/coco
> >
> >      --
> >      Coco mailing list
> >      [26]Coco at maltedmedia.com
> >      [27]https://pairlist5.pair.net/mailman/listinfo/coco
> >      --
> >      Coco mailing list
> >      [28]Coco at maltedmedia.com
> >      [29]https://pairlist5.pair.net/mailman/listinfo/coco
> >      --
> >      Coco mailing list
> >      [30]Coco at maltedmedia.com
> >      [31]https://pairlist5.pair.net/mailman/listinfo/coco
> >
> >    "A designer knows he has achieved perfection not when there is nothing
> >    left to add, but when there is nothing left to take away." --  Antoine
> >    de Saint-Exupery
> >
> >    "The names of global variables should start with    // "
> >    -- https://isocpp.org
> >
> > References
> >
> >    1. mailto:zambotti at iinet.net.au
> >    2. http://www.colorcomputerarchive.com/coco/Documents/Manuals/Programming/Microware C Compiler User's Guide (Microware).pdf
> >    3. mailto:coco-bounces at maltedmedia.com
> >    4. mailto:coco at maltedmedia.com
> >    5. mailto:coco-bounces at maltedmedia.com
> >    6. mailto:coco at maltedmedia.com
> >    7. mailto:joel.rees at gmail.com
> >    8. mailto:zambotti at iinet.net.au
> >    9. mailto:coco-bounces at maltedmedia.com
> >   10. mailto:coco at maltedmedia.com
> >   11. https://web.archive.org/web/20110514105011/http://www.dbit.com/~gree
> >   12. mailto:zambotti at iinet.net.au
> >   13. mailto:coco-bounces at maltedmedia.com
> >   14. mailto:coco at maltedmedia.com
> >   15. mailto:varmfskii at gmail.com
> >   16. mailto:Coco at maltedmedia.com
> >   17. https://pairlist5.pair.net/mailman/listinfo/coco
> >   18. mailto:Coco at maltedmedia.com
> >   19. https://pairlist5.pair.net/mailman/listinfo/coco
> >   20. mailto:Coco at maltedmedia.com
> >   21. https://pairlist5.pair.net/mailman/listinfo/coco
> >   22. mailto:Coco at maltedmedia.com
> >   23. https://pairlist5.pair.net/mailman/listinfo/coco
> >   24. mailto:Coco at maltedmedia.com
> >   25. https://pairlist5.pair.net/mailman/listinfo/coco
> >   26. mailto:Coco at maltedmedia.com
> >   27. https://pairlist5.pair.net/mailman/listinfo/coco
> >   28. mailto:Coco at maltedmedia.com
> >   29. https://pairlist5.pair.net/mailman/listinfo/coco
> >   30. mailto:Coco at maltedmedia.com
> >   31. https://pairlist5.pair.net/mailman/listinfo/coco
> >
> > --
> > Coco mailing list
> > Coco at maltedmedia.com
> > https://pairlist5.pair.net/mailman/listinfo/coco


More information about the Coco mailing list