]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/cmd_boot.c
connect command 'esc \' enhancement, new 'esc :' subcommand
[z180-stamp.git] / avr / cmd_boot.c
index 448ed48d3ed35a8015817659a2213380cad4864d..b8799aa350e462456c069089f094e57f87d4ff69 100644 (file)
@@ -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);