implement reporting BASIC errors, continuing work on tokeniser

This commit is contained in:
Paul Gardner-Stephen committed 2019-04-26 22:27:59 +09:30
1 parent 428bd8e497
commit 1bb72973fa
2 files changed
+65 -13

No files matched your search

+31
View File
@@ -0,0 +1,31 @@
;; Error # in X
do_basic_error:
;; "?"
txa
pha
lda #$3f
jsr $ffd2
pla
tax
;; Error message text
jsr print_packed_message
lda #$20
jsr $ffd2
;; "ERROR"
ldx #33
jsr print_packed_message
;; New lines
lda #$0d
jsr $ffd2
lda #$00
jsr $ffd2
;; XXX - Restore stack depth first?
jmp basic_main_loop
+34 -13
View File
@@ -29,8 +29,9 @@ tokenise_char:
cmp $0113
bne +
inc $0428
ldx #0
stx $0450
;; Finished tokenising line
;; Update tokenise_work1 and terminate with null
ldx $0112
@@ -40,8 +41,8 @@ tokenise_char:
rts
*
;; More to do
inc $0429
ldx #1
stx $0450
;; Maximum keyword length
lda #7
@@ -52,35 +53,54 @@ tokenise_char_loop:
;; Returns packed length in tokenise_work2 and writes the packed
;; word at $0100+
inc $042a
ldx #2
stx $0450
;; Pack string
ldx $0110
stx $044e
lda $0111
sta tokenise_work1
bpl +
foo: inc $d020
jmp foo
*
sta $044f
jsr pack_word
lda tokenise_work2
cmp #$10
bcc +
;; Packed string too long
ldx #16
jmp do_basic_error
*
inc $042b
ldx #3
stx $0450
;; Search for it in keywords
jsr keyword_search
php
inc $042c
plp
ldx #4
stx $0450
;; Did we find a keyword?
bcc found_token_in_line
inc $042d
ldx #5
stx $0450
;; Nope, so try shorter
ldx $0111
stx $044d
inc $0608,x
dec $0111
bne tokenise_char_loop
inc $042e
ldx #6
stx $0450
;; Is not a token, so copy to output verbatim
ldx $0110
ldy $0112
@@ -94,7 +114,8 @@ tokenise_char_loop:
found_token_in_line:
inc $042f
ldx #7
stx $0450
;; Got a token, so write it out
ldx $0112