Files
open-roms/src/basic/engine_variables/tmpstr_free.s
T
2020-07-19 08:54:53 +02:00

98 lines
1.2 KiB
ArmAsm

// #LAYOUT# STD * #TAKE
// #LAYOUT# * BASIC_0 #TAKE
// #LAYOUT# * * #IGNORE
//
// Frees the string if it belongs to temporary string stack
//
// Input:
// - DSCPNT+1/+2 - pointer to string (depending on the call addres, can fetch from FAC1/FAC2)
//
tmpstr_free_FAC1:
lda __FAC1+1
sta DSCPNT+1
lda __FAC1+2
#if HAS_OPCODES_65C02
bra !+
#else
jmp !+
#endif
tmpstr_free_FAC2:
lda __FAC2+1
sta DSCPNT+1
lda __FAC2+2
!:
sta DSCPNT+2
// FALLTROUGH
tmpstr_free:
// First find the descriptor matching the given string
ldx #$19
//FALLTROUGH
tmpstr_free_loop:
cpx TEMPPT
bne !+
rts // quit if not found
!:
// First fetch the string size - if 0, do not even try to compare
ldy $00, x
beq tmpstr_free_next_3
// Check if current string
inx
lda $00, x
cmp DSCPNT+1
bne tmpstr_free_next_2
inx
lda $00, x
cmp DSCPNT+2
bne tmpstr_free_next_1
// This is the string we need to free
sty DSCPNT+0
phx_trash_a
jsr varstr_free
plx_trash_a
// Mark empty string as free and quit
dex
dex
lda #$00
sta $00, x
rts
tmpstr_free_next_3:
inx
// FALLTROUGH
tmpstr_free_next_2:
inx
// FALLTROUGH
tmpstr_free_next_1:
inx
bne tmpstr_free_loop