]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
connect command 'esc \' enhancement, new 'esc :' subcommand
authorLeo C <erbl259-lmu@yahoo.de>
Sat, 6 Jun 2015 08:58:34 +0000 (10:58 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Sat, 6 Jun 2015 08:58:34 +0000 (10:58 +0200)
avr/cli.c
avr/cmd_boot.c
include/cli.h

index 6b26b6f09cc77d09542271af3eb54999837f9379..43b5be05a024037388b84cfc80e7f77f48f92722 100644 (file)
--- a/avr/cli.c
+++ b/avr/cli.c
@@ -313,7 +313,7 @@ static int cli_run_command_list(const char *cmd)
 
 
 /*
- * Run a command using the selected parser.
+ * Run a command.
  *
  * @param cmd  Command to run
  * @param flag Execution flags (CMD_FLAG_...)
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);
index f6fb2abff566c88a1c46767bb28fded74e4d8ec5..4920cc47e45bed7d1372370a31f21f3ce0f5e3d3 100644 (file)
@@ -66,6 +66,15 @@ void cli_loop(void);
  */
 //int cli_simple_parse_line(char *line, char *argv[]);
 
+/*
+ * Run a command.
+ *
+ * @param cmd  Command to run
+ * @param flag Execution flags (CMD_FLAG_...)
+ * @return 0 on success, or != 0 on error.
+ */
+int run_command(const char *cmd, int flag);
+
 int run_command_list(const char *cmd, int len);