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 |