; AX = key pressed os_read_input: mov ah, 11h ; BIOS call to check for key int 16h ; Interrupt jnz .key_pressed ; Jump if input isn't 0 hlt jmp os_read_input .key_pressed: mov ah, 10h int 16h ret ; ------------------------------------------- os_display_input: pusha mov cx, [prompt_length] .loop: call .check_key_pressed jmp .loop .check_key_pressed: call os_read_input cmp al, 08h je .backspace cmp al, 0Dh je .enter_key cmp al, 1Bh je .esc_key cmp cx, 0 jb .check_key_pressed call .print_current_input dec cx jmp .check_key_pressed .esc_key: call power_reboot .enter_key: mov al, 0 stosb popa call os_read_cli .backspace: call .move_cursor_back ; then .move_cursor_back call .loop ; Else .loop .move_cursor_back: mov ah, 0Eh mov al, 08h int 10h mov al, 20h int 10h mov al, 08h int 10h dec di jmp os_display_input .print_current_input: stosb mov ah, 0Eh int 10h ret