Fix some speed issues with inserting and listing lines

This commit is contained in:
CrazyEttin 2022-08-28 16:26:40 +03:00
parent 9770df14c4
commit 8da8d780f5
1 changed files with 84 additions and 19 deletions

View File

@ -285,8 +285,21 @@ cmdesc: load r0, #20
;Insert a line
;Reset the line number
insln: xor r0, r0
store lnnum, r0
store lnnum + 1, r0
;Get the save start address
;High byte
load r0, svstrt
store eoflod + 1, r0
;Low byte
load r0, svstrt + 1
store eoflod + 2, r0
;Find the argument line in the save and store its number
insln: cleq r0, r0, fend
nextln: cleq r0, r0, fend
;Print a line number prompt
instrt: cleq r0, r0, prnln
@ -326,7 +339,7 @@ inline: cleq r0, r0, input
cleq r0, r0, eofchk
;Insert the next line
breq r0, r0, insln
breq r0, r0, nextln
inesc: load r0, #20
store ffff, r0
@ -355,6 +368,19 @@ copy: xor r0, r0
load r1, count
breq r0, r1, cmdp
;Reset the line number
xor r0, r0
store lnnum, r0
store lnnum + 1, r0
;Get the save start address
;High byte
load r0, svstrt
store eoflod + 1, r0
;Low byte
load r0, svstrt + 1
store eoflod + 2, r0
;Find the argument line in the save and store its number
cleq r0, r0, fend
@ -493,6 +519,19 @@ svtarg: load r0, target
load r0, mark + 1
store target + 1, r0
;Reset the line number
xor r0, r0
store lnnum, r0
store lnnum + 1, r0
;Get the save start address
;High byte
load r0, svstrt
store eoflod + 1, r0
;Low byte
load r0, svstrt + 1
store eoflod + 2, r0
;Find the marked line in the save and store its number
cleq r0, r0, fend
@ -582,6 +621,19 @@ delete: xor r0, r0
load r1, count
breq r0, r1, cmdp
;Reset the line number
xor r0, r0
store lnnum, r0
store lnnum + 1, r0
;Get the save start address
;High byte
load r0, svstrt
store eoflod + 1, r0
;Low byte
load r0, svstrt + 1
store eoflod + 2, r0
;Find the argument line in the save and store its number
cleq r0, r0, fend
@ -610,6 +662,19 @@ dchend: load r0, 0
store target, r0
store target + 1, r1
;Reset the line number
xor r0, r0
store lnnum, r0
store lnnum + 1, r0
;Get the save start address
;High byte
load r0, svstrt
store eoflod + 1, r0
;Low byte
load r0, svstrt + 1
store eoflod + 2, r0
;Find the next line in the save and store its number
cleq r0, r0, fend
@ -671,8 +736,21 @@ delend: load r0, count
;List a line
;Check the counter
;Reset the line number
list: xor r0, r0
store lnnum, r0
store lnnum + 1, r0
;Get the save start address
;High byte
load r0, svstrt
store eoflod + 1, r0
;Low byte
load r0, svstrt + 1
store eoflod + 2, r0
;Check the counter
lcount: xor r0, r0
load r1, count
breq r0, r1, cmdp
@ -740,7 +818,7 @@ lstend: load r0, count
store target, r0
store target + 1, r1
;Loop
breq r0, r0, list
breq r0, r0, lcount
;***
@ -1517,21 +1595,8 @@ savend: ret
;Find the argument line in the save and store its number
;Reset the line number
fend: xor r0, r0
store lnnum, r0
store lnnum + 1, r0
;Get the save start address
;High byte
load r0, svstrt
store eoflod + 1, r0
;Low byte
load r0, svstrt + 1
store eoflod + 2, r0
;Check for the argument
charg: load r0, target
fend: load r0, target
load r1, lnnum
brneq r0, r1, feof
load r0, target + 1
@ -1568,7 +1633,7 @@ incsav: load r0, eoflod + 1
store eoflod + 2, r1
;Check the next character
breq r0, r0, charg
breq r0, r0, fend
;Return
fendnd: ret