From 12abb60d2235f891d8ddeb75c49b5bff9941cac0 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 19 Jul 2020 16:15:50 +0200 Subject: [PATCH] some more code optimizations --- src/basic/basic_commands/cmd_print.s | 19 +++++++------ .../helper_print_string_46K_50K.s | 27 +++++++++++++++++++ .../helper_frmevl_strdesccpy_46K_50K.s | 4 +++ .../assign_variable_TI_string.s | 2 -- .../engine_variables/helper_gc_misc_46K_50K.s | 5 +--- .../memory/under_rom_peek_fetch_46k_50k.s | 15 +++++------ 6 files changed, 48 insertions(+), 24 deletions(-) create mode 100644 src/basic/basic_commands/helper_print_string_46K_50K.s diff --git a/src/basic/basic_commands/cmd_print.s b/src/basic/basic_commands/cmd_print.s index 2dad7ba7..13faafdd 100644 --- a/src/basic/basic_commands/cmd_print.s +++ b/src/basic/basic_commands/cmd_print.s @@ -42,7 +42,12 @@ cmd_print_string: // Print a string value - // XXX add optimized 46K/50K version +#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K + + jsr helper_print_string + jmp_8 cmd_print_next_arg + +#else // CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_60K ldy #$00 !: @@ -50,23 +55,17 @@ cmd_print_string: beq cmd_print_next_arg #if CONFIG_MEMORY_MODEL_60K - ldx #<(__FAC1 + 1) jsr peek_under_roms - -#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K - - jsr peek_under_roms_via_FAC1_PLUS_1 - #else // CONFIG_MEMORY_MODEL_38K - lda (__FAC1 + 1), y - #endif jsr JCHROUT iny - jmp !- + bpl !- + +#endif cmd_print_float: diff --git a/src/basic/basic_commands/helper_print_string_46K_50K.s b/src/basic/basic_commands/helper_print_string_46K_50K.s new file mode 100644 index 00000000..4902509e --- /dev/null +++ b/src/basic/basic_commands/helper_print_string_46K_50K.s @@ -0,0 +1,27 @@ +// #LAYOUT# STD * #TAKE-HIGH +// #LAYOUT# * BASIC_0 #TAKE-HIGH +// #LAYOUT# * * #IGNORE + +// This has to go $E000 or above - routine below banks out the main BASIC ROM! + +#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K + +helper_print_string: + + // Unmap BASIC lower ROM + + lda #$26 + sta CPU_R6510 + + // Print the string + + ldy #$00 +!: + cpy __FAC1 + 0 + beq_16 remap_BASIC // branch if end of the string + lda (__FAC1 + 1), y + jsr JCHROUT + iny + bpl !- + +#endif diff --git a/src/basic/engine_runtime/helper_frmevl_strdesccpy_46K_50K.s b/src/basic/engine_runtime/helper_frmevl_strdesccpy_46K_50K.s index bf6249a6..249dbb7d 100644 --- a/src/basic/engine_runtime/helper_frmevl_strdesccpy_46K_50K.s +++ b/src/basic/engine_runtime/helper_frmevl_strdesccpy_46K_50K.s @@ -30,6 +30,10 @@ helper_frmevl_strdesccpy: lda (VARPNT),y sta __FAC1+2 + // FALLTROUGH + +remap_BASIC: + // Restore default memory mapping lda #$27 diff --git a/src/basic/engine_variables/assign_variable_TI_string.s b/src/basic/engine_variables/assign_variable_TI_string.s index c18cbf1a..55c5f644 100644 --- a/src/basic/engine_variables/assign_variable_TI_string.s +++ b/src/basic/engine_variables/assign_variable_TI_string.s @@ -26,8 +26,6 @@ assign_variable_TI_string: // FALLTROUGH - // XXX provide optimized version for memory models 46K/50K - assign_variable_TI_string_loop: // First fetch the digit diff --git a/src/basic/engine_variables/helper_gc_misc_46K_50K.s b/src/basic/engine_variables/helper_gc_misc_46K_50K.s index 68c10bf1..503df2aa 100644 --- a/src/basic/engine_variables/helper_gc_misc_46K_50K.s +++ b/src/basic/engine_variables/helper_gc_misc_46K_50K.s @@ -49,9 +49,6 @@ helper_gc_misc_end: // Restore default memory mapping - lda #$27 - sta CPU_R6510 - - rts + jmp remap_BASIC #endif diff --git a/src/basic/memory/under_rom_peek_fetch_46k_50k.s b/src/basic/memory/under_rom_peek_fetch_46k_50k.s index 31368d5e..f4b652aa 100644 --- a/src/basic/memory/under_rom_peek_fetch_46k_50k.s +++ b/src/basic/memory/under_rom_peek_fetch_46k_50k.s @@ -21,7 +21,7 @@ peek_under_roms_via_TXTPTR: // FALLTROUGH -peek_under_roms_finalize: +remap_BASIC_preserve_A: // Restore memory mapping @@ -44,7 +44,7 @@ peek_under_roms_via_OLDTXT: // Retrieve value from under ROMs lda (OLDTXT), y - jmp_8 peek_under_roms_finalize + jmp_8 remap_BASIC_preserve_A peek_under_roms_via_VARPNT: @@ -56,7 +56,7 @@ peek_under_roms_via_VARPNT: // Retrieve value from under ROMs lda (VARPNT), y - jmp_8 peek_under_roms_finalize + jmp_8 remap_BASIC_preserve_A peek_under_roms_via_FAC1_PLUS_1: @@ -67,9 +67,8 @@ peek_under_roms_via_FAC1_PLUS_1: // Retrieve value from under ROMs - lda (__FAC1 + 1), y - jmp_8 peek_under_roms_finalize - + lda (__FAC1+1), y + jmp_8 remap_BASIC_preserve_A #if ROM_LAYOUT_M65 @@ -90,7 +89,7 @@ fetch_character: // Restore memory mapping - bra peek_under_roms_finalize + jmp_8 remap_BASIC_preserve_A fetch_character_skip_spaces: @@ -114,7 +113,7 @@ fetch_character_skip_spaces: // Restore memory mapping - bra peek_under_roms_finalize + jmp_8 remap_BASIC_preserve_A #endif