diff --git a/src/basic/basic_commands/cmd_let.s b/src/basic/basic_commands/cmd_let.s index 706ea931..f74a7bb1 100644 --- a/src/basic/basic_commands/cmd_let.s +++ b/src/basic/basic_commands/cmd_let.s @@ -9,9 +9,19 @@ cmd_let: // Fetch variable name, should be followed by assign operator jsr fetch_variable + +#if HAS_OPCODES_65CE02 bcs_16 do_SYNTAX_error jsr injest_assign bcs_16 do_SYNTAX_error +#else + bcs !+ + jsr injest_assign + bcc !++ +!: + jmp do_SYNTAX_error +!: +#endif // Determine variable type and push it to the stack @@ -149,12 +159,67 @@ cmd_let_assign_string: // First special case - check if the new string has size 0 - lda DSCPNT+0 + lda __FAC1+0 bne cmd_let_assign_string_not_empty - // XXX free old string data + // Yes, it is empty - check if the old one is, free it if necessary - // Set the new variable as size 0 + lda DSCPNT+0 + bne !+ + jsr varstr_free_DSCPNT_set +!: + // Set the new variable as empty string + + ldy #$00 + lda #$00 + +#if CONFIG_MEMORY_MODEL_60K + ldx # $00 #if CONFIG_MEMORY_MODEL_60K - ldx # $01 @@ -127,6 +134,6 @@ varstr_free_inside: #if CONFIG_MEMORY_MODEL_60K jmp poke_under_roms #else // CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K - sta (DSCPNT), y + sta (DSCPNT+1), y rts #endif diff --git a/src/basic/engine/varstr_free_fretop.s b/src/basic/engine/varstr_free_fretop.s index 9f44b07c..f1abde57 100644 --- a/src/basic/engine/varstr_free_fretop.s +++ b/src/basic/engine/varstr_free_fretop.s @@ -8,11 +8,11 @@ // XXX change DSCPNT to use standard descriptor format -varstr_FRETOP_up: // DSCPNT+2 - bytes to increment FRETO, uses DSCPNT+2 +varstr_FRETOP_up: // DSCPNT+0 - bytes to increment FRETO clc lda FRETOP+0 - adc DSCPNT+2 + adc DSCPNT+0 sta FRETOP+0 bcc !+ inc FRETOP+1 diff --git a/src/basic/engine/varstr_garbage_collect.s b/src/basic/engine/varstr_garbage_collect.s index 6d5f30bd..e13dd68c 100644 --- a/src/basic/engine/varstr_garbage_collect.s +++ b/src/basic/engine/varstr_garbage_collect.s @@ -4,7 +4,6 @@ // XXX test this routine -// XXX change DSCPNT to use standard descriptor format varstr_garbage_collect: @@ -323,13 +322,13 @@ varstr_garbage_collect_unused: // XXX move these routines to separate files -varstr_TXTPTR_down_A: // .A - bytes to decrease TXTPTR, uses DSCPNT+2 +varstr_TXTPTR_down_A: // .A - bytes to decrease TXTPTR, uses DSCPNT+0 - sta DSCPNT+2 + sta DSCPNT+0 sec lda TXTPTR+0 - sbc DSCPNT+2 + sbc DSCPNT+0 sta TXTPTR+0 bcs !+ dec TXTPTR+1 @@ -337,13 +336,13 @@ varstr_TXTPTR_down_A: // .A - bytes to decrease TXTPTR, uses DS rts -varstr_INDEX_up_A: // .A - bytes to increase TXTPTR, uses DSCPNT+2 +varstr_INDEX_up_A: // .A - bytes to increase TXTPTR, uses DSCPNT+0 - sta DSCPNT+2 + sta DSCPNT+0 clc lda INDEX+0 - adc DSCPNT+2 + adc DSCPNT+0 sta INDEX+0 bcc !+ dec INDEX+1 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 43e3e7bf..c1b4fc9c 100644 --- a/src/basic/memory/under_rom_peek_fetch_46k_50k.s +++ b/src/basic/memory/under_rom_peek_fetch_46k_50k.s @@ -68,7 +68,7 @@ peek_under_roms_via_VARPNT: jmp peek_under_roms_finalize #endif -peek_under_roms_via_DSCPNT: +peek_under_roms_via_DSCPNT_PLUS_1: // Unmap BASIC lower ROM @@ -77,7 +77,7 @@ peek_under_roms_via_DSCPNT: // Retrieve value from under ROMs - lda (DSCPNT), y + lda (DSCPNT+1), y #if HAS_OPCODES_65C02 bra peek_under_roms_finalize