line search optimized
This commit is contained in:
1 parent
e85b5dbccf
commit
b48d576698
4 files changed
+157
-23
No files matched your search
@@ -0,0 +1,97 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * BASIC_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
|
||||
// Find the BASIC line with number in LINNUM
|
||||
|
||||
|
||||
#if CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_60K
|
||||
|
||||
find_line_from_start:
|
||||
|
||||
// Get pointer to start of BASIC text
|
||||
jsr init_oldtxt
|
||||
|
||||
// FALLTROUGH
|
||||
|
||||
find_line_from_current:
|
||||
|
||||
// Check if line is not empty
|
||||
|
||||
jsr peek_line_pointer_null_check
|
||||
bcc find_line_fail
|
||||
|
||||
|
||||
// Fetch the high byte of line number and compare
|
||||
ldy #$03
|
||||
|
||||
#if CONFIG_MEMORY_MODEL_60K
|
||||
ldx #<OLDTXT+0
|
||||
jsr peek_under_roms
|
||||
#else // CONFIG_MEMORY_MODEL_38K
|
||||
lda (OLDTXT),y
|
||||
#endif
|
||||
|
||||
cmp LINNUM+1
|
||||
beq !+
|
||||
bcs find_line_fail // branch if line number too high
|
||||
bne find_line_next
|
||||
!:
|
||||
|
||||
// Fetch the low byte of line number and compare
|
||||
dey
|
||||
|
||||
#if CONFIG_MEMORY_MODEL_60K
|
||||
jsr peek_under_roms
|
||||
#else // CONFIG_MEMORY_MODEL_38K
|
||||
lda (OLDTXT),y
|
||||
#endif
|
||||
|
||||
cmp LINNUM+0
|
||||
beq find_line_success
|
||||
bcs find_line_fail // branch if line number too high
|
||||
bne find_line_next
|
||||
|
||||
find_line_success:
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
find_line_next:
|
||||
|
||||
// Advance to the next line
|
||||
|
||||
jsr peek_line_pointer_null_check
|
||||
bcc find_line_fail // branch in no more lines exist
|
||||
|
||||
ldy #$00
|
||||
|
||||
#if CONFIG_MEMORY_MODEL_60K
|
||||
ldx #<OLDTXT+0
|
||||
jsr peek_under_roms
|
||||
#else // CONFIG_MEMORY_MODEL_38K
|
||||
lda (OLDTXT),y
|
||||
#endif
|
||||
|
||||
pha
|
||||
iny
|
||||
|
||||
#if CONFIG_MEMORY_MODEL_60K
|
||||
jsr peek_under_roms
|
||||
#else // CONFIG_MEMORY_MODEL_38K
|
||||
lda (OLDTXT),y
|
||||
#endif
|
||||
|
||||
sta OLDTXT+1
|
||||
pla
|
||||
sta OLDTXT+0
|
||||
|
||||
jmp_8 find_line_from_current
|
||||
|
||||
find_line_fail:
|
||||
|
||||
sec
|
||||
rts
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user