X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/0c728c8de88d86247d2a75348e71f5af37838c28..refs/tags/hexrel-6.4:/avr/cmd_boot.c diff --git a/avr/cmd_boot.c b/avr/cmd_boot.c index f9f8f90..b8799aa 100644 --- a/avr/cmd_boot.c +++ b/avr/cmd_boot.c @@ -16,6 +16,9 @@ #include #include "command.h" +#include "cli_readline.h" +#include "cli.h" +#include "env.h" #include "con-utils.h" #include "z80-if.h" #include "z180-serv.h" @@ -41,11 +44,9 @@ static void z80_load_mem(void) hdrom_address[sec]+hdrom_length_of_sections[sec] - 1, hdrom_length_of_sections[sec]); - z80_bus_cmd(Request); z80_write_block_P((const FLASH unsigned char *) &hdrom[sec_base], /* src */ hdrom_address[sec], /* dest */ hdrom_length_of_sections[sec]); /* len */ - z80_bus_cmd(Release); sec_base+=hdrom_length_of_sections[sec]; sec++; } @@ -56,11 +57,15 @@ command_ret_t do_loadf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[] (void) cmdtp; (void) flag; (void) argc; (void) argv; if (z80_bus_state() & ZST_RUNNING) { - printf_P(PSTR("## Can't load while CPU is running!\n")); + my_puts_P(PSTR("Can't load while CPU is running!\n")); return CMD_RET_FAILURE; } - + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + return CMD_RET_FAILURE; + } z80_load_mem(); + z80_bus_cmd(Release); return CMD_RET_SUCCESS; } @@ -147,7 +152,7 @@ command_ret_t do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[] { (void) cmdtp; (void) flag; (void) argc; (void) argv; - printf_P(PSTR("## CPU now in reset state.\n")); + printf_P(PSTR("CPU now in reset state.\n")); reset_cpu(Reset); return CMD_RET_SUCCESS; @@ -167,12 +172,13 @@ 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" - " \\ - code input:\n" - " \\nnn 3 decimal digits character code\n" - " \\Xhh 2 hexadecimal digits character code\n" - " ^%c - (Escape char) Type again to send itself\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" + " ^%c - (Escape char) Type again to send itself\n" "key>" ), esc + 0x40); } @@ -184,9 +190,12 @@ command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv // uint8_t help_prompt = 0; uint8_t code = 0; uint8_t state = 0; + char esc_char = (char) getenv_ulong(PSTR(ENV_ESC_CHAR), 16, CONFIG_ESC_CHAR); (void) cmdtp; (void) flag; (void) argc; (void) argv; + printf_P(PSTR("Connecting to CPU. Escape character is '^%c'.\n"), + esc_char + 0x40); while (1) { @@ -203,7 +212,7 @@ command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv if ((ch = my_getchar(0)) >= 0) { switch (state) { case 0: - if (ch == CONFIG_ESC_CHAR) { + if (ch == esc_char) { state = 1; /* TODO: Timer starten */ } else { @@ -219,7 +228,7 @@ command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv case '?': case 'H': - print_con_usage(CONFIG_ESC_CHAR); + print_con_usage(esc_char); state = 2; break; @@ -233,15 +242,21 @@ 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; break; - case CONFIG_ESC_CHAR: - z80_memfifo_putc(fifo_conin, ch); - break; default: + if (ch == esc_char) + z80_memfifo_putc(fifo_conin, ch); break; } break; @@ -256,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); @@ -270,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);