diff --git a/edlin.asm b/edlin.asm index 11454aa..8a3626c 100644 --- a/edlin.asm +++ b/edlin.asm @@ -15,6 +15,7 @@ psp_fcb_1 equ 0x005c ; Syscall defines sys_print_char equ 2 sys_print_string equ 9 +sys_read_line equ 0xa sys_open_file equ 0xf sys_delete_file equ 0x13 sys_create_file equ 0x16 @@ -204,7 +205,7 @@ __0240: mov byte [di], 0x1a ; ^Z mov [__0a9a], di - mov byte [__0a9c], 0x80 ; magic + mov byte [input_buffer.size], input_buffer.bufend - input_buffer.bufstart mov byte [__0c1e], 0xff ; magic mov byte [__0d48], 0x0a ; magic mov word [__0a92], disk_transfer_area @@ -216,15 +217,19 @@ __0240: call __0370 __0273: -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 + mov sp, stack.end + mov ax, sys_set_interrupt * 0x100 + int_ctrl_break + mov dx, ctrl_break_handler + int 0x21 + + print_prompt: + mov al, '*' + call print_char + + mov dx, input_buffer + mov ah, sys_read_line + 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 @@ -1038,9 +1043,13 @@ __0a98: resw 1 __0a9a: resw 1 -__0a9c: resb 1 +input_buffer: + .size: resb 1 ; 0a9c + .fill: resb 1; 0a9d + .bufstart: resb 128 ; 0a9e + .bufend: ; 0b1e -resb 385 +resb 256 __0c1e: resb 1