set end of loaded memory pointer in BASIC LOAD routine. Other small fixes.
This commit is contained in:
1 parent
0a97a16552
commit
6d74679a5c
3 files changed
+59
-21
No files matched your search
@@ -0,0 +1,49 @@
|
||||
cmd_load:
|
||||
|
||||
;; Parse filename
|
||||
;; (we can tell the KERNAL where it is in memory directly, since the
|
||||
;; KERNAL will be able to peek under ROMs to read it, since it will have
|
||||
;; to be able to peek under the ROMs for SAVE and VERIFY).
|
||||
;; Parse optional device #
|
||||
;; Parse optional secondary address
|
||||
|
||||
;; XXX - C64 BASIC apparently doesn't clear variables after a LOAD in the
|
||||
;; middle of a program. For safety, we do.
|
||||
jsr basic_do_clr
|
||||
|
||||
;; Try to load an IEC file
|
||||
lda #0 ; use supplied load address, not the one from the file
|
||||
sta current_secondary_address
|
||||
lda #$00 ; LOAD not verify
|
||||
ldx #<$0801 ; LOAD address = $0801
|
||||
ldy #>$0801
|
||||
jsr $ffd5
|
||||
bcc +
|
||||
|
||||
;; A = KERNAL error code, which also almost match
|
||||
;; basic ERROR codes, so we can just copy the
|
||||
;; error code to X, decrement, and handle normally
|
||||
tax
|
||||
dex
|
||||
jmp do_basic_error
|
||||
|
||||
*
|
||||
;; $YYXX is the last loaded address, so store it
|
||||
stx basic_end_of_text_ptr+0
|
||||
sty basic_end_of_text_ptr+1
|
||||
|
||||
;; Now relink the loaded program, as we cannot trust the line
|
||||
;; links supplied. For example, the VICE virtual drive emulation
|
||||
;; always supplies $0101 as the address of the next line.
|
||||
|
||||
;; After LOADing, we either start the program from the beginning,
|
||||
;; or go back to the READY prompt if LOAD was called from direct mode.
|
||||
|
||||
;; Reset to start of program
|
||||
lda basic_start_of_text_ptr+0
|
||||
sta basic_current_line_ptr+0
|
||||
lda basic_start_of_text_ptr+1
|
||||
sta basic_current_line_ptr+1
|
||||
|
||||
;; Try to keep executing
|
||||
jmp basic_execute_statement
|
||||
Reference in new issue
Block a user