Finish up basic disassembly
This commit is contained in:
parent
bed4ceaa1f
commit
f5e568a6e3
2 changed files with 488 additions and 346 deletions
5
README
5
README
|
@ -1,3 +1,8 @@
|
||||||
This is a (work in progress) disassembly of the MS-DOS 1.25 EDLIN.COM
|
This is a (work in progress) disassembly of the MS-DOS 1.25 EDLIN.COM
|
||||||
binary. Sources deriving from MS-DOS are under MIT license, see
|
binary. Sources deriving from MS-DOS are under MIT license, see
|
||||||
LICENSE.microsoft, while other sources are under CC0, see LICENSE.tools.
|
LICENSE.microsoft, while other sources are under CC0, see LICENSE.tools.
|
||||||
|
|
||||||
|
Currently the code has been fully converted to assembly with symbolic
|
||||||
|
memory references, meaning that the code can be edited and the resulting
|
||||||
|
binary will run without problems. However, majority of the code is not yet
|
||||||
|
understood, labeled, or commented.
|
||||||
|
|
829
edlin.asm
829
edlin.asm
|
@ -5,6 +5,7 @@ org 0x100
|
||||||
fcb_filename equ 1
|
fcb_filename equ 1
|
||||||
fcb_extension equ fcb_filename + 8
|
fcb_extension equ fcb_filename + 8
|
||||||
fcb_record_size equ 14
|
fcb_record_size equ 14
|
||||||
|
fcb_rename_target equ 17
|
||||||
fcb_record_low equ 33
|
fcb_record_low equ 33
|
||||||
fcb_record_high equ 35
|
fcb_record_high equ 35
|
||||||
|
|
||||||
|
@ -18,11 +19,14 @@ 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
|
||||||
sys_open_file equ 0xf
|
sys_open_file equ 0xf
|
||||||
|
sys_close_file equ 0x10
|
||||||
sys_delete_file equ 0x13
|
sys_delete_file equ 0x13
|
||||||
sys_create_file equ 0x16
|
sys_create_file equ 0x16
|
||||||
|
sys_rename_file equ 0x17
|
||||||
sys_set_dta equ 0x1a
|
sys_set_dta equ 0x1a
|
||||||
sys_set_interrupt equ 0x25
|
sys_set_interrupt equ 0x25
|
||||||
sys_random_block_read equ 0x27
|
sys_random_block_read equ 0x27
|
||||||
|
sys_random_block_write equ 0x28
|
||||||
|
|
||||||
; Interrupt defines
|
; Interrupt defines
|
||||||
int_ctrl_break equ 0x23
|
int_ctrl_break equ 0x23
|
||||||
|
@ -46,6 +50,15 @@ int_ctrl_break equ 0x23
|
||||||
%define r_dh 6
|
%define r_dh 6
|
||||||
%define r_bh 7
|
%define r_bh 7
|
||||||
|
|
||||||
|
%define b_bx_si 0
|
||||||
|
%define b_bx_di 1
|
||||||
|
%define b_bp_si 2
|
||||||
|
%define b_bp_di 3
|
||||||
|
%define b_si 4
|
||||||
|
%define b_di 5
|
||||||
|
%define b_bp 6
|
||||||
|
%define b_bx 7
|
||||||
|
|
||||||
; Direction swapped reg, reg
|
; Direction swapped reg, reg
|
||||||
%macro addw 2
|
%macro addw 2
|
||||||
db 0x03, 0xc0 + 8 * %1 + %2
|
db 0x03, 0xc0 + 8 * %1 + %2
|
||||||
|
@ -90,6 +103,10 @@ int_ctrl_break equ 0x23
|
||||||
dw %1
|
dw %1
|
||||||
db %2
|
db %2
|
||||||
%endmacro
|
%endmacro
|
||||||
|
%macro cmpb_regind_ext 2
|
||||||
|
db 0x82, 0x38 + %1
|
||||||
|
db %2
|
||||||
|
%endmacro
|
||||||
%macro cmpb_ext 2
|
%macro cmpb_ext 2
|
||||||
db 0x82, 0xf8 + %1
|
db 0x82, 0xf8 + %1
|
||||||
db %2
|
db %2
|
||||||
|
@ -97,13 +114,10 @@ int_ctrl_break equ 0x23
|
||||||
|
|
||||||
jmp entrypoint
|
jmp entrypoint
|
||||||
|
|
||||||
__0102:
|
; This is never used by the program
|
||||||
db 13, 10, "The IBM Personal Computer EDITOR", 13, 10
|
db 13, 10, "The IBM Personal Computer EDITOR", 13, 10
|
||||||
db "Version 1.00 (C)Copyright IBM Corp 1981", 13, 10
|
db "Version 1.00 (C)Copyright IBM Corp 1981", 13, 10, '$'
|
||||||
db '$'
|
db "Licensed Material - Program Property of IBM"
|
||||||
|
|
||||||
__0150 db "Licensed Material - Program Property of IBM"
|
|
||||||
|
|
||||||
|
|
||||||
print_filename_missing_error: ; 017b
|
print_filename_missing_error: ; 017b
|
||||||
mov dx, filename_missing_error
|
mov dx, filename_missing_error
|
||||||
|
@ -230,7 +244,7 @@ initialize_editor: ; 0240
|
||||||
|
|
||||||
mov [__0a9a], di
|
mov [__0a9a], di
|
||||||
mov byte [input_buffer.size], input_buffer.bufend - input_buffer.bufstart
|
mov byte [input_buffer.size], input_buffer.bufend - input_buffer.bufstart
|
||||||
mov byte [__0c1e], 0xff ; magic
|
mov byte [__0c1e.size], 0xff
|
||||||
mov byte [__0d48], 0x0a ; magic
|
mov byte [__0d48], 0x0a ; magic
|
||||||
mov word [__0a92], file_buffer
|
mov word [__0a92], file_buffer
|
||||||
mov word [current_line], 1
|
mov word [current_line], 1
|
||||||
|
@ -417,7 +431,7 @@ find_file_end_char: ; 035e
|
||||||
__036d:
|
__036d:
|
||||||
jmp print_eof_str
|
jmp print_eof_str
|
||||||
|
|
||||||
command_a:
|
command_a: ; 0370
|
||||||
test byte [new_file_flag], 0xff
|
test byte [new_file_flag], 0xff
|
||||||
jnz __036d
|
jnz __036d
|
||||||
|
|
||||||
|
@ -508,47 +522,60 @@ _trampoline_oom_1: ; 0414
|
||||||
jmp oom
|
jmp oom
|
||||||
|
|
||||||
command_w: ; 0417
|
command_w: ; 0417
|
||||||
db 0x8B, 0x1E, 0x80, 0x0A ; 0417 mov bx,[0xa80]
|
mov bx, [__0a80]
|
||||||
db 0x0B, 0xDB ; 041B or bx,bx
|
orw r_bx, r_bx
|
||||||
db 0x75, 0x1C ; 041D jnz 0x43b
|
jnz __043b
|
||||||
db 0x8B, 0x0E, 0x94, 0x0A ; 041F mov cx,[0xa94]
|
|
||||||
db 0x8B, 0x3E, 0x9A, 0x0A ; 0423 mov di,[0xa9a]
|
mov cx, [__0a94]
|
||||||
db 0x2B, 0xF9 ; 0427 sub di,cx
|
mov di, [__0a9a]
|
||||||
db 0x76, 0xDA ; 0429 jna 0x405
|
subw r_di, r_cx
|
||||||
db 0x81, 0xFF, 0x49, 0x0D ; 042B cmp di,0xd49
|
jna print_eof_str.ret
|
||||||
db 0x76, 0xD4 ; 042F jna 0x405
|
|
||||||
db 0x33, 0xD2 ; 0431 xor dx,dx
|
cmp di, file_buffer
|
||||||
db 0xBB, 0x01, 0x00 ; 0433 mov bx,0x1
|
jna print_eof_str.ret
|
||||||
db 0xE8, 0x6B, 0x00 ; 0436 call 0x4a4
|
|
||||||
db 0xEB, 0x04 ; 0439 jmp short 0x43f
|
xorw r_dx, r_dx
|
||||||
db 0x43 ; 043B inc bx
|
mov bx, 1 ; magic
|
||||||
db 0xE8, 0x43, 0x00 ; 043C call 0x482
|
call __04a4
|
||||||
db 0x8B, 0xCF ; 043F mov cx,di
|
|
||||||
db 0xBA, 0x49, 0x0D ; 0441 mov dx,0xd49
|
jmp __043f
|
||||||
db 0x2B, 0xCA ; 0444 sub cx,dx
|
|
||||||
db 0x74, 0xBD ; 0446 jz 0x405
|
__043b:
|
||||||
db 0xB4, 0x1A ; 0448 mov ah,0x1a
|
inc bx
|
||||||
db 0xCD, 0x21 ; 044A int 0x21
|
call __0482
|
||||||
db 0xBA, 0x58, 0x0A ; 044C mov dx,0xa58
|
|
||||||
db 0xB4, 0x28 ; 044F mov ah,0x28
|
__043f:
|
||||||
db 0xCD, 0x21 ; 0451 int 0x21
|
movw r_cx, r_di
|
||||||
db 0x0A, 0xC0 ; 0453 or al,al
|
mov dx, file_buffer
|
||||||
db 0x75, 0x1E ; 0455 jnz 0x475
|
subw r_cx, r_dx
|
||||||
db 0x8B, 0xF7 ; 0457 mov si,di
|
je print_eof_str.ret
|
||||||
db 0xBF, 0x49, 0x0D ; 0459 mov di,0xd49
|
mov ah, sys_set_dta
|
||||||
db 0x89, 0x3E, 0x92, 0x0A ; 045C mov [0xa92],di
|
int 0x21
|
||||||
db 0x8B, 0x0E, 0x9A, 0x0A ; 0460 mov cx,[0xa9a]
|
|
||||||
db 0x2B, 0xCE ; 0464 sub cx,si
|
mov dx, __0a58_fcb
|
||||||
db 0x41 ; 0466 inc cx
|
mov ah, sys_random_block_write
|
||||||
db 0xF3, 0xA4 ; 0467 rep movsb
|
int 0x21
|
||||||
db 0x4F ; 0469 dec di
|
orb r_al, r_al
|
||||||
db 0x89, 0x3E, 0x9A, 0x0A ; 046A mov [0xa9a],di
|
jnz disk_full
|
||||||
db 0xC7, 0x06, 0x90, 0x0A, 0x01, 0x00 ; 046E mov word [0xa90],0x1
|
|
||||||
|
movw r_si, r_di
|
||||||
|
mov di, file_buffer
|
||||||
|
mov [__0a92], di
|
||||||
|
mov cx, [__0a9a]
|
||||||
|
subw r_cx, r_si
|
||||||
|
inc cx
|
||||||
|
rep movsb
|
||||||
|
dec di
|
||||||
|
mov [__0a9a], di
|
||||||
|
mov word [current_line], 1
|
||||||
|
|
||||||
__0474:
|
__0474:
|
||||||
db 0xC3 ; 0474 ret
|
ret
|
||||||
db 0xB4, 0x10 ; 0475 mov ah,0x10
|
|
||||||
db 0xCD, 0x21 ; 0477 int 0x21
|
disk_full: ; 0475
|
||||||
db 0xBA, 0xB9, 0x09 ; 0479 mov dx,0x9b9
|
mov ah, sys_close_file
|
||||||
|
int 0x21
|
||||||
|
mov dx, disk_full_error
|
||||||
|
|
||||||
error: ; 047c
|
error: ; 047c
|
||||||
mov ah, sys_print_string
|
mov ah, sys_print_string
|
||||||
|
@ -556,19 +583,21 @@ error: ; 047c
|
||||||
int 0x20
|
int 0x20
|
||||||
|
|
||||||
__0482:
|
__0482:
|
||||||
db 0x8B, 0x16, 0x90, 0x0A ; 0482 mov dx,[0xa90]
|
mov dx, [current_line]
|
||||||
db 0x8B, 0x3E, 0x92, 0x0A ; 0486 mov di,[0xa92]
|
mov di, [__0a92]
|
||||||
db 0x3B, 0xDA ; 048A cmp bx,dx
|
cmpw r_bx, r_dx
|
||||||
db 0x74, 0xE6 ; 048C jz 0x474
|
je __0474
|
||||||
db 0x77, 0x0E ; 048E ja 0x49e
|
ja __049e
|
||||||
db 0x0B, 0xDB ; 0490 or bx,bx
|
|
||||||
db 0x74, 0x0A ; 0492 jz 0x49e
|
orw r_bx, r_bx
|
||||||
db 0xBA, 0x01, 0x00 ; 0494 mov dx,0x1
|
jz __049e
|
||||||
db 0xBF, 0x49, 0x0D ; 0497 mov di,0xd49
|
mov dx, 1 ; magic
|
||||||
db 0x3B, 0xDA ; 049A cmp bx,dx
|
mov di, file_buffer
|
||||||
db 0x74, 0xD6 ; 049C jz 0x474
|
cmpw r_bx, r_dx
|
||||||
db 0x8B, 0x0E, 0x9A, 0x0A ; 049E mov cx,[0xa9a]
|
je __0474
|
||||||
db 0x2B, 0xCF ; 04A2 sub cx,di
|
__049e:
|
||||||
|
mov cx, [__0a9a]
|
||||||
|
subw r_cx, r_di
|
||||||
|
|
||||||
__04a4:
|
__04a4:
|
||||||
mov al, 10 ; magic
|
mov al, 10 ; magic
|
||||||
|
@ -579,6 +608,7 @@ __04a8:
|
||||||
inc dx
|
inc dx
|
||||||
cmpw r_bx, r_dx
|
cmpw r_bx, r_dx
|
||||||
jnz __04a8
|
jnz __04a8
|
||||||
|
__04b1:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
print_line_prefix: ; 04b2
|
print_line_prefix: ; 04b2
|
||||||
|
@ -656,25 +686,28 @@ print_bcd_digit: ; 0501
|
||||||
jmp print_char
|
jmp print_char
|
||||||
|
|
||||||
command_l: ; 050e
|
command_l: ; 050e
|
||||||
db 0x8B, 0x1E, 0x80, 0x0A ; 050E mov bx,[0xa80]
|
mov bx, [__0a80]
|
||||||
db 0x0B, 0xDB ; 0512 or bx,bx
|
orw r_bx, r_bx
|
||||||
db 0x75, 0x0C ; 0514 jnz 0x522
|
jnz __0522
|
||||||
db 0x8B, 0x1E, 0x90, 0x0A ; 0516 mov bx,[0xa90]
|
|
||||||
db 0x83, 0xEB, 0x0B ; 051A sub bx,byte +0xb
|
mov bx, [current_line]
|
||||||
db 0x77, 0x03 ; 051D ja 0x522
|
sub bx, 11 ; magic
|
||||||
db 0xBB, 0x01, 0x00 ; 051F mov bx,0x1
|
ja __0522
|
||||||
db 0xE8, 0x5D, 0xFF ; 0522 call 0x482
|
mov bx, 1
|
||||||
db 0x75, 0x8A ; 0525 jnz 0x4b1
|
__0522:
|
||||||
db 0x8B, 0xF7 ; 0527 mov si,di
|
call __0482
|
||||||
db 0x8B, 0x3E, 0x82, 0x0A ; 0529 mov di,[0xa82]
|
jnz __04b1 ; disambiguate
|
||||||
db 0x47 ; 052D inc di
|
movw r_si, r_di
|
||||||
db 0x2B, 0xFB ; 052E sub di,bx
|
mov di, [__0a82]
|
||||||
db 0x77, 0x08 ; 0530 ja 0x53a
|
inc di
|
||||||
db 0xBF, 0x17, 0x00 ; 0532 mov di,0x17
|
subw r_di, r_bx
|
||||||
db 0xEB, 0x03 ; 0535 jmp short 0x53a
|
ja __053a
|
||||||
|
mov di, 0x17 ; magic
|
||||||
|
jmp __053a
|
||||||
|
|
||||||
__0537:
|
__0537:
|
||||||
mov di, 1 ; magic
|
mov di, 1 ; magic
|
||||||
|
__053a:
|
||||||
mov cx, [__0a9a]
|
mov cx, [__0a9a]
|
||||||
subw r_cx, r_si
|
subw r_cx, r_si
|
||||||
jz print_line.ret
|
jz print_line.ret
|
||||||
|
@ -722,81 +755,116 @@ print_line: ; 0546
|
||||||
|
|
||||||
.ret: ret
|
.ret: ret
|
||||||
|
|
||||||
db 0xBF, 0x20, 0x0C ; 0574 mov di,0xc20
|
; in:
|
||||||
db 0xB9, 0xFF, 0x00 ; 0577 mov cx,0xff
|
; si = line
|
||||||
db 0xBA, 0xFF, 0xFF ; 057A mov dx,0xffff
|
; out:
|
||||||
db 0xAC ; 057D lodsb
|
; dx = length of line (untruncated)
|
||||||
db 0xAA ; 057E stosb
|
; NOTE: Always ends a line with CR
|
||||||
db 0x42 ; 057F inc dx
|
__0574:
|
||||||
db 0x3C, 0x0D ; 0580 cmp al,0xd
|
mov di, __0c1e.bufstart
|
||||||
db 0xE0, 0xF9 ; 0582 loopne 0x57d
|
mov cx, 255 ; Maximum line length
|
||||||
db 0x88, 0x16, 0x1F, 0x0C ; 0584 mov [0xc1f],dl
|
mov dx, -1 ; Start off at -1 since the loop increases dx before testing
|
||||||
db 0x74, 0xE9 ; 0588 jz 0x573
|
|
||||||
db 0xAC ; 058A lodsb
|
.copyloop: ; 057d
|
||||||
db 0x42 ; 058B inc dx
|
lodsb
|
||||||
db 0x3C, 0x0D ; 058C cmp al,0xd
|
stosb
|
||||||
db 0x75, 0xFA ; 058E jnz 0x58a
|
inc dx
|
||||||
db 0x4F ; 0590 dec di
|
cmp al, 13 ; CR
|
||||||
db 0xAA ; 0591 stosb
|
loopne .copyloop
|
||||||
db 0xC3 ; 0592 ret
|
|
||||||
db 0xE9, 0xC9, 0x00 ; 0593 jmp 0x65f
|
mov [__0c1e.fill], dl
|
||||||
|
je print_line.ret
|
||||||
|
|
||||||
|
.find_cr: ; 058a
|
||||||
|
lodsb
|
||||||
|
inc dx
|
||||||
|
cmp al, 13 ; CR
|
||||||
|
jnz .find_cr
|
||||||
|
|
||||||
|
; Overwrite last character with CR
|
||||||
|
dec di
|
||||||
|
stosb
|
||||||
|
ret
|
||||||
|
|
||||||
|
__0593:
|
||||||
|
jmp print_not_found_str
|
||||||
|
|
||||||
command_r: ; 0596
|
command_r: ; 0596
|
||||||
db 0xE8, 0xFD, 0x00 ; 0596 call 0x696
|
call __0696
|
||||||
db 0x75, 0xF8 ; 0599 jnz 0x593
|
jnz __0593 ; disambiguate
|
||||||
db 0x8B, 0x36, 0x8C, 0x0A ; 059B mov si,[0xa8c]
|
|
||||||
db 0xE8, 0xD2, 0xFF ; 059F call 0x574
|
__059b:
|
||||||
db 0x2B, 0x16, 0x84, 0x0A ; 05A2 sub dx,[0xa84]
|
mov si, [__0a8c]
|
||||||
db 0x8B, 0x0E, 0x86, 0x0A ; 05A6 mov cx,[0xa86]
|
call __0574
|
||||||
db 0x03, 0xD1 ; 05AA add dx,cx
|
sub dx, [__0a84]
|
||||||
db 0x81, 0xFA, 0xFE, 0x00 ; 05AC cmp dx,0xfe
|
mov cx, [__0a86]
|
||||||
db 0x77, 0x70 ; 05B0 ja 0x622
|
addw r_dx, r_cx
|
||||||
db 0x8B, 0x1E, 0x8A, 0x0A ; 05B2 mov bx,[0xa8a]
|
|
||||||
db 0x52 ; 05B6 push dx
|
cmp dx, 0xfe ; magic
|
||||||
db 0xE8, 0xF8, 0xFE ; 05B7 call 0x4b2
|
ja __0622
|
||||||
db 0x5A ; 05BA pop dx
|
|
||||||
db 0x8B, 0x0E, 0x88, 0x0A ; 05BB mov cx,[0xa88]
|
mov bx, [__0a8a]
|
||||||
db 0x8B, 0x36, 0x8C, 0x0A ; 05BF mov si,[0xa8c]
|
push dx
|
||||||
db 0x2B, 0xCE ; 05C3 sub cx,si
|
call print_line_prefix
|
||||||
db 0x49 ; 05C5 dec cx
|
pop dx
|
||||||
db 0xE8, 0x4F, 0x00 ; 05C6 call 0x618
|
|
||||||
db 0x56 ; 05C9 push si
|
mov cx, [__0a88]
|
||||||
db 0xBE, 0x9E, 0x0B ; 05CA mov si,0xb9e
|
mov si, [__0a8c]
|
||||||
db 0x8B, 0x0E, 0x86, 0x0A ; 05CD mov cx,[0xa86]
|
subw r_cx, r_si
|
||||||
db 0xE8, 0x44, 0x00 ; 05D1 call 0x618
|
dec cx
|
||||||
db 0x5E ; 05D4 pop si
|
call __0618
|
||||||
db 0x03, 0x36, 0x84, 0x0A ; 05D5 add si,[0xa84]
|
|
||||||
db 0x8B, 0xCA ; 05D9 mov cx,dx
|
push si
|
||||||
db 0x83, 0xC1, 0x02 ; 05DB add cx,byte +0x2
|
mov si, __0b9e
|
||||||
db 0xE8, 0x37, 0x00 ; 05DE call 0x618
|
mov cx, [__0a86]
|
||||||
db 0xE8, 0x90, 0x00 ; 05E1 call 0x674
|
call __0618
|
||||||
db 0x75, 0x2A ; 05E4 jnz 0x610
|
pop si
|
||||||
db 0xE8, 0x7E, 0x00 ; 05E6 call 0x667
|
|
||||||
db 0x8B, 0x3E, 0x88, 0x0A ; 05E9 mov di,[0xa88]
|
add si, [__0a84]
|
||||||
db 0x4F ; 05ED dec di
|
movw r_cx, r_dx
|
||||||
db 0xBE, 0x9E, 0x0B ; 05EE mov si,0xb9e
|
add cx, 2 ; magic
|
||||||
db 0x8B, 0x16, 0x84, 0x0A ; 05F1 mov dx,[0xa84]
|
call __0618
|
||||||
db 0x8B, 0x0E, 0x86, 0x0A ; 05F5 mov cx,[0xa86]
|
|
||||||
db 0x49 ; 05F9 dec cx
|
call prompt_okay
|
||||||
db 0x01, 0x0E, 0x88, 0x0A ; 05FA add [0xa88],cx
|
jne __0610 ; User didn't okay
|
||||||
db 0x41 ; 05FE inc cx
|
|
||||||
db 0x4A ; 05FF dec dx
|
call __0667
|
||||||
db 0x29, 0x16, 0x8E, 0x0A ; 0600 sub [0xa8e],dx
|
mov di, [__0a88]
|
||||||
db 0x73, 0x06 ; 0604 jnc 0x60c
|
dec di
|
||||||
db 0xC7, 0x06, 0x8E, 0x0A, 0x00, 0x00 ; 0606 mov word [0xa8e],0x0
|
mov si, __0b9e
|
||||||
db 0x42 ; 060C inc dx
|
mov dx, [__0a84]
|
||||||
db 0xE8, 0xC7, 0x01 ; 060D call 0x7d7
|
mov cx, [__0a86]
|
||||||
db 0xE8, 0xDC, 0x00 ; 0610 call 0x6ef
|
dec cx
|
||||||
db 0x75, 0x0C ; 0613 jnz 0x621
|
add [__0a88], cx
|
||||||
db 0xE9, 0x83, 0xFF ; 0615 jmp 0x59b
|
inc cx
|
||||||
db 0xE3, 0x07 ; 0618 jcxz 0x621
|
dec dx
|
||||||
db 0xAC ; 061A lodsb
|
sub [__0a8e], dx
|
||||||
db 0xE8, 0x06, 0x03 ; 061B call 0x924
|
jnb __060c
|
||||||
db 0x4A ; 061E dec dx
|
mov word [__0a8e], 0
|
||||||
db 0xE2, 0xF9 ; 061F loop 0x61a
|
|
||||||
db 0xC3 ; 0621 ret
|
__060c:
|
||||||
db 0xBA, 0x21, 0x0A ; 0622 mov dx,0xa21
|
inc dx
|
||||||
db 0xEB, 0x3B ; 0625 jmp short 0x662
|
call __07d7
|
||||||
|
|
||||||
|
__0610:
|
||||||
|
call __06ef
|
||||||
|
jnz __0621 ; disambiguate
|
||||||
|
jmp near __059b
|
||||||
|
|
||||||
|
__0618:
|
||||||
|
jcxz __0621
|
||||||
|
__061a:
|
||||||
|
lodsb
|
||||||
|
call print_char
|
||||||
|
dec dx
|
||||||
|
loop __061a
|
||||||
|
|
||||||
|
__0621:
|
||||||
|
ret
|
||||||
|
|
||||||
|
__0622:
|
||||||
|
mov dx, line_too_long_error
|
||||||
|
jmp print_string
|
||||||
|
|
||||||
command_s: ; 0627
|
command_s: ; 0627
|
||||||
call __0696
|
call __0696
|
||||||
|
@ -825,6 +893,7 @@ __062c:
|
||||||
|
|
||||||
print_not_found_str: ; 065f
|
print_not_found_str: ; 065f
|
||||||
mov dx, not_found_str
|
mov dx, not_found_str
|
||||||
|
print_string: ; 0662
|
||||||
mov ah, sys_print_string
|
mov ah, sys_print_string
|
||||||
int 0x21
|
int 0x21
|
||||||
ret
|
ret
|
||||||
|
@ -967,88 +1036,120 @@ copy_line: ; 073f
|
||||||
jmp .loop
|
jmp .loop
|
||||||
|
|
||||||
command_d: ; 074e
|
command_d: ; 074e
|
||||||
db 0x8B, 0x1E, 0x80, 0x0A ; 074E mov bx,[0xa80]
|
mov bx, [__0a80]
|
||||||
db 0x0B, 0xDB ; 0752 or bx,bx
|
orw r_bx, r_bx
|
||||||
db 0x75, 0x04 ; 0754 jnz 0x75a
|
jnz __075a
|
||||||
db 0x8B, 0x1E, 0x90, 0x0A ; 0756 mov bx,[0xa90]
|
|
||||||
db 0xE8, 0x25, 0xFD ; 075A call 0x482
|
mov bx, [current_line]
|
||||||
db 0x75, 0xDF ; 075D jnz 0x73e
|
__075a:
|
||||||
db 0x53 ; 075F push bx
|
call __0482
|
||||||
db 0x57 ; 0760 push di
|
jnz __073e ; disambiguate
|
||||||
db 0x8B, 0x1E, 0x82, 0x0A ; 0761 mov bx,[0xa82]
|
|
||||||
db 0x0B, 0xDB ; 0765 or bx,bx
|
push bx
|
||||||
db 0x75, 0x02 ; 0767 jnz 0x76b
|
push di
|
||||||
db 0x8B, 0xDA ; 0769 mov bx,dx
|
mov bx, [__0a82]
|
||||||
db 0x43 ; 076B inc bx
|
orw r_bx, r_bx
|
||||||
db 0xE8, 0x13, 0xFD ; 076C call 0x482
|
jnz __076b
|
||||||
db 0x8B, 0xD7 ; 076F mov dx,di
|
movw r_bx, r_dx
|
||||||
db 0x5F ; 0771 pop di
|
|
||||||
db 0x2B, 0xD7 ; 0772 sub dx,di
|
__076b:
|
||||||
db 0x76, 0x0C ; 0774 jna 0x782
|
inc bx
|
||||||
db 0x8F, 0x06, 0x90, 0x0A ; 0776 pop word [0xa90]
|
call __0482
|
||||||
db 0x89, 0x3E, 0x92, 0x0A ; 077A mov [0xa92],di
|
movw r_dx, r_di
|
||||||
db 0x33, 0xC9 ; 077E xor cx,cx
|
pop di
|
||||||
db 0xEB, 0x55 ; 0780 jmp short 0x7d7
|
subw r_dx, r_di
|
||||||
db 0xE9, 0x6A, 0xFB ; 0782 jmp 0x2ef
|
jna __0782
|
||||||
|
|
||||||
|
pop word [current_line]
|
||||||
|
mov [__0a92], di
|
||||||
|
xorw r_cx, r_cx
|
||||||
|
jmp __07d7
|
||||||
|
|
||||||
|
__0782:
|
||||||
|
jmp print_entry_error
|
||||||
|
|
||||||
command_cr: ; 0785
|
command_cr: ; 0785
|
||||||
db 0x8B, 0x1E, 0x80, 0x0A ; 0785 mov bx,[0xa80]
|
mov bx, [__0a80]
|
||||||
db 0x0B, 0xDB ; 0789 or bx,bx
|
orw r_bx, r_bx
|
||||||
db 0x75, 0x05 ; 078B jnz 0x792
|
jnz __0792
|
||||||
db 0x8B, 0x1E, 0x90, 0x0A ; 078D mov bx,[0xa90]
|
|
||||||
db 0x43 ; 0791 inc bx
|
mov bx, [current_line]
|
||||||
db 0xE8, 0xED, 0xFC ; 0792 call 0x482
|
inc bx
|
||||||
db 0x8B, 0xF7 ; 0795 mov si,di
|
|
||||||
db 0x89, 0x16, 0x90, 0x0A ; 0797 mov [0xa90],dx
|
__0792:
|
||||||
db 0x89, 0x36, 0x92, 0x0A ; 079B mov [0xa92],si
|
call __0482
|
||||||
db 0x75, 0x9D ; 079F jnz 0x73e
|
movw r_si, r_di
|
||||||
db 0x3B, 0x36, 0x9A, 0x0A ; 07A1 cmp si,[0xa9a]
|
mov [current_line], dx
|
||||||
db 0x74, 0x97 ; 07A5 jz 0x73e
|
mov [__0a92], si
|
||||||
db 0xE8, 0xCA, 0xFD ; 07A7 call 0x574
|
jnz __073e ; disambiguate
|
||||||
db 0x89, 0x16, 0x84, 0x0A ; 07AA mov [0xa84],dx
|
|
||||||
db 0x8B, 0x36, 0x92, 0x0A ; 07AE mov si,[0xa92]
|
cmp si, [__0a9a]
|
||||||
db 0xE8, 0x82, 0xFD ; 07B2 call 0x537
|
je __073e
|
||||||
db 0xE8, 0xFA, 0xFC ; 07B5 call 0x4b2
|
|
||||||
db 0xB4, 0x0A ; 07B8 mov ah,0xa
|
call __0574
|
||||||
db 0xBA, 0x1E, 0x0C ; 07BA mov dx,0xc1e
|
|
||||||
db 0xCD, 0x21 ; 07BD int 0x21
|
mov [__0a84], dx
|
||||||
db 0xB0, 0x0A ; 07BF mov al,0xa
|
mov si, [__0a92]
|
||||||
db 0xE8, 0x60, 0x01 ; 07C1 call 0x924
|
call __0537
|
||||||
db 0x8A, 0x0E, 0x1F, 0x0C ; 07C4 mov cl,[0xc1f]
|
call print_line_prefix
|
||||||
db 0xB5, 0x00 ; 07C8 mov ch,0x0
|
|
||||||
db 0xE3, 0x3F ; 07CA jcxz 0x80b
|
mov ah, sys_read_line
|
||||||
db 0x8B, 0x16, 0x84, 0x0A ; 07CC mov dx,[0xa84]
|
mov dx, __0c1e
|
||||||
db 0xBE, 0x20, 0x0C ; 07D0 mov si,0xc20
|
int 0x21
|
||||||
db 0x8B, 0x3E, 0x92, 0x0A ; 07D3 mov di,[0xa92]
|
|
||||||
db 0x3B, 0xCA ; 07D7 cmp cx,dx
|
mov al, 10 ; LF
|
||||||
db 0x74, 0x2E ; 07D9 jz 0x809
|
call print_char
|
||||||
db 0x56 ; 07DB push si
|
|
||||||
db 0x57 ; 07DC push di
|
mov cl, [__0c1e.fill]
|
||||||
db 0x51 ; 07DD push cx
|
mov ch, 0
|
||||||
db 0x8B, 0xF7 ; 07DE mov si,di
|
jcxz __080b
|
||||||
db 0x03, 0xF2 ; 07E0 add si,dx
|
|
||||||
db 0x03, 0xF9 ; 07E2 add di,cx
|
mov dx, [__0a84]
|
||||||
db 0xA1, 0x9A, 0x0A ; 07E4 mov ax,[0xa9a]
|
mov si, __0c1e.bufstart
|
||||||
db 0x2B, 0xC2 ; 07E7 sub ax,dx
|
mov di, [__0a92]
|
||||||
db 0x03, 0xC1 ; 07E9 add ax,cx
|
|
||||||
db 0x3B, 0x06, 0x98, 0x0A ; 07EB cmp ax,[0xa98]
|
__07d7:
|
||||||
db 0x73, 0x1B ; 07EF jnc 0x80c
|
cmpw r_cx, r_dx
|
||||||
db 0x87, 0x06, 0x9A, 0x0A ; 07F1 xchg ax,[0xa9a]
|
je __0809
|
||||||
db 0x8B, 0xC8 ; 07F5 mov cx,ax
|
|
||||||
db 0x2B, 0xCE ; 07F7 sub cx,si
|
push si
|
||||||
db 0x3B, 0xF7 ; 07F9 cmp si,di
|
push di
|
||||||
db 0x77, 0x05 ; 07FB ja 0x802
|
push cx
|
||||||
db 0x03, 0xF1 ; 07FD add si,cx
|
|
||||||
db 0x03, 0xF9 ; 07FF add di,cx
|
movw r_si, r_di
|
||||||
db 0xFD ; 0801 std
|
addw r_si, r_dx
|
||||||
db 0x41 ; 0802 inc cx
|
addw r_di, r_cx
|
||||||
db 0xF3, 0xA4 ; 0803 rep movsb
|
mov ax, [__0a9a]
|
||||||
db 0xFC ; 0805 cld
|
subw r_ax, r_dx
|
||||||
db 0x59 ; 0806 pop cx
|
addw r_ax, r_cx
|
||||||
db 0x5F ; 0807 pop di
|
cmp ax, [__0a98]
|
||||||
db 0x5E ; 0808 pop si
|
jnb oom
|
||||||
db 0xF3, 0xA4 ; 0809 rep movsb
|
|
||||||
db 0xC3 ; 080B ret
|
xchg ax, [__0a9a]
|
||||||
|
movw r_cx, r_ax
|
||||||
|
subw r_cx, r_si
|
||||||
|
; NOTE: Memmove?
|
||||||
|
cmpw r_si, r_di
|
||||||
|
ja __0802
|
||||||
|
|
||||||
|
addw r_si, r_cx
|
||||||
|
addw r_di, r_cx
|
||||||
|
std
|
||||||
|
|
||||||
|
__0802:
|
||||||
|
inc cx
|
||||||
|
rep movsb
|
||||||
|
cld
|
||||||
|
|
||||||
|
pop cx
|
||||||
|
pop di
|
||||||
|
pop si
|
||||||
|
|
||||||
|
__0809:
|
||||||
|
rep movsb
|
||||||
|
|
||||||
|
__080b:
|
||||||
|
ret
|
||||||
|
|
||||||
oom: ; 080c
|
oom: ; 080c
|
||||||
mov dx, oom_str
|
mov dx, oom_str
|
||||||
|
@ -1057,122 +1158,155 @@ oom: ; 080c
|
||||||
jmp editor_mainloop
|
jmp editor_mainloop
|
||||||
|
|
||||||
command_i: ; 0816
|
command_i: ; 0816
|
||||||
db 0xB8, 0x23, 0x25 ; 0816 mov ax,0x2523
|
mov ax, sys_set_interrupt * 0x100 + int_ctrl_break
|
||||||
db 0xBA, 0x7D, 0x08 ; 0819 mov dx,0x87d
|
mov dx, __087d
|
||||||
db 0xCD, 0x21 ; 081C int 0x21
|
int 0x21
|
||||||
db 0x8B, 0x1E, 0x80, 0x0A ; 081E mov bx,[0xa80]
|
|
||||||
db 0x0B, 0xDB ; 0822 or bx,bx
|
mov bx, [__0a80],
|
||||||
db 0x75, 0x04 ; 0824 jnz 0x82a
|
orw r_bx, r_bx
|
||||||
db 0x8B, 0x1E, 0x90, 0x0A ; 0826 mov bx,[0xa90]
|
jnz __082a
|
||||||
db 0xE8, 0x55, 0xFC ; 082A call 0x482
|
mov bx, [current_line]
|
||||||
db 0x8B, 0x0E, 0x9A, 0x0A ; 082D mov cx,[0xa9a]
|
|
||||||
db 0x8B, 0xF1 ; 0831 mov si,cx
|
__082a:
|
||||||
db 0x2B, 0xCF ; 0833 sub cx,di
|
call __0482
|
||||||
db 0x41 ; 0835 inc cx
|
mov cx, [__0a9a]
|
||||||
db 0x8B, 0x3E, 0x98, 0x0A ; 0836 mov di,[0xa98]
|
movw r_si, r_cx
|
||||||
db 0xFD ; 083A std
|
subw r_cx, r_di
|
||||||
db 0xF3, 0xA4 ; 083B rep movsb
|
inc cx
|
||||||
db 0x87, 0xFE ; 083D xchg di,si
|
mov di, [__0a98]
|
||||||
db 0xFC ; 083F cld
|
|
||||||
db 0x47 ; 0840 inc di
|
std
|
||||||
db 0x8B, 0xEE ; 0841 mov bp,si
|
rep movsb
|
||||||
db 0x8B, 0xDA ; 0843 mov bx,dx
|
xchg di, si
|
||||||
db 0x89, 0x3E, 0x92, 0x0A ; 0845 mov [0xa92],di
|
cld
|
||||||
db 0x89, 0x1E, 0x90, 0x0A ; 0849 mov [0xa90],bx
|
|
||||||
db 0x89, 0x2E, 0x9A, 0x0A ; 084D mov [0xa9a],bp
|
inc di
|
||||||
db 0xE8, 0x5E, 0xFC ; 0851 call 0x4b2
|
movw r_bp, r_si
|
||||||
db 0xBA, 0x1E, 0x0C ; 0854 mov dx,0xc1e
|
movw r_bx, r_dx
|
||||||
db 0xB4, 0x0A ; 0857 mov ah,0xa
|
__0845:
|
||||||
db 0xCD, 0x21 ; 0859 int 0x21
|
mov [__0a92], di
|
||||||
db 0xE8, 0xC4, 0x00 ; 085B call 0x922
|
mov [current_line], bx
|
||||||
db 0xBE, 0x20, 0x0C ; 085E mov si,0xc20
|
mov [__0a9a], bp
|
||||||
db 0x82 ; 0861 db 0x82
|
call print_line_prefix
|
||||||
db 0x3C, 0x1A ; 0862 cmp al,0x1a
|
|
||||||
db 0x74, 0x25 ; 0864 jz 0x88b
|
mov dx, __0c1e
|
||||||
db 0x8A, 0x4C, 0xFF ; 0866 mov cl,[si-0x1]
|
mov ah, sys_read_line
|
||||||
db 0xB5, 0x00 ; 0869 mov ch,0x0
|
int 0x21
|
||||||
db 0x8B, 0xD6 ; 086B mov dx,si
|
|
||||||
db 0x03, 0xD1 ; 086D add dx,cx
|
call __0922
|
||||||
db 0x42 ; 086F inc dx
|
|
||||||
db 0x3B, 0xD5 ; 0870 cmp dx,bp
|
mov si, __0c1e.bufstart
|
||||||
db 0x73, 0x98 ; 0872 jnc 0x80c
|
|
||||||
db 0xF3, 0xA4 ; 0874 rep movsb
|
cmpb_regind_ext b_si, 0x1a ; ^Z
|
||||||
db 0xA4 ; 0876 movsb
|
je __088b
|
||||||
db 0xB0, 0x0A ; 0877 mov al,0xa
|
|
||||||
db 0xAA ; 0879 stosb
|
mov cl, [si - 1] ; magic
|
||||||
db 0x43 ; 087A inc bx
|
mov ch, 0
|
||||||
db 0xEB, 0xC8 ; 087B jmp short 0x845
|
|
||||||
db 0x8C, 0xC8 ; 087D mov ax,cs
|
movw r_dx, r_si
|
||||||
db 0x8E, 0xD8 ; 087F mov ds,ax
|
addw r_dx, r_cx
|
||||||
db 0x8E, 0xC0 ; 0881 mov es,ax
|
inc dx
|
||||||
db 0x8E, 0xD0 ; 0883 mov ss,ax
|
cmpw r_dx, r_bp
|
||||||
db 0xBC, 0x48, 0x0D ; 0885 mov sp,0xd48
|
jnb oom
|
||||||
db 0xE8, 0x92, 0x00 ; 0888 call 0x91d
|
|
||||||
db 0x8B, 0x2E, 0x9A, 0x0A ; 088B mov bp,[0xa9a]
|
rep movsb
|
||||||
db 0x8B, 0x3E, 0x92, 0x0A ; 088F mov di,[0xa92]
|
movsb
|
||||||
db 0x8B, 0xF5 ; 0893 mov si,bp
|
mov al, 10 ; magic, LF?
|
||||||
db 0x46 ; 0895 inc si
|
stosb
|
||||||
db 0x8B, 0x0E, 0x98, 0x0A ; 0896 mov cx,[0xa98]
|
|
||||||
db 0x2B, 0xCD ; 089A sub cx,bp
|
inc bx
|
||||||
db 0xF3, 0xA4 ; 089C rep movsb
|
jmp __0845
|
||||||
db 0x4F ; 089E dec di
|
|
||||||
db 0x89, 0x3E, 0x9A, 0x0A ; 089F mov [0xa9a],di
|
__087d:
|
||||||
db 0xE9, 0xCD, 0xF9 ; 08A3 jmp 0x273
|
mov ax, cs
|
||||||
|
mov ds, ax
|
||||||
|
mov es, ax
|
||||||
|
mov ss, ax
|
||||||
|
mov sp, stack.end
|
||||||
|
call newline
|
||||||
|
|
||||||
|
__088b:
|
||||||
|
mov bp, [__0a9a]
|
||||||
|
mov di, [__0a92]
|
||||||
|
movw r_si, r_bp
|
||||||
|
inc si
|
||||||
|
mov cx, [__0a98]
|
||||||
|
subw r_cx, r_bp
|
||||||
|
rep movsb
|
||||||
|
dec di
|
||||||
|
mov [__0a9a], di
|
||||||
|
jmp editor_mainloop
|
||||||
|
|
||||||
command_q: ; 08a6
|
command_q: ; 08a6
|
||||||
db 0xBA, 0x45, 0x0A ; 08A6 mov dx,0xa45
|
mov dx, quit_prompt
|
||||||
db 0xB4, 0x09 ; 08A9 mov ah,0x9
|
mov ah, sys_print_string
|
||||||
db 0xCD, 0x21 ; 08AB int 0x21
|
int 0x21
|
||||||
db 0xB4, 0x01 ; 08AD mov ah,0x1
|
|
||||||
db 0xCD, 0x21 ; 08AF int 0x21
|
mov ah, sys_read_char
|
||||||
db 0x24, 0x5F ; 08B1 and al,0x5f
|
int 0x21
|
||||||
db 0x3C, 0x59 ; 08B3 cmp al,0x59
|
and al, 0x5f ; Lowercase
|
||||||
db 0x75, 0x66 ; 08B5 jnz 0x91d
|
cmp al, 'Y'
|
||||||
db 0xBA, 0x58, 0x0A ; 08B7 mov dx,0xa58
|
jne newline
|
||||||
db 0xB4, 0x10 ; 08BA mov ah,0x10
|
|
||||||
db 0xCD, 0x21 ; 08BC int 0x21
|
mov dx, __0a58_fcb
|
||||||
db 0xB4, 0x13 ; 08BE mov ah,0x13
|
mov ah, sys_close_file
|
||||||
db 0xCD, 0x21 ; 08C0 int 0x21
|
int 0x21
|
||||||
db 0xCD, 0x20 ; 08C2 int 0x20
|
|
||||||
db 0xC7, 0x06, 0x80, 0x0A, 0xFF, 0xFF ; 08C4 mov word [0xa80],0xffff
|
mov ah, sys_delete_file
|
||||||
db 0xE8, 0xA3, 0xFA ; 08CA call 0x370
|
int 0x21
|
||||||
|
|
||||||
|
int 0x20
|
||||||
|
|
||||||
|
__08c4:
|
||||||
|
mov word [__0a80], 0xffff ; magic
|
||||||
|
call command_a
|
||||||
|
|
||||||
command_e: ; 08cd
|
command_e: ; 08cd
|
||||||
db 0xC6, 0x06, 0x7F, 0x0A, 0x01 ; 08CD mov byte [0xa7f],0x1
|
mov byte [__0a7f], 1 ; magic
|
||||||
db 0xBB, 0xFF, 0xFF ; 08D2 mov bx,0xffff
|
mov bx, 0xffff ; magic
|
||||||
db 0xE8, 0x63, 0xFB ; 08D5 call 0x43b
|
call __043b
|
||||||
db 0xF6, 0x06, 0x7E, 0x0A, 0xFF ; 08D8 test byte [0xa7e],0xff
|
test byte [new_file_flag], 0xff
|
||||||
db 0x74, 0xE5 ; 08DD jz 0x8c4
|
jz __08c4
|
||||||
db 0x8B, 0x16, 0x9A, 0x0A ; 08DF mov dx,[0xa9a]
|
|
||||||
db 0xB4, 0x1A ; 08E3 mov ah,0x1a
|
mov dx, [__0a9a]
|
||||||
db 0xCD, 0x21 ; 08E5 int 0x21
|
mov ah, sys_set_dta
|
||||||
db 0xB9, 0x01, 0x00 ; 08E7 mov cx,0x1
|
int 0x21
|
||||||
db 0xBA, 0x58, 0x0A ; 08EA mov dx,0xa58
|
|
||||||
db 0xB4, 0x28 ; 08ED mov ah,0x28
|
mov cx, 1
|
||||||
db 0xCD, 0x21 ; 08EF int 0x21
|
mov dx, __0a58_fcb
|
||||||
db 0xB4, 0x10 ; 08F1 mov ah,0x10
|
mov ah, sys_random_block_write
|
||||||
db 0xCD, 0x21 ; 08F3 int 0x21
|
int 0x21
|
||||||
db 0xBE, 0x5C, 0x00 ; 08F5 mov si,0x5c
|
|
||||||
db 0x8D, 0x7C, 0x10 ; 08F8 lea di,[si+0x10]
|
mov ah, sys_close_file
|
||||||
db 0x8B, 0xD6 ; 08FB mov dx,si
|
int 0x21
|
||||||
db 0xB9, 0x09, 0x00 ; 08FD mov cx,0x9
|
|
||||||
db 0xF3, 0xA4 ; 0900 rep movsb
|
mov si, psp_fcb_1
|
||||||
db 0xBE, 0x3E, 0x09 ; 0902 mov si,0x93e
|
; NOTE: - 1 since this copies the drive specifier (which is ignored?) too
|
||||||
db 0xA5 ; 0905 movsw
|
lea di, [si + fcb_rename_target - 1]
|
||||||
db 0xA4 ; 0906 movsb
|
movw r_dx, r_si
|
||||||
db 0xB4, 0x17 ; 0907 mov ah,0x17
|
mov cx, 9
|
||||||
db 0xCD, 0x21 ; 0909 int 0x21
|
rep movsb
|
||||||
db 0xBE, 0x5C, 0x00 ; 090B mov si,0x5c
|
mov si, bak_extension
|
||||||
db 0xBF, 0x68, 0x0A ; 090E mov di,0xa68
|
movsw
|
||||||
db 0xB9, 0x06, 0x00 ; 0911 mov cx,0x6
|
movsb
|
||||||
db 0xF3, 0xA5 ; 0914 rep movsw
|
|
||||||
db 0xBA, 0x58, 0x0A ; 0916 mov dx,0xa58
|
mov ah, sys_rename_file
|
||||||
db 0xCD, 0x21 ; 0919 int 0x21
|
int 0x21
|
||||||
db 0xCD, 0x20 ; 091B int 0x20
|
|
||||||
|
mov si, psp_fcb_1
|
||||||
|
mov di, __0a58_fcb + fcb_rename_target - 1
|
||||||
|
mov cx, 6 ; 6*2 = 12 bytes (as we copy words). 1 (drive specifier) + 8 (name) + 3 (extension)
|
||||||
|
rep movsw
|
||||||
|
|
||||||
|
mov dx, __0a58_fcb
|
||||||
|
int 0x21
|
||||||
|
|
||||||
|
int 0x20
|
||||||
|
|
||||||
newline: ; 091d
|
newline: ; 091d
|
||||||
mov al, 13 ; CR
|
mov al, 13 ; CR
|
||||||
call print_char
|
call print_char
|
||||||
|
__0922:
|
||||||
mov al, 10 ; LF
|
mov al, 10 ; LF
|
||||||
|
|
||||||
print_char: ; 0924
|
print_char: ; 0924
|
||||||
|
@ -1201,15 +1335,15 @@ invalid_name_error db "Invalid drive or file name$" ; 0941
|
||||||
filename_missing_error db "File name must be specified$" ; 095c
|
filename_missing_error db "File name must be specified$" ; 095c
|
||||||
bak_error db "Cannot edit .BAK file--rename file$" ; 0978
|
bak_error db "Cannot edit .BAK file--rename file$" ; 0978
|
||||||
directory_full_error db "No room in directory for file$" ; 099b
|
directory_full_error db "No room in directory for file$" ; 099b
|
||||||
__09b9 db "Disk full--file write not completed$"
|
disk_full_error 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
|
||||||
not_found_str db "Not found", 13, 10, '$' ; 0a0e
|
not_found_str db "Not found", 13, 10, '$' ; 0a0e
|
||||||
ok_prompt db "O.K.? $" ; 0a1a
|
ok_prompt db "O.K.? $" ; 0a1a
|
||||||
__0a21 db "Line too long", 13, 10, '$'
|
line_too_long_error db "Line too long", 13, 10, '$' ; 0a21
|
||||||
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)? $"
|
quit_prompt db "Abort edit (Y/N)? $" ; 0a45
|
||||||
|
|
||||||
; 0a58
|
; 0a58
|
||||||
section .bss
|
section .bss
|
||||||
|
@ -1246,11 +1380,14 @@ input_buffer:
|
||||||
__0b1e resb 128
|
__0b1e resb 128
|
||||||
__0b9e resb 128
|
__0b9e resb 128
|
||||||
|
|
||||||
__0c1e resb 1
|
__0c1e:
|
||||||
|
.size resb 1 ; 0c1e
|
||||||
|
.fill resb 1 ; 0c1f
|
||||||
|
; TODO: Figure if this is 256 or 255 bytes
|
||||||
|
.bufstart resb 256 ; 0c20
|
||||||
|
.bufend: ; 0d20
|
||||||
|
|
||||||
resb 41
|
stack: resb 40 ; 0d20
|
||||||
|
|
||||||
stack: resb 256 ; 0c48
|
|
||||||
.end: ; 0d48
|
.end: ; 0d48
|
||||||
|
|
||||||
__0d48 resb 1
|
__0d48 resb 1
|
||||||
|
|
Loading…
Reference in a new issue