This repository has been archived on 2024-10-03. You can view files and clone it, but cannot push or open issues or pull requests.
PlutOS-Archive/terminal.asm
2024-09-28 22:11:50 +02:00

106 lines
No EOL
2.8 KiB
NASM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PlutOS ;
; Copyright (C) 2024 Patrick_Pluto ;
; ;
; This program is free software: you can redistribute it and/or modify ;
; it under the terms of the GNU General Public License as published by ;
; the Free Software Foundation, either version 3 of the License, or ;
; (at your option) any later version. ;
; ;
; This program is distributed in the hope that it will be useful, ;
; but WITHOUT ANY WARRANTY; without even the implied warranty of ;
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;
; GNU General Public License for more details. ;
; ;
; You should have received a copy of the GNU General Public License ;
; along with this program. If not, see <https://www.gnu.org/licenses/>.;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
introduction_msg_out:
mov si, introduction_msg
call print_str
ret
psh_prompt_out:
mov si, psh_prompt
call print_str
ret
term_input:
call get_char
cmp al, 0x0D
je newline
cmp al, 0x08
je backspace
cmp al, " "
jnge term_input
call add_to_buffer
call print_char
jmp term_input
ret
backspace:
call check_cursor_position
cmp dl, 7
jl term_input
call print_char
mov al, 0
call print_char
mov al, 0x08
call print_char
call rem_from_buffer
jmp term_input
newline:
call print_char
mov al, 0x0A
call print_char
call process_command
mov byte [buffer], 0
call psh_prompt_out
jmp term_input
check_cursor_position:
mov ah, 0x03
mov bh, 0x00
int 0x10
ret
add_to_buffer:
mov si, buffer
call loop_through_buffer
mov byte [si], al
inc si
mov byte [si], 0
ret
rem_from_buffer:
mov si, buffer
call loop_through_buffer
dec si
mov byte [si], 0
ret
loop_through_buffer:
cmp byte [si], 0
je return
inc si
jmp loop_through_buffer
return:
ret
introduction_msg: db "Welcome to PlutOS!", 0x0D, 0x0A, 0x0A, "This is an exercise to me to get better at x86 (real mode) assembly", 0x0D, 0x0A, "and learn a bit of low level programming.", 0x0D, 0x0A, "This is not really a serious OS by any means, but who knows what's to come. :)", 0x0D, 0x0A, 0x0A, "To see the list of available commands, type help.", 0x0D, 0x0A, 0x0A, 0
unknown_msg: db "Unknown command: ", 0
psh_prompt: db "<psh> ", 0
buffer: times 512 db 0