From cec9adce256c346170ca789367bd65650ce42639 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 12 Jul 2020 12:40:22 +0200 Subject: [PATCH] more Mega65 optimizations in BASIC --- src/basic/basic_commands/cmd_print.s | 4 ++ src/basic/engine/ad9e.frmevl.s | 4 ++ src/basic/engine/end_of_statement_check.s | 4 ++ src/basic/engine/execute_line_statements.s | 4 ++ src/basic/engine/fetch_character.s | 6 ++- .../engine/fetch_character_m65_46K_50K.s | 39 ++++++++++++++---- .../fetch_character_skip_spaces_m65_46K_50K.s | 41 ------------------- src/basic/engine/fetch_operator.s | 12 ++++++ src/basic/engine/fetch_uint16.s | 4 ++ src/basic/engine/fetch_variable.s | 4 ++ src/basic/engine/injest_assign.s | 4 ++ src/basic/engine/injest_comma.s | 9 ++-- src/basic/engine/unconsume_character.s | 3 ++ 13 files changed, 83 insertions(+), 55 deletions(-) delete mode 100644 src/basic/engine/fetch_character_skip_spaces_m65_46K_50K.s diff --git a/src/basic/basic_commands/cmd_print.s b/src/basic/basic_commands/cmd_print.s index f26eee42..fe7093c5 100644 --- a/src/basic/basic_commands/cmd_print.s +++ b/src/basic/basic_commands/cmd_print.s @@ -19,7 +19,11 @@ cmd_print: cmd_print_loop: +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif // FALLTROUGH diff --git a/src/basic/engine/ad9e.frmevl.s b/src/basic/engine/ad9e.frmevl.s index 71b1ccb7..b1f8688e 100644 --- a/src/basic/engine/ad9e.frmevl.s +++ b/src/basic/engine/ad9e.frmevl.s @@ -178,7 +178,11 @@ FRMEVL_fetch_string: !: // No closing quote, but end of the data +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif // FALLTROUGH diff --git a/src/basic/engine/end_of_statement_check.s b/src/basic/engine/end_of_statement_check.s index e8b3b6ea..7612d433 100644 --- a/src/basic/engine/end_of_statement_check.s +++ b/src/basic/engine/end_of_statement_check.s @@ -26,7 +26,11 @@ end_of_statement_check: cmp #$20 bne !+ +#if !HAS_OPCODES_65CE02 jsr consume_character +#else + inw TXTPTR +#endif jmp end_of_statement_check !: cmp #$00 diff --git a/src/basic/engine/execute_line_statements.s b/src/basic/engine/execute_line_statements.s index c0da724a..1e37e135 100644 --- a/src/basic/engine/execute_line_statements.s +++ b/src/basic/engine/execute_line_statements.s @@ -254,5 +254,9 @@ execute_statements_var_assign: // Try variable assignment - execute as LET command +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif jmp cmd_let diff --git a/src/basic/engine/fetch_character.s b/src/basic/engine/fetch_character.s index 8c1dcc99..231cd086 100644 --- a/src/basic/engine/fetch_character.s +++ b/src/basic/engine/fetch_character.s @@ -29,14 +29,14 @@ fetch_character: #endif +#if !HAS_OPCODES_65CE02 + // FALLTHROUGH consume_character: // Advance basic text pointer -#if !HAS_OPCODES_65CE02 - inc TXTPTR+0 bne !+ inc TXTPTR+1 @@ -44,6 +44,8 @@ consume_character: #else // HAS_OPCODES_65CE02 + // Advance basic text pointer + inw TXTPTR #endif diff --git a/src/basic/engine/fetch_character_m65_46K_50K.s b/src/basic/engine/fetch_character_m65_46K_50K.s index 84363222..78908e7a 100644 --- a/src/basic/engine/fetch_character_m65_46K_50K.s +++ b/src/basic/engine/fetch_character_m65_46K_50K.s @@ -2,7 +2,7 @@ // #LAYOUT# * * #IGNORE // -// Fetches a single character - optimized version +// Fetches a single character (depending on version - also skips spaces) - optimized version // @@ -18,9 +18,14 @@ fetch_character: lda #$26 sta CPU_R6510 - // Retrieve value from under ROMs + // Retrieve value from under ROMs, advance text pointer lda (TXTPTR), y + inw TXTPTR + + // FALLTROUGH + +fetch_character_end: // Restore memory mapping @@ -29,14 +34,30 @@ fetch_character: sta CPU_R6510 pla - // FALLTROUGH - -consume_character: - - // Advance basic text pointer - - inw TXTPTR rts +fetch_character_skip_spaces: + + ldy #0 + + // Unmap BASIC lower ROM + + lda #$26 + sta CPU_R6510 + + // Retrieve value from under ROMs, advance text pointer +!: + lda (TXTPTR), y + inw TXTPTR + + // Skip space characters + + cmp #$20 + beq !- + + // Restore memory mapping + + bra fetch_character_end + #endif diff --git a/src/basic/engine/fetch_character_skip_spaces_m65_46K_50K.s b/src/basic/engine/fetch_character_skip_spaces_m65_46K_50K.s deleted file mode 100644 index 9970a5ef..00000000 --- a/src/basic/engine/fetch_character_skip_spaces_m65_46K_50K.s +++ /dev/null @@ -1,41 +0,0 @@ -// #LAYOUT# M65 BASIC_0 #TAKE-HIGH -// #LAYOUT# * * #IGNORE - -// -// Fetches a single character, but skips spaces - optimized version -// - - -#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K - - -fetch_character_skip_spaces: - - ldy #0 - - // Unmap BASIC lower ROM - - lda #$26 - sta CPU_R6510 - - // Retrieve value from under ROMs, advance text pointer -!: - lda (TXTPTR), y - inw TXTPTR - - // Skip space characters - - cmp #$20 - beq !- - - // Restore memory mapping - - pha - lda #$27 - sta CPU_R6510 - pla - - rts - - -#endif diff --git a/src/basic/engine/fetch_operator.s b/src/basic/engine/fetch_operator.s index 26a260f6..c428ec6c 100644 --- a/src/basic/engine/fetch_operator.s +++ b/src/basic/engine/fetch_operator.s @@ -41,7 +41,11 @@ fetch_operator_success: fetch_operator_failed: +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif sec rts @@ -57,7 +61,11 @@ fetch_operator_try_gteq: // This is a '>' +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif lda #$07 bne fetch_operator_success // branch always !: @@ -79,7 +87,11 @@ fetch_operator_try_lteq_neq: // This is a '<' +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif lda #$09 bne fetch_operator_success // branch always !: diff --git a/src/basic/engine/fetch_uint16.s b/src/basic/engine/fetch_uint16.s index 5768588c..ccd0fd05 100644 --- a/src/basic/engine/fetch_uint16.s +++ b/src/basic/engine/fetch_uint16.s @@ -88,7 +88,11 @@ fetch_uint16_loop: fetch_uint16_end: +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif clc // FALLTROUGH diff --git a/src/basic/engine/fetch_variable.s b/src/basic/engine/fetch_variable.s index b6ba663b..0bb308cd 100644 --- a/src/basic/engine/fetch_variable.s +++ b/src/basic/engine/fetch_variable.s @@ -48,7 +48,11 @@ fetch_variable_check_type: fetch_variable_type_float: +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif #if HAS_OPCODES_65C02 bra fetch_variable_find_addr diff --git a/src/basic/engine/injest_assign.s b/src/basic/engine/injest_assign.s index e9cc7330..efc9bea0 100644 --- a/src/basic/engine/injest_assign.s +++ b/src/basic/engine/injest_assign.s @@ -14,7 +14,11 @@ injest_assign: beq injest_assign_found // Not found +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif sec rts diff --git a/src/basic/engine/injest_comma.s b/src/basic/engine/injest_comma.s index 8997ee2a..ff712d0e 100644 --- a/src/basic/engine/injest_comma.s +++ b/src/basic/engine/injest_comma.s @@ -9,14 +9,17 @@ injest_comma: - jsr fetch_character + jsr fetch_character_skip_spaces cmp #$2C // comma character beq injest_comma_found - cmp #$20 // space, can always be skipped - beq injest_comma // Not found + +#if !HAS_OPCODES_65CE02 jsr unconsume_character +#else + dew TXTPTR +#endif sec rts diff --git a/src/basic/engine/unconsume_character.s b/src/basic/engine/unconsume_character.s index 6503a17d..73609eff 100644 --- a/src/basic/engine/unconsume_character.s +++ b/src/basic/engine/unconsume_character.s @@ -6,6 +6,7 @@ // Reverses character fetch // +#if !HAS_OPCODES_65CE02 unconsume_character: @@ -18,3 +19,5 @@ unconsume_character: sta TXTPTR+1 rts + +#endif