mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 00:14:25 +00:00
106 lines
1.6 KiB
NASM
106 lines
1.6 KiB
NASM
; assembly language version of mem$move for ed speedup
|
||
; version 2.0 of ED
|
||
;
|
||
mem$move equ 13cah
|
||
moveflag equ 1d34h
|
||
direction equ 1d20h
|
||
front equ 1d22h
|
||
back equ 1d24h
|
||
first equ 1d26h
|
||
last equ 1d28h
|
||
baseline equ 1c10h
|
||
memory equ 1d4dh
|
||
;
|
||
forward equ 1
|
||
lf equ 0ah
|
||
;
|
||
org mem$move
|
||
lxi h,moveflag
|
||
mov m,c ;1 = move data
|
||
lxi d,memory
|
||
lhld front
|
||
dad d ;memory+front
|
||
push h
|
||
lhld back
|
||
dad d
|
||
push h
|
||
lda direction
|
||
cpi forward
|
||
jnz moveback
|
||
lhld last
|
||
mov a,c ;moveflag to a
|
||
rar
|
||
jc moveforw
|
||
; set back to last
|
||
shld back
|
||
pop h
|
||
pop h
|
||
ret
|
||
;
|
||
moveforw:
|
||
dad d ;memory+last
|
||
mov b,h
|
||
mov c,l
|
||
pop h
|
||
pop d ;bc=last, de=front, hl=back
|
||
movef: mov a,l ;back < last?
|
||
sub c
|
||
mov a,h
|
||
sbb b ;cy if true
|
||
jnc emove
|
||
inx h ;back=back+1
|
||
mov a,m ;char to a
|
||
cpi lf ;end of line?
|
||
jnz notlff
|
||
push h
|
||
lhld baseline
|
||
inx h ;baseline=baseline+1
|
||
shld baseline
|
||
pop h
|
||
notlff:
|
||
stax d ;to front
|
||
inx d ;front=front+1
|
||
jmp movef
|
||
|
||
moveback:
|
||
lhld first
|
||
dad d ;memory+first
|
||
mov b,h
|
||
mov c,l
|
||
pop h
|
||
pop d ;bc=first, de=front, hl=last
|
||
moveb: mov a,c ;first > front?
|
||
sub e
|
||
mov a,b
|
||
sbb d ;cy if true
|
||
jnc emove
|
||
dcx d ;front=front-1
|
||
ldax d ;char to a
|
||
cpi lf
|
||
jnz notlfb
|
||
push h
|
||
lhld baseline
|
||
dcx h ;baseline=baseline-1
|
||
shld baseline
|
||
pop h
|
||
notlfb: push psw ;save char
|
||
lda moveflag
|
||
rar
|
||
jnc nomove
|
||
pop psw
|
||
mov m,a ;store to back
|
||
dcx h
|
||
jmp moveb
|
||
nomove: pop psw
|
||
jmp moveb
|
||
;
|
||
emove: push d
|
||
lxi d,-memory
|
||
dad d ;relative value of back
|
||
shld back
|
||
pop h
|
||
dad d ;relative value of front
|
||
shld front
|
||
ret
|
||
end
|
||
|