From 4c385148ac4a2f4959ec39841c20eaeb42ace668 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Wed, 30 Nov 2005 00:05:40 +0000 Subject: Self-extracting loader: Cleaner method for inclusion of the UCL-compressed image. The input image is now checked for correctness and converted to C source. The Makefile still needs fixing... git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8109 a1c6a512-1295-4272-9138-f99709370657 --- firmware/decompressor/decompressor.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'firmware/decompressor/decompressor.c') diff --git a/firmware/decompressor/decompressor.c b/firmware/decompressor/decompressor.c index 9cd7d5998e..d368c79538 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" -- cgit v1.2.3