From 2a597b59e2426fd1cf5faec618963f42c97ab05e Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 9 Jul 2020 21:53:36 +0200 Subject: [PATCH] added two more BASIC commands, for testing --- doc/Extended-BASIC.md | 8 ++++++++ src/basic/,imports.s | 2 ++ src/basic/basic_commands_CC/cmd__jumptable_CC.s | 7 +++++-- src/basic/basic_commands_CC/cmd_clear.s | 10 ++++++++++ src/basic/basic_commands_CC/cmd_dispose.s | 10 ++++++++++ src/basic/engine/varstr_garbage_collect.s | 3 ++- tools/generate_strings.cc | 12 +++++++----- 7 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 src/basic/basic_commands_CC/cmd_clear.s create mode 100644 src/basic/basic_commands_CC/cmd_dispose.s diff --git a/doc/Extended-BASIC.md b/doc/Extended-BASIC.md index 10fbb59a..dcb12fe6 100644 --- a/doc/Extended-BASIC.md +++ b/doc/Extended-BASIC.md @@ -57,6 +57,14 @@ Tries to switch the machine back to 1 MHz operation mode. Tries to restore program destroyed by `NEW` or a reset. +### `CLEAR` + +Clears the screen content. + +### `DISPOSE` + +Runs the garbage collector - disposes outdated strings. + ### `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/,imports.s b/src/basic/,imports.s index cbe1dc6f..6af1d667 100644 --- a/src/basic/,imports.s +++ b/src/basic/,imports.s @@ -35,6 +35,8 @@ .label vector_reset = KERNAL().vector_reset .label hw_entry_reset = KERNAL().hw_entry_reset +.label clear_screen = KERNAL().clear_screen + #if CONFIG_DBG_PRINTF .label printf = KERNAL().printf #endif diff --git a/src/basic/basic_commands_CC/cmd__jumptable_CC.s b/src/basic/basic_commands_CC/cmd__jumptable_CC.s index cc85d4f9..fa795621 100644 --- a/src/basic/basic_commands_CC/cmd__jumptable_CC.s +++ b/src/basic/basic_commands_CC/cmd__jumptable_CC.s @@ -9,14 +9,17 @@ .const command_CC_list = List().add( + cmd_old, + cmd_merge, cmd_bload, cmd_bsave, cmd_bverify, - cmd_old, - cmd_cold + cmd_cold, + cmd_clear, + cmd_dispose ) diff --git a/src/basic/basic_commands_CC/cmd_clear.s b/src/basic/basic_commands_CC/cmd_clear.s new file mode 100644 index 00000000..fc2a2ee8 --- /dev/null +++ b/src/basic/basic_commands_CC/cmd_clear.s @@ -0,0 +1,10 @@ +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + + +cmd_clear: + + jsr clear_screen + + jmp execute_statements diff --git a/src/basic/basic_commands_CC/cmd_dispose.s b/src/basic/basic_commands_CC/cmd_dispose.s new file mode 100644 index 00000000..f2adb22e --- /dev/null +++ b/src/basic/basic_commands_CC/cmd_dispose.s @@ -0,0 +1,10 @@ +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + + +cmd_dispose: + + jsr varstr_garbage_collect + + jmp execute_statements diff --git a/src/basic/engine/varstr_garbage_collect.s b/src/basic/engine/varstr_garbage_collect.s index 48691435..5d5b3adf 100644 --- a/src/basic/engine/varstr_garbage_collect.s +++ b/src/basic/engine/varstr_garbage_collect.s @@ -122,7 +122,8 @@ varstr_garbage_collect_check_bptr: // Move string memory up by INDEX - // XXX + // XXX: set memmove__src (last byte of source), memmove__dst (last byte of destination), memmove__size (bytes to copy) + jsr shift_mem_up // Update TXTPTR diff --git a/tools/generate_strings.cc b/tools/generate_strings.cc index 2bddb6e7..dc308b79 100644 --- a/tools/generate_strings.cc +++ b/tools/generate_strings.cc @@ -178,12 +178,14 @@ const StringEntryList GLOBAL_Keywords_V2 = { ListType::KEYWORDS, "keywords_V2", const StringEntryList GLOBAL_Keywords_CC = { ListType::KEYWORDS, "keywords_CC", { // STD M65 U64 X16 - { true, true, true, true, "KCC_01", "MERGE", }, // Not present in CBM BASIC dialects, but common to some extensions (*) - { true, true, true, true, "KCC_02", "BLOAD", }, // http://www.antonis.de/qbebooks/gwbasman/bload.html - { true, true, true, true, "KCC_03", "BSAVE", }, // http://www.antonis.de/qbebooks/gwbasman/bsave.html - { true, true, true, true, "KCC_04", "BVERIFY", }, - { true, true, true, true, "KCC_05", "OLD", }, // Not present in CBM BASIC dialects, but common to some extensions (*) + { true, true, true, true, "KCC_01", "OLD", }, // Not present in CBM BASIC dialects, but common to some extensions (*) + { true, true, true, true, "KCC_02", "MERGE", }, // Not present in CBM BASIC dialects, but common to some extensions (*) + { true, true, true, true, "KCC_03", "BLOAD", }, // http://www.antonis.de/qbebooks/gwbasman/bload.html + { true, true, true, true, "KCC_04", "BSAVE", }, // http://www.antonis.de/qbebooks/gwbasman/bsave.html + { true, true, true, true, "KCC_05", "BVERIFY", }, { true, true, true, true, "KCC_06", "COLD", }, // Not present in CBM BASIC dialects, but common to some extensions (*) + { true, true, true, true, "KCC_07", "CLEAR", }, // Not present in CBM BASIC dialects, OpenROMs specific + { true, true, true, true, "KCC_08", "DISPOSE", }, // Not present in CBM BASIC dialects, OpenROMs specific // (*) see https://sourceforge.net/p/vice-emu/code/HEAD/tree/trunk/vice/src/petcat.c } };