Files
open-roms/c64/basic/basic_commands/cmd_load_verify.s
T

86 lines
1.8 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
jsr helper_load_init_params
jsr helper_load_setnam_any // if no file name found, use "*"
// Fetch the file name
jsr helper_load_fetch_filename
bcs !+
// Try to fetch device number and secondary address
jsr helper_load_fetch_devnum
bcs !+
jsr helper_load_fetch_secondary
!:
// FALLTROUGH
cmd_load_got_params: // input for tape wedge
// Perform loading
ldy TXTTAB+1
ldx TXTTAB+0
cmd_load_loadmerge: // entry point for 'cmd_merge'
lda VERCKB // LOAD or VERIFY
jsr JLOAD
bcs_16 do_kernal_error
cmd_load_no_error:
// Store last loaded address
stx VARTAB+0
sty VARTAB+1
// For VERIFY - this is it
lda VERCKB
bne_16 execute_statements
// C64 BASIC apparently does not clear variables after a LOAD in the
// middle of a program. For safety, we do.
jsr basic_do_clr
// 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
// If loading was done when running a program - run it
ldx CURLIN+1
inx
beq cmd_load_end // branch if direct mode
jmp execute_line
cmd_load_end:
jmp basic_main_loop