begin implementing memory copy routines for inserting and deleting BASIC lines.
This commit is contained in:
1 parent
b7de93a3a6
commit
84c02486fe
3 files changed
+66
-2
No files matched your search
@@ -20,6 +20,43 @@ install_ram_routines:
|
||||
sta $FFFF
|
||||
|
||||
rts
|
||||
|
||||
basic_shift_mem_up_and_relink:
|
||||
;; Shift memory up from basic_current_line_ptr
|
||||
;; X bytes.
|
||||
|
||||
;; Work out end point of destination
|
||||
txa
|
||||
clc
|
||||
adc basic_end_of_text_ptr+0
|
||||
sta memmove_dst+0
|
||||
lda basic_end_of_text_ptr+1
|
||||
adc #0
|
||||
sta memmove_dst+1
|
||||
;; End point of source is just current end of BASIC text
|
||||
lda basic_end_of_text_ptr+0
|
||||
sta memmove_src
|
||||
lda basic_end_of_text_ptr+1
|
||||
sta memmove_src+1
|
||||
|
||||
;; Work out size of region to copy
|
||||
lda basic_end_of_text_ptr+1
|
||||
sec
|
||||
sbc basic_current_line_ptr+1
|
||||
sta memmove_size+1
|
||||
lda basic_end_of_text_ptr+0
|
||||
sbc #0
|
||||
sta memmove_size+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.
|
||||
tay
|
||||
dec memmove_src+1
|
||||
dec memmove_dst+1
|
||||
|
||||
;; Do the copy
|
||||
jmp shift_mem_up
|
||||
|
||||
ram_routines_start:
|
||||
|
||||
@@ -27,6 +64,28 @@ tiny_nmi_handler_routine:
|
||||
inc missed_nmi_flag
|
||||
rti
|
||||
|
||||
shift_mem_up_routine:
|
||||
;; Move memmove_size bytes from memmove_src to memmove_dst,
|
||||
;; where memmove_dst > memmove_src
|
||||
;; This means we have to copy from the back end down.
|
||||
;; This routine assumes the pointers are already pointed
|
||||
;; to the end of the areas, and that Y is correctly initialised
|
||||
;; to allow the copy to begin.
|
||||
jsr memmap_allram
|
||||
smu1:
|
||||
lda (memmove_src),y
|
||||
sta (memmove_dst),y
|
||||
dey
|
||||
cpy #$ff
|
||||
bne smu1
|
||||
dec memmove_src+1
|
||||
dec memmove_dst+1
|
||||
dec memmove_size+1
|
||||
bne smu1
|
||||
|
||||
jmp memmap_normal
|
||||
|
||||
|
||||
peek_under_roms_routine:
|
||||
stx peek_under_roms+7 ;Offset of arg of lda ($00),y
|
||||
jsr memmap_allram
|
||||
|
||||
Reference in new issue
Block a user