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
+58
-20
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
|
||||||
@@ -20,7 +20,6 @@ cmd_rem:
|
|||||||
cmd_stop:
|
cmd_stop:
|
||||||
cmd_on:
|
cmd_on:
|
||||||
cmd_wait:
|
cmd_wait:
|
||||||
cmd_load:
|
|
||||||
cmd_save:
|
cmd_save:
|
||||||
cmd_verify:
|
cmd_verify:
|
||||||
cmd_def:
|
cmd_def:
|
||||||
@@ -82,24 +81,6 @@ cmd_go:
|
|||||||
;; Undefined tokens
|
;; Undefined tokens
|
||||||
cmd_unimplemented:
|
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
|
jmp do_NOT_IMPLEMENTED_error
|
||||||
+9
-1
@@ -154,12 +154,20 @@ load_done:
|
|||||||
jsr iec_tx_byte
|
jsr iec_tx_byte
|
||||||
jsr iec_release_atn
|
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
|
clc
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
|
||||||
load_error:
|
load_error:
|
||||||
|
|
||||||
;; XXX - Indicate KERNAL (not BASIC) LOAD error condtion
|
;; XXX - Indicate KERNAL (not BASIC) LOAD error condtion
|
||||||
|
sec
|
||||||
|
|
||||||
;; Re-enable interrupts and return
|
;; Re-enable interrupts and return
|
||||||
cli
|
cli
|
||||||
|
|||||||
Reference in new issue
Block a user