X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/d0581f881c4072ef0ac453167a98dc3bc0d87d86..889202c46ced1be4fc0db3faf63564722eba2865:/avr/cmd_boot.c diff --git a/avr/cmd_boot.c b/avr/cmd_boot.c index 3e2dcdb..1f99f2d 100644 --- a/avr/cmd_boot.c +++ b/avr/cmd_boot.c @@ -4,11 +4,13 @@ */ #include "common.h" #include -#include -#include +#include #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 */ #define const const FLASH @@ -32,7 +34,7 @@ static void z80_load_mem(void) z80_bus_cmd(Request); z80_write_block((const FLASH unsigned char *) &hdrom[sec_base], /* src */ - hdrom_address[sec], /* dest */ + hdrom_address[sec], /* dest */ hdrom_length_of_sections[sec]); /* len */ z80_bus_cmd(Release); sec_base+=hdrom_length_of_sections[sec]; @@ -44,13 +46,13 @@ 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) { + if (z80_bus_state() & ZST_RUNNING) { printf_P(PSTR("## Can't load while CPU is running!\n")); - return CMD_RET_FAILURE; + return CMD_RET_FAILURE; } z80_load_mem(); - + return CMD_RET_SUCCESS; } @@ -61,7 +63,7 @@ command_ret_t do_busreq_pulse(cmd_tbl_t *cmdtp, int flag, int argc, char * const (void) cmdtp; (void) flag; - if (!(z80_bus_state() & ZST_RUNNING)) { + if (!(z80_bus_state() & ZST_RUNNING)) { printf_P(PSTR("## CPU is not running!\n")); return CMD_RET_FAILURE; } @@ -82,7 +84,7 @@ command_ret_t do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) uint32_t addr; (void) cmdtp; (void) flag; - + if (argc < 2) return CMD_RET_USAGE; addr = strtoul(argv[1], NULL, 16); @@ -91,9 +93,9 @@ command_ret_t do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) " (Out of logical address space (0x00000-0x0ffff))\n"), addr); return CMD_RET_FAILURE; - } + } - if (z80_bus_state() & ZST_RUNNING) { + if (z80_bus_state() & ZST_RUNNING) { printf_P(PSTR("## CPU allready running!\n")); return CMD_RET_FAILURE; } @@ -103,7 +105,7 @@ command_ret_t do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (addr != 0) { uint8_t tmp[3]; uint_fast8_t i; - + z80_bus_cmd(Request); for (i = 0; i < 3; i++) tmp[i] = z80_read(i); @@ -118,7 +120,7 @@ command_ret_t do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) z80_write(i, tmp[i]); } else z80_bus_cmd(Run); - + z80_bus_cmd(Release); return CMD_RET_SUCCESS; @@ -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; +} + +