]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
Get common_base from cpm3.sys file. Update default environment (BOOTCMD) hexrel-6.6
authorLeo C <erbl259-lmu@yahoo.de>
Tue, 17 May 2016 21:01:42 +0000 (23:01 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Tue, 17 May 2016 21:01:42 +0000 (23:01 +0200)
avr/cmd_loadcpm3.c
avr/command_tbl.c
avr/env.c
include/config.h

index a2436f23b0490d5f3f839329f0747c9a13ec0eb2..f24ee19352d2722cc62181c8c2f5aedff40ac2ef 100644 (file)
@@ -1,7 +1,11 @@
 /*
  * (C) Copyright 2015 Leo C. <erbl259-lmu@yahoo.de>
  *
- * SPDX-License-Identifier:    GPL-2.0+
+ * SPDX-License-Identifier:    GPL-2.0
+ */
+
+/*
+ * See CP/M 3 System Manual, Appendix D: CPM3.SYS File Format
  */
 
 #include "common.h"
@@ -20,6 +24,8 @@
 
 #define RS             128             /* CP/M record size */
 
+#define FSIZE_t DWORD
+
 /*
  *     Load Routine
  *
@@ -64,10 +70,10 @@ command_ret_t do_loadcpm3(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
        uint16_t bank_top;
        uint8_t bank_len;
        uint16_t osentry_addr = 0;
-       uint32_t common_base, banked_base;
+       uint32_t common_base = 0;
+       uint32_t banked_base;
        char *fname;
        FIL File;
-       /* TODO: put CONFIG_CPM3_SYSFILE in flash */
        char default_fname[] = CONFIG_CPM3_SYSFILE;
        unsigned int br;                                        /* bytes read */
        uint8_t buffer[RS];
@@ -76,8 +82,8 @@ command_ret_t do_loadcpm3(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
        (void) cmdtp; (void) flag;
 
 
-       common_base = getenv_ulong(PSTR(ENV_CPM3_COMMON_BASE), 16,
-                                               CONFIG_CPM3_COMMON_BASE);
+       //common_base = getenv_ulong(PSTR(ENV_CPM3_COMMON_BASE), 16,
+       //                                      CONFIG_CPM3_COMMON_BASE);
        banked_base = getenv_ulong(PSTR(ENV_CPM3_BANKED_BASE), 16,
                                                CONFIG_CPM3_BANKED_BASE);
 
@@ -123,6 +129,20 @@ command_ret_t do_loadcpm3(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
        *p = '\0';
        my_puts((char *)buffer);
 
+       if (common_base == 0) {
+               /* read common base
+                * http://www.seasip.info/Cpm/scb.html
+                */
+               FSIZE_t common_base_ofs = ((res_len - 6) << 8)  + 2*RS + RS-7;
+               FSIZE_t cur_pos = f_tell(&File);
+               if ((res = f_lseek(&File, common_base_ofs)) ||
+                               (res = f_read(&File, buffer, 2, &br)) ||
+                               (br != 2) ||
+                               (res = f_lseek(&File, cur_pos)))
+                       goto out;
+               common_base = (uint16_t) buffer[0] + (buffer[1] << 8);
+               setenv_hex(PSTR(ENV_CPM3_COMMON_BASE), common_base);
+       }
        /* Main System Load     */
 
        /* Load Common Portion of System */
index 748c830fe00b1cbf801d84641ded36e21e0a51d5..e24fcbbd2d0652b8aee8554b1b469bc375bd2f74 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
  *
- * SPDX-License-Identifier:    GPL-2.0+
+ * SPDX-License-Identifier:    GPL-2.0
  */
 
 #include "common.h"
@@ -154,9 +154,11 @@ CMD_TBL_ITEM(
        "[filename [common-base [banked-base]]] \n"
        "    - Load CP/M 3 system file from FAT filesystem. This command makes\n"
        "      CPMLDR superfluous. Uses the following environment variables if set:\n"
-       "      '"ENV_CPM3_SYSFILE"' File to load. Default is '"CONFIG_CPM3_SYSFILE"'.\n"
-       "      '"ENV_CPM3_COMMON_BASE"' Default is '"CONFIG_CPM3_COMMON_BASE_STR"'.\n"
-       "      '"ENV_CPM3_BANKED_BASE"' Default is '"CONFIG_CPM3_BANKED_BASE_STR"'.\n"
+       "         '"ENV_CPM3_SYSFILE"' File to load. Default is '"CONFIG_CPM3_SYSFILE"'.\n"
+       "         '"ENV_CPM3_BANKED_BASE"' Default is '"CONFIG_CPM3_BANKED_BASE_STR"'.\n"
+       "      Sets the following environment variables after loading:\n"
+       "         '"ENV_CPM3_COMMON_BASE"'\n"
+       "         '"ENV_STARTADDRESS"'"
 ),
 CMD_TBL_ITEM(
        loadi,  2,      0,      do_loadihex,
index 6fbeb01188206d4f16a4a141182370b112fa112b..f0679402bb32f5eb1019520dafc7f59a3952eb43 100644 (file)
--- a/avr/env.c
+++ b/avr/env.c
@@ -1,7 +1,7 @@
 /*
  * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
  *
- * SPDX-License-Identifier:    GPL-2.0+
+ * SPDX-License-Identifier:    GPL-2.0
  */
 
 #include "common.h"
 const FLASH char default_env[] = {
        ENV_BAUDRATE      "=" "115200" DELIM
        ENV_BOOTDELAY     "=" "3" DELIM
-       ENV_BOOTCMD               "=" "reset; loadf; go ${startaddr}" DELIM
+       ENV_BOOTCMD               "=" "pin ${pins}; loadcpm3; go ${startaddress}" DELIM
        ENV_CPM3_SYSFILE  "=" CONFIG_CPM3_SYSFILE DELIM
        ENV_PINALIAS      "=" "0:PG5,1:PG4,2:PB4,3:PB5,4:PB6,5:PB7,"
                                                  "6:PG3,7:PG2,8:PG1,9:PG0,10:PE7" DELIM
        ENV_STARTADDRESS  "=" "0" DELIM
+       "pins"                    "=" "2,8 low 9 high 3 2" DELIM
        DELIM
 };
 
index efc793ebc5cf44e1d1dc9e54f109667b919b68a2..0f9cdc8a182938f62892c18e1d142a84b1db7848 100644 (file)
 #define CONFIG_BOOTDELAY               4
 //#define CONFIG_ZERO_BOOTDELAY_CHECK  1
 
-#define CONFIG_CPM3_SYSFILE                    "1:/cpm3.sys"
-#define CONFIG_CPM3_COMMON_BASE                0xC000
+#define CONFIG_CPM3_SYSFILE                    "0:/cpm3.sys"
+#define CONFIG_CPM3_COMMON_BASE                0xF000
 #define CONFIG_CPM3_BANKED_BASE                0x0
-#define CONFIG_CPM3_COMMON_BASE_STR    "C000"
+//#define CONFIG_CPM3_COMMON_BASE_STR  "F000"
 #define CONFIG_CPM3_BANKED_BASE_STR    "0"
 
 #define CONFIG_CMD_MEMTEST