From b802689b66fa018b5766095b6e41d4ec18514bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Fri, 30 Jul 2021 00:55:57 +0300 Subject: [PATCH] Ensure first argument is filename --- edlin.asm | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/edlin.asm b/edlin.asm index 711d98e..f4029b7 100644 --- a/edlin.asm +++ b/edlin.asm @@ -1,7 +1,13 @@ cpu 8086 org 0x100 -db 0xEB, 0x7F ; 0100 jmp short 0x181 +; FCB defines +fcb_filename equ 1 + +; PSP defines +psp_fcb_1 equ 0x005c + +jmp entrypoint __0102: db 13, 10, "The IBM Personal Computer EDITOR", 13, 10 @@ -11,17 +17,26 @@ __0102: __0150 db "Licensed Material - Program Property of IBM" -db 0xBA, 0x5C, 0x09 ; 017B mov dx,0x95c -db 0xE9, 0xFB, 0x02 ; 017E jmp 0x47c -db 0xC6, 0x06, 0x7F, 0x0A, 0x00 ; 0181 mov byte [0xa7f],0x0 -db 0xBC, 0x48, 0x0D ; 0186 mov sp,0xd48 -db 0x82 ; 0189 db 0x82 -db 0x3E, 0x5D ; 018A ds pop bp -db 0x00, 0x20 ; 018C add [bx+si],ah -db 0x74, 0xEB ; 018E jz 0x17b -db 0x0A, 0xC0 ; 0190 or al,al -db 0xBA, 0x41, 0x09 ; 0192 mov dx,0x941 -db 0x75, 0xE7 ; 0195 jnz 0x17e +print_filename_missing_error: ; 017b + mov dx, filename_missing_error + +_trampoline_error_1: + jmp error + +entrypoint: ; 0181 + mov byte [0x0a7f], 0 + mov sp, 0x0d48 + +ensure_file_argument: + db 0x82, 0x3e ; cmp byte […], byte +… (extended) + dw psp_fcb_1 + fcb_filename + db ' ' + je print_filename_missing_error + + db 0x0a, 0xc0 ; or al, al (longer encoding) + mov dx, invalid_name_error + jnz _trampoline_error_1 + db 0xBE, 0x3E, 0x09 ; 0197 mov si,0x93e db 0xBF, 0x65, 0x00 ; 019A mov di,0x65 db 0xB9, 0x03, 0x00 ; 019D mov cx,0x3 @@ -324,9 +339,12 @@ 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 -db 0xB4, 0x09 ; 047C mov ah,0x9 -db 0xCD, 0x21 ; 047E int 0x21 -db 0xCD, 0x20 ; 0480 int 0x20 + +error: ; 047c + mov ah, 9 + int 0x21 + int 0x20 + 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