edlin/edlin.asm

1055 lines
28 KiB
NASM
Raw Normal View History

2021-07-29 20:19:41 +00:00
cpu 8086
org 0x100
2021-07-29 21:55:57 +00:00
; FCB defines
fcb_filename equ 1
2021-07-30 10:20:59 +00:00
fcb_extension equ fcb_filename + 8
2021-07-30 11:16:19 +00:00
fcb_record_size equ 14
fcb_record_low equ 33
fcb_record_high equ 35
2021-07-29 21:55:57 +00:00
; PSP defines
2021-07-30 11:16:19 +00:00
psp_segment_size equ 0x0006
2021-07-29 21:55:57 +00:00
psp_fcb_1 equ 0x005c
2021-07-30 12:57:57 +00:00
; Syscall defines
2021-07-30 14:14:37 +00:00
sys_print_char equ 2
2021-07-30 10:20:59 +00:00
sys_print_string equ 9
sys_open_file equ 0xf
sys_delete_file equ 0x13
sys_create_file equ 0x16
2021-07-30 11:16:19 +00:00
sys_set_dta equ 0x1a
2021-07-30 14:14:37 +00:00
sys_set_interrupt equ 0x25
sys_random_block_read equ 0x27
; Interrupt defines
int_ctrl_break equ 0x23
2021-07-30 10:20:59 +00:00
; Special instruction encodings
%define r_ax 0
%define r_cx 1
%define r_dx 2
%define r_bx 3
%define r_sp 4
%define r_bp 5
%define r_si 6
%define r_di 7
%define r_al 0
%define r_cl 1
%define r_dl 2
%define r_bl 3
%define r_ah 4
%define r_ch 5
%define r_dh 6
%define r_bh 7
; Direction swapped reg, reg
%macro addw 2
db 0x03, 0xc0 + 8 * %1 + %2
2021-07-30 11:16:19 +00:00
%endmacro
2021-07-30 14:14:37 +00:00
%macro orw 2
db 0x0b, 0xc0 + 8 * %1 + %2
%endmacro
%macro orb 2
db 0x0a, 0xc0 + 8 * %1 + %2
2021-07-30 11:16:19 +00:00
%endmacro
%macro subw 2
db 0x2b, 0xc0 + 8 * %1 + %2
2021-07-30 11:16:19 +00:00
%endmacro
%macro xorw 2
db 0x33, 0xc0 + 8 * %1 + %2
2021-07-30 13:06:56 +00:00
%endmacro
2021-07-30 14:14:37 +00:00
%macro cmpw 2
db 0x3b, 0xc0 + 8 * %1 + %2
%endmacro
%macro movw 2
db 0x8b, 0xc0 + 8 * %1 + %2
2021-07-30 10:20:59 +00:00
%endmacro
%macro cmp_byteaddr_bytext 2
db 0x82, 0x3e ; cmp byte […], byte +… (extended)
dw %1
db %2
%endmacro
2021-07-29 21:55:57 +00:00
jmp entrypoint
2021-07-29 21:40:42 +00:00
__0102:
db 13, 10, "The IBM Personal Computer EDITOR", 13, 10
db "Version 1.00 (C)Copyright IBM Corp 1981", 13, 10
db '$'
__0150 db "Licensed Material - Program Property of IBM"
2021-07-29 21:55:57 +00:00
print_filename_missing_error: ; 017b
mov dx, filename_missing_error
_trampoline_error_1:
jmp error
entrypoint: ; 0181
mov byte [__0a7f], 0
2021-07-30 11:16:19 +00:00
mov sp, stack.end
2021-07-29 21:55:57 +00:00
ensure_file_argument:
2021-07-30 10:20:59 +00:00
cmp_byteaddr_bytext psp_fcb_1 + fcb_filename, ' '
2021-07-29 21:55:57 +00:00
je print_filename_missing_error
2021-07-30 10:20:59 +00:00
; AL at program start a flag of whether drive specifier in first parameter valid
orb r_al, r_al
2021-07-29 21:55:57 +00:00
mov dx, invalid_name_error
jnz _trampoline_error_1
2021-07-30 10:20:59 +00:00
mov si, bak_extension
mov di, psp_fcb_1 + fcb_filename + 8
mov cx, 3
repe cmpsb
2021-07-30 11:16:19 +00:00
je print_bak_error
open_file:
mov ah, sys_open_file
mov dx, psp_fcb_1
int 0x21
mov [new_file_flag], al
orb r_al, r_al
2021-07-30 11:16:19 +00:00
jz delete_old_bak
mov dx, new_file_str
mov ah, sys_print_string
int 0x21
delete_old_bak: ; 01b9
mov si, psp_fcb_1
mov di, __0a58_fcb
mov cx, 9
rep movsb
mov si, bak_extension
movsw
movsb
mov ah, sys_delete_file
mov dx, __0a58_fcb
int 0x21
; TODO: Why .$$$? What is this used for?
mov al, '$'
mov di, __0a58_fcb + fcb_extension
stosb
stosb
stosb
mov ah, sys_create_file
int 0x21
orb r_al, r_al
2021-07-30 11:16:19 +00:00
jz setup_file_parameters
mov dx, directory_full_error
jmp error
print_bak_error: ; 01e6
mov dx, bak_error
jmp error
setup_file_parameters: ; 01ec
xorw r_ax, r_ax
2021-07-30 11:16:19 +00:00
mov [psp_fcb_1 + fcb_record_low], ax
mov [psp_fcb_1 + fcb_record_high], ax
mov [__0a58_fcb + fcb_record_low], ax
mov [__0a58_fcb + fcb_record_high], ax
inc ax
mov [psp_fcb_1 + fcb_record_size], ax
mov [__0a58_fcb + fcb_record_size], ax
mov dx, disk_transfer_area
movw r_di, r_dx
2021-07-30 11:16:19 +00:00
mov ah, sys_set_dta
int 0x21
mov cx, [psp_segment_size]
dec cx
mov [__0a98], cx
test byte [new_file_flag], 0xff
jnz __0240
sub cx, disk_transfer_area
; cx is now the amount of memory available starting at disk_transfer_area
; __0a94 = ¼ available memory
shr cx, 1
movw r_ax, r_cx
2021-07-30 11:16:19 +00:00
shr cx, 1
mov [__0a94], cx
2021-07-30 12:57:57 +00:00
; cx = ¾ available memory
addw r_cx, r_ax
2021-07-30 11:16:19 +00:00
movw r_dx, r_cx
2021-07-30 11:16:19 +00:00
add dx, disk_transfer_area
mov [__0a96], dx
read_file:
mov dx, psp_fcb_1
2021-07-30 14:14:37 +00:00
mov ah, sys_random_block_read
2021-07-30 11:16:19 +00:00
int 0x21
2021-07-30 13:06:56 +00:00
call find_file_end_char
addw r_di, r_cx
2021-07-30 11:16:19 +00:00
__0240:
2021-07-30 14:14:37 +00:00
cld
mov byte [di], 0x1a ; ^Z
mov [__0a9a], di
mov byte [__0a9c], 0x80 ; magic
mov byte [__0c1e], 0xff ; magic
mov byte [__0d48], 0x0a ; magic
mov word [__0a92], disk_transfer_area
mov word [__0a90], 1 ; magic
mov word [__0a80], 1 ; magic
test byte [new_file_flag], 0xff
jnz __0273
call __0370
__0273:
2021-07-29 20:19:41 +00:00
db 0xBC, 0x48, 0x0D ; 0273 mov sp,0xd48
db 0xB8, 0x23, 0x25 ; 0276 mov ax,0x2523
db 0xBA, 0x2D, 0x09 ; 0279 mov dx,0x92d
db 0xCD, 0x21 ; 027C int 0x21
db 0xB0, 0x2A ; 027E mov al,0x2a
db 0xE8, 0xA1, 0x06 ; 0280 call 0x924
db 0xBA, 0x9C, 0x0A ; 0283 mov dx,0xa9c
db 0xB4, 0x0A ; 0286 mov ah,0xa
db 0xCD, 0x21 ; 0288 int 0x21
db 0xB0, 0x0A ; 028A mov al,0xa
db 0xE8, 0x95, 0x06 ; 028C call 0x924
db 0xC7, 0x06, 0x82, 0x0A, 0x00, 0x00 ; 028F mov word [0xa82],0x0
db 0xC6, 0x06, 0x7D, 0x0A, 0x00 ; 0295 mov byte [0xa7d],0x0
db 0xBE, 0x9E, 0x0A ; 029A mov si,0xa9e
db 0xE8, 0x59, 0x00 ; 029D call 0x2f9
db 0x89, 0x16, 0x80, 0x0A ; 02A0 mov [0xa80],dx
db 0xE8, 0x43, 0x00 ; 02A4 call 0x2ea
db 0x3C, 0x2C ; 02A7 cmp al,0x2c
db 0x75, 0x01 ; 02A9 jnz 0x2ac
db 0x46 ; 02AB inc si
db 0x4E ; 02AC dec si
db 0xE8, 0x49, 0x00 ; 02AD call 0x2f9
db 0x89, 0x16, 0x82, 0x0A ; 02B0 mov [0xa82],dx
db 0xE8, 0x33, 0x00 ; 02B4 call 0x2ea
db 0x3C, 0x3F ; 02B7 cmp al,0x3f
db 0x75, 0x06 ; 02B9 jnz 0x2c1
db 0xA2, 0x7D, 0x0A ; 02BB mov [0xa7d],al
db 0xE8, 0x28, 0x00 ; 02BE call 0x2e9
db 0x3C, 0x5F ; 02C1 cmp al,0x5f
db 0x76, 0x02 ; 02C3 jna 0x2c7
db 0x24, 0x5F ; 02C5 and al,0x5f
db 0xBF, 0x40, 0x03 ; 02C7 mov di,0x340
db 0xB9, 0x0A, 0x00 ; 02CA mov cx,0xa
db 0xF2, 0xAE ; 02CD repne scasb
db 0x75, 0x1E ; 02CF jnz 0x2ef
db 0x8B, 0xD9 ; 02D1 mov bx,cx
db 0xA1, 0x82, 0x0A ; 02D3 mov ax,[0xa82]
db 0x0B, 0xC0 ; 02D6 or ax,ax
db 0x74, 0x06 ; 02D8 jz 0x2e0
db 0x3B, 0x06, 0x80, 0x0A ; 02DA cmp ax,[0xa80]
db 0x72, 0x0F ; 02DE jc 0x2ef
db 0xD1, 0xE3 ; 02E0 shl bx,1
db 0xFF, 0x97, 0x4A, 0x03 ; 02E2 call [bx+0x34a]
db 0xE9, 0x8A, 0xFF ; 02E6 jmp 0x273
db 0xAC ; 02E9 lodsb
db 0x3C, 0x20 ; 02EA cmp al,0x20
db 0x74, 0xFB ; 02EC jz 0x2e9
db 0xC3 ; 02EE ret
db 0xBA, 0xF5, 0x09 ; 02EF mov dx,0x9f5
db 0xB4, 0x09 ; 02F2 mov ah,0x9
db 0xCD, 0x21 ; 02F4 int 0x21
db 0xE9, 0x7A, 0xFF ; 02F6 jmp 0x273
db 0xE8, 0xED, 0xFF ; 02F9 call 0x2e9
db 0x3C, 0x2E ; 02FC cmp al,0x2e
db 0x74, 0x35 ; 02FE jz 0x335
db 0x3C, 0x23 ; 0300 cmp al,0x23
db 0x74, 0x37 ; 0302 jz 0x33b
db 0xBA, 0x00, 0x00 ; 0304 mov dx,0x0
db 0xB1, 0x00 ; 0307 mov cl,0x0
db 0x3C, 0x30 ; 0309 cmp al,0x30
db 0x72, 0x1E ; 030B jc 0x32b
db 0x3C, 0x39 ; 030D cmp al,0x39
db 0x77, 0x1A ; 030F ja 0x32b
db 0x81, 0xFA, 0x99, 0x19 ; 0311 cmp dx,0x1999
db 0x73, 0xD8 ; 0315 jnc 0x2ef
db 0xB1, 0x01 ; 0317 mov cl,0x1
db 0x2C, 0x30 ; 0319 sub al,0x30
db 0x8B, 0xDA ; 031B mov bx,dx
db 0xD1, 0xE2 ; 031D shl dx,1
db 0xD1, 0xE2 ; 031F shl dx,1
db 0x03, 0xD3 ; 0321 add dx,bx
db 0xD1, 0xE2 ; 0323 shl dx,1
db 0x98 ; 0325 cbw
db 0x03, 0xD0 ; 0326 add dx,ax
db 0xAC ; 0328 lodsb
db 0xEB, 0xDE ; 0329 jmp short 0x309
db 0x82 ; 032B db 0x82
db 0xF9 ; 032C stc
db 0x00, 0x74, 0xBE ; 032D add [si-0x42],dh
db 0x0B, 0xD2 ; 0330 or dx,dx
db 0x74, 0xBB ; 0332 jz 0x2ef
db 0xC3 ; 0334 ret
db 0x8B, 0x16, 0x90, 0x0A ; 0335 mov dx,[0xa90]
db 0xAC ; 0339 lodsb
db 0xC3 ; 033A ret
db 0xBA, 0xFE, 0xFF ; 033B mov dx,0xfffe
db 0xAC ; 033E lodsb
db 0xC3 ; 033F ret
db 0x51 ; 0340 push cx
db 0x57 ; 0341 push di
db 0x41 ; 0342 inc cx
db 0x53 ; 0343 push bx
db 0x52 ; 0344 push dx
db 0x44 ; 0345 inc sp
db 0x4C ; 0346 dec sp
db 0x49 ; 0347 dec cx
db 0x45 ; 0348 inc bp
db 0x0D, 0x85, 0x07 ; 0349 or ax,0x785
db 0xCD, 0x08 ; 034C int 0x8
db 0x16 ; 034E push ss
db 0x08, 0x0E, 0x05, 0x4E ; 034F or [0x4e05],cl
db 0x07 ; 0353 pop es
db 0x96 ; 0354 xchg ax,si
db 0x05, 0x27, 0x06 ; 0355 add ax,0x627
db 0x70, 0x03 ; 0358 jo 0x35d
db 0x17 ; 035A pop ss
db 0x04, 0xA6 ; 035B add al,0xa6
2021-07-30 11:16:19 +00:00
db 0x08 ; 035D db 0x08
2021-07-30 13:06:56 +00:00
find_file_end_char: ; 035e
push di
push cx
mov al, 0x1a ; ^Z
repne scasb
movw r_di, r_cx
2021-07-30 13:06:56 +00:00
pop cx
lahf
subw r_cx, r_di
2021-07-30 13:06:56 +00:00
sahf
pop di
2021-07-30 14:14:37 +00:00
.ret: ret
__036d:
jmp print_eof_str
__0370:
test byte [new_file_flag], 0xff
jnz __036d
mov dx, [__0a9a]
cmp word [__0a80], 0
jnz __0388
cmp dx, [__0a96]
jnc find_file_end_char.ret
__0388:
movw r_di, r_dx
mov ah, sys_set_dta
int 0x21
mov cx, [__0a98]
subw r_cx, r_dx
jz _trampoline_oom_1
mov dx, psp_fcb_1
mov ah, sys_random_block_read
int 0x21
mov [new_file_flag], al
push cx
call find_file_end_char
jne __03ab ; If the ^Z was not found
mov byte [new_file_flag], 1 ; magic
__03ab:
xorw r_dx, r_dx
mov bx, [__0a80]
orw r_bx, r_bx
jnz __03ca
movw r_ax, r_di
addw r_ax, r_cx
cmp ax, [__0a96]
jna __03ca ; disambiguate
mov di, [__0a96]
movw r_cx, r_ax
subw r_cx, r_di
mov bx, 1
__03ca:
call __04a4
cmp [di - 1], al
je __03de
std
dec di
mov cx, [__0a98]
repne scasb
inc di
inc di
dec dx
cld
__03de:
pop cx
mov word [di], 0x1a ; ^Z
subw r_cx, r_di
xchg di, [__0a9a]
addw r_di, r_cx
sub [psp_fcb_1 + fcb_record_low], di
sbb word [psp_fcb_1 + fcb_record_high], 0
cmpw r_bx, r_dx
jne __0406
mov byte [new_file_flag], 0 ; magic
2021-07-30 13:06:56 +00:00
ret
2021-07-30 14:14:37 +00:00
print_eof_str: ; 03fe
mov dx, eof_str
mov ah, sys_print_string
int 0x21
.ret: ret
__0406:
test byte [new_file_flag], 0xff
jnz print_eof_str
test byte [__0a7f], 0xff
jnz print_eof_str.ret
_trampoline_oom_1: ; 0414
jmp oom
2021-07-29 20:19:41 +00:00
db 0x8B, 0x1E, 0x80, 0x0A ; 0417 mov bx,[0xa80]
db 0x0B, 0xDB ; 041B or bx,bx
db 0x75, 0x1C ; 041D jnz 0x43b
db 0x8B, 0x0E, 0x94, 0x0A ; 041F mov cx,[0xa94]
db 0x8B, 0x3E, 0x9A, 0x0A ; 0423 mov di,[0xa9a]
db 0x2B, 0xF9 ; 0427 sub di,cx
db 0x76, 0xDA ; 0429 jna 0x405
db 0x81, 0xFF, 0x49, 0x0D ; 042B cmp di,0xd49
db 0x76, 0xD4 ; 042F jna 0x405
db 0x33, 0xD2 ; 0431 xor dx,dx
db 0xBB, 0x01, 0x00 ; 0433 mov bx,0x1
db 0xE8, 0x6B, 0x00 ; 0436 call 0x4a4
db 0xEB, 0x04 ; 0439 jmp short 0x43f
db 0x43 ; 043B inc bx
db 0xE8, 0x43, 0x00 ; 043C call 0x482
db 0x8B, 0xCF ; 043F mov cx,di
db 0xBA, 0x49, 0x0D ; 0441 mov dx,0xd49
db 0x2B, 0xCA ; 0444 sub cx,dx
db 0x74, 0xBD ; 0446 jz 0x405
db 0xB4, 0x1A ; 0448 mov ah,0x1a
db 0xCD, 0x21 ; 044A int 0x21
db 0xBA, 0x58, 0x0A ; 044C mov dx,0xa58
db 0xB4, 0x28 ; 044F mov ah,0x28
db 0xCD, 0x21 ; 0451 int 0x21
db 0x0A, 0xC0 ; 0453 or al,al
db 0x75, 0x1E ; 0455 jnz 0x475
db 0x8B, 0xF7 ; 0457 mov si,di
db 0xBF, 0x49, 0x0D ; 0459 mov di,0xd49
db 0x89, 0x3E, 0x92, 0x0A ; 045C mov [0xa92],di
db 0x8B, 0x0E, 0x9A, 0x0A ; 0460 mov cx,[0xa9a]
db 0x2B, 0xCE ; 0464 sub cx,si
db 0x41 ; 0466 inc cx
db 0xF3, 0xA4 ; 0467 rep movsb
db 0x4F ; 0469 dec di
db 0x89, 0x3E, 0x9A, 0x0A ; 046A mov [0xa9a],di
db 0xC7, 0x06, 0x90, 0x0A, 0x01, 0x00 ; 046E mov word [0xa90],0x1
db 0xC3 ; 0474 ret
db 0xB4, 0x10 ; 0475 mov ah,0x10
db 0xCD, 0x21 ; 0477 int 0x21
db 0xBA, 0xB9, 0x09 ; 0479 mov dx,0x9b9
2021-07-29 21:55:57 +00:00
error: ; 047c
2021-07-30 10:20:59 +00:00
mov ah, sys_print_string
2021-07-29 21:55:57 +00:00
int 0x21
int 0x20
2021-07-29 20:19:41 +00:00
db 0x8B, 0x16, 0x90, 0x0A ; 0482 mov dx,[0xa90]
db 0x8B, 0x3E, 0x92, 0x0A ; 0486 mov di,[0xa92]
db 0x3B, 0xDA ; 048A cmp bx,dx
db 0x74, 0xE6 ; 048C jz 0x474
db 0x77, 0x0E ; 048E ja 0x49e
db 0x0B, 0xDB ; 0490 or bx,bx
db 0x74, 0x0A ; 0492 jz 0x49e
db 0xBA, 0x01, 0x00 ; 0494 mov dx,0x1
db 0xBF, 0x49, 0x0D ; 0497 mov di,0xd49
db 0x3B, 0xDA ; 049A cmp bx,dx
db 0x74, 0xD6 ; 049C jz 0x474
db 0x8B, 0x0E, 0x9A, 0x0A ; 049E mov cx,[0xa9a]
db 0x2B, 0xCF ; 04A2 sub cx,di
2021-07-30 14:14:37 +00:00
__04a4:
2021-07-29 20:19:41 +00:00
db 0xB0, 0x0A ; 04A4 mov al,0xa
db 0x0A, 0xC0 ; 04A6 or al,al
db 0xE3, 0xCA ; 04A8 jcxz 0x474
db 0xF2, 0xAE ; 04AA repne scasb
db 0x42 ; 04AC inc dx
db 0x3B, 0xDA ; 04AD cmp bx,dx
db 0x75, 0xF7 ; 04AF jnz 0x4a8
db 0xC3 ; 04B1 ret
db 0x53 ; 04B2 push bx
db 0xB0, 0x20 ; 04B3 mov al,0x20
db 0xE8, 0x6C, 0x04 ; 04B5 call 0x924
db 0xE8, 0x13, 0x00 ; 04B8 call 0x4ce
db 0xB0, 0x3A ; 04BB mov al,0x3a
db 0xE8, 0x64, 0x04 ; 04BD call 0x924
db 0xB0, 0x2A ; 04C0 mov al,0x2a
db 0x5B ; 04C2 pop bx
db 0x3B, 0x1E, 0x90, 0x0A ; 04C3 cmp bx,[0xa90]
db 0x74, 0x02 ; 04C7 jz 0x4cb
db 0xB0, 0x20 ; 04C9 mov al,0x20
db 0xE9, 0x56, 0x04 ; 04CB jmp 0x924
db 0x33, 0xC0 ; 04CE xor ax,ax
db 0x8A, 0xD0 ; 04D0 mov dl,al
db 0xB9, 0x10, 0x00 ; 04D2 mov cx,0x10
db 0xD1, 0xE3 ; 04D5 shl bx,1
db 0x12, 0xC0 ; 04D7 adc al,al
db 0x27 ; 04D9 daa
db 0x86, 0xC4 ; 04DA xchg al,ah
db 0x12, 0xC0 ; 04DC adc al,al
db 0x27 ; 04DE daa
db 0x86, 0xC4 ; 04DF xchg al,ah
db 0x12, 0xD2 ; 04E1 adc dl,dl
db 0xE2, 0xF0 ; 04E3 loop 0x4d5
db 0xB3, 0x10 ; 04E5 mov bl,0x10
db 0x92 ; 04E7 xchg ax,dx
db 0xE8, 0x16, 0x00 ; 04E8 call 0x501
db 0x8A, 0xC6 ; 04EB mov al,dh
db 0xE8, 0x02, 0x00 ; 04ED call 0x4f2
db 0x8A, 0xC2 ; 04F0 mov al,dl
db 0x8A, 0xF0 ; 04F2 mov dh,al
db 0xD0, 0xE8 ; 04F4 shr al,1
db 0xD0, 0xE8 ; 04F6 shr al,1
db 0xD0, 0xE8 ; 04F8 shr al,1
db 0xD0, 0xE8 ; 04FA shr al,1
db 0xE8, 0x02, 0x00 ; 04FC call 0x501
db 0x8A, 0xC6 ; 04FF mov al,dh
db 0x24, 0x0F ; 0501 and al,0xf
db 0x74, 0x02 ; 0503 jz 0x507
db 0xB3, 0x00 ; 0505 mov bl,0x0
db 0x04, 0x30 ; 0507 add al,0x30
db 0x2A, 0xC3 ; 0509 sub al,bl
db 0xE9, 0x16, 0x04 ; 050B jmp 0x924
db 0x8B, 0x1E, 0x80, 0x0A ; 050E mov bx,[0xa80]
db 0x0B, 0xDB ; 0512 or bx,bx
db 0x75, 0x0C ; 0514 jnz 0x522
db 0x8B, 0x1E, 0x90, 0x0A ; 0516 mov bx,[0xa90]
db 0x83, 0xEB, 0x0B ; 051A sub bx,byte +0xb
db 0x77, 0x03 ; 051D ja 0x522
db 0xBB, 0x01, 0x00 ; 051F mov bx,0x1
db 0xE8, 0x5D, 0xFF ; 0522 call 0x482
db 0x75, 0x8A ; 0525 jnz 0x4b1
db 0x8B, 0xF7 ; 0527 mov si,di
db 0x8B, 0x3E, 0x82, 0x0A ; 0529 mov di,[0xa82]
db 0x47 ; 052D inc di
db 0x2B, 0xFB ; 052E sub di,bx
db 0x77, 0x08 ; 0530 ja 0x53a
db 0xBF, 0x17, 0x00 ; 0532 mov di,0x17
db 0xEB, 0x03 ; 0535 jmp short 0x53a
db 0xBF, 0x01, 0x00 ; 0537 mov di,0x1
db 0x8B, 0x0E, 0x9A, 0x0A ; 053A mov cx,[0xa9a]
db 0x2B, 0xCE ; 053E sub cx,si
db 0x74, 0x31 ; 0540 jz 0x573
db 0x8B, 0x2E, 0x90, 0x0A ; 0542 mov bp,[0xa90]
db 0x51 ; 0546 push cx
db 0xE8, 0x68, 0xFF ; 0547 call 0x4b2
db 0x59 ; 054A pop cx
db 0xAC ; 054B lodsb
db 0x3C, 0x20 ; 054C cmp al,0x20
db 0x73, 0x15 ; 054E jnc 0x565
db 0x3C, 0x0A ; 0550 cmp al,0xa
db 0x74, 0x11 ; 0552 jz 0x565
db 0x3C, 0x0D ; 0554 cmp al,0xd
db 0x74, 0x0D ; 0556 jz 0x565
db 0x3C, 0x09 ; 0558 cmp al,0x9
db 0x74, 0x09 ; 055A jz 0x565
db 0x50 ; 055C push ax
db 0xB0, 0x5E ; 055D mov al,0x5e
db 0xE8, 0xC2, 0x03 ; 055F call 0x924
db 0x58 ; 0562 pop ax
db 0x0C, 0x40 ; 0563 or al,0x40
db 0xE8, 0xBC, 0x03 ; 0565 call 0x924
db 0x3C, 0x0A ; 0568 cmp al,0xa
db 0xE0, 0xDF ; 056A loopne 0x54b
db 0xE3, 0x05 ; 056C jcxz 0x573
db 0x43 ; 056E inc bx
db 0x4F ; 056F dec di
db 0x75, 0xD4 ; 0570 jnz 0x546
db 0x4B ; 0572 dec bx
db 0xC3 ; 0573 ret
db 0xBF, 0x20, 0x0C ; 0574 mov di,0xc20
db 0xB9, 0xFF, 0x00 ; 0577 mov cx,0xff
db 0xBA, 0xFF, 0xFF ; 057A mov dx,0xffff
db 0xAC ; 057D lodsb
db 0xAA ; 057E stosb
db 0x42 ; 057F inc dx
db 0x3C, 0x0D ; 0580 cmp al,0xd
db 0xE0, 0xF9 ; 0582 loopne 0x57d
db 0x88, 0x16, 0x1F, 0x0C ; 0584 mov [0xc1f],dl
db 0x74, 0xE9 ; 0588 jz 0x573
db 0xAC ; 058A lodsb
db 0x42 ; 058B inc dx
db 0x3C, 0x0D ; 058C cmp al,0xd
db 0x75, 0xFA ; 058E jnz 0x58a
db 0x4F ; 0590 dec di
db 0xAA ; 0591 stosb
db 0xC3 ; 0592 ret
db 0xE9, 0xC9, 0x00 ; 0593 jmp 0x65f
db 0xE8, 0xFD, 0x00 ; 0596 call 0x696
db 0x75, 0xF8 ; 0599 jnz 0x593
db 0x8B, 0x36, 0x8C, 0x0A ; 059B mov si,[0xa8c]
db 0xE8, 0xD2, 0xFF ; 059F call 0x574
db 0x2B, 0x16, 0x84, 0x0A ; 05A2 sub dx,[0xa84]
db 0x8B, 0x0E, 0x86, 0x0A ; 05A6 mov cx,[0xa86]
db 0x03, 0xD1 ; 05AA add dx,cx
db 0x81, 0xFA, 0xFE, 0x00 ; 05AC cmp dx,0xfe
db 0x77, 0x70 ; 05B0 ja 0x622
db 0x8B, 0x1E, 0x8A, 0x0A ; 05B2 mov bx,[0xa8a]
db 0x52 ; 05B6 push dx
db 0xE8, 0xF8, 0xFE ; 05B7 call 0x4b2
db 0x5A ; 05BA pop dx
db 0x8B, 0x0E, 0x88, 0x0A ; 05BB mov cx,[0xa88]
db 0x8B, 0x36, 0x8C, 0x0A ; 05BF mov si,[0xa8c]
db 0x2B, 0xCE ; 05C3 sub cx,si
db 0x49 ; 05C5 dec cx
db 0xE8, 0x4F, 0x00 ; 05C6 call 0x618
db 0x56 ; 05C9 push si
db 0xBE, 0x9E, 0x0B ; 05CA mov si,0xb9e
db 0x8B, 0x0E, 0x86, 0x0A ; 05CD mov cx,[0xa86]
db 0xE8, 0x44, 0x00 ; 05D1 call 0x618
db 0x5E ; 05D4 pop si
db 0x03, 0x36, 0x84, 0x0A ; 05D5 add si,[0xa84]
db 0x8B, 0xCA ; 05D9 mov cx,dx
db 0x83, 0xC1, 0x02 ; 05DB add cx,byte +0x2
db 0xE8, 0x37, 0x00 ; 05DE call 0x618
db 0xE8, 0x90, 0x00 ; 05E1 call 0x674
db 0x75, 0x2A ; 05E4 jnz 0x610
db 0xE8, 0x7E, 0x00 ; 05E6 call 0x667
db 0x8B, 0x3E, 0x88, 0x0A ; 05E9 mov di,[0xa88]
db 0x4F ; 05ED dec di
db 0xBE, 0x9E, 0x0B ; 05EE mov si,0xb9e
db 0x8B, 0x16, 0x84, 0x0A ; 05F1 mov dx,[0xa84]
db 0x8B, 0x0E, 0x86, 0x0A ; 05F5 mov cx,[0xa86]
db 0x49 ; 05F9 dec cx
db 0x01, 0x0E, 0x88, 0x0A ; 05FA add [0xa88],cx
db 0x41 ; 05FE inc cx
db 0x4A ; 05FF dec dx
db 0x29, 0x16, 0x8E, 0x0A ; 0600 sub [0xa8e],dx
db 0x73, 0x06 ; 0604 jnc 0x60c
db 0xC7, 0x06, 0x8E, 0x0A, 0x00, 0x00 ; 0606 mov word [0xa8e],0x0
db 0x42 ; 060C inc dx
db 0xE8, 0xC7, 0x01 ; 060D call 0x7d7
db 0xE8, 0xDC, 0x00 ; 0610 call 0x6ef
db 0x75, 0x0C ; 0613 jnz 0x621
db 0xE9, 0x83, 0xFF ; 0615 jmp 0x59b
db 0xE3, 0x07 ; 0618 jcxz 0x621
db 0xAC ; 061A lodsb
db 0xE8, 0x06, 0x03 ; 061B call 0x924
db 0x4A ; 061E dec dx
db 0xE2, 0xF9 ; 061F loop 0x61a
db 0xC3 ; 0621 ret
db 0xBA, 0x21, 0x0A ; 0622 mov dx,0xa21
db 0xEB, 0x3B ; 0625 jmp short 0x662
db 0xE8, 0x6C, 0x00 ; 0627 call 0x696
db 0x75, 0x33 ; 062A jnz 0x65f
db 0x8B, 0x1E, 0x8A, 0x0A ; 062C mov bx,[0xa8a]
db 0x8B, 0x36, 0x8C, 0x0A ; 0630 mov si,[0xa8c]
db 0xE8, 0x00, 0xFF ; 0634 call 0x537
db 0xE8, 0x3A, 0x00 ; 0637 call 0x674
db 0x74, 0x2B ; 063A jz 0x667
db 0x8B, 0x3E, 0x88, 0x0A ; 063C mov di,[0xa88]
db 0x8B, 0x0E, 0x8E, 0x0A ; 0640 mov cx,[0xa8e]
db 0xB0, 0x0A ; 0644 mov al,0xa
db 0xF2, 0xAE ; 0646 repne scasb
db 0x75, 0x15 ; 0648 jnz 0x65f
db 0x89, 0x3E, 0x88, 0x0A ; 064A mov [0xa88],di
db 0x89, 0x3E, 0x8C, 0x0A ; 064E mov [0xa8c],di
db 0x89, 0x0E, 0x8E, 0x0A ; 0652 mov [0xa8e],cx
db 0xFF, 0x06, 0x8A, 0x0A ; 0656 inc word [0xa8a]
db 0xE8, 0x92, 0x00 ; 065A call 0x6ef
db 0x74, 0xCD ; 065D jz 0x62c
db 0xBA, 0x0E, 0x0A ; 065F mov dx,0xa0e
db 0xB4, 0x09 ; 0662 mov ah,0x9
db 0xCD, 0x21 ; 0664 int 0x21
db 0xC3 ; 0666 ret
db 0xA1, 0x8C, 0x0A ; 0667 mov ax,[0xa8c]
db 0xA3, 0x92, 0x0A ; 066A mov [0xa92],ax
db 0xA1, 0x8A, 0x0A ; 066D mov ax,[0xa8a]
db 0xA3, 0x90, 0x0A ; 0670 mov [0xa90],ax
db 0xC3 ; 0673 ret
db 0xF6, 0x06, 0x7D, 0x0A, 0xFF ; 0674 test byte [0xa7d],0xff
db 0x74, 0xF8 ; 0679 jz 0x673
db 0xBA, 0x1A, 0x0A ; 067B mov dx,0xa1a
db 0xB4, 0x09 ; 067E mov ah,0x9
db 0xCD, 0x21 ; 0680 int 0x21
db 0xB4, 0x01 ; 0682 mov ah,0x1
db 0xCD, 0x21 ; 0684 int 0x21
db 0x50 ; 0686 push ax
db 0xE8, 0x93, 0x02 ; 0687 call 0x91d
db 0x58 ; 068A pop ax
db 0x3C, 0x0D ; 068B cmp al,0xd
db 0x74, 0xE4 ; 068D jz 0x673
db 0x3C, 0x59 ; 068F cmp al,0x59
db 0x74, 0xE0 ; 0691 jz 0x673
db 0x3C, 0x79 ; 0693 cmp al,0x79
db 0xC3 ; 0695 ret
db 0xBF, 0x1E, 0x0B ; 0696 mov di,0xb1e
db 0xE8, 0xA3, 0x00 ; 0699 call 0x73f
db 0x0A, 0xC0 ; 069C or al,al
db 0xE3, 0xF5 ; 069E jcxz 0x695
db 0x89, 0x0E, 0x84, 0x0A ; 06A0 mov [0xa84],cx
db 0x33, 0xC9 ; 06A4 xor cx,cx
db 0x3C, 0x0D ; 06A6 cmp al,0xd
db 0x74, 0x06 ; 06A8 jz 0x6b0
db 0xBF, 0x9E, 0x0B ; 06AA mov di,0xb9e
db 0xE8, 0x8F, 0x00 ; 06AD call 0x73f
db 0x89, 0x0E, 0x86, 0x0A ; 06B0 mov [0xa86],cx
db 0x8B, 0x1E, 0x80, 0x0A ; 06B4 mov bx,[0xa80]
db 0x83, 0xFB, 0x01 ; 06B8 cmp bx,byte +0x1
db 0x83, 0xD3, 0x00 ; 06BB adc bx,byte +0x0
db 0xE8, 0xC1, 0xFD ; 06BE call 0x482
db 0x89, 0x3E, 0x88, 0x0A ; 06C1 mov [0xa88],di
db 0x89, 0x3E, 0x8C, 0x0A ; 06C5 mov [0xa8c],di
db 0x89, 0x16, 0x8A, 0x0A ; 06C9 mov [0xa8a],dx
db 0x8B, 0x1E, 0x82, 0x0A ; 06CD mov bx,[0xa82]
db 0x83, 0xFB, 0x01 ; 06D1 cmp bx,byte +0x1
db 0x83, 0xDB, 0xFF ; 06D4 sbb bx,byte -0x1
db 0xE8, 0xA8, 0xFD ; 06D7 call 0x482
db 0x8B, 0xCF ; 06DA mov cx,di
db 0x2B, 0x0E, 0x88, 0x0A ; 06DC sub cx,[0xa88]
db 0x0C, 0xFF ; 06E0 or al,0xff
db 0xE3, 0xB1 ; 06E2 jcxz 0x695
db 0x2B, 0x0E, 0x84, 0x0A ; 06E4 sub cx,[0xa84]
db 0x72, 0xAB ; 06E8 jc 0x695
db 0x41 ; 06EA inc cx
db 0x89, 0x0E, 0x8E, 0x0A ; 06EB mov [0xa8e],cx
db 0xA0, 0x1E, 0x0B ; 06EF mov al,[0xb1e]
db 0x8B, 0x0E, 0x8E, 0x0A ; 06F2 mov cx,[0xa8e]
db 0x8B, 0x3E, 0x88, 0x0A ; 06F6 mov di,[0xa88]
db 0x0B, 0xFF ; 06FA or di,di
db 0xF2, 0xAE ; 06FC repne scasb
db 0x75, 0x95 ; 06FE jnz 0x695
db 0x8B, 0xD1 ; 0700 mov dx,cx
db 0x8B, 0xDF ; 0702 mov bx,di
db 0x8B, 0x0E, 0x84, 0x0A ; 0704 mov cx,[0xa84]
db 0x49 ; 0708 dec cx
db 0xBE, 0x1F, 0x0B ; 0709 mov si,0xb1f
db 0x3A, 0xC0 ; 070C cmp al,al
db 0xF3, 0xA6 ; 070E repe cmpsb
db 0x8B, 0xCA ; 0710 mov cx,dx
db 0x8B, 0xFB ; 0712 mov di,bx
db 0x75, 0xE4 ; 0714 jnz 0x6fa
db 0x89, 0x0E, 0x8E, 0x0A ; 0716 mov [0xa8e],cx
db 0x8B, 0xCF ; 071A mov cx,di
db 0x89, 0x3E, 0x88, 0x0A ; 071C mov [0xa88],di
db 0x8B, 0x3E, 0x8C, 0x0A ; 0720 mov di,[0xa8c]
db 0x2B, 0xCF ; 0724 sub cx,di
db 0xB0, 0x0A ; 0726 mov al,0xa
db 0x8B, 0x16, 0x8A, 0x0A ; 0728 mov dx,[0xa8a]
db 0x42 ; 072C inc dx
db 0x8B, 0xDF ; 072D mov bx,di
db 0xF2, 0xAE ; 072F repne scasb
db 0x74, 0xF9 ; 0731 jz 0x72c
db 0x4A ; 0733 dec dx
db 0x89, 0x16, 0x8A, 0x0A ; 0734 mov [0xa8a],dx
db 0x89, 0x1E, 0x8C, 0x0A ; 0738 mov [0xa8c],bx
db 0x32, 0xC0 ; 073C xor al,al
db 0xC3 ; 073E ret
db 0x33, 0xC9 ; 073F xor cx,cx
db 0xAC ; 0741 lodsb
db 0x3C, 0x1A ; 0742 cmp al,0x1a
db 0x74, 0xF8 ; 0744 jz 0x73e
db 0x3C, 0x0D ; 0746 cmp al,0xd
db 0x74, 0xF4 ; 0748 jz 0x73e
db 0xAA ; 074A stosb
db 0x41 ; 074B inc cx
db 0xEB, 0xF3 ; 074C jmp short 0x741
db 0x8B, 0x1E, 0x80, 0x0A ; 074E mov bx,[0xa80]
db 0x0B, 0xDB ; 0752 or bx,bx
db 0x75, 0x04 ; 0754 jnz 0x75a
db 0x8B, 0x1E, 0x90, 0x0A ; 0756 mov bx,[0xa90]
db 0xE8, 0x25, 0xFD ; 075A call 0x482
db 0x75, 0xDF ; 075D jnz 0x73e
db 0x53 ; 075F push bx
db 0x57 ; 0760 push di
db 0x8B, 0x1E, 0x82, 0x0A ; 0761 mov bx,[0xa82]
db 0x0B, 0xDB ; 0765 or bx,bx
db 0x75, 0x02 ; 0767 jnz 0x76b
db 0x8B, 0xDA ; 0769 mov bx,dx
db 0x43 ; 076B inc bx
db 0xE8, 0x13, 0xFD ; 076C call 0x482
db 0x8B, 0xD7 ; 076F mov dx,di
db 0x5F ; 0771 pop di
db 0x2B, 0xD7 ; 0772 sub dx,di
db 0x76, 0x0C ; 0774 jna 0x782
db 0x8F, 0x06, 0x90, 0x0A ; 0776 pop word [0xa90]
db 0x89, 0x3E, 0x92, 0x0A ; 077A mov [0xa92],di
db 0x33, 0xC9 ; 077E xor cx,cx
db 0xEB, 0x55 ; 0780 jmp short 0x7d7
db 0xE9, 0x6A, 0xFB ; 0782 jmp 0x2ef
db 0x8B, 0x1E, 0x80, 0x0A ; 0785 mov bx,[0xa80]
db 0x0B, 0xDB ; 0789 or bx,bx
db 0x75, 0x05 ; 078B jnz 0x792
db 0x8B, 0x1E, 0x90, 0x0A ; 078D mov bx,[0xa90]
db 0x43 ; 0791 inc bx
db 0xE8, 0xED, 0xFC ; 0792 call 0x482
db 0x8B, 0xF7 ; 0795 mov si,di
db 0x89, 0x16, 0x90, 0x0A ; 0797 mov [0xa90],dx
db 0x89, 0x36, 0x92, 0x0A ; 079B mov [0xa92],si
db 0x75, 0x9D ; 079F jnz 0x73e
db 0x3B, 0x36, 0x9A, 0x0A ; 07A1 cmp si,[0xa9a]
db 0x74, 0x97 ; 07A5 jz 0x73e
db 0xE8, 0xCA, 0xFD ; 07A7 call 0x574
db 0x89, 0x16, 0x84, 0x0A ; 07AA mov [0xa84],dx
db 0x8B, 0x36, 0x92, 0x0A ; 07AE mov si,[0xa92]
db 0xE8, 0x82, 0xFD ; 07B2 call 0x537
db 0xE8, 0xFA, 0xFC ; 07B5 call 0x4b2
db 0xB4, 0x0A ; 07B8 mov ah,0xa
db 0xBA, 0x1E, 0x0C ; 07BA mov dx,0xc1e
db 0xCD, 0x21 ; 07BD int 0x21
db 0xB0, 0x0A ; 07BF mov al,0xa
db 0xE8, 0x60, 0x01 ; 07C1 call 0x924
db 0x8A, 0x0E, 0x1F, 0x0C ; 07C4 mov cl,[0xc1f]
db 0xB5, 0x00 ; 07C8 mov ch,0x0
db 0xE3, 0x3F ; 07CA jcxz 0x80b
db 0x8B, 0x16, 0x84, 0x0A ; 07CC mov dx,[0xa84]
db 0xBE, 0x20, 0x0C ; 07D0 mov si,0xc20
db 0x8B, 0x3E, 0x92, 0x0A ; 07D3 mov di,[0xa92]
db 0x3B, 0xCA ; 07D7 cmp cx,dx
db 0x74, 0x2E ; 07D9 jz 0x809
db 0x56 ; 07DB push si
db 0x57 ; 07DC push di
db 0x51 ; 07DD push cx
db 0x8B, 0xF7 ; 07DE mov si,di
db 0x03, 0xF2 ; 07E0 add si,dx
db 0x03, 0xF9 ; 07E2 add di,cx
db 0xA1, 0x9A, 0x0A ; 07E4 mov ax,[0xa9a]
db 0x2B, 0xC2 ; 07E7 sub ax,dx
db 0x03, 0xC1 ; 07E9 add ax,cx
db 0x3B, 0x06, 0x98, 0x0A ; 07EB cmp ax,[0xa98]
db 0x73, 0x1B ; 07EF jnc 0x80c
db 0x87, 0x06, 0x9A, 0x0A ; 07F1 xchg ax,[0xa9a]
db 0x8B, 0xC8 ; 07F5 mov cx,ax
db 0x2B, 0xCE ; 07F7 sub cx,si
db 0x3B, 0xF7 ; 07F9 cmp si,di
db 0x77, 0x05 ; 07FB ja 0x802
db 0x03, 0xF1 ; 07FD add si,cx
db 0x03, 0xF9 ; 07FF add di,cx
db 0xFD ; 0801 std
db 0x41 ; 0802 inc cx
db 0xF3, 0xA4 ; 0803 rep movsb
db 0xFC ; 0805 cld
db 0x59 ; 0806 pop cx
db 0x5F ; 0807 pop di
db 0x5E ; 0808 pop si
db 0xF3, 0xA4 ; 0809 rep movsb
db 0xC3 ; 080B ret
2021-07-30 14:14:37 +00:00
oom: ; 080c
mov dx, oom_str
mov ah, sys_print_string
int 0x21
jmp __0273
2021-07-29 20:19:41 +00:00
db 0xB8, 0x23, 0x25 ; 0816 mov ax,0x2523
db 0xBA, 0x7D, 0x08 ; 0819 mov dx,0x87d
db 0xCD, 0x21 ; 081C int 0x21
db 0x8B, 0x1E, 0x80, 0x0A ; 081E mov bx,[0xa80]
db 0x0B, 0xDB ; 0822 or bx,bx
db 0x75, 0x04 ; 0824 jnz 0x82a
db 0x8B, 0x1E, 0x90, 0x0A ; 0826 mov bx,[0xa90]
db 0xE8, 0x55, 0xFC ; 082A call 0x482
db 0x8B, 0x0E, 0x9A, 0x0A ; 082D mov cx,[0xa9a]
db 0x8B, 0xF1 ; 0831 mov si,cx
db 0x2B, 0xCF ; 0833 sub cx,di
db 0x41 ; 0835 inc cx
db 0x8B, 0x3E, 0x98, 0x0A ; 0836 mov di,[0xa98]
db 0xFD ; 083A std
db 0xF3, 0xA4 ; 083B rep movsb
db 0x87, 0xFE ; 083D xchg di,si
db 0xFC ; 083F cld
db 0x47 ; 0840 inc di
db 0x8B, 0xEE ; 0841 mov bp,si
db 0x8B, 0xDA ; 0843 mov bx,dx
db 0x89, 0x3E, 0x92, 0x0A ; 0845 mov [0xa92],di
db 0x89, 0x1E, 0x90, 0x0A ; 0849 mov [0xa90],bx
db 0x89, 0x2E, 0x9A, 0x0A ; 084D mov [0xa9a],bp
db 0xE8, 0x5E, 0xFC ; 0851 call 0x4b2
db 0xBA, 0x1E, 0x0C ; 0854 mov dx,0xc1e
db 0xB4, 0x0A ; 0857 mov ah,0xa
db 0xCD, 0x21 ; 0859 int 0x21
db 0xE8, 0xC4, 0x00 ; 085B call 0x922
db 0xBE, 0x20, 0x0C ; 085E mov si,0xc20
db 0x82 ; 0861 db 0x82
db 0x3C, 0x1A ; 0862 cmp al,0x1a
db 0x74, 0x25 ; 0864 jz 0x88b
db 0x8A, 0x4C, 0xFF ; 0866 mov cl,[si-0x1]
db 0xB5, 0x00 ; 0869 mov ch,0x0
db 0x8B, 0xD6 ; 086B mov dx,si
db 0x03, 0xD1 ; 086D add dx,cx
db 0x42 ; 086F inc dx
db 0x3B, 0xD5 ; 0870 cmp dx,bp
db 0x73, 0x98 ; 0872 jnc 0x80c
db 0xF3, 0xA4 ; 0874 rep movsb
db 0xA4 ; 0876 movsb
db 0xB0, 0x0A ; 0877 mov al,0xa
db 0xAA ; 0879 stosb
db 0x43 ; 087A inc bx
db 0xEB, 0xC8 ; 087B jmp short 0x845
db 0x8C, 0xC8 ; 087D mov ax,cs
db 0x8E, 0xD8 ; 087F mov ds,ax
db 0x8E, 0xC0 ; 0881 mov es,ax
db 0x8E, 0xD0 ; 0883 mov ss,ax
db 0xBC, 0x48, 0x0D ; 0885 mov sp,0xd48
db 0xE8, 0x92, 0x00 ; 0888 call 0x91d
db 0x8B, 0x2E, 0x9A, 0x0A ; 088B mov bp,[0xa9a]
db 0x8B, 0x3E, 0x92, 0x0A ; 088F mov di,[0xa92]
db 0x8B, 0xF5 ; 0893 mov si,bp
db 0x46 ; 0895 inc si
db 0x8B, 0x0E, 0x98, 0x0A ; 0896 mov cx,[0xa98]
db 0x2B, 0xCD ; 089A sub cx,bp
db 0xF3, 0xA4 ; 089C rep movsb
db 0x4F ; 089E dec di
db 0x89, 0x3E, 0x9A, 0x0A ; 089F mov [0xa9a],di
db 0xE9, 0xCD, 0xF9 ; 08A3 jmp 0x273
db 0xBA, 0x45, 0x0A ; 08A6 mov dx,0xa45
db 0xB4, 0x09 ; 08A9 mov ah,0x9
db 0xCD, 0x21 ; 08AB int 0x21
db 0xB4, 0x01 ; 08AD mov ah,0x1
db 0xCD, 0x21 ; 08AF int 0x21
db 0x24, 0x5F ; 08B1 and al,0x5f
db 0x3C, 0x59 ; 08B3 cmp al,0x59
db 0x75, 0x66 ; 08B5 jnz 0x91d
db 0xBA, 0x58, 0x0A ; 08B7 mov dx,0xa58
db 0xB4, 0x10 ; 08BA mov ah,0x10
db 0xCD, 0x21 ; 08BC int 0x21
db 0xB4, 0x13 ; 08BE mov ah,0x13
db 0xCD, 0x21 ; 08C0 int 0x21
db 0xCD, 0x20 ; 08C2 int 0x20
db 0xC7, 0x06, 0x80, 0x0A, 0xFF, 0xFF ; 08C4 mov word [0xa80],0xffff
db 0xE8, 0xA3, 0xFA ; 08CA call 0x370
db 0xC6, 0x06, 0x7F, 0x0A, 0x01 ; 08CD mov byte [0xa7f],0x1
db 0xBB, 0xFF, 0xFF ; 08D2 mov bx,0xffff
db 0xE8, 0x63, 0xFB ; 08D5 call 0x43b
db 0xF6, 0x06, 0x7E, 0x0A, 0xFF ; 08D8 test byte [0xa7e],0xff
db 0x74, 0xE5 ; 08DD jz 0x8c4
db 0x8B, 0x16, 0x9A, 0x0A ; 08DF mov dx,[0xa9a]
db 0xB4, 0x1A ; 08E3 mov ah,0x1a
db 0xCD, 0x21 ; 08E5 int 0x21
db 0xB9, 0x01, 0x00 ; 08E7 mov cx,0x1
db 0xBA, 0x58, 0x0A ; 08EA mov dx,0xa58
db 0xB4, 0x28 ; 08ED mov ah,0x28
db 0xCD, 0x21 ; 08EF int 0x21
db 0xB4, 0x10 ; 08F1 mov ah,0x10
db 0xCD, 0x21 ; 08F3 int 0x21
db 0xBE, 0x5C, 0x00 ; 08F5 mov si,0x5c
db 0x8D, 0x7C, 0x10 ; 08F8 lea di,[si+0x10]
db 0x8B, 0xD6 ; 08FB mov dx,si
db 0xB9, 0x09, 0x00 ; 08FD mov cx,0x9
db 0xF3, 0xA4 ; 0900 rep movsb
db 0xBE, 0x3E, 0x09 ; 0902 mov si,0x93e
db 0xA5 ; 0905 movsw
db 0xA4 ; 0906 movsb
db 0xB4, 0x17 ; 0907 mov ah,0x17
db 0xCD, 0x21 ; 0909 int 0x21
db 0xBE, 0x5C, 0x00 ; 090B mov si,0x5c
db 0xBF, 0x68, 0x0A ; 090E mov di,0xa68
db 0xB9, 0x06, 0x00 ; 0911 mov cx,0x6
db 0xF3, 0xA5 ; 0914 rep movsw
db 0xBA, 0x58, 0x0A ; 0916 mov dx,0xa58
db 0xCD, 0x21 ; 0919 int 0x21
db 0xCD, 0x20 ; 091B int 0x20
2021-07-30 14:14:37 +00:00
newline: ; 091d
mov al, 13 ; CR
call print_char
mov al, 10 ; LF
print_char: ; 0924
push dx
xchg ax, dx
mov ah, sys_print_char
int 0x21
xchg ax, dx
pop dx
ret
ctrl_break_handler: ; 092d
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, stack.end
call newline
jmp __0273
2021-07-29 21:40:42 +00:00
2021-07-30 10:20:59 +00:00
bak_extension db "BAK" ; 093e
2021-07-29 21:40:42 +00:00
invalid_name_error db "Invalid drive or file name$" ; 0941
filename_missing_error db "File name must be specified$" ; 095c
2021-07-30 10:20:59 +00:00
bak_error db "Cannot edit .BAK file--rename file$" ; 0978
directory_full_error db "No room in directory for file$" ; 099b
2021-07-29 21:40:42 +00:00
__09b9 db "Disk full--file write not completed$"
2021-07-30 14:14:37 +00:00
oom_str db 13, 10, "Insufficient memory", 13, 10, '$' ; 09dd
2021-07-29 21:40:42 +00:00
__09f5 db "Entry error", 13, 10, '$'
2021-07-30 10:20:59 +00:00
new_file_str db "New file", 13, 10, '$' ; 0a03
2021-07-29 21:40:42 +00:00
__0a0e db "Not found", 13, 10, '$'
__0a1a db "O.K.? $"
__0a21 db "Line too long", 13, 10, '$'
2021-07-30 14:14:37 +00:00
eof_str db "End of input file", 13, 10, '$' ; 0a31
2021-07-29 21:40:42 +00:00
__0a45 db "Abort edit (Y/N)? $"
; 0a58
2021-07-30 10:20:59 +00:00
section .bss
2021-07-30 11:16:19 +00:00
__0a58_fcb: resb 37 ; 0a58 … 0a7c
2021-07-30 10:20:59 +00:00
2021-07-30 11:16:19 +00:00
; 0a7d
resb 1
2021-07-30 10:20:59 +00:00
2021-07-30 11:16:19 +00:00
new_file_flag: resb 1 ; 0a7e
2021-07-30 10:20:59 +00:00
__0a7f: resb 1
2021-07-30 14:14:37 +00:00
__0a80: resw 1
resb 14
__0a90: resw 1
__0a92: resw 1
2021-07-30 11:16:19 +00:00
__0a94: resw 1
__0a96: resw 1
__0a98: resw 1
2021-07-30 14:14:37 +00:00
__0a9a: resw 1
__0a9c: resb 1
resb 385
__0c1e: resb 1
resb 41
2021-07-30 11:16:19 +00:00
stack: resb 256 ; 0c48
.end: ; 0d48
2021-07-30 14:14:37 +00:00
__0d48: resb 1
2021-07-30 11:16:19 +00:00
disk_transfer_area: ; 0d49