(My original message to cctech has yet to appear. I thought I might try the cctalk list).
While Motorola never shipped the MC6839 [1] the binary is available [2] and I've been playing around with it [3]. While it's not producing the exact same results as I get on a more modern machine, it appears to be "close enough" for me to be happy with it. But I am having one issue that I can't figure out. The documentation for the FMOV operation says: FMOV Move (or convert) arg1 -> arg2. This function is useful for changing precisions (e.g. single to double) with full exception processing for possible overflow and underflow. Okay. And to call it [4]: ------------------------------------------------------------------------------ |Function|Opcode| Register entry conditions | Stack entry conditions ------------------------------------------------------------------------------ | FMOV | $1A | U = precision parameter word| push arg | | | Y -> argument | push precision param word | | | D -> fpcb | push ptr to fpcb | | | X -> result | call FPO9 | | | | pull result ------------------------------------------------------------------------------ For moves, U contains a parameter word describing the size of the source and destination arguments. The bits are as follows, where the size is as defined in the fpcb control byte Bits 0-2 : Destination size Bits 3-7 : unused Bits 8-10 : Source size Bits 11-15: unused And the size bits are defined as: 111 = reserved 110 = reserved 101 = reserved 100 = extended - round result to double 011 = extended - round result to single 010 = extended - no forced rounding 001 = double 000 = single It appears that to convert from single to double, I would set U to $0001, but the results are *so* far out of whack it's not even funny. I've tried setting U to point to the value $0001 and that doesn't work. I've tried shifting the bits (because in the FPCB they're the upper three bits) and that doesn't work. I've tried reversing the registers and that doesn't work. Does anyone have the actual source code [4]? Or know what I might be doing wrong? -spc [1] A ROM with position independent 6809 object code that conforms (to what I can find) with IEEE 754 Draft 8. [2] Available in the file fpo9.lzh here https://ftplike.com/browser/os9archive.rtsi.com/OS9/OS9_6X09/PROG/ [3] Using a 6809 emulator library I wrote: https://github.com/spc476/mc6809 Not much documentation I'm afraid. [4] Register entry: ROM base address + $003D Stack entry: ROM base address + $003F [5] I'm lead to believe that Motorola release the code into the public domain.