A group of functions for testing and changing the sign of an fp number.

When FACCUM is non-zero, RST FTestSign jumps here to get the sign as an integer : 0x01 for positive, 0xFF for negative.

Load A with the most-significant byte of FACCUM, the top-most bit of which holds the sign. Then we LXI into SignToInt. | ||||

09DA | 3A7101 | FTestSign_tail | LDA FACCUM+2 | |

09DD | FE.. | CPI .. |

Inverts the sign byte in A before falling into SigntoInt.

Simply invert A. | ||||

09DE | 2F | InvSignToInt | CMA |

Converts the sign byte in A to 0x01 for positive, 0xFF for negative.

Get bit 7 into carry flag and subtract from itself with carry. If A was +ve then it is now 0, whereas if A was -ve then A is now FF. | ||||

09DF | 17 | SignToInt | RAL | |

09E0 | 9F | SBB A | ||

Return if A is FF, otherwise return with A=1. | ||||

09E1 | C0 | RNZ | ||

09E2 | 3C | INR A | ||

09E3 | C9 | RET |

Returns an integer that indicates FACCUM's sign. We do this by a simple call to FTestSign which gets the answer in A, then fall into FCharToFloat to get that answer back into FACCUM.

Get FACCUM's sign in A. A will be 0x01 for positive, 0 for zero, and 0xFF for negative. | ||||

09E4 | EF | Sgn | RST FTestSign |

Converts the signed byte in A to a floating-point number in FACCUM..

Get the char value in A as an unnormlised floating-point number. | ||||

09E5 | 0688 | FCharToFloat | MVI B,88 | ie 2^8 |

09E7 | 110000 | LXI D,0000 | ||

09EA | 217201 | LXI H,FACCUM+3 | ||

09ED | 4F | MOV C,A | ||

]Set FACCUM's exponent to 2^8, in preparation for a jump into FNormalise. | ||||

09EE | 70 | MOV M,B | ||

09EF | 0600 | MVI B,00 | ||

Set FTEMP to 0x80, another preparation step for FNormalise. | ||||

09F1 | 23 | INX H | ||

09F2 | 3680 | MVI M,80 | ||

Get sign into carry flag and jump to FNormalise. | ||||

09F4 | 17 | RAL | ||

09F5 | C35B08 | JMP FNormalise |

FACCUM = |FACCUM|.

Return if FACCUM is already positive, otherwise fall into FNegate to make it positive. | ||||

09F8 | EF | Abs | RST FTestSign | |

09F9 | F0 | RP |

Negate FACCUM's sign, ie FACCUM = -FACCUM.

09FA | 217101 | FNegate | LXI H,FACCUM+2 | |

09FD | 7E | MOV A,M | ||

09FE | EE80 | XRI 80 | ||

0A00 | 77 | MOV M,A | ||

0A01 | C9 | RET |

[Index] [Previous] [Next]