Files
open-roms/c64/basic/commands/cmd_load_verify.s
T
2020-06-05 22:26:08 +02:00

107 lines
2.1 KiB
ArmAsm

// #LAYOUT# STD * #TAKE
// #LAYOUT# * BASIC_0 #TAKE
// #LAYOUT# * * #IGNORE
cmd_verify:
// LOAD and VERIFY are very similar, from BASIC perspective there is almost no difference;
// just different parameter passed to Kernal and different error message in case of failure
lda #$01 // mark operation as VERIFY
skip_2_bytes_trash_nvz
cmd_load:
lda #$00 // mark operation as LOAD
sta VERCKB
// C64 BASIC apparently does not clear variables after a LOAD in the
// middle of a program. For safety, we do.
jsr basic_do_clr
// Set default device and secondary address; channel is not important now
jsr select_device
ldy #$00 // secondary address
jsr JSETFLS
// Fetch the file name
jsr fetch_filename
bcs cmd_load_no_filename
// Try to fetch secondary address
jsr fetch_device_secondary
jmp cmd_load_got_params
cmd_load_no_filename:
// If no file name is supplied, try to load first file from disc
lda #$01 // name length
ldx #<filename_any
ldy #>filename_any
jsr JSETNAM
// FALLTROUGH
cmd_load_got_params: // input for tape wedge
// Perform loading
ldy TXTTAB+1
ldx TXTTAB+0
lda VERCKB // LOAD or VERIFY
jsr JLOAD
// Handle result
php
pha
jsr print_return
pla
plp
bcc cmd_load_no_error
// .A = KERNAL error code, also almost matches BASIC error codes
tax
dex
bpl !+
ldx #B_ERR_BREAK
!:
jmp do_basic_error
cmd_load_no_error:
// Store last loaded address
stx VARTAB+0
sty VARTAB+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
jsr LINKPRG
// Now 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
jsr init_oldtxt
// XXX - should run program if LOAD was used in program mode
jmp basic_main_loop
// XXX move functions below to separate files, change names to neuytral