From 524d532433b76d8bb33725c79380cf07feb5b8eb Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 22 Jun 2020 18:45:24 +0200 Subject: [PATCH] small cleanup in BASIC --- c64/basic/basic_commands/cmd_load_verify.s | 12 +++------ c64/basic/basic_commands/cmd_save.s | 2 +- .../helper_load_fetch_filename.s} | 7 +++-- .../basic_commands/helper_load_init_param.s | 23 ++++++++++++++++ .../basic_commands_CC/cmd_bload_bverify.s | 10 ++----- c64/basic/basic_commands_CC/cmd_merge.s | 12 +++------ c64/basic/engine/fetch_device_secondary.s | 19 ++----------- c64/basic/engine/fetch_uint8.s | 27 +++++++++++++++++++ 8 files changed, 64 insertions(+), 48 deletions(-) rename c64/basic/{engine/fetch_file_name.s => basic_commands/helper_load_fetch_filename.s} (88%) create mode 100644 c64/basic/basic_commands/helper_load_init_param.s create mode 100644 c64/basic/engine/fetch_uint8.s diff --git a/c64/basic/basic_commands/cmd_load_verify.s b/c64/basic/basic_commands/cmd_load_verify.s index 45e1520c..3dba753d 100644 --- a/c64/basic/basic_commands/cmd_load_verify.s +++ b/c64/basic/basic_commands/cmd_load_verify.s @@ -14,18 +14,12 @@ cmd_verify: 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 + lda #$00 // mark operation as LOAD + jsr helper_load_init_params // Fetch the file name - jsr fetch_filename + jsr helper_load_fetch_filename bcs cmd_load_no_filename // Try to fetch device and secondary address diff --git a/c64/basic/basic_commands/cmd_save.s b/c64/basic/basic_commands/cmd_save.s index eae7c785..f4d4bf9f 100644 --- a/c64/basic/basic_commands/cmd_save.s +++ b/c64/basic/basic_commands/cmd_save.s @@ -13,7 +13,7 @@ cmd_save: // Fetch the file name - jsr fetch_filename + jsr helper_load_fetch_filename bcs_16 do_MISSING_FILENAME_error // Try to fetch device diff --git a/c64/basic/engine/fetch_file_name.s b/c64/basic/basic_commands/helper_load_fetch_filename.s similarity index 88% rename from c64/basic/engine/fetch_file_name.s rename to c64/basic/basic_commands/helper_load_fetch_filename.s index ece023d2..d93a4055 100644 --- a/c64/basic/engine/fetch_file_name.s +++ b/c64/basic/basic_commands/helper_load_fetch_filename.s @@ -7,12 +7,12 @@ // -fetch_filename: +helper_load_fetch_filename: // Check if end of statement jsr end_of_statement_check - bcs fetch_filename_done + bcs !+ // Call the expression parser, make sure it returned a string @@ -37,6 +37,5 @@ fetch_filename: // FALLTROUGH -fetch_filename_done: - +!: rts diff --git a/c64/basic/basic_commands/helper_load_init_param.s b/c64/basic/basic_commands/helper_load_init_param.s new file mode 100644 index 00000000..b9c29be2 --- /dev/null +++ b/c64/basic/basic_commands/helper_load_init_param.s @@ -0,0 +1,23 @@ +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Sets initial parameters for LOAD and simiar commands +// +// Input: +// - VERCKB content in .A +// + + +helper_load_init_params: + + // Set LOAD/VERIFY flag + + sta VERCKB + + // Set default device, set secondary address to 0 + + jsr select_device + ldy #$00 // secondary address + jmp JSETFLS diff --git a/c64/basic/basic_commands_CC/cmd_bload_bverify.s b/c64/basic/basic_commands_CC/cmd_bload_bverify.s index aaab38d0..8ec63ef5 100644 --- a/c64/basic/basic_commands_CC/cmd_bload_bverify.s +++ b/c64/basic/basic_commands_CC/cmd_bload_bverify.s @@ -14,17 +14,11 @@ cmd_bverify: cmd_bload: 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 0 - it has to be loaded precisely where we want - jsr JSETFLS + jsr helper_load_init_params // Fetch the file name - jsr fetch_filename + jsr helper_load_fetch_filename bcc !+ // No filename supplied - this should only be allowed for tape (device number below 8) diff --git a/c64/basic/basic_commands_CC/cmd_merge.s b/c64/basic/basic_commands_CC/cmd_merge.s index 42410adb..e7e5af3f 100644 --- a/c64/basic/basic_commands_CC/cmd_merge.s +++ b/c64/basic/basic_commands_CC/cmd_merge.s @@ -6,17 +6,11 @@ cmd_merge: 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 0 - it has to be loaded precisely where we want - jsr JSETFLS + jsr helper_load_init_params // Fetch the file name - jsr fetch_filename + jsr helper_load_fetch_filename bcc !+ // No filename supplied - this should only be allowed for tape (device number below 8) @@ -30,7 +24,7 @@ cmd_merge: !: // Fetch device number - jsr fetch_device_secondary_uint8 + jsr fetch_coma_uint8 bcs !+ sta FA diff --git a/c64/basic/engine/fetch_device_secondary.s b/c64/basic/engine/fetch_device_secondary.s index 3fb96a95..1f16e6e4 100644 --- a/c64/basic/engine/fetch_device_secondary.s +++ b/c64/basic/engine/fetch_device_secondary.s @@ -11,7 +11,7 @@ fetch_device_secondary: // Fetch the device number - jsr fetch_device_secondary_uint8 + jsr fetch_coma_uint8 bcs fetch_device_secondary_done sta FA @@ -22,7 +22,7 @@ fetch_secondary: // Fetch secondary address - jsr fetch_device_secondary_uint8 + jsr fetch_coma_uint8 bcs fetch_device_secondary_done sta SA @@ -32,18 +32,3 @@ fetch_secondary: fetch_device_secondary_done: rts - - -fetch_device_secondary_uint8: // also called by 'cmd_merge' - - jsr injest_comma - bcs !+ - - jsr injest_spaces - jsr basic_parse_line_number - lda LINNUM+1 - bne_16 do_ILLEGAL_QUANTITY_error - lda LINNUM+0 - clc -!: - rts diff --git a/c64/basic/engine/fetch_uint8.s b/c64/basic/engine/fetch_uint8.s new file mode 100644 index 00000000..30776d84 --- /dev/null +++ b/c64/basic/engine/fetch_uint8.s @@ -0,0 +1,27 @@ +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Fetches 8-bit unsigned integer +// + + +fetch_coma_uint8: + + jsr injest_comma + bcs !+ + + // FALLTROUGH + +fetch_uint8: + + jsr injest_spaces + jsr basic_parse_line_number + // XXX this should also detect errors + lda LINNUM+1 + bne_16 do_ILLEGAL_QUANTITY_error + lda LINNUM+0 + clc +!: + rts