| Routines

11647: THE 'INT-FETCH' SUBROUTINE

Used by the routines at FP_TO_BC, PRINT_FP, multiply, re_stack and negate. This subroutine collects in DE a small integer n (-65535<=n<=65535) from the location addressed by HL, i.e. n is normally the first (or second) number at the top of the calculator stack; but HL can also access (by exchange with DE) a number which has been deleted from the stack. The subroutine does not itself delete the number from the stack or from memory; it returns HL pointing to the fourth byte of the number in its original position.
Input
HL | Address of the first byte of the value on the calculator stack
Output
C | Sign byte
DE | The value
HL | Address of the fourth byte of the value
INT_FETCH | 11647 | INC HL | Point to the sign byte of the number.
| 11648 | LD C,(HL) | Copy the sign byte to C.
The following mechanism will two's complement the number if it is negative (C is 255) but leave it unaltered if it is positive (C is 0).
| 11649 | INC HL | Point to the less significant byte.
| 11650 | LD A,(HL) | Collect the byte in A.
| 11651 | XOR C | One's complement it if negative.
| 11652 | SUB C | This adds 1 for negative numbers; it sets the carry unless the byte was 0.
| 11653 | LD E,A | Less significant byte to E now.
| 11654 | INC HL | Point to the more significant byte.
| 11655 | LD A,(HL) | Collect it in A.
| 11656 | ADC A,C | Finish two's complementing in the case of a negative number; note that the carry is always left reset.
| 11657 | XOR C
| 11658 | LD D,A | More significant byte to D now.
| 11659 | RET | Finished.