summaryrefslogtreecommitdiff
path: root/avr/cmd_boot.c
diff options
context:
space:
mode:
Diffstat (limited to 'avr/cmd_boot.c')
-rw-r--r--avr/cmd_boot.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/avr/cmd_boot.c b/avr/cmd_boot.c
index 17ed746..c2f0351 100644
--- a/avr/cmd_boot.c
+++ b/avr/cmd_boot.c
@@ -5,9 +5,12 @@
#include "common.h"
#include <stdlib.h>
#include <avr/pgmspace.h>
+#include <util/atomic.h>
#include "command.h"
+#include "con-utils.h"
#include "z80-if.h"
+#include "z180-serv.h"
//#include "debug.h"
/* ugly hack to get Z180 loadfile into flash memory */
@@ -130,6 +133,7 @@ command_ret_t do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
printf_P(PSTR("## CPU now in reset state.\n"));
+ restart_z180_serv();
z80_bus_cmd(Reset);
return CMD_RET_SUCCESS;
}
@@ -138,8 +142,78 @@ 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);
return CMD_RET_SUCCESS;
}
+
+command_ret_t do_console(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int ch;
+ uint8_t pending, state = 0;
+
+ (void) cmdtp; (void) flag; (void) argc; (void) argv;
+
+
+ while (1) {
+
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ pending = (Stat & S_CON_PENDING) != 0;
+ Stat &= ~S_CON_PENDING;
+ }
+ if (pending)
+ while ((ch = z80_memfifo_getc(fifo_conout)) >= 0)
+ putchar(ch);
+
+ if ((ch = my_getchar(0)) >= 0) {
+ switch (state) {
+ case 0:
+ if (ch == CONFIG_ESC_CHAR) {
+ state = 1;
+ /* TODO: Timer starten */
+ } else {
+ z80_memfifo_putc(fifo_conin, ch);
+// serial_putc(ch);
+// if (ch == '\r')
+// serial_putc('\n');
+ }
+ break;
+ case 1:
+ switch (ch) {
+
+ case 'r':
+// z80_reset_pulse();
+ break;
+
+ case 'b':
+ break;
+
+ case 'e':
+ break;
+
+ case 'q':
+ case 'Q':
+ goto quit;
+ break;
+
+ case CONFIG_ESC_CHAR:
+ default:
+ z80_memfifo_putc(fifo_conin, ch);
+// serial_putc(ch);
+// if (ch == '\r')
+// serial_putc('\n');
+ }
+ state = 0;
+ break;
+ }
+ }
+
+ }
+quit:
+
+ return CMD_RET_SUCCESS;
+}
+
+