optimizations in garbage collector
This commit is contained in:
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
|
||||
|
||||
|
||||
Reference in new issue
Block a user