Routines |
Prev: 11599 | Up: Map | Next: 11660 |
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.
|
||||||||||||||||
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. |
Prev: 11599 | Up: Map | Next: 11660 |