factor out basic line number parsing routine
This commit is contained in:
1 parent
270314640c
commit
65af677caa
2 files changed
+32
-24
No files matched your search
@@ -79,32 +79,19 @@ rsl_l1: lda $0200,x
|
|||||||
lda #$00
|
lda #$00
|
||||||
sta tokenise_work1
|
sta tokenise_work1
|
||||||
|
|
||||||
;; Try to read linne number
|
;; Try to read line number
|
||||||
lda #<$0200
|
lda #<$0200
|
||||||
sta basic_current_statement_ptr+0
|
sta basic_current_statement_ptr+0
|
||||||
lda #>$0200
|
lda #>$0200
|
||||||
sta basic_current_statement_ptr+1
|
sta basic_current_statement_ptr+1
|
||||||
jsr injest_number
|
|
||||||
|
|
||||||
;; Copy offset of first position after number back out
|
jsr basic_parse_line_number
|
||||||
|
|
||||||
|
;; Get pointer to next char
|
||||||
lda basic_current_statement_ptr+0
|
lda basic_current_statement_ptr+0
|
||||||
sta tokenise_work1
|
sta tokenise_work1
|
||||||
|
|
||||||
;; Check if the number is a valid line number
|
;; Got a valid line number -- so do add/del line
|
||||||
;; i.e., 16 bits, no exponent, no decimal
|
|
||||||
lda basic_fac1_mantissa+2
|
|
||||||
ora basic_fac1_mantissa+3
|
|
||||||
ora basic_fac1_exponent
|
|
||||||
beq +
|
|
||||||
ml_bad_line_number:
|
|
||||||
;; Syntax error
|
|
||||||
ldx #10
|
|
||||||
jmp do_basic_error
|
|
||||||
* lda tokenise_work4
|
|
||||||
cmp #$ff
|
|
||||||
bne ml_bad_line_number
|
|
||||||
|
|
||||||
;; Got a valid line number.
|
|
||||||
|
|
||||||
;; Skip any spaces after the line number
|
;; Skip any spaces after the line number
|
||||||
ldx tokenise_work1
|
ldx tokenise_work1
|
||||||
@@ -122,12 +109,6 @@ skip_spaces:
|
|||||||
;; memory free, or else it would auto CLR when you ran out of program space).
|
;; memory free, or else it would auto CLR when you ran out of program space).
|
||||||
jsr basic_do_clr
|
jsr basic_do_clr
|
||||||
|
|
||||||
;; Copy to line number holder
|
|
||||||
lda basic_fac1_mantissa+0
|
|
||||||
sta basic_line_number+0
|
|
||||||
lda basic_fac1_mantissa+1
|
|
||||||
sta basic_line_number+1
|
|
||||||
|
|
||||||
;; Delete line if present
|
;; Delete line if present
|
||||||
jsr basic_find_line
|
jsr basic_find_line
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
basic_parse_line_number:
|
||||||
|
|
||||||
|
jsr injest_number
|
||||||
|
|
||||||
|
;; Check if the number is a valid line number
|
||||||
|
;; i.e., 16 bits, no exponent, no decimal
|
||||||
|
lda basic_fac1_mantissa+2
|
||||||
|
ora basic_fac1_mantissa+3
|
||||||
|
ora basic_fac1_exponent
|
||||||
|
beq +
|
||||||
|
ml_bad_line_number:
|
||||||
|
ldx #10
|
||||||
|
jmp do_basic_error
|
||||||
|
*
|
||||||
|
;; Line number are not allowed to have decimal points in them
|
||||||
|
lda tokenise_work4
|
||||||
|
cmp #$ff
|
||||||
|
bne ml_bad_line_number
|
||||||
|
|
||||||
|
;; Got a valid line number.
|
||||||
|
lda basic_fac1_mantissa+0
|
||||||
|
sta basic_line_number+0
|
||||||
|
lda basic_fac1_mantissa+1
|
||||||
|
sta basic_line_number+1
|
||||||
|
clc
|
||||||
|
rts
|
||||||
Reference in new issue
Block a user