Work on S command
This commit is contained in:
parent
95d5901852
commit
bed4ceaa1f
1 changed files with 263 additions and 175 deletions
438
edlin.asm
438
edlin.asm
|
@ -13,6 +13,7 @@ psp_segment_size equ 0x0006
|
||||||
psp_fcb_1 equ 0x005c
|
psp_fcb_1 equ 0x005c
|
||||||
|
|
||||||
; Syscall defines
|
; Syscall defines
|
||||||
|
sys_read_char equ 1
|
||||||
sys_print_char equ 2
|
sys_print_char equ 2
|
||||||
sys_print_string equ 9
|
sys_print_string equ 9
|
||||||
sys_read_line equ 0xa
|
sys_read_line equ 0xa
|
||||||
|
@ -55,6 +56,9 @@ int_ctrl_break equ 0x23
|
||||||
%macro cmpw 2
|
%macro cmpw 2
|
||||||
db 0x3b, 0xc0 + 8 * %1 + %2
|
db 0x3b, 0xc0 + 8 * %1 + %2
|
||||||
%endmacro
|
%endmacro
|
||||||
|
%macro cmpb 2
|
||||||
|
db 0x3a, 0xc0 + 8 * %1 + %2
|
||||||
|
%endmacro
|
||||||
%macro movw 2
|
%macro movw 2
|
||||||
db 0x8b, 0xc0 + 8 * %1 + %2
|
db 0x8b, 0xc0 + 8 * %1 + %2
|
||||||
%endmacro
|
%endmacro
|
||||||
|
@ -76,6 +80,9 @@ int_ctrl_break equ 0x23
|
||||||
%macro xorw 2
|
%macro xorw 2
|
||||||
db 0x33, 0xc0 + 8 * %1 + %2
|
db 0x33, 0xc0 + 8 * %1 + %2
|
||||||
%endmacro
|
%endmacro
|
||||||
|
%macro xorb 2
|
||||||
|
db 0x32, 0xc0 + 8 * %1 + %2
|
||||||
|
%endmacro
|
||||||
|
|
||||||
; Sign extended byte to byte
|
; Sign extended byte to byte
|
||||||
%macro cmpb_addr_ext 2
|
%macro cmpb_addr_ext 2
|
||||||
|
@ -537,6 +544,7 @@ db 0xF3, 0xA4 ; 0467 rep movsb
|
||||||
db 0x4F ; 0469 dec di
|
db 0x4F ; 0469 dec di
|
||||||
db 0x89, 0x3E, 0x9A, 0x0A ; 046A mov [0xa9a],di
|
db 0x89, 0x3E, 0x9A, 0x0A ; 046A mov [0xa9a],di
|
||||||
db 0xC7, 0x06, 0x90, 0x0A, 0x01, 0x00 ; 046E mov word [0xa90],0x1
|
db 0xC7, 0x06, 0x90, 0x0A, 0x01, 0x00 ; 046E mov word [0xa90],0x1
|
||||||
|
__0474:
|
||||||
db 0xC3 ; 0474 ret
|
db 0xC3 ; 0474 ret
|
||||||
db 0xB4, 0x10 ; 0475 mov ah,0x10
|
db 0xB4, 0x10 ; 0475 mov ah,0x10
|
||||||
db 0xCD, 0x21 ; 0477 int 0x21
|
db 0xCD, 0x21 ; 0477 int 0x21
|
||||||
|
@ -547,6 +555,7 @@ error: ; 047c
|
||||||
int 0x21
|
int 0x21
|
||||||
int 0x20
|
int 0x20
|
||||||
|
|
||||||
|
__0482:
|
||||||
db 0x8B, 0x16, 0x90, 0x0A ; 0482 mov dx,[0xa90]
|
db 0x8B, 0x16, 0x90, 0x0A ; 0482 mov dx,[0xa90]
|
||||||
db 0x8B, 0x3E, 0x92, 0x0A ; 0486 mov di,[0xa92]
|
db 0x8B, 0x3E, 0x92, 0x0A ; 0486 mov di,[0xa92]
|
||||||
db 0x3B, 0xDA ; 048A cmp bx,dx
|
db 0x3B, 0xDA ; 048A cmp bx,dx
|
||||||
|
@ -562,16 +571,18 @@ db 0x8B, 0x0E, 0x9A, 0x0A ; 049E mov cx,[0xa9a]
|
||||||
db 0x2B, 0xCF ; 04A2 sub cx,di
|
db 0x2B, 0xCF ; 04A2 sub cx,di
|
||||||
|
|
||||||
__04a4:
|
__04a4:
|
||||||
db 0xB0, 0x0A ; 04A4 mov al,0xa
|
mov al, 10 ; magic
|
||||||
db 0x0A, 0xC0 ; 04A6 or al,al
|
orb r_al, r_al
|
||||||
db 0xE3, 0xCA ; 04A8 jcxz 0x474
|
__04a8:
|
||||||
db 0xF2, 0xAE ; 04AA repne scasb
|
jcxz __0474
|
||||||
db 0x42 ; 04AC inc dx
|
repne scasb
|
||||||
db 0x3B, 0xDA ; 04AD cmp bx,dx
|
inc dx
|
||||||
db 0x75, 0xF7 ; 04AF jnz 0x4a8
|
cmpw r_bx, r_dx
|
||||||
db 0xC3 ; 04B1 ret
|
jnz __04a8
|
||||||
|
ret
|
||||||
|
|
||||||
print_line_prefix: ; 04b2
|
print_line_prefix: ; 04b2
|
||||||
|
; Line number in bx
|
||||||
push bx
|
push bx
|
||||||
|
|
||||||
mov al, ' '
|
mov al, ' '
|
||||||
|
@ -661,37 +672,56 @@ db 0x2B, 0xFB ; 052E sub di,bx
|
||||||
db 0x77, 0x08 ; 0530 ja 0x53a
|
db 0x77, 0x08 ; 0530 ja 0x53a
|
||||||
db 0xBF, 0x17, 0x00 ; 0532 mov di,0x17
|
db 0xBF, 0x17, 0x00 ; 0532 mov di,0x17
|
||||||
db 0xEB, 0x03 ; 0535 jmp short 0x53a
|
db 0xEB, 0x03 ; 0535 jmp short 0x53a
|
||||||
db 0xBF, 0x01, 0x00 ; 0537 mov di,0x1
|
|
||||||
db 0x8B, 0x0E, 0x9A, 0x0A ; 053A mov cx,[0xa9a]
|
__0537:
|
||||||
db 0x2B, 0xCE ; 053E sub cx,si
|
mov di, 1 ; magic
|
||||||
db 0x74, 0x31 ; 0540 jz 0x573
|
mov cx, [__0a9a]
|
||||||
db 0x8B, 0x2E, 0x90, 0x0A ; 0542 mov bp,[0xa90]
|
subw r_cx, r_si
|
||||||
db 0x51 ; 0546 push cx
|
jz print_line.ret
|
||||||
db 0xE8, 0x68, 0xFF ; 0547 call 0x4b2
|
|
||||||
db 0x59 ; 054A pop cx
|
mov bp, [current_line]
|
||||||
db 0xAC ; 054B lodsb
|
|
||||||
db 0x3C, 0x20 ; 054C cmp al,0x20
|
print_line: ; 0546
|
||||||
db 0x73, 0x15 ; 054E jnc 0x565
|
; Line number in bx, line data in si
|
||||||
db 0x3C, 0x0A ; 0550 cmp al,0xa
|
push cx
|
||||||
db 0x74, 0x11 ; 0552 jz 0x565
|
call print_line_prefix
|
||||||
db 0x3C, 0x0D ; 0554 cmp al,0xd
|
pop cx
|
||||||
db 0x74, 0x0D ; 0556 jz 0x565
|
|
||||||
db 0x3C, 0x09 ; 0558 cmp al,0x9
|
.loop:
|
||||||
db 0x74, 0x09 ; 055A jz 0x565
|
lodsb
|
||||||
db 0x50 ; 055C push ax
|
|
||||||
db 0xB0, 0x5E ; 055D mov al,0x5e
|
; Print characters starting from space normally
|
||||||
db 0xE8, 0xC2, 0x03 ; 055F call 0x924
|
cmp al, ' '
|
||||||
db 0x58 ; 0562 pop ax
|
jnb .print_char
|
||||||
db 0x0C, 0x40 ; 0563 or al,0x40
|
; Print CR, LF, TAB normally
|
||||||
db 0xE8, 0xBC, 0x03 ; 0565 call 0x924
|
cmp al, 10 ; LF
|
||||||
db 0x3C, 0x0A ; 0568 cmp al,0xa
|
je .print_char
|
||||||
db 0xE0, 0xDF ; 056A loopne 0x54b
|
cmp al, 13 ; CR
|
||||||
db 0xE3, 0x05 ; 056C jcxz 0x573
|
je .print_char
|
||||||
db 0x43 ; 056E inc bx
|
cmp al, 9 ; TAB
|
||||||
db 0x4F ; 056F dec di
|
je .print_char
|
||||||
db 0x75, 0xD4 ; 0570 jnz 0x546
|
|
||||||
db 0x4B ; 0572 dec bx
|
; Print ^A for 0x01 and such
|
||||||
db 0xC3 ; 0573 ret
|
push ax
|
||||||
|
mov al, '^'
|
||||||
|
call print_char
|
||||||
|
pop ax
|
||||||
|
or al, 0x40 ; Transform control character to ^ equivalent
|
||||||
|
|
||||||
|
.print_char:
|
||||||
|
call print_char
|
||||||
|
cmp al, 10
|
||||||
|
loopne .loop
|
||||||
|
|
||||||
|
; TODO: Figure out what exactly is up with these
|
||||||
|
jcxz .ret
|
||||||
|
inc bx
|
||||||
|
dec di
|
||||||
|
jnz print_line
|
||||||
|
dec bx
|
||||||
|
|
||||||
|
.ret: ret
|
||||||
|
|
||||||
db 0xBF, 0x20, 0x0C ; 0574 mov di,0xc20
|
db 0xBF, 0x20, 0x0C ; 0574 mov di,0xc20
|
||||||
db 0xB9, 0xFF, 0x00 ; 0577 mov cx,0xff
|
db 0xB9, 0xFF, 0x00 ; 0577 mov cx,0xff
|
||||||
db 0xBA, 0xFF, 0xFF ; 057A mov dx,0xffff
|
db 0xBA, 0xFF, 0xFF ; 057A mov dx,0xffff
|
||||||
|
@ -769,120 +799,172 @@ db 0xBA, 0x21, 0x0A ; 0622 mov dx,0xa21
|
||||||
db 0xEB, 0x3B ; 0625 jmp short 0x662
|
db 0xEB, 0x3B ; 0625 jmp short 0x662
|
||||||
|
|
||||||
command_s: ; 0627
|
command_s: ; 0627
|
||||||
db 0xE8, 0x6C, 0x00 ; 0627 call 0x696
|
call __0696
|
||||||
db 0x75, 0x33 ; 062A jnz 0x65f
|
jnz print_not_found_str ; disambiguate
|
||||||
db 0x8B, 0x1E, 0x8A, 0x0A ; 062C mov bx,[0xa8a]
|
|
||||||
db 0x8B, 0x36, 0x8C, 0x0A ; 0630 mov si,[0xa8c]
|
__062c:
|
||||||
db 0xE8, 0x00, 0xFF ; 0634 call 0x537
|
mov bx, [__0a8a]
|
||||||
db 0xE8, 0x3A, 0x00 ; 0637 call 0x674
|
mov si, [__0a8c]
|
||||||
db 0x74, 0x2B ; 063A jz 0x667
|
call __0537
|
||||||
db 0x8B, 0x3E, 0x88, 0x0A ; 063C mov di,[0xa88]
|
|
||||||
db 0x8B, 0x0E, 0x8E, 0x0A ; 0640 mov cx,[0xa8e]
|
call prompt_okay
|
||||||
db 0xB0, 0x0A ; 0644 mov al,0xa
|
je __0667 ; User okayed
|
||||||
db 0xF2, 0xAE ; 0646 repne scasb
|
|
||||||
db 0x75, 0x15 ; 0648 jnz 0x65f
|
mov di, [__0a88]
|
||||||
db 0x89, 0x3E, 0x88, 0x0A ; 064A mov [0xa88],di
|
mov cx, [__0a8e]
|
||||||
db 0x89, 0x3E, 0x8C, 0x0A ; 064E mov [0xa8c],di
|
mov al, 10 ; magic
|
||||||
db 0x89, 0x0E, 0x8E, 0x0A ; 0652 mov [0xa8e],cx
|
repne scasb
|
||||||
db 0xFF, 0x06, 0x8A, 0x0A ; 0656 inc word [0xa8a]
|
jne print_not_found_str
|
||||||
db 0xE8, 0x92, 0x00 ; 065A call 0x6ef
|
|
||||||
db 0x74, 0xCD ; 065D jz 0x62c
|
mov [__0a88], di
|
||||||
db 0xBA, 0x0E, 0x0A ; 065F mov dx,0xa0e
|
mov [__0a8c], di
|
||||||
db 0xB4, 0x09 ; 0662 mov ah,0x9
|
mov [__0a8e], cx
|
||||||
db 0xCD, 0x21 ; 0664 int 0x21
|
inc word [__0a8a]
|
||||||
db 0xC3 ; 0666 ret
|
call __06ef
|
||||||
db 0xA1, 0x8C, 0x0A ; 0667 mov ax,[0xa8c]
|
jz __062c ; disambiguate
|
||||||
db 0xA3, 0x92, 0x0A ; 066A mov [0xa92],ax
|
|
||||||
db 0xA1, 0x8A, 0x0A ; 066D mov ax,[0xa8a]
|
print_not_found_str: ; 065f
|
||||||
db 0xA3, 0x90, 0x0A ; 0670 mov [0xa90],ax
|
mov dx, not_found_str
|
||||||
db 0xC3 ; 0673 ret
|
mov ah, sys_print_string
|
||||||
db 0xF6, 0x06, 0x7D, 0x0A, 0xFF ; 0674 test byte [0xa7d],0xff
|
int 0x21
|
||||||
db 0x74, 0xF8 ; 0679 jz 0x673
|
ret
|
||||||
db 0xBA, 0x1A, 0x0A ; 067B mov dx,0xa1a
|
|
||||||
db 0xB4, 0x09 ; 067E mov ah,0x9
|
__0667:
|
||||||
db 0xCD, 0x21 ; 0680 int 0x21
|
mov ax, [__0a8c]
|
||||||
db 0xB4, 0x01 ; 0682 mov ah,0x1
|
mov [__0a92], ax
|
||||||
db 0xCD, 0x21 ; 0684 int 0x21
|
mov ax, [__0a8a]
|
||||||
db 0x50 ; 0686 push ax
|
mov [current_line], ax
|
||||||
db 0xE8, 0x93, 0x02 ; 0687 call 0x91d
|
.ret: ret
|
||||||
db 0x58 ; 068A pop ax
|
|
||||||
db 0x3C, 0x0D ; 068B cmp al,0xd
|
prompt_okay: ; 0674
|
||||||
db 0x74, 0xE4 ; 068D jz 0x673
|
test byte [__0a7d], 0xff
|
||||||
db 0x3C, 0x59 ; 068F cmp al,0x59
|
jz __0667.ret
|
||||||
db 0x74, 0xE0 ; 0691 jz 0x673
|
|
||||||
db 0x3C, 0x79 ; 0693 cmp al,0x79
|
mov dx, ok_prompt
|
||||||
db 0xC3 ; 0695 ret
|
mov ah, sys_print_string
|
||||||
db 0xBF, 0x1E, 0x0B ; 0696 mov di,0xb1e
|
int 0x21
|
||||||
db 0xE8, 0xA3, 0x00 ; 0699 call 0x73f
|
|
||||||
db 0x0A, 0xC0 ; 069C or al,al
|
mov ah, sys_read_char
|
||||||
db 0xE3, 0xF5 ; 069E jcxz 0x695
|
int 0x21
|
||||||
db 0x89, 0x0E, 0x84, 0x0A ; 06A0 mov [0xa84],cx
|
|
||||||
db 0x33, 0xC9 ; 06A4 xor cx,cx
|
push ax
|
||||||
db 0x3C, 0x0D ; 06A6 cmp al,0xd
|
call newline
|
||||||
db 0x74, 0x06 ; 06A8 jz 0x6b0
|
pop ax
|
||||||
db 0xBF, 0x9E, 0x0B ; 06AA mov di,0xb9e
|
|
||||||
db 0xE8, 0x8F, 0x00 ; 06AD call 0x73f
|
cmp al, 13 ; CR
|
||||||
db 0x89, 0x0E, 0x86, 0x0A ; 06B0 mov [0xa86],cx
|
je __0667.ret
|
||||||
db 0x8B, 0x1E, 0x80, 0x0A ; 06B4 mov bx,[0xa80]
|
cmp al, 'Y'
|
||||||
db 0x83, 0xFB, 0x01 ; 06B8 cmp bx,byte +0x1
|
je __0667.ret
|
||||||
db 0x83, 0xD3, 0x00 ; 06BB adc bx,byte +0x0
|
cmp al, 'y'
|
||||||
db 0xE8, 0xC1, 0xFD ; 06BE call 0x482
|
.ret: ret
|
||||||
db 0x89, 0x3E, 0x88, 0x0A ; 06C1 mov [0xa88],di
|
|
||||||
db 0x89, 0x3E, 0x8C, 0x0A ; 06C5 mov [0xa8c],di
|
__0696:
|
||||||
db 0x89, 0x16, 0x8A, 0x0A ; 06C9 mov [0xa8a],dx
|
mov di, __0b1e
|
||||||
db 0x8B, 0x1E, 0x82, 0x0A ; 06CD mov bx,[0xa82]
|
call copy_line
|
||||||
db 0x83, 0xFB, 0x01 ; 06D1 cmp bx,byte +0x1
|
orb r_al, r_al ; TODO: Why does this exist?
|
||||||
db 0x83, 0xDB, 0xFF ; 06D4 sbb bx,byte -0x1
|
jcxz prompt_okay.ret
|
||||||
db 0xE8, 0xA8, 0xFD ; 06D7 call 0x482
|
|
||||||
db 0x8B, 0xCF ; 06DA mov cx,di
|
mov [__0a84], cx
|
||||||
db 0x2B, 0x0E, 0x88, 0x0A ; 06DC sub cx,[0xa88]
|
xorw r_cx, r_cx
|
||||||
db 0x0C, 0xFF ; 06E0 or al,0xff
|
|
||||||
db 0xE3, 0xB1 ; 06E2 jcxz 0x695
|
cmp al, 13 ; CR
|
||||||
db 0x2B, 0x0E, 0x84, 0x0A ; 06E4 sub cx,[0xa84]
|
je __06b0
|
||||||
db 0x72, 0xAB ; 06E8 jc 0x695
|
|
||||||
db 0x41 ; 06EA inc cx
|
mov di, __0b9e
|
||||||
db 0x89, 0x0E, 0x8E, 0x0A ; 06EB mov [0xa8e],cx
|
call copy_line
|
||||||
db 0xA0, 0x1E, 0x0B ; 06EF mov al,[0xb1e]
|
|
||||||
db 0x8B, 0x0E, 0x8E, 0x0A ; 06F2 mov cx,[0xa8e]
|
__06b0:
|
||||||
db 0x8B, 0x3E, 0x88, 0x0A ; 06F6 mov di,[0xa88]
|
mov [__0a86], cx
|
||||||
db 0x0B, 0xFF ; 06FA or di,di
|
mov bx, [__0a80]
|
||||||
db 0xF2, 0xAE ; 06FC repne scasb
|
|
||||||
db 0x75, 0x95 ; 06FE jnz 0x695
|
; If bx = 0, add 1 to bx
|
||||||
db 0x8B, 0xD1 ; 0700 mov dx,cx
|
cmp bx, 1
|
||||||
db 0x8B, 0xDF ; 0702 mov bx,di
|
adc bx, 0
|
||||||
db 0x8B, 0x0E, 0x84, 0x0A ; 0704 mov cx,[0xa84]
|
|
||||||
db 0x49 ; 0708 dec cx
|
call __0482
|
||||||
db 0xBE, 0x1F, 0x0B ; 0709 mov si,0xb1f
|
|
||||||
db 0x3A, 0xC0 ; 070C cmp al,al
|
mov [__0a88], di
|
||||||
db 0xF3, 0xA6 ; 070E repe cmpsb
|
mov [__0a8c], di
|
||||||
db 0x8B, 0xCA ; 0710 mov cx,dx
|
mov [__0a8a], dx
|
||||||
db 0x8B, 0xFB ; 0712 mov di,bx
|
|
||||||
db 0x75, 0xE4 ; 0714 jnz 0x6fa
|
mov bx, [__0a82]
|
||||||
db 0x89, 0x0E, 0x8E, 0x0A ; 0716 mov [0xa8e],cx
|
; If bx ≠ 0, add 1 to bx
|
||||||
db 0x8B, 0xCF ; 071A mov cx,di
|
cmp bx, 1
|
||||||
db 0x89, 0x3E, 0x88, 0x0A ; 071C mov [0xa88],di
|
sbb bx, -1
|
||||||
db 0x8B, 0x3E, 0x8C, 0x0A ; 0720 mov di,[0xa8c]
|
|
||||||
db 0x2B, 0xCF ; 0724 sub cx,di
|
call __0482
|
||||||
db 0xB0, 0x0A ; 0726 mov al,0xa
|
|
||||||
db 0x8B, 0x16, 0x8A, 0x0A ; 0728 mov dx,[0xa8a]
|
movw r_cx, r_di
|
||||||
db 0x42 ; 072C inc dx
|
sub cx, [__0a88]
|
||||||
db 0x8B, 0xDF ; 072D mov bx,di
|
or al, 0xff ; TODO: Why does this exits?
|
||||||
db 0xF2, 0xAE ; 072F repne scasb
|
jcxz prompt_okay.ret
|
||||||
db 0x74, 0xF9 ; 0731 jz 0x72c
|
|
||||||
db 0x4A ; 0733 dec dx
|
sub cx, [__0a84]
|
||||||
db 0x89, 0x16, 0x8A, 0x0A ; 0734 mov [0xa8a],dx
|
jc prompt_okay.ret
|
||||||
db 0x89, 0x1E, 0x8C, 0x0A ; 0738 mov [0xa8c],bx
|
|
||||||
db 0x32, 0xC0 ; 073C xor al,al
|
inc cx
|
||||||
db 0xC3 ; 073E ret
|
mov [__0a8e], cx
|
||||||
db 0x33, 0xC9 ; 073F xor cx,cx
|
|
||||||
db 0xAC ; 0741 lodsb
|
__06ef:
|
||||||
db 0x3C, 0x1A ; 0742 cmp al,0x1a
|
mov al, [__0b1e]
|
||||||
db 0x74, 0xF8 ; 0744 jz 0x73e
|
mov cx, [__0a8e]
|
||||||
db 0x3C, 0x0D ; 0746 cmp al,0xd
|
mov di, [__0a88]
|
||||||
db 0x74, 0xF4 ; 0748 jz 0x73e
|
__06fa:
|
||||||
db 0xAA ; 074A stosb
|
orw r_di, r_di
|
||||||
db 0x41 ; 074B inc cx
|
repne scasb
|
||||||
db 0xEB, 0xF3 ; 074C jmp short 0x741
|
jne prompt_okay.ret
|
||||||
|
|
||||||
|
movw r_dx, r_cx
|
||||||
|
movw r_bx, r_di
|
||||||
|
mov cx, [__0a84]
|
||||||
|
|
||||||
|
dec cx
|
||||||
|
mov si, __0b1e + 1
|
||||||
|
cmpb r_al, r_al
|
||||||
|
repe cmpsb
|
||||||
|
movw r_cx, r_dx
|
||||||
|
movw r_di, r_bx
|
||||||
|
jne __06fa
|
||||||
|
|
||||||
|
mov [__0a8e], cx
|
||||||
|
movw r_cx, r_di
|
||||||
|
mov [__0a88], di
|
||||||
|
mov di, [__0a8c]
|
||||||
|
subw r_cx, r_di
|
||||||
|
|
||||||
|
mov al, 10 ; LF
|
||||||
|
mov dx, [__0a8a]
|
||||||
|
__072c:
|
||||||
|
inc dx
|
||||||
|
movw r_bx, r_di
|
||||||
|
repne scasb
|
||||||
|
je __072c
|
||||||
|
|
||||||
|
dec dx
|
||||||
|
mov [__0a8a], dx
|
||||||
|
mov [__0a8c], bx
|
||||||
|
xorb r_al, r_al
|
||||||
|
|
||||||
|
__073e:
|
||||||
|
ret
|
||||||
|
|
||||||
|
; in:
|
||||||
|
; si = source
|
||||||
|
; di = destination
|
||||||
|
; out:
|
||||||
|
; al = first non-copied character
|
||||||
|
; cx = amount copied
|
||||||
|
copy_line: ; 073f
|
||||||
|
xorw r_cx, r_cx
|
||||||
|
.loop:
|
||||||
|
lodsb
|
||||||
|
cmp al, 0x1a ; ^Z
|
||||||
|
jz __073e
|
||||||
|
cmp al, 13
|
||||||
|
jz __073e
|
||||||
|
stosb
|
||||||
|
inc cx
|
||||||
|
jmp .loop
|
||||||
|
|
||||||
command_d: ; 074e
|
command_d: ; 074e
|
||||||
db 0x8B, 0x1E, 0x80, 0x0A ; 074E mov bx,[0xa80]
|
db 0x8B, 0x1E, 0x80, 0x0A ; 074E mov bx,[0xa80]
|
||||||
|
@ -1123,48 +1205,54 @@ __09b9 db "Disk full--file write not completed$"
|
||||||
oom_str db 13, 10, "Insufficient memory", 13, 10, '$' ; 09dd
|
oom_str db 13, 10, "Insufficient memory", 13, 10, '$' ; 09dd
|
||||||
entry_error db "Entry error", 13, 10, '$' ; 09f5
|
entry_error db "Entry error", 13, 10, '$' ; 09f5
|
||||||
new_file_str db "New file", 13, 10, '$' ; 0a03
|
new_file_str db "New file", 13, 10, '$' ; 0a03
|
||||||
__0a0e db "Not found", 13, 10, '$'
|
not_found_str db "Not found", 13, 10, '$' ; 0a0e
|
||||||
__0a1a db "O.K.? $"
|
ok_prompt db "O.K.? $" ; 0a1a
|
||||||
__0a21 db "Line too long", 13, 10, '$'
|
__0a21 db "Line too long", 13, 10, '$'
|
||||||
eof_str db "End of input file", 13, 10, '$' ; 0a31
|
eof_str db "End of input file", 13, 10, '$' ; 0a31
|
||||||
__0a45 db "Abort edit (Y/N)? $"
|
__0a45 db "Abort edit (Y/N)? $"
|
||||||
|
|
||||||
; 0a58
|
; 0a58
|
||||||
section .bss
|
section .bss
|
||||||
__0a58_fcb: resb 37 ; 0a58 … 0a7c
|
__0a58_fcb resb 37 ; 0a58 … 0a7c
|
||||||
|
|
||||||
__0a7d: resb 1
|
__0a7d resb 1
|
||||||
|
|
||||||
new_file_flag: resb 1 ; 0a7e
|
new_file_flag resb 1 ; 0a7e
|
||||||
__0a7f: resb 1
|
__0a7f resb 1
|
||||||
|
|
||||||
__0a80: resw 1
|
__0a80 resw 1
|
||||||
__0a82: resw 1
|
__0a82 resw 1
|
||||||
resb 12
|
__0a84 resw 1
|
||||||
current_line: resw 1 ; 0a90
|
__0a86 resw 1
|
||||||
__0a92: resw 1
|
__0a88 resw 1
|
||||||
|
__0a8a resw 1
|
||||||
|
__0a8c resw 1
|
||||||
|
__0a8e resw 1
|
||||||
|
current_line resw 1 ; 0a90
|
||||||
|
__0a92 resw 1
|
||||||
|
|
||||||
__0a94: resw 1
|
__0a94 resw 1
|
||||||
__0a96: resw 1
|
__0a96 resw 1
|
||||||
__0a98: resw 1
|
__0a98 resw 1
|
||||||
|
|
||||||
__0a9a: resw 1
|
__0a9a resw 1
|
||||||
|
|
||||||
input_buffer:
|
input_buffer:
|
||||||
.size: resb 1 ; 0a9c
|
.size resb 1 ; 0a9c
|
||||||
.fill: resb 1; 0a9d
|
.fill resb 1; 0a9d
|
||||||
.bufstart: resb 128 ; 0a9e
|
.bufstart resb 128 ; 0a9e
|
||||||
.bufend: ; 0b1e
|
.bufend: ; 0b1e
|
||||||
|
|
||||||
resb 256
|
__0b1e resb 128
|
||||||
|
__0b9e resb 128
|
||||||
|
|
||||||
__0c1e: resb 1
|
__0c1e resb 1
|
||||||
|
|
||||||
resb 41
|
resb 41
|
||||||
|
|
||||||
stack: resb 256 ; 0c48
|
stack: resb 256 ; 0c48
|
||||||
.end: ; 0d48
|
.end: ; 0d48
|
||||||
|
|
||||||
__0d48: resb 1
|
__0d48 resb 1
|
||||||
|
|
||||||
file_buffer: ; 0d49
|
file_buffer: ; 0d49
|
||||||
|
|
Loading…
Reference in a new issue