Mercurial > ecos
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++) { |
