![]() |
Routines |
Prev: 2684 | Up: Map |
The address of this routine is derived from an offset found in the scanning function table.
The routine at S_ALPHNUM continues here.
This routine deals with a decimal point or a number that starts with a digit. It also takes care of the expression 'BIN', which is dealt with in the 'decimal to floating-point' subroutine.
|
||||||||||
S_DECIMAL | 268D | CALL SYNTAX_Z | Jump forward if a line is being executed. | |||||||
2690 | JR NZ,S_STK_DEC | |||||||||
The action taken is now very different for syntax checking and line execution. If syntax is being checked then the floating-point form has to be calculated and copied into the actual BASIC line. However when a line is being executed the floating-point form will always be available so it is copied to the calculator stack to form a 'last value'.
During syntax checking:
|
||||||||||
2692 | CALL DEC_TO_FP | The floating-point form is found. | ||||||||
2695 | RST $18 | Set HL to point one past the last digit. | ||||||||
2696 | LD BC,$0006 | Six locations are required. | ||||||||
2699 | CALL MAKE_ROOM | Make the room in the BASIC line. | ||||||||
269C | INC HL | Point to the first free space. | ||||||||
269D | LD (HL),$0E | Enter the number marker code. | ||||||||
269F | INC HL | Point to the second location. | ||||||||
26A0 | EX DE,HL | This pointer is wanted in DE. | ||||||||
26A1 | LD HL,($5C65) | Fetch the 'old' STKEND. | ||||||||
26A4 | LD C,$05 | There are 5 bytes to move. | ||||||||
26A6 | AND A | Clear the carry flag. | ||||||||
26A7 | SBC HL,BC | The 'new' STKEND='old' STKEND minus 5. | ||||||||
26A9 | LD ($5C65),HL | |||||||||
26AC | LDIR | Move the floating-point number from the calculator stack to the line. | ||||||||
26AE | EX DE,HL | Put the line pointer in HL. | ||||||||
26AF | DEC HL | Point to the last byte added. | ||||||||
26B0 | CALL TEMP_PTR1 | This sets CH-ADD. | ||||||||
26B3 | JR S_NUMERIC | Jump forward. | ||||||||
During line execution:
|
||||||||||
S_STK_DEC | 26B5 | RST $18 | Get the current character. | |||||||
S_SD_SKIP | 26B6 | INC HL | Now move on to the next character in turn until the number marker code (+0E) is found. | |||||||
26B7 | LD A,(HL) | |||||||||
26B8 | CP $0E | |||||||||
26BA | JR NZ,S_SD_SKIP | |||||||||
26BC | INC HL | Point to the first byte of the number. | ||||||||
26BD | CALL STACK_NUM | Move the floating-point number. | ||||||||
26C0 | LD ($5C5D),HL | Set CH-ADD. | ||||||||
S_NUMERIC | 26C3 | SET 6,(IY+$01) | Set the numeric marker flag (bit 6 of FLAGS). | |||||||
26C7 | JR S_CONT_1 | Jump forward. |
Prev: 2684 | Up: Map |