]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/cmd_boot.c
include cleanup
[z180-stamp.git] / avr / cmd_boot.c
index 17ed746e35edde82ff814d15a2f83f8daa05e17a..1f99f2d65c7e8dcbef0bb76ff7d65c802e88c980 100644 (file)
@@ -4,10 +4,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 +132,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 +141,79 @@ 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':
+                                       printf_P(PSTR("\n"));
+                                       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;
+}
+       
+