| Routines

12187: 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 0 for a positive number and 255 for a negative number.
Input
HL | Address of the first byte of the number
Output
A | Exponent byte
PREP_ADD | 12187 | LD A,(HL) | Transfer the exponent to A.
| 12188 | LD (HL),0 | Presume a positive number.
| 12190 | AND A | If the number is zero then the preparation is already finished.
| 12191 | RET Z
| 12192 | INC HL | Now point to the sign byte.
| 12193 | BIT 7,(HL) | Set the zero flag for positive number.
| 12195 | SET 7,(HL) | Restore the true numeric bit.
| 12197 | DEC HL | Point to the first byte again.
| 12198 | RET Z | Positive numbers have been prepared, but negative numbers need to be two's complemented.
| 12199 | PUSH BC | Save any earlier exponent.
| 12200 | LD BC,5 | There are 5 bytes to be handled.
| 12203 | ADD HL,BC | Point one past the last byte.
| 12204 | LD B,C | Transfer the 5 to B.
| 12205 | LD C,A | Save the exponent in C.
| 12206 | SCF | Set carry flag for negation.
NEG_BYTE | 12207 | DEC HL | Point to each byte in turn.
| 12208 | LD A,(HL) | Get each byte.
| 12209 | CPL | One's complement the byte.
| 12210 | ADC A,0 | Add in carry for negation.
| 12212 | LD (HL),A | Restore the byte.
| 12213 | DJNZ NEG_BYTE | Loop 5 times.
| 12215 | LD A,C | Restore the exponent to A.
| 12216 | POP BC | Restore any earlier exponent.
| 12217 | RET | Finished.