another string assignment bugfix

This commit is contained in:
FeralChild64 committed 2020-07-18 14:29:30 +02:00
1 parent c50595ab2d
commit eefbaf76d8
4 files changed
+32 -8

No files matched your search

+23 -6
View File
@@ -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
@@ -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
@@ -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
@@ -9,10 +9,13 @@
#if CONFIG_MEMORY_MODEL_60K
helper_let_strdesccpy:
helper_let_strvarcpy:
ldx #<VARPNT
// Retrieve pointer to destination
// XXX this part is probably not needed
ldy #$02
jsr peek_under_roms
sta DSCPNT+2