X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/51dd0948df5ed53b11cab4e909e19ee7cee363c5..1f12ca6c89dbd3e4414b9d3b997736da4df69549:/avr/cmd_boot.c diff --git a/avr/cmd_boot.c b/avr/cmd_boot.c index f4a6183..bba510f 100644 --- a/avr/cmd_boot.c +++ b/avr/cmd_boot.c @@ -100,15 +100,11 @@ command_ret_t do_bootcf(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, int a int_fast8_t verbosity = 0; uint8_t default_stages; uint32_t val; - ERRNUM res = ESUCCESS; /* get default values */ memcpy_P(&boot_param, cfboot, sizeof boot_param); default_stages = boot_param.stages; - /* reset getopt() */ - optind = 0; - int opt; while ((opt = getopt(argc, argv, PSTR("vna:s:c:t:i:"))) != -1) { switch (opt) { @@ -254,10 +250,23 @@ command_ret_t do_busreq_pulse(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, command_ret_t do_go(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, int argc, char * const argv[]) { uint32_t addr; + bool hold = 0; - if (argc < 2) + int opt; + while ((opt = getopt(argc, argv, PSTR("h"))) != -1) { + switch (opt) { + case 'h': + hold = 1; + break; + default: /* '?' */ + return CMD_RET_USAGE; + } + } + argc -= optind; /* remaining arguments */ + + if (argc != 1) return CMD_RET_USAGE; - addr = eval_arg(argv[1], NULL); + addr = eval_arg(argv[optind], NULL); if (addr >= (1UL<<16)) { printf_P(PSTR("Invalid startaddress: 0x%05lx\n" " (Out of logical address space (0x00000-0x0ffff))\n"), @@ -266,29 +275,31 @@ command_ret_t do_go(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, int argc, } if (z80_bus_state() & ZST_RUNNING) { - printf_P(PSTR("CPU already running!\n")); - return CMD_RET_FAILURE; + cmd_error(CMD_RET_FAILURE, ERUNNING, NULL); } printf_P(PSTR("Starting application at 0x%04lx ...\n"), addr); if (addr != 0) { - uint8_t tmp[3]; +// uint8_t tmp[3]; - z80_bus_cmd(Request); - z80_read_block (tmp, 0, 3); + z80_bus_request_or_exit(); +// z80_read_block (tmp, 0, 3); z80_write(0, 0xc3); z80_write(1, addr); z80_write(2, (addr >> 8)); + z80_bus_cmd(Release); + _delay_ms(100); z80_bus_cmd(Run); - z80_bus_cmd(M_Cycle); - z80_bus_cmd(M_Cycle); - z80_write_block(tmp, 0, 3); - } else +// z80_write_block(tmp, 0, 3); + } else { + if (!hold) + z80_bus_cmd(Request); z80_bus_cmd(Run); - - z80_bus_cmd(Release); + } + if (!hold) + z80_bus_cmd(Release); return CMD_RET_SUCCESS; } @@ -368,6 +379,7 @@ command_ret_t do_console(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, int case 2: my_puts_P(PSTR("\n" "------------------------------------------------\n")); + /* FALL TROUGH */ case 1: state = 0; switch (toupper(ch)) {