fox32rom/monitor/commands/list.asm

70 lines
1.8 KiB
NASM

; list command
monitor_shell_list_command_string: data.str "list" data.8 0
monitor_shell_list_command:
mov r0, monitor_shell_list_text
call print_string_to_monitor
call monitor_shell_parse_arguments
mov r1, 16
call string_to_int
; r0: starting address
mov r10, r0
mov r31, 16 ; line counter
monitor_shell_list_command_line_loop:
mov r30, 16 ; byte counter, 16 bytes per line
; print current address
mov r0, r10
call print_hex_word_to_monitor
mov r0, ' '
call print_character_to_monitor
mov r0, '|'
call print_character_to_monitor
mov r0, ' '
call print_character_to_monitor
monitor_shell_list_command_byte_loop:
movz.8 r0, [r10]
call print_hex_byte_to_monitor
mov r0, ' '
call print_character_to_monitor
inc r10
dec r30
ifnz jmp monitor_shell_list_command_byte_loop
mov r0, '|'
call print_character_to_monitor
mov r0, ' '
call print_character_to_monitor
mov r29, 16
sub r10, 16
monitor_shell_list_command_ascii_loop:
movz.8 r0, [r10]
cmp r0, ' '
iflt jmp monitor_shell_list_command_ascii_loop_skip_char
cmp r0, '~'
ifgt jmp monitor_shell_list_command_ascii_loop_skip_char
call print_character_to_monitor
inc r10
dec r29
ifnz jmp monitor_shell_list_command_ascii_loop
jmp monitor_shell_list_command_ascii_loop_done
monitor_shell_list_command_ascii_loop_skip_char:
mov r0, '.'
call print_character_to_monitor
inc r10
dec r29
ifnz jmp monitor_shell_list_command_ascii_loop
monitor_shell_list_command_ascii_loop_done:
mov r0, 10
call print_character_to_monitor
loop monitor_shell_list_command_line_loop
ret
monitor_shell_list_text: data.str "address | x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF | ASCII" data.8 10 data.8 0