summaryrefslogtreecommitdiff
path: root/firmware/decompressor/decompressor.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/decompressor/decompressor.c')
-rw-r--r--firmware/decompressor/decompressor.c13
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"