]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/cmd_loadcpm3.c
new command: boot - boot default, i.e., run 'bootcmd'
[z180-stamp.git] / avr / cmd_loadcpm3.c
index 6b2f62fe320f9f4665e5b3fecb22d4a30697f411..6ccb3f9597245f05081747187b59ebf9c837da26 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2015 Leo C. <erbl259-lmu@yahoo.de>
+ * (C) Copyright 2015,2016 Leo C. <erbl259-lmu@yahoo.de>
  *
  * SPDX-License-Identifier:    GPL-2.0
  */
@@ -8,15 +8,12 @@
  * See CP/M 3 System Manual, Appendix D: CPM3.SYS File Format
  */
 
-#include "common.h"
-#include <stdlib.h>
+#include "cmd_loadcpm3.h"
 #include <ctype.h>
-#include <string.h>
-#include <stdbool.h>
 
-#include "command.h"
 #include "env.h"
 #include "ff.h"
+#include "eval_arg.h"
 #include "con-utils.h"
 #include "z80-if.h"
 #include "debug.h"
@@ -63,7 +60,7 @@ int load(FIL *File, uint32_t addr, uint8_t len)
 
 #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
 
-command_ret_t do_loadcpm3(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+command_ret_t do_loadcpm3(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
        uint16_t mem_top;
        uint8_t res_len;
@@ -74,7 +71,7 @@ command_ret_t do_loadcpm3(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
        uint32_t banked_base;
        char *fname;
        FIL File;
-       char default_fname[] = CONFIG_CPM3_SYSFILE;
+       char default_fname[strlen_P(PSTR(CONFIG_CPM3_SYSFILE)) + 1];
        unsigned int br;                                        /* bytes read */
        uint8_t buffer[RS];
        int res;
@@ -88,16 +85,18 @@ command_ret_t do_loadcpm3(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
                                                CONFIG_CPM3_BANKED_BASE);
 
        if (argc > 3)
-               banked_base = strtoul(argv[3], NULL, 16);
+               banked_base = eval_arg(argv[3], NULL);
        if (argc > 2)
-               common_base = strtoul(argv[2], NULL, 16);
+               common_base = eval_arg(argv[2], NULL);
 
-       fname = getenv_char(PSTR(ENV_CPM3_SYSFILE));
+       fname = getenv_str(PSTR(ENV_CPM3_SYSFILE));
+       if (fname == NULL || *fname == '\0') {
+               strcpy_P(default_fname, PSTR(CONFIG_CPM3_SYSFILE));
+               fname = default_fname;
+       }
        if (argc > 1) {
                fname = argv[1];
        }
-       if (fname == NULL || *fname == '\0')
-               fname = default_fname;
 
        res = f_open(&File, fname, FA_READ );
        if (res) {