From c88cce6045543688662e301aca32e1103e62a2b0 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 28 Jun 2020 16:24:11 +0200 Subject: [PATCH] implemented BASIC command OLD --- doc/Extended-BASIC.md | 4 ++ .../basic_commands_CC/cmd__jumptable_CC.s | 4 +- src/basic/basic_commands_CC/cmd_old.s | 64 +++++++++++++++++++ tools/generate_strings.cc | 1 + 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/basic/basic_commands_CC/cmd_old.s diff --git a/doc/Extended-BASIC.md b/doc/Extended-BASIC.md index 235a0ed9..2f9088b3 100644 --- a/doc/Extended-BASIC.md +++ b/doc/Extended-BASIC.md @@ -13,6 +13,10 @@ Tries to switch the machine to turbo mode - details differ depending on the conf Tries to switch the machine back to 1 MHz operation mode. +### `OLD` + +Tries to restore program destroyed by NEW or a reset. + ### `MERGE "file_name" [, device_number]` Appends the BASIC program from a storage medium to the one currently present in memory. diff --git a/src/basic/basic_commands_CC/cmd__jumptable_CC.s b/src/basic/basic_commands_CC/cmd__jumptable_CC.s index 72168c3e..52a9cb50 100644 --- a/src/basic/basic_commands_CC/cmd__jumptable_CC.s +++ b/src/basic/basic_commands_CC/cmd__jumptable_CC.s @@ -13,7 +13,9 @@ cmd_bload, cmd_bsave, - cmd_bverify + cmd_bverify, + + cmd_old ) diff --git a/src/basic/basic_commands_CC/cmd_old.s b/src/basic/basic_commands_CC/cmd_old.s new file mode 100644 index 00000000..ff601281 --- /dev/null +++ b/src/basic/basic_commands_CC/cmd_old.s @@ -0,0 +1,64 @@ +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + + +cmd_old: + + // First make sure we are in direct mode + + ldx CURLIN+1 + inx + bne_16 do_DIRECT_MODE_ONLY_error + + // Now try to restore program linkage + + ldy #$01 + tya + sta (TXTTAB),y + + jsr LINKPRG + + // Now we have to restore VARTAB XXX deduplicate this with line editor + + lda TXTTAB+0 + sta OLDTXT+0 + lda TXTTAB+1 + sta OLDTXT+1 +!: + lda OLDTXT+0 + sta VARTAB+0 + lda OLDTXT+1 + sta VARTAB+1 + + jsr basic_follow_link_to_next_line + + lda OLDTXT+0 + ora OLDTXT+1 + bne !- // branch if pointer not NULL + + // Correct VARTAB by 2 bytes NULL pointer + +#if HAS_OPCODES_65CE02 + + inw VARTAB + inw VARTAB + +#else + + clc + lda VARTAB+0 + adc #$02 + sta VARTAB+0 + bcc !+ + inc VARTAB+1 +!: +#endif + + // Call CLR to restore remaining variables + + jsr do_clr + + // Quit + + jmp shell_main_loop diff --git a/tools/generate_strings.cc b/tools/generate_strings.cc index 790aaa8a..5a6cafb1 100644 --- a/tools/generate_strings.cc +++ b/tools/generate_strings.cc @@ -181,6 +181,7 @@ const StringEntryList GLOBAL_Keywords_CC = { ListType::KEYWORDS, "keywords_CC", { true, true, true, "KCC_02", "BLOAD", }, // http://www.antonis.de/qbebooks/gwbasman/bload.html { true, true, true, "KCC_03", "BSAVE", }, // http://www.antonis.de/qbebooks/gwbasman/bsave.html { true, true, true, "KCC_04", "BVERIFY", }, + { true, true, true, "KCC_05", "OLD", }, // OpenROMs specific, not present in CBM BASIC dialects } }; // extended BASIC keywords - reserved for BASIC commands likely making sense on most C64-compatible machines