1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Jens Arnold 2005-11-30 00:05:40 +00:00
parent 8b022749a7
commit 4c385148ac
4 changed files with 129 additions and 17 deletions

View file

@ -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"