Files
open-roms/c64/basic/commands/cmd_load_verify.s
T
2020-06-06 23:10:45 +02:00

113 lines
2.2 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
// 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 device and 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
jsr cmd_load_save_handle_result
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
//
// Handle result from Kernal - common for LOAD/VERIFY/SAVE
//
cmd_load_save_handle_result:
php
pha
jsr print_return
pla
plp
bcs_16 do_kernal_error
rts