diff options
Diffstat (limited to 'firmware/decompressor/decompressor.c')
| -rw-r--r-- | firmware/decompressor/decompressor.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/firmware/decompressor/decompressor.c b/firmware/decompressor/decompressor.c index 9cd7d59..d368c79 100644 --- a/firmware/decompressor/decompressor.c +++ b/firmware/decompressor/decompressor.c @@ -21,13 +21,13 @@ * ****************************************************************************/ +#include "uclimage.h" + #define ICODE_ATTR __attribute__ ((section (".icode"))) -#define UCL_HEADER 26 /* size of the header generated by uclpack */ /* Symbols defined in the linker script */ extern char iramcopy[], iramstart[], iramend[]; extern char stackend[]; -extern char imgstart[], imgend[]; extern char loadaddress[], dramend[]; /* Prototypes */ @@ -113,20 +113,19 @@ int ucl_nrv2e_decompress_8(const unsigned char *src, unsigned char *dst, return ilen; } +#define ALIGNED_IMG_SIZE ((sizeof(image) + 3) & ~3) /* This will never return */ void main(void) { unsigned long dst_len; /* dummy */ - unsigned long img_len = (unsigned long)(imgend - imgstart); - unsigned long *src = (unsigned long *)imgstart; - unsigned long *dst = (unsigned long *)(dramend - img_len); + unsigned long *src = (unsigned long *)image; + unsigned long *dst = (unsigned long *)(dramend - ALIGNED_IMG_SIZE); do *dst++ = *src++; while (dst < (unsigned long *)dramend); - ucl_nrv2e_decompress_8(dramend - img_len + UCL_HEADER, - loadaddress, &dst_len); + ucl_nrv2e_decompress_8(dramend - ALIGNED_IMG_SIZE, loadaddress, &dst_len); asm( "mov.l @%0+,r0 \n" |