factor out basic line number parsing routine

This commit is contained in:
Paul Gardner-Stephen committed 2019-04-29 22:36:25 +09:30
1 parent 270314640c
commit 65af677caa
2 files changed
+32 -24

No files matched your search

+5 -24
View File
@@ -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
+27
View File
@@ -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