From 16af58eaba93819b09becadf7caae0df890baed0 Mon Sep 17 00:00:00 2001 From: Leo C Date: Sat, 11 Jun 2016 00:41:17 +0200 Subject: bootcf fixes --- avr/cmd_boot.c | 25 ++++++++++++++----------- z180/cfboot.180 | 21 +++++++++++---------- 2 files changed, 25 insertions(+), 21 deletions(-) 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); } } diff --git a/z180/cfboot.180 b/z180/cfboot.180 index d8c39fd..083aa4c 100644 --- a/z180/cfboot.180 +++ b/z180/cfboot.180 @@ -64,15 +64,15 @@ sec_start: db 0 sec_cnt: db 7 part_id: db PARTID_CPM timeout: dw 10000 -stop_stage: db number_of_stages +stages: db number_of_stages done: db 0 result: db 0 ide_result: db 0,0 -o_part_id equ part_id - para -o_stop_stage equ stop_stage - para -o_done equ done - para -o_result equ result - para +o_part_id equ part_id - para +o_stages equ stages - para +o_done equ done - para +o_result equ result - para ;------------------------------------------------------------------------------- @@ -81,6 +81,9 @@ start: pop ix pop de loop: + dec (ix+o_stages) + jp m,stop + pop hl push de push hl @@ -91,9 +94,7 @@ continue: exx ld (ix+o_result),a or a - jr nz,stop - dec (ix+o_stop_stage) - jr nz,loop + jr z,loop stop: in a,(Idecmd) ;2 ld l,a ;1 @@ -133,7 +134,7 @@ part_start: stack: dw para dw continue -stages: +stage_table: if DO_WAIT_NBSY dw s_wait_not_bsy endif @@ -145,7 +146,7 @@ stages: dw s_find_partition dw s_read_sectors dw s_go -number_of_stages equ ($-stages)/2 +number_of_stages equ ($-stage_table)/2 if DO_WAIT_NBSY ;------------------------------------------------------------------------------- -- cgit v1.2.3