| Routines

2F9B: THE 'PREPARE TO ADD' SUBROUTINE

Used by the routine at addition. This subroutine is the first of four subroutines that are used by the main arithmetic operation routines - subtract, addition, multiply and division. This particular subroutine prepares a floating-point number for addition, mainly by replacing the sign bit with a true numerical bit 1, and negating the number (two's complement) if it is negative. The exponent is returned in the A register and the first byte is set to +00 for a positive number and +FF for a negative number.
Input
HL | Address of the first byte of the number
Output
A | Exponent byte
PREP_ADD | 2F9B | LD A,(HL) | Transfer the exponent to A.
| 2F9C | LD (HL),$00 | Presume a positive number.
| 2F9E | AND A | If the number is zero then the preparation is already finished.
| 2F9F | RET Z
| 2FA0 | INC HL | Now point to the sign byte.
| 2FA1 | BIT 7,(HL) | Set the zero flag for positive number.
| 2FA3 | SET 7,(HL) | Restore the true numeric bit.
| 2FA5 | DEC HL | Point to the first byte again.
| 2FA6 | RET Z | Positive numbers have been prepared, but negative numbers need to be two's complemented.
| 2FA7 | PUSH BC | Save any earlier exponent.
| 2FA8 | LD BC,$0005 | There are 5 bytes to be handled.
| 2FAB | ADD HL,BC | Point one past the last byte.
| 2FAC | LD B,C | Transfer the 5 to B.
| 2FAD | LD C,A | Save the exponent in C.
| 2FAE | SCF | Set carry flag for negation.
NEG_BYTE | 2FAF | DEC HL | Point to each byte in turn.
| 2FB0 | LD A,(HL) | Get each byte.
| 2FB1 | CPL | One's complement the byte.
| 2FB2 | ADC A,$00 | Add in carry for negation.
| 2FB4 | LD (HL),A | Restore the byte.
| 2FB5 | DJNZ NEG_BYTE | Loop 5 times.
| 2FB7 | LD A,C | Restore the exponent to A.
| 2FB8 | POP BC | Restore any earlier exponent.
| 2FB9 | RET | Finished.