optimizations in garbage collector

This commit is contained in:
FeralChild64 committed 2020-07-19 13:40:21 +02:00
1 parent b440034414
commit 45235bff46
5 files changed
+107 -34

No files matched your search

@@ -2,7 +2,7 @@
// #LAYOUT# * BASIC_0 #TAKE-HIGH
// #LAYOUT# * * #IGNORE
// This has to go $E000 or above - routines below banks out the main BASIC ROM!
// This has to go $E000 or above - routine below banks out the main BASIC ROM!
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
@@ -26,13 +26,7 @@ helper_cmp_varnam:
cmp VARNAM+1
!:
// Restore default memory mapping
// XXX consider deduplicating with 'is_line_pointer_null'
php
lda #$27
sta CPU_R6510
plp
rts
jmp remap_BASIC_preserve_P
#endif
@@ -0,0 +1,32 @@
// #LAYOUT# STD * #TAKE-HIGH
// #LAYOUT# * BASIC_0 #TAKE-HIGH
// #LAYOUT# * * #IGNORE
// This has to go $E000 or above - routine below banks out the main BASIC ROM!
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
helper_gc_fetch_backpointer:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Copy the back-pointer to OLDTXT, check if it is NULL
ldy #$00
lda (TXTPTR),y
sta OLDTXT+0
iny
lda (TXTPTR),y
sta OLDTXT+1
ora OLDTXT+0
// Restore default memory mapping
jmp remap_BASIC_preserve_P
#endif
@@ -0,0 +1,57 @@
// #LAYOUT# STD * #TAKE-HIGH
// #LAYOUT# * BASIC_0 #TAKE-HIGH
// #LAYOUT# * * #IGNORE
// This has to go $E000 or above - routines below bank out the main BASIC ROM!
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
helper_gc_set_memmove_src:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Set memmove__src
lda (OLDTXT),y
sta memmove__src+0
iny
lda (OLDTXT),y
sta memmove__src+1
// Restore default memory mapping
jmp_8 helper_gc_misc_end
helper_gc_increase_oldtxt:
// Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
// Increase OLDTXT accordingly
lda (OLDTXT),y
clc
adc INDEX+0
sta (OLDTXT),y
iny
lda (OLDTXT),y
adc INDEX+1
sta (OLDTXT),y
// FALLTROUGH
helper_gc_misc_end:
// Restore default memory mapping
lda #$27
sta CPU_R6510
rts
#endif
@@ -87,6 +87,12 @@ varstr_garbage_collect_check_bptr:
// Copy the back-pointer to OLDTXT, check if it is NULL
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
jsr helper_gc_fetch_backpointer
#else
ldy #$00
#if CONFIG_MEMORY_MODEL_60K
@@ -96,13 +102,6 @@ varstr_garbage_collect_check_bptr:
iny
jsr peek_under_roms
sta OLDTXT+1
#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
// XXX consider optimized version without multiple JSRs
jsr peek_under_roms_via_TXTPTR
sta OLDTXT+0
iny
jsr peek_under_roms_via_TXTPTR
sta OLDTXT+1
#else // CONFIG_MEMORY_MODEL_38K
lda (TXTPTR),y
sta OLDTXT+0
@@ -112,6 +111,9 @@ varstr_garbage_collect_check_bptr:
#endif
ora OLDTXT+0
#endif
beq_16 varstr_garbage_collect_unused
// The back-pointer is not NULL - string is used
@@ -159,12 +161,7 @@ varstr_garbage_collect_check_bptr:
jsr peek_under_roms
sta memmove__src+1
#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
// XXX consider optimized version without multiple JSRs
jsr peek_under_roms_via_OLDTXT
sta memmove__src+0
iny
jsr peek_under_roms_via_OLDTXT
sta memmove__src+1
jsr helper_gc_set_memmove_src
#else // CONFIG_MEMORY_MODEL_38K
lda (OLDTXT),y
sta memmove__src+0
@@ -227,19 +224,8 @@ varstr_garbage_collect_check_bptr:
jsr poke_under_roms
#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
// XXX consider optimized version without multiple JSRs
jsr peek_under_roms_via_OLDTXT
clc
adc INDEX+0
sta (OLDTXT),y
iny
php
jsr peek_under_roms_via_OLDTXT
plp
adc INDEX+1
sta (OLDTXT),y
jsr helper_gc_increase_oldtxt
#else // CONFIG_MEMORY_MODEL_38K