summaryrefslogtreecommitdiff
path: root/avr/cmd_boot.c
diff options
context:
space:
mode:
authorLeo C2015-06-06 10:58:34 +0200
committerLeo C2015-06-06 10:58:34 +0200
commitb08e079d1541c80028e3a11affec3f863eb9129d (patch)
tree5d022b4f1efd4a0a329baae08cbf2a13dcf00c75 /avr/cmd_boot.c
parent612a69655af9bed89a1ad9e7e9225dfb3ed3ff42 (diff)
downloadz180-stamp-b08e079d1541c80028e3a11affec3f863eb9129d.zip
connect command 'esc \' enhancement, new 'esc :' subcommand
Diffstat (limited to 'avr/cmd_boot.c')
-rw-r--r--avr/cmd_boot.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/avr/cmd_boot.c b/avr/cmd_boot.c
index 448ed48..b8799aa 100644
--- a/avr/cmd_boot.c
+++ b/avr/cmd_boot.c
@@ -16,6 +16,8 @@
#include <util/atomic.h>
#include "command.h"
+#include "cli_readline.h"
+#include "cli.h"
#include "env.h"
#include "con-utils.h"
#include "z80-if.h"
@@ -170,8 +172,9 @@ void print_con_usage(char esc)
{ printf_P(PSTR("\n"
"------------------------------------------------\n"
" ?,H - This Help\n"
- " R - Reset (Restart) CPU\n"
" Q,X - Return to command line\n"
+ " R - Reset (Restart) CPU\n"
+ " : - Execute monitor command\n"
" \\ - code input:\n"
" \\nnn 3 decimal digits character code\n"
" \\Xhh 2 hexadecimal digits character code\n"
@@ -191,6 +194,8 @@ command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
(void) cmdtp; (void) flag; (void) argc; (void) argv;
+ printf_P(PSTR("Connecting to CPU. Escape character is '^%c'.\n"),
+ esc_char + 0x40);
while (1) {
@@ -237,6 +242,13 @@ command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
goto quit;
break;
+ case ':':
+ putchar('\n');
+ int cmdlen = cli_readline(PSTR(": "));
+ if (cmdlen > 0)
+ run_command(console_buffer, 0);
+ break;
+
case '\\':
code = 0;
state = 3;
@@ -259,6 +271,11 @@ command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
if (isdigit(ch)) {
code = code * 10 + ch - '0';
state++;
+ } else {
+ if (state > 3)
+ z80_memfifo_putc(fifo_conin, code);
+ z80_memfifo_putc(fifo_conin, ch);
+ state = 0;
}
if (state > 5) {
z80_memfifo_putc(fifo_conin, code);
@@ -273,6 +290,11 @@ command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
ch -= 'A' - 10;
code = code * 16 + ch - '0';
state++;
+ }else {
+ if (state > 6)
+ z80_memfifo_putc(fifo_conin, code);
+ z80_memfifo_putc(fifo_conin, ch);
+ state = 0;
}
if (state > 7) {
z80_memfifo_putc(fifo_conin, code);