diff --git a/src/basic/basic_commands/cmd_let.s b/src/basic/basic_commands/cmd_let.s index d395e4ed..d772c378 100644 --- a/src/basic/basic_commands/cmd_let.s +++ b/src/basic/basic_commands/cmd_let.s @@ -272,18 +272,35 @@ cmd_let_assign_string_not_text_area: cmd_let_assign_string_try_reuse: - // Check if size of both strings equals + // Check if we can reuse old string memory + sec lda DSCPNT+0 - cmp __FAC1 - bne cmd_let_assign_string_try_reuse_unsuccesful + sbc __FAC1+0 + bcc cmd_let_assign_string_try_reuse_unsuccesful + + // If size of both string equals - simply reuse it - // Size of both string equals, the old one belongs to the string area - simply reuse it + beq_16 helper_let_strvarcpy - jmp helper_let_strvarcpy + // Old string is longer - if difference is at least 3 bytes, we can still reuse it + + sbc #$03 + bcc cmd_let_assign_string_try_reuse_unsuccesful + + // New string is shorter - enought that we can still reuse the old one with a small trick +/* + clc + adc DSCPNT+1 + sta DSCPNT+1 + bcs !+ + inc DSCPNT+2 +*/ + // XXX + // XXX implement this part + // XXX cmd_let_assign_string_try_reuse_unsuccesful: - // XXX consider another optimization first: parial memory reuse // No special case optimization is possible - but first get rid of the old string diff --git a/src/basic/basic_commands/helper_let_strdesccpy_38K.s b/src/basic/basic_commands/helper_let_strvarcpy_38K.s similarity index 79% rename from src/basic/basic_commands/helper_let_strdesccpy_38K.s rename to src/basic/basic_commands/helper_let_strvarcpy_38K.s index 44b93ef8..99efa312 100644 --- a/src/basic/basic_commands/helper_let_strdesccpy_38K.s +++ b/src/basic/basic_commands/helper_let_strvarcpy_38K.s @@ -9,7 +9,10 @@ #if CONFIG_MEMORY_MODEL_38K -helper_let_strdesccpy: +helper_let_strvarcpy: + + // Retrieve pointer to destination + // XXX this part is probably not needed ldy #$02 lda (VARPNT), y diff --git a/src/basic/basic_commands/helper_let_strvarcpy_46K_50K.s b/src/basic/basic_commands/helper_let_strvarcpy_46K_50K.s index 538db97b..4961a806 100644 --- a/src/basic/basic_commands/helper_let_strvarcpy_46K_50K.s +++ b/src/basic/basic_commands/helper_let_strvarcpy_46K_50K.s @@ -19,6 +19,7 @@ helper_let_strvarcpy: sta CPU_R6510 // Retrieve pointer to destination + // XXX this part is probably not needed ldy #$02 lda (VARPNT), y diff --git a/src/basic/basic_commands/helper_let_strdesccpy_60K.s b/src/basic/basic_commands/helper_let_strvarcpy_60K.s similarity index 81% rename from src/basic/basic_commands/helper_let_strdesccpy_60K.s rename to src/basic/basic_commands/helper_let_strvarcpy_60K.s index 19a96e55..7a19130d 100644 --- a/src/basic/basic_commands/helper_let_strdesccpy_60K.s +++ b/src/basic/basic_commands/helper_let_strvarcpy_60K.s @@ -9,10 +9,13 @@ #if CONFIG_MEMORY_MODEL_60K -helper_let_strdesccpy: +helper_let_strvarcpy: ldx #