]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
bootcf fixes
authorLeo C <erbl259-lmu@yahoo.de>
Fri, 10 Jun 2016 22:41:17 +0000 (00:41 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Fri, 10 Jun 2016 22:41:17 +0000 (00:41 +0200)
avr/cmd_boot.c
z180/cfboot.180

index b00d0628f9077c01c7acf54ea1d6deb416117904..14fbab34b20bf8462fe024514eba5e4607b4e9bb 100644 (file)
@@ -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);
                        }
                }
index d8c39fd4172d38f249351b49cfe5cd55ed5de2de..083aa4c7789a86e57ca473d3499ab58b221f21b0 100644 (file)
@@ -64,15 +64,15 @@ sec_start:  db      0
 sec_cnt:       db      7\r
 part_id:       db      PARTID_CPM\r
 timeout:       dw      10000\r
-stop_stage:    db      number_of_stages\r
+stages:                db      number_of_stages\r
 done:          db      0\r
 result:                db      0\r
 ide_result:    db      0,0\r
 \r
-o_part_id      equ     part_id      - para\r
-o_stop_stage   equ     stop_stage   - para\r
-o_done         equ     done         - para\r
-o_result       equ     result       - para\r
+o_part_id      equ     part_id - para\r
+o_stages       equ     stages - para\r
+o_done         equ     done    - para\r
+o_result       equ     result  - para\r
 \r
 ;-------------------------------------------------------------------------------\r
 \r
@@ -81,6 +81,9 @@ start:
        pop     ix\r
        pop     de\r
 loop:\r
+       dec     (ix+o_stages)\r
+       jp      m,stop\r
+\r
        pop     hl\r
        push    de\r
        push    hl\r
@@ -91,9 +94,7 @@ continue:
        exx\r
        ld      (ix+o_result),a\r
        or      a\r
-       jr      nz,stop\r
-       dec     (ix+o_stop_stage)\r
-       jr      nz,loop\r
+       jr      z,loop\r
 stop:\r
        in      a,(Idecmd)      ;2\r
        ld      l,a             ;1\r
@@ -133,7 +134,7 @@ part_start:
 stack:\r
        dw      para\r
        dw      continue\r
-stages:\r
+stage_table:\r
    if  DO_WAIT_NBSY\r
        dw      s_wait_not_bsy\r
    endif\r
@@ -145,7 +146,7 @@ stages:
        dw      s_find_partition\r
        dw      s_read_sectors\r
        dw      s_go\r
-number_of_stages equ ($-stages)/2\r
+number_of_stages equ ($-stage_table)/2\r
 \r
    if  DO_WAIT_NBSY\r
 ;-------------------------------------------------------------------------------\r