diff --git a/c64/basic/basic_main_loop.s b/c64/basic/basic_main_loop.s index 52b12522..f5a20df2 100644 --- a/c64/basic/basic_main_loop.s +++ b/c64/basic/basic_main_loop.s @@ -44,13 +44,38 @@ rsl_l1: lda $0200,x dec tokenise_work1 ;; Stop trying to rim if we run out of input bne remove_leading_spaces -* - +* ;; Do printing of the new line lda #$0d jsr $ffd2 jsr tokenise_line + + ;; Has the user entered a line of BASIC beginning with a number? + lda $0200 + cmp #$30 + bcc not_a_line + cmp #$39 + bcs not_a_line + + ;; Yes, the line begins with a number. + ;; Parse the line number and check validity + inc $d020 + + ;; injest_number follows tokenise_work1 as the offset into the line, + ;; so remember the line length somewhere else for now. + lda tokenise_work1 + sta tokenise_work2 + lda #$00 + sta tokenise_work1 + + jsr injest_number + + lda tokenise_work1 + sta $0427 + + +not_a_line: jsr ready_message diff --git a/c64/basic/injest_number.s b/c64/basic/injest_number.s index daf03118..39791af1 100644 --- a/c64/basic/injest_number.s +++ b/c64/basic/injest_number.s @@ -17,7 +17,7 @@ injest_number: ;; Clear decimal position flag lda #$ff - sta tokenise_work2 + sta tokenise_work4 ;; Check if leading char is a - sign ;; Note: the - will have been tokenised to $AB @@ -44,7 +44,7 @@ ij_loop1: ;; If we have seen a decimal point, then we can completely ignore ;; the digit, as it is contributing not recordable information - lda tokenise_work2 + lda tokenise_work4 cmp #$ff bne ij_seen_decimal_point