+ 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);
+ unsigned int br; /* bytes read */
+ if ((res = f_lseek(&File, common_base_ofs)) ||
+ (res = f_read(&File, buffer, 2, &br)) ||
+ (res = f_lseek(&File, cur_pos)))
+ goto out;
+ if (br != 2) {
+ res = EEOF;
+ goto out;
+ }
+ common_base = (uint16_t) buffer[0] + (buffer[1] << 8);
+ setenv_hex(PSTR(ENV_CPM3_COMMON_BASE), common_base);
+ }
+
+ setenv_hex(PSTR(ENV_CPM3_SCB), mem_top - ((res_len - (6 - 1)) << 8) + common_base);
+