summaryrefslogtreecommitdiff
path: root/avr
diff options
context:
space:
mode:
authorLeo C2016-05-17 23:01:42 +0200
committerLeo C2016-05-17 23:01:42 +0200
commitb51d2360e5a32408daae39b1c311868d0d34374c (patch)
tree9897bb93f3c6d286d1978369009c674a63f5573b /avr
parent8ed660166ce9cdeb63b4cf710c663407b7ec9128 (diff)
downloadz180-stamp-b51d2360e5a32408daae39b1c311868d0d34374c.zip
Get common_base from cpm3.sys file. Update default environment (BOOTCMD)hexrel-6.6
Diffstat (limited to 'avr')
-rw-r--r--avr/cmd_loadcpm3.c30
-rw-r--r--avr/command_tbl.c10
-rw-r--r--avr/env.c5
3 files changed, 34 insertions, 11 deletions
diff --git a/avr/cmd_loadcpm3.c b/avr/cmd_loadcpm3.c
index a2436f2..f24ee19 100644
--- a/avr/cmd_loadcpm3.c
+++ b/avr/cmd_loadcpm3.c
@@ -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 */
diff --git a/avr/command_tbl.c b/avr/command_tbl.c
index 748c830..e24fcbb 100644
--- a/avr/command_tbl.c
+++ b/avr/command_tbl.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"
@@ -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,
diff --git a/avr/env.c b/avr/env.c
index 6fbeb01..f067940 100644
--- 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"
@@ -34,11 +34,12 @@
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
};