monitor: Add load command

This commit is contained in:
Ry 2023-03-30 17:36:48 -07:00
parent 5729ff6c71
commit 67e448abd3
3 changed files with 56 additions and 0 deletions

View File

@ -24,6 +24,11 @@ monitor_shell_parse_command:
call compare_string call compare_string
ifz jmp monitor_shell_list_command ifz jmp monitor_shell_list_command
; load
mov r1, monitor_shell_load_command_string
call compare_string
ifz jmp monitor_shell_load_command
; set.8 ; set.8
mov r1, monitor_shell_set8_command_string mov r1, monitor_shell_set8_command_string
call compare_string call compare_string
@ -53,4 +58,5 @@ monitor_shell_invalid_command_string: data.str "invalid command" data.8 10 data.
#include "monitor/commands/help.asm" #include "monitor/commands/help.asm"
#include "monitor/commands/jump.asm" #include "monitor/commands/jump.asm"
#include "monitor/commands/list.asm" #include "monitor/commands/list.asm"
#include "monitor/commands/load.asm"
#include "monitor/commands/set.asm" #include "monitor/commands/set.asm"

View File

@ -15,5 +15,6 @@ monitor_shell_help_text:
data.str "help | display this help text" data.8 10 data.str "help | display this help text" data.8 10
data.str "jump | jump to address $0" data.8 10 data.str "jump | jump to address $0" data.8 10
data.str "list | list memory contents starting at address $0" data.8 10 data.str "list | list memory contents starting at address $0" data.8 10
data.str "load | load disk $0's sector $1 to buffer at address $2 of size $3 sectors" data.8 10
data.str "set.SZ | set [$0] to $1; equivalent to `mov.SZ [$0], $1`" data.8 10 data.str "set.SZ | set [$0] to $1; equivalent to `mov.SZ [$0], $1`" data.8 10
data.8 0 data.8 0

49
monitor/commands/load.asm Normal file
View File

@ -0,0 +1,49 @@
; jump command
monitor_shell_load_command_string: data.strz "load"
monitor_shell_load_command:
call monitor_shell_parse_arguments
; r0: pointer to disk id string
; r1: pointer to source sector number string
; r2: pointer to destination address string
; r3: pointer to number of sectors string
push r3
push r2
push r1
mov r1, 16
call string_to_int
mov r10, r0
pop r0
mov r1, 16
call string_to_int
mov r11, r0
pop r0
mov r1, 16
call string_to_int
mov r12, r0
pop r0
mov r1, 16
call string_to_int
mov r13, r0
; r10: disk id
; r11: source sector number
; r12: destination address
; r13: number of sectors
mov r31, r13
cmp r31, 0
ifz ret
mov r0, r11
mov r1, r10
mov r2, r12
monitor_shell_load_command_loop:
call read_sector
inc r0
add r2, 512
loop monitor_shell_load_command_loop
ret