| Routines

06683: THE 'REPORT AND LINE NUMBER PRINTING' SUBROUTINE

The entry point OUT_NUM_1, used by the routines at MAIN_EXEC and PRINT_FP, will lead to the number in the BC register pair being printed. Any value over 9,999 will not however be printed correctly.
Input
BC | Number to print
OUT_NUM_1 | 06683 | PUSH DE | Save the other registers throughout the subroutine.
| 06684 | PUSH HL
| 06685 | XOR A | Clear the A register.
| 06686 | BIT 7,B | Jump forward to print a zero rather than '-2' when reporting on the edit-line.
| 06688 | JR NZ,OUT_NUM_4
| 06690 | LD H,B | Move the number to the HL register pair.
| 06691 | LD L,C
| 06692 | LD E,255 | Flag 'no leading spaces'.
| 06694 | JR OUT_NUM_3 | Jump forward to print the number.
The entry point OUT_NUM_2, used by the routine at OUT_LINE, will lead to the number indirectly addressed by the HL register pair being printed. This time any necessary leading spaces will appear. Again the limit of correctly printed numbers is 9,999.
OUT_NUM_2 | 06696 | PUSH DE | Save the DE register pair.
| 06697 | LD D,(HL) | Fetch the number into the DE register pair and save the pointer (updated).
| 06698 | INC HL
| 06699 | LD E,(HL)
| 06700 | PUSH HL
| 06701 | EX DE,HL | Move the number to the HL register pair and flag 'leading spaces are to be printed'.
| 06702 | LD E,32
Now the integer form of the number in the HL register pair is printed.
OUT_NUM_3 | 06704 | LD BC,64536 | This is '-1,000'.
| 06707 | CALL OUT_SP_NO | Print a first digit.
| 06710 | LD BC,65436 | This is '-100'.
| 06713 | CALL OUT_SP_NO | Print the second digit.
| 06716 | LD C,246 | This is '-10'.
| 06718 | CALL OUT_SP_NO | Print the third digit.
| 06721 | LD A,L | Move any remaining part of the number to the A register.
OUT_NUM_4 | 06722 | CALL OUT_CODE | Print the digit.
| 06725 | POP HL | Restore the registers before returning.
| 06726 | POP DE
| 06727 | RET