diff --git a/io.asm b/io.asm index f4dec7e..11dc5ed 100644 --- a/io.asm +++ b/io.asm @@ -27,19 +27,19 @@ org 0 ; Jump table jmp init ; 0000 -jmp status ; 0003 -jmp getch ; 0006 -jmp putch ; 0009 +jmp near ptr status ; 0003 +jmp near ptr getch ; 0006 +jmp near ptr putch ; 0009 jmp unimplemented ; 000c Output to printer jmp unimplemented ; 000f Serial read jmp unimplemented ; 0012 Serial write -jmp diskread ; 0015 +jmp near ptr diskread ; 0015 jmp diskwrite ; 0018 jmp near ptr diskchange ; 001b jmp setdate ; 001e jmp settime ; 0021 jmp gettime ; 0024 -jmp flush ; 0027 +jmp near ptr flush ; 0027 jmp near ptr mapdev ; 002a init: @@ -98,23 +98,33 @@ init: ; al = character if any ; zf = there were no characters status proc far + push bx push ax - mov ax, 0e00h + 's' - int 10h + mov ah, 1 + int 16h + mov bl, al pop ax - call far_caller - ; TODO: Implement - xor ax, ax - test ax, ax + mov al, bl + pop bx ret status endp -getch: - mov al, 'g' - jmp error +; OUT: +; al = character +getch proc far + push bx + push ax + xor ah, ah + int 16h + mov bl, al + pop ax + mov al, bl + pop bx + ret +getch endp ; IN: -; ax = character +; al = character putch proc far push ax mov ah, 0eh @@ -290,17 +300,27 @@ settime: gettime: mov al, 'T' jmp error -flush: - mov al, 'f' - jmp error + +flush proc far + push ax + + flush_loop: + mov ah, 1 + int 16h + jz flush_ret + + xor ah, ah + int 16h + jmp flush_loop + + flush_ret: + pop ax + ret +flush endp mapdev proc far - push ax - mov ax, 0e00h + 'm' - int 10h - pop ax - call far_caller - ; TODO: Figure out if this does anything? + ; TODO: Implement + xor al, al ret mapdev endp