set end of loaded memory pointer in BASIC LOAD routine. Other small fixes.

This commit is contained in:
Paul Gardner-Stephen committed 2019-05-04 23:52:48 +09:30
1 parent 0a97a16552
commit 6d74679a5c
3 files changed
+59 -21

No files matched your search

+49
View File
@@ -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
-19
View File
@@ -20,7 +20,6 @@ cmd_rem:
cmd_stop:
cmd_on:
cmd_wait:
cmd_load:
cmd_save:
cmd_verify:
cmd_def:
@@ -82,24 +81,6 @@ cmd_go:
;; Undefined tokens
cmd_unimplemented:
;; Dummy action while testing IEC support
;; 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
*
jmp do_NOT_IMPLEMENTED_error
+10 -2
View File
@@ -154,13 +154,21 @@ load_done:
jsr iec_tx_byte
jsr iec_release_atn
;; FALL THROUGH
;; Return last address written to +1
;; (Even though Compute's Mapping the 64 says without the +1.
;; I'm suspicious. Will have to check behavour on an original C64)
ldx load_save_start_ptr+0
ldy load_save_start_ptr+1
clc
cli
rts
load_error:
;; XXX - Indicate KERNAL (not BASIC) LOAD error condtion
sec
;; Re-enable interrupts and return
cli
;; (iec_tx_byte will have set/cleared C flag and put result code