comparison packages/redboot/current/src/load.c @ 196:9b55e9c69693

Merge from eCos master repository on 2001-11-23-15:32:03-GMT
author jlarmour
date Fri, 23 Nov 2001 17:12:52 +0000
parents 022f1e506033
children ea3f0bd33a73
comparison
equal deleted inserted replaced
195:67850532eebb 196:9b55e9c69693
60 "[-h <host>] [-m {TFTP | xyzMODEM" 60 "[-h <host>] [-m {TFTP | xyzMODEM"
61 #ifdef CYGPKG_REDBOOT_DISK 61 #ifdef CYGPKG_REDBOOT_DISK
62 " | disk" 62 " | disk"
63 #endif 63 #endif
64 #if CYGNUM_HAL_VIRTUAL_VECTOR_NUM_CHANNELS > 1 64 #if CYGNUM_HAL_VIRTUAL_VECTOR_NUM_CHANNELS > 1
65 "-c <channel_number>" 65 " -c <channel_number>"
66 #endif 66 #endif
67 "}]\n [-b <base_address>] <file_name>"; 67 "}]\n [-b <base_address>] <file_name>";
68 68
69 // Exported CLI function 69 // Exported CLI function
70 RedBoot_cmd("load", 70 RedBoot_cmd("load",
206 case '7': 206 case '7':
207 case '8': 207 case '8':
208 case '9': 208 case '9':
209 addr = (unsigned char *)_hex2(getc, ('9'-type+2), &sum); 209 addr = (unsigned char *)_hex2(getc, ('9'-type+2), &sum);
210 offset += ('9'-type+2); 210 offset += ('9'-type+2);
211 entry_address = (unsigned long *)addr; 211 entry_address = (unsigned long)addr;
212 if (terminate) (*terminate)(xyzModem_close, getc); 212 if (terminate) (*terminate)(xyzModem_close, getc);
213 if (addr_offset) diag_printf("Address offset = %p\n", (void *)addr_offset); 213 if (addr_offset) diag_printf("Address offset = %p\n", (void *)addr_offset);
214 diag_printf("Entry point: %p, address range: %p-%p\n", 214 diag_printf("Entry point: %p, address range: %p-%p\n",
215 (void*)entry_address, (void *)lowest_address, (void *)highest_address); 215 (void*)entry_address, (void *)lowest_address, (void *)highest_address);
216
217 // Save load base/top
218 load_address = lowest_address;
219 load_address_end = highest_address;
220
216 return highest_address; 221 return highest_address;
217 default: 222 default:
218 if (terminate) (*terminate)(xyzModem_abort, getc); 223 if (terminate) (*terminate)(xyzModem_abort, getc);
219 diag_printf("Invalid S-record at offset 0x%lx, type: %x\n", 224 diag_printf("Invalid S-record at offset 0x%lx, type: %x\n",
220 (unsigned long)offset, type); 225 (unsigned long)offset, type);
500 *mp++ = res; 505 *mp++ = res;
501 } 506 }
502 err = 0; 507 err = 0;
503 end = (unsigned long) mp; 508 end = (unsigned long) mp;
504 } 509 }
510
511 // Save load base/top
512 load_address = base;
513 load_address_end = end;
514
505 if (0 == err) 515 if (0 == err)
506 diag_printf("Raw file loaded %p-%p\n", (void *)base, (void *)end); 516 diag_printf("Raw file loaded %p-%p\n", (void *)base, (void *)end);
507 } else { 517 } else {
508 // Read initial header - to determine file [image] type 518 // Read initial header - to determine file [image] type
509 for (i = 0; i < sizeof(type); i++) { 519 for (i = 0; i < sizeof(type); i++) {