monitor: Add a (very hacky) text cursor

This commit is contained in:
Ry 2022-05-12 18:00:52 -07:00
parent 0c99d2b558
commit 3de7fd9567

View File

@ -37,13 +37,31 @@ monitor_shell_key_down_event:
cmp.8 r0, 0x0E ; backspace cmp.8 r0, 0x0E ; backspace
ifz jmp monitor_shell_key_down_event_backspace ifz jmp monitor_shell_key_down_event_backspace
; otherwise, add it to the text buffer and print it to the screen ; then, overwrite the cursor
mov r1, r0
mov r0, 8 ; backspace character
call print_character_to_monitor
mov r0, r1
; then, add it to the text buffer and print it to the screen
call scancode_to_ascii call scancode_to_ascii
call print_character_to_monitor call print_character_to_monitor
call monitor_shell_push_character call monitor_shell_push_character
; finally, print the cursor and redraw the line
mov r0, '_'
call print_character_to_monitor
call redraw_monitor_console_line call redraw_monitor_console_line
ret ret
monitor_shell_key_down_event_enter: monitor_shell_key_down_event_enter:
; clear the cursor from the screen
mov r0, 8 ; backspace character
call print_character_to_monitor
mov r0, ' ' ; space character
call print_character_to_monitor
mov r0, 8 ; backspace character
call print_character_to_monitor
mov r0, 10 ; line feed mov r0, 10 ; line feed
call print_character_to_monitor call print_character_to_monitor
@ -52,6 +70,7 @@ monitor_shell_key_down_event_enter:
call monitor_shell_parse_line call monitor_shell_parse_line
call monitor_shell_clear_buffer call monitor_shell_clear_buffer
mov r0, monitor_shell_prompt mov r0, monitor_shell_prompt
call print_string_to_monitor call print_string_to_monitor
ret ret
@ -60,13 +79,16 @@ monitor_shell_key_down_event_backspace:
mov r1, [MONITOR_SHELL_TEXT_BUF_PTR] mov r1, [MONITOR_SHELL_TEXT_BUF_PTR]
cmp r1, MONITOR_SHELL_TEXT_BUF_BOTTOM cmp r1, MONITOR_SHELL_TEXT_BUF_BOTTOM
iflteq ret iflteq ret
; delete the last character from the screen, and pop the last character from the buffer ; delete the last character from the screen, draw the cursor, and pop the last character from the buffer
mov r0, 8 ; backspace character mov r0, 8 ; backspace character
call print_character_to_monitor call print_character_to_monitor
mov r0, ' ' ; space character mov r0, ' ' ; space character
call print_character_to_monitor call print_character_to_monitor
mov r0, 8 ; backspace character mov r0, 8 ; backspace character
call print_character_to_monitor call print_character_to_monitor
call print_character_to_monitor
mov r0, '_' ; cursor
call print_character_to_monitor
call monitor_shell_delete_character call monitor_shell_delete_character
call redraw_monitor_console_line call redraw_monitor_console_line
ret ret
@ -209,4 +231,4 @@ const MONITOR_SHELL_TEXT_BUF_BOTTOM: 0x03ED3FE0 ; 32 characters
const MONITOR_SHELL_TEXT_BUF_PTR: 0x03ED3FDC ; 4 bytes - pointer to the current input character const MONITOR_SHELL_TEXT_BUF_PTR: 0x03ED3FDC ; 4 bytes - pointer to the current input character
const MONTIOR_SHELL_ARGS_PTR: 0x03ED36C5 ; 4 bytes - pointer to the beginning of the command arguments const MONTIOR_SHELL_ARGS_PTR: 0x03ED36C5 ; 4 bytes - pointer to the beginning of the command arguments
monitor_shell_prompt: data.str "> " data.8 0 monitor_shell_prompt: data.str "> _" data.8 0