// #LAYOUT# STD * #TAKE // #LAYOUT# * BASIC_0 #TAKE // #LAYOUT# * * #IGNORE basic_shift_mem_up_and_relink: // Shift memory up from OLDTXT // X bytes. // NOTE: Pointers need to be reduced by one, due to the way // the copyroutine works, so we do that here. // Work out end point of destination txa clc adc VARTAB+0 sta __memmove_dst+0 lda VARTAB+1 adc #0 sta __memmove_dst+1 lda __memmove_dst+0 sec sbc #1 sta __memmove_dst+0 lda __memmove_dst+1 sbc #0 sta __memmove_dst+1 // End point of source is just current end of BASIC text lda VARTAB+0 sec sbc #1 sta __memmove_src+0 lda VARTAB+1 sbc #0 sta __memmove_src+1 // Work out size of region to copy lda VARTAB+0 sec sbc OLDTXT+0 sta __memmove_size+0 lda VARTAB+1 sbc OLDTXT+1 sta __memmove_size+1 // jsr printf // .text "TOP OF BASIC = $" // .byte $f1,VARTAB // .byte $f0,VARTAB // .byte $0d // .text "SHIFTING UP $" // .byte $f1,<__memmove_size,>__memmove_size // .byte $f0,<__memmove_size,>__memmove_size // .text " BYTES FROM $" // .byte $f1,<__memmove_src,>__memmove_src // .byte $f0,<__memmove_src,>__memmove_src // .text " TO $" // .byte $f1,<__memmove_dst,>__memmove_dst // .byte $f0,<__memmove_dst,>__memmove_dst // .byte $0d,0 // To make life simple for the copy routine that lives in RAM, // we have to adjust the end pointers down one page and set Y to the low // byte of the copy size. lda __memmove_src+0 sec sbc __memmove_size+0 sta __memmove_src+0 lda __memmove_src+1 sbc #0 sta __memmove_src+1 lda __memmove_dst+0 sec sbc __memmove_size+0 sta __memmove_dst+0 lda __memmove_dst+1 sbc #0 sta __memmove_dst+1 // Now make exit easy, by being able to check for zero on size high byte when done inc __memmove_size+1 // Then set Y to the number offset required ldy __memmove_size+0 iny stx __tokenise_work3 // jsr printf // .text "REVISED BOUNDS $" // .byte $f1,<__memmove_size,>__memmove_size // .byte $f0,<__memmove_size,>__memmove_size // .text " BYTES FROM $" // .byte $f1,<__memmove_src,>__memmove_src // .byte $f0,<__memmove_src,>__memmove_src // .text " TO $" // .byte $f1,<__memmove_dst,>__memmove_dst // .byte $f0,<__memmove_dst,>__memmove_dst // .byte $0d,0 // Do the copy jsr shift_mem_up // Now fix the pointer to the next line // First, we need to point the current BASIC line // pointer to itself, so that we can add the shift // to make it end up pointing to the next line ldy #0 lda OLDTXT+0 #if CONFIG_MEMORY_MODEL_60K ldx #VARTAB // .byte $f0,VARTAB // .text $d," BEFORE = $" // .byte $f1,<__memmove_dst,>__memmove_dst // .byte $f0,<__memmove_dst,>__memmove_dst // .text ", AFTER = $" // .byte $f1,<__memmove_src,>__memmove_src // .byte $f0,<__memmove_src,>__memmove_src // .byte $d // .byte 0 // Write __memmove_src back to current line pointer ldy #0 lda __memmove_src+0 #if CONFIG_MEMORY_MODEL_60K ldx #