X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/a2907f2e2b2725679d6b3b8d3231f3d94c325014..db6a28d817d6430b5774aedab7e1b8715e358d46:/avr/cmd_boot.c diff --git a/avr/cmd_boot.c b/avr/cmd_boot.c index b00d062..14fbab3 100644 --- a/avr/cmd_boot.c +++ b/avr/cmd_boot.c @@ -121,11 +121,11 @@ command_ret_t do_bootcf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ uint8_t sec_cnt; uint8_t part_id; uint16_t timeout; - uint8_t stop_stage; + uint8_t stages; } boot_param; struct { - uint8_t stop_stage; + uint8_t stages; uint8_t done; uint8_t result; uint8_t ide_stat; @@ -133,14 +133,14 @@ command_ret_t do_bootcf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ } boot_res; int_fast8_t verbosity = 0; - uint8_t stages; + uint8_t default_stages; uint32_t val; (void) cmdtp; (void) flag; /* get default values */ memcpy_P(&boot_param, cfboot, sizeof boot_param); - stages = boot_param.stop_stage; + default_stages = boot_param.stages; /* reset getopt() */ optind = 0; @@ -152,8 +152,8 @@ command_ret_t do_bootcf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ verbosity++; break; case 'n': - if (boot_param.stop_stage > 0) - boot_param.stop_stage--; + if (boot_param.stages > 0) + boot_param.stages--; break; case 'a': val = strtoul(optarg, NULL, 16); @@ -185,7 +185,7 @@ command_ret_t do_bootcf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ printf_P(PSTR("Timeout value out of range: 0x%lX\n"), val); return CMD_RET_FAILURE; } - boot_param.loadaddr = val; + boot_param.timeout = val; break; case 'i': val = strtoul(optarg, NULL, 16); @@ -231,11 +231,11 @@ command_ret_t do_bootcf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ cfboot_address[0], sizeof boot_param); z80_bus_cmd(Release); - if (boot_param.stop_stage == 0) { + if (boot_param.stages == 0) { printf_P(PSTR("Bootloader loaded at: 0x%.4X\n"), (uint16_t) cfboot_address[0]); } else { printf_P(PSTR("Executing %d of %d Bootloader stages...\n"), - boot_param.stop_stage, stages); + boot_param.stages, default_stages); z80_bus_cmd(Run); z80_bus_cmd(Release); @@ -257,12 +257,15 @@ command_ret_t do_bootcf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ z80_bus_cmd(Reset); my_puts_P(PSTR("Abort\n")); } else { - if (boot_param.stop_stage == stages) { + if (boot_param.stages == default_stages && + boot_res.stages == 0 && + boot_res.result == 0) { my_puts_P(PSTR("Booting...\n")); } else { z80_bus_cmd(Reset); + boot_res.stages++; printf_P(PSTR("Bootloader stopped at stage %d, result: %d, IDE stat/error: 0x%.02x/0x%.02x\n"), - boot_param.stop_stage - boot_res.stop_stage, + boot_param.stages - boot_res.stages, boot_res.result, boot_res.ide_stat, boot_res.ide_error); } }