work towards string deallocation

This commit is contained in:
FeralChild64 committed 2020-07-02 22:51:48 +02:00
1 parent 116c6734e6
commit 2c86c577bc
8 files changed
+200 -73

No files matched your search

+36 -2
View File
@@ -19,6 +19,7 @@
//
// XXX test this routine
// XXX make it compatible with under-ROM routines
varstr_alloc:
@@ -61,15 +62,36 @@ varstr_alloc_retry:
ldy #$00
lda DSCPNT+0
#if CONFIG_MEMORY_MODEL_60K
ldx #<FRETOP
jsr poke_under_roms
#else // CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
sta (FRETOP), y
#endif
iny
lda DSCPNT+1
#if CONFIG_MEMORY_MODEL_60K
jsr poke_under_roms
#else // CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
sta (FRETOP), y
#endif
// Now lower FRETOP again to make space for the string content
dey // $01 -> $00
lda (DSCPNT), y
#if CONFIG_MEMORY_MODEL_60K
ldx #<DSCPNT
jsr peek_under_roms
#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
jsr peek_under_roms_via_DSCPNT
#else // CONFIG_MEMORY_MODEL_38K
lda (DSCPNT),y
#endif
jsr varstr_FRETOP_down
bcs varstr_alloc_fail
@@ -77,10 +99,22 @@ varstr_alloc_retry:
iny // $00 -> $01
lda FRETOP+0
sta (DSCPNT), y
#if CONFIG_MEMORY_MODEL_60K
ldx #<DSCPNT
jsr poke_under_roms
#else // CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
sta (FRETOP), y
#endif
iny
lda FRETOP+1
#if CONFIG_MEMORY_MODEL_60K
jsr poke_under_roms
#else // CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
sta (DSCPNT), y
#endif
// The end
-9
View File
@@ -1,9 +0,0 @@
// #LAYOUT# STD * #TAKE
// #LAYOUT# * BASIC_0 #TAKE
// #LAYOUT# * * #IGNORE
varstr_dealloc:
rts // XXX implement this
+75
View File
@@ -0,0 +1,75 @@
// #LAYOUT# STD * #TAKE
// #LAYOUT# * BASIC_0 #TAKE
// #LAYOUT# * * #IGNORE
//
// Releases back memory used by string
//
// Input:
// - DSCPNT+0, DSCPNT+1 - pointer to string descriptor
//
// XXX test this routine
varstr_free:
// First copy the string descriptor data to DSCPNT
// XXX write optimized version for CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
ldy #$00
#if CONFIG_MEMORY_MODEL_60K
ldx #<DSCPNT
jsr peek_under_roms
#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
jsr peek_under_roms_via_DSCPNT
#else // CONFIG_MEMORY_MODEL_38K
lda (DSCPNT),y
#endif
sta DSCPNT+2 // length of the string
iny
#if CONFIG_MEMORY_MODEL_60K
jsr peek_under_roms
#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
jsr peek_under_roms_via_DSCPNT
#else // CONFIG_MEMORY_MODEL_38K
lda (DSCPNT),y
#endif
pha
iny
#if CONFIG_MEMORY_MODEL_60K
jsr peek_under_roms
#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
jsr peek_under_roms_via_DSCPNT
#else // CONFIG_MEMORY_MODEL_38K
lda (DSCPNT),y
#endif
sta DSCPNT+1
pla
sta DSCPNT+0
// Quick check - is the string the lowest one?
cmp FRETOP+0
bne varstr_free_inside
lda DSCPNT+1
cmp FRETOP+1
bne varstr_free_inside
// This is the lowest string - increase FRETOP, this way
// the garbage collector will not be needed that quickly
// XXX implement this
varstr_free_inside:
// THis is not the lowest string; mark it as free
// XXX implement this
rts
File renamed without changes.
@@ -0,0 +1,89 @@
// #LAYOUT# STD * #TAKE-HIGH
// #LAYOUT# * BASIC_0 #TAKE-HIGH
// #LAYOUT# * * #IGNORE
// This has to go $E000 or above - as the routines below bank out the main BASIC ROM!
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
peek_under_roms_via_TXTPTR:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Retrieve value from under ROMs
lda (TXTPTR), y
// FALLTROUGH
peek_under_roms_finalize:
// Restore memory mapping
pha
lda #$27
sta CPU_R6510
pla
// Quit
rts
peek_under_roms_via_OLDTXT:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Retrieve value from under ROMs
lda (OLDTXT), y
#if HAS_OPCODES_65C02
bra peek_under_roms_finalize
#else
jmp peek_under_roms_finalize
#endif
peek_under_roms_via_DSCPNT:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Retrieve value from under ROMs
lda (DSCPNT), y
#if HAS_OPCODES_65C02
bra peek_under_roms_finalize
#else
jmp peek_under_roms_finalize
#endif
peek_under_roms_via_FAC1_PLUS_1:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Retrieve value from under ROMs
lda (__FAC1 + 1), y
#if HAS_OPCODES_65C02
bra peek_under_roms_finalize
#else
jmp peek_under_roms_finalize
#endif
#endif
@@ -8,68 +8,6 @@
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
peek_under_roms_via_TXTPTR:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Retrieve value from under ROMs
lda (TXTPTR), y
// FALLTROUGH
peek_under_roms_finalize:
// Restore memory mapping
pha
lda #$27
sta CPU_R6510
pla
// Quit
rts
peek_under_roms_via_OLDTXT:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Retrieve value from under ROMs
lda (OLDTXT), y
#if HAS_OPCODES_65C02
bra peek_under_roms_finalize
#else
jmp peek_under_roms_finalize
#endif
peek_under_roms_via_FAC1_PLUS_1:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Retrieve value from under ROMs
lda (__FAC1 + 1), y
#if HAS_OPCODES_65C02
bra peek_under_roms_finalize
#else
jmp peek_under_roms_finalize
#endif
shift_mem_up_internal:
// Move memmove__size bytes from memmove__src to memmove__dst, where memmove__dst > memmove__src