[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