work towards string deallocation
This commit is contained in:
1 parent
116c6734e6
commit
2c86c577bc
8 files changed
+200
-73
No files matched your search
@@ -19,6 +19,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
// XXX test this routine
|
// XXX test this routine
|
||||||
|
// XXX make it compatible with under-ROM routines
|
||||||
|
|
||||||
varstr_alloc:
|
varstr_alloc:
|
||||||
|
|
||||||
@@ -61,15 +62,36 @@ varstr_alloc_retry:
|
|||||||
|
|
||||||
ldy #$00
|
ldy #$00
|
||||||
lda DSCPNT+0
|
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
|
sta (FRETOP), y
|
||||||
|
#endif
|
||||||
|
|
||||||
iny
|
iny
|
||||||
lda DSCPNT+1
|
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
|
sta (FRETOP), y
|
||||||
|
#endif
|
||||||
|
|
||||||
// Now lower FRETOP again to make space for the string content
|
// Now lower FRETOP again to make space for the string content
|
||||||
|
|
||||||
dey // $01 -> $00
|
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
|
jsr varstr_FRETOP_down
|
||||||
bcs varstr_alloc_fail
|
bcs varstr_alloc_fail
|
||||||
|
|
||||||
@@ -77,10 +99,22 @@ varstr_alloc_retry:
|
|||||||
|
|
||||||
iny // $00 -> $01
|
iny // $00 -> $01
|
||||||
lda FRETOP+0
|
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
|
iny
|
||||||
lda FRETOP+1
|
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
|
sta (DSCPNT), y
|
||||||
|
#endif
|
||||||
|
|
||||||
// The end
|
// The end
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
// #LAYOUT# STD * #TAKE
|
|
||||||
// #LAYOUT# * BASIC_0 #TAKE
|
|
||||||
// #LAYOUT# * * #IGNORE
|
|
||||||
|
|
||||||
|
|
||||||
varstr_dealloc:
|
|
||||||
|
|
||||||
rts // XXX implement this
|
|
||||||
|
|
||||||
@@ -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
|
||||||
-62
@@ -8,68 +8,6 @@
|
|||||||
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
|
#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:
|
shift_mem_up_internal:
|
||||||
|
|
||||||
// Move memmove__size bytes from memmove__src to memmove__dst, where memmove__dst > memmove__src
|
// Move memmove__size bytes from memmove__src to memmove__dst, where memmove__dst > memmove__src
|
||||||
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user