From 8a7deceacd30529e5c32082b2c719eb055841d0d Mon Sep 17 00:00:00 2001 From: Leo C Date: Sun, 26 Oct 2014 12:43:57 +0100 Subject: working connect command, new sleep command --- avr/cmd_boot.c | 108 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 82 insertions(+), 26 deletions(-) (limited to 'avr/cmd_boot.c') diff --git a/avr/cmd_boot.c b/avr/cmd_boot.c index 1f99f2d..2c3a533 100644 --- a/avr/cmd_boot.c +++ b/avr/cmd_boot.c @@ -4,13 +4,14 @@ */ #include "common.h" #include +#include #include #include "command.h" #include "con-utils.h" #include "z80-if.h" #include "z180-serv.h" -//#include "debug.h" +#include "debug.h" /* ugly hack to get Z180 loadfile into flash memory */ #define const const FLASH @@ -126,14 +127,21 @@ command_ret_t do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return CMD_RET_SUCCESS; } +static +void reset_cpu(bus_cmd_t mode) +{ + restart_z180_serv(); + z80_bus_cmd(mode); +} + + 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")); - restart_z180_serv(); - z80_bus_cmd(Reset); + reset_cpu(Reset); return CMD_RET_SUCCESS; } @@ -141,24 +149,40 @@ command_ret_t do_restart(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv { (void) cmdtp; (void) flag; (void) argc; (void) argv; - restart_z180_serv(); - z80_bus_cmd(Restart); + reset_cpu(Restart); return CMD_RET_SUCCESS; } +static +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" + "key>" + ), esc + 0x40); +} command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int ch; - uint8_t pending, state = 0; + uint8_t pending; +// uint8_t help_prompt = 0; + uint8_t code = 0; + uint8_t state = 0; (void) cmdtp; (void) flag; (void) argc; (void) argv; while (1) { - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + ATOMIC_BLOCK(ATOMIC_FORCEON) { pending = (Stat & S_CON_PENDING) != 0; Stat &= ~S_CON_PENDING; } @@ -174,46 +198,78 @@ command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv /* TODO: Timer starten */ } else { z80_memfifo_putc(fifo_conin, ch); -// serial_putc(ch); -// if (ch == '\r') -// serial_putc('\n'); } break; + case 2: + printf_P(PSTR("\n" + "------------------------------------------------\n")); case 1: - switch (ch) { - - case 'r': -// z80_reset_pulse(); - break; + state = 0; + switch (toupper(ch)) { - case 'b': + case '?': + case 'H': + print_con_usage(CONFIG_ESC_CHAR); + state = 2; break; - case 'e': + case 'R': + reset_cpu(Restart); break; - case 'q': + case 'X': case 'Q': printf_P(PSTR("\n")); goto quit; break; + case '\\': + code = 0; + state = 3; + break; + case CONFIG_ESC_CHAR: - default: z80_memfifo_putc(fifo_conin, ch); -// serial_putc(ch); -// if (ch == '\r') -// serial_putc('\n'); + break; + default: + break; + } + break; + case 3: + if (toupper(ch) == 'X') { + state = 6; + break; + } + /* fall thru */ + case 4: + case 5: + if (isdigit(ch)) { + code = code * 10 + ch - '0'; + state++; + } + if (state > 5) { + z80_memfifo_putc(fifo_conin, code); + state = 0; + } + break; + case 6: + case 7: + if (isxdigit(ch)) { + ch = toupper(ch); + if (ch >= 'A') + ch -= 'A' - 10; + code = code * 16 + ch - '0'; + state++; + } + if (state > 7) { + z80_memfifo_putc(fifo_conin, code); + state = 0; } - state = 0; break; } } - } quit: - return CMD_RET_SUCCESS; } - -- cgit v1.2.3