diff --git a/src/basic/engine/varstr_garbage_collect.s b/src/basic/engine/varstr_garbage_collect.s index 1285b288..13520446 100644 --- a/src/basic/engine/varstr_garbage_collect.s +++ b/src/basic/engine/varstr_garbage_collect.s @@ -16,6 +16,13 @@ varstr_garbage_collect: lda TXTPTR+1 pha + // Similarly, we will reuse OLDTXT as the pointer to string descriptor + + lda OLDTXT+0 + pha + lda OLDTXT+1 + pha + // INDEX+0 and INDEX+1 will be our cumulative shift counter lda #$00 @@ -31,7 +38,8 @@ varstr_garbage_collect: varstr_garbage_collect_loop: - // Check whether we reached FRETOP + // Check if this was the last string + // XXX instead check if FRETOP+INDEX == TXTPTR lda TXTPTR+0 cmp FRETOP+0 @@ -46,8 +54,12 @@ varstr_garbage_collect_loop: varstr_garbage_collect_end: - // Restore TXTPTR and quit + // Restore OLDTXT and TXTPTR, and quit + pla + sta OLDTXT+1 + pla + sta OLDTXT+0 pla sta TXTPTR+1 pla @@ -60,15 +72,11 @@ varstr_garbage_collect_check_bptr: // Decrement TXTPTR by 2, so that it points to the back-pointer #if !HAS_OPCODES_65CE02 - lda #$02 jsr varstr_TXTPTR_down_A - #else // HAS_OPCODES_65CE02 - dew TXTPTR dew TXTPTR - #endif // Check whether the back-pointer is NULL @@ -78,39 +86,87 @@ varstr_garbage_collect_check_bptr: #if CONFIG_MEMORY_MODEL_60K ldx #