rdos/kernel/con86.asm

57 lines
776 B
NASM

console_hide_cursor:
push ax
push cx
mov ah, 1
mov cx, 0x1F1F
int 0x10
pop cx
pop ax
ret
console_show_cursor:
push ax
push cx
mov ah, 1
mov cx, 0x001F
int 0x10
pop cx
pop ax
ret
; Raw console i/o without echo
; IN DL character to output or FF
; OUT ZF if DL=FF: zero if character input
; AL if not ZF: ascii char, otherwise corrupt
console_io:
cmp dl, 0xFF
je .read
push ax
push bx
mov al, dl
mov ah, 0x0e
xor bx, bx
int 0x10
pop bx
pop ax
ret
.read:
call console_show_cursor
; if no character avail, exit with leaving
; cursor displayed
mov ah, 1
int 0x16
jz .end
pushf
; actually read character
xor ax, ax
int 0x16
call console_hide_cursor
; restore zero flag
popf
.end:
ret