monitor: Proper command parsing
This commit is contained in:
parent
e5c98ddd69
commit
b87b5a3448
21
monitor/commands/commands.asm
Normal file
21
monitor/commands/commands.asm
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
; command parser
|
||||||
|
|
||||||
|
; FIXME: thjs is a terrible way to do this
|
||||||
|
monitor_shell_parse_command:
|
||||||
|
mov r0, MONITOR_SHELL_TEXT_BUF_BOTTOM
|
||||||
|
|
||||||
|
; exit
|
||||||
|
mov r1, monitor_shell_exit_command_string
|
||||||
|
call compare_string
|
||||||
|
ifz jmp monitor_shell_exit_command
|
||||||
|
|
||||||
|
; help
|
||||||
|
mov r1, monitor_shell_help_command_string
|
||||||
|
call compare_string
|
||||||
|
ifz jmp monitor_shell_help_command
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
; all commands
|
||||||
|
#include "monitor/commands/exit.asm"
|
||||||
|
#include "monitor/commands/help.asm"
|
6
monitor/commands/exit.asm
Normal file
6
monitor/commands/exit.asm
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
; exit command
|
||||||
|
|
||||||
|
monitor_shell_exit_command_string: data.str "exit" data.8 0
|
||||||
|
|
||||||
|
monitor_shell_exit_command:
|
||||||
|
jmp exit_monitor
|
15
monitor/commands/help.asm
Normal file
15
monitor/commands/help.asm
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
; help command
|
||||||
|
|
||||||
|
monitor_shell_help_command_string: data.str "help" data.8 0
|
||||||
|
|
||||||
|
monitor_shell_help_command:
|
||||||
|
mov r0, monitor_shell_help_text
|
||||||
|
call print_string_to_monitor
|
||||||
|
ret
|
||||||
|
|
||||||
|
monitor_shell_help_text:
|
||||||
|
data.str "command | description" data.8 10
|
||||||
|
data.str "------- | -----------" data.8 10
|
||||||
|
data.str "exit | exit the monitor" data.8 10
|
||||||
|
data.str "help | display this help text" data.8 10
|
||||||
|
data.8 0
|
|
@ -46,20 +46,29 @@ invoke_monitor:
|
||||||
mov r5, 31
|
mov r5, 31
|
||||||
call draw_filled_rectangle_to_overlay
|
call draw_filled_rectangle_to_overlay
|
||||||
|
|
||||||
call monitor_shell_start
|
call redraw_monitor_console
|
||||||
|
|
||||||
; restore the old vsync handler and exit
|
mov [MONITOR_OLD_RSP], rsp
|
||||||
|
jmp monitor_shell_start
|
||||||
|
exit_monitor:
|
||||||
|
; restore the old RSP and vsync handler, reset the cursor, and exit
|
||||||
|
mov rsp, [MONITOR_OLD_RSP]
|
||||||
mov [0x000003FC], [MONITOR_OLD_VSYNC_HANDLER]
|
mov [0x000003FC], [MONITOR_OLD_VSYNC_HANDLER]
|
||||||
|
|
||||||
|
call enable_cursor
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
info_str: data.str "fox32rom monitor" data.8 0x00
|
info_str: data.str "fox32rom monitor" data.8 0x00
|
||||||
|
|
||||||
|
#include "monitor/commands/commands.asm"
|
||||||
#include "monitor/console.asm"
|
#include "monitor/console.asm"
|
||||||
#include "monitor/keyboard.asm"
|
#include "monitor/keyboard.asm"
|
||||||
#include "monitor/shell.asm"
|
#include "monitor/shell.asm"
|
||||||
#include "monitor/vsync.asm"
|
#include "monitor/vsync.asm"
|
||||||
|
|
||||||
const MONITOR_OLD_VSYNC_HANDLER: 0x03ED36C6 ; 4 bytes
|
const MONITOR_OLD_RSP: 0x03ED36BD ; 4 bytes
|
||||||
|
const MONITOR_OLD_VSYNC_HANDLER: 0x03ED36C1 ; 4 bytes
|
||||||
|
|
||||||
const MONITOR_BACKGROUND_COLOR: 0xFF282828
|
const MONITOR_BACKGROUND_COLOR: 0xFF282828
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,10 @@ monitor_shell_key_down_event:
|
||||||
monitor_shell_key_down_event_enter:
|
monitor_shell_key_down_event_enter:
|
||||||
mov r0, 10 ; line feed
|
mov r0, 10 ; line feed
|
||||||
call print_character_to_monitor
|
call print_character_to_monitor
|
||||||
|
|
||||||
|
mov r0, 0
|
||||||
|
call monitor_shell_push_character
|
||||||
|
|
||||||
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
|
||||||
|
@ -85,15 +89,9 @@ monitor_shell_parse_line:
|
||||||
call monitor_shell_tokenize
|
call monitor_shell_tokenize
|
||||||
mov [MONTIOR_SHELL_ARGS_PTR], r0
|
mov [MONTIOR_SHELL_ARGS_PTR], r0
|
||||||
|
|
||||||
mov r0, MONITOR_SHELL_TEXT_BUF_BOTTOM
|
call monitor_shell_parse_command
|
||||||
mov r1, test_string
|
|
||||||
call compare_string
|
|
||||||
ifz mov r0, test_working
|
|
||||||
ifz call print_string_to_monitor
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
test_string: data.str "test" data.8 0
|
|
||||||
test_working: data.str "it's working!!!" data.8 10 data.8 0
|
|
||||||
|
|
||||||
; return tokens separated by the specified character
|
; return tokens separated by the specified character
|
||||||
; returns the next token in the list
|
; returns the next token in the list
|
||||||
|
|
Loading…
Reference in New Issue
Block a user