From 6fa68e1fc11ee72d858f9a79e6178d82a13d3460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Fri, 30 Jul 2021 13:20:59 +0300 Subject: [PATCH] More symbolicity --- edlin.asm | 48 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/edlin.asm b/edlin.asm index 1d764b8..5fad037 100644 --- a/edlin.asm +++ b/edlin.asm @@ -3,10 +3,28 @@ org 0x100 ; FCB defines fcb_filename equ 1 +fcb_extension equ fcb_filename + 8 ; PSP defines psp_fcb_1 equ 0x005c +; Syscall defined +sys_print_string equ 9 +sys_open_file equ 0xf +sys_delete_file equ 0x13 +sys_create_file equ 0x16 + +; Special instruction encodings +%macro or_al_al 0 + db 0x0a, 0xc0 ; or al, al (longer encoding) +%endmacro + +%macro cmp_byteaddr_bytext 2 + db 0x82, 0x3e ; cmp byte […], byte +… (extended) + dw %1 + db %2 +%endmacro + jmp entrypoint __0102: @@ -28,16 +46,15 @@ entrypoint: ; 0181 mov sp, stack_end ensure_file_argument: - db 0x82, 0x3e ; cmp byte […], byte +… (extended) - dw psp_fcb_1 + fcb_filename - db ' ' + cmp_byteaddr_bytext psp_fcb_1 + fcb_filename, ' ' je print_filename_missing_error - db 0x0a, 0xc0 ; or al, al (longer encoding) + ; AL at program start a flag of whether drive specifier in first parameter valid + or_al_al mov dx, invalid_name_error jnz _trampoline_error_1 - mov si, __093e + mov si, bak_extension mov di, psp_fcb_1 + fcb_filename + 8 mov cx, 3 repe cmpsb @@ -343,7 +360,7 @@ db 0xCD, 0x21 ; 0477 int 0x21 db 0xBA, 0xB9, 0x09 ; 0479 mov dx,0x9b9 error: ; 047c - mov ah, 9 + mov ah, sys_print_string int 0x21 int 0x20 @@ -855,16 +872,16 @@ db 0xBC, 0x48, 0x0D ; 0935 mov sp,0xd48 db 0xE8, 0xE2, 0xFF ; 0938 call 0x91d db 0xE9, 0x35, 0xF9 ; 093B jmp 0x273 -__093e db "BAK" +bak_extension db "BAK" ; 093e invalid_name_error db "Invalid drive or file name$" ; 0941 filename_missing_error db "File name must be specified$" ; 095c -__0978 db "Cannot edit .BAK file--rename file$" -__099b db "No room in directory for file$" +bak_error db "Cannot edit .BAK file--rename file$" ; 0978 +directory_full_error db "No room in directory for file$" ; 099b __09b9 db "Disk full--file write not completed$" __09dd db 13, 10, "Insufficient memory", 13, 10, '$' __09f5 db "Entry error", 13, 10, '$' -__0a03 db "New file", 13, 10, '$' +new_file_str db "New file", 13, 10, '$' ; 0a03 __0a0e db "Not found", 13, 10, '$' __0a1a db "O.K.? $" __0a21 db "Line too long", 13, 10, '$' @@ -872,7 +889,14 @@ __0a31 db "End of input file", 13, 10, '$' __0a45 db "Abort edit (Y/N)? $" ; 0a58 +section .bss +__0a58: -__0a7f equ 0x0a7f +resb 38 -stack_end equ 0x0d48 +__0a7e: resb 1 +__0a7f: resb 1 + +resb 712 + +stack_end: ; 0d48