diff options
| author | Dave Chapman <dave@dchapman.com> | 2008-10-01 23:19:14 +0000 |
|---|---|---|
| committer | Dave Chapman <dave@dchapman.com> | 2008-10-01 23:19:14 +0000 |
| commit | 2c096e463dbdca6ad1d470301709ac83aa84677d (patch) | |
| tree | d0e09e259fb04fda09df4dfb81e78beb01137b7a /utils/AMS/hacking | |
| parent | caeaf7693076a404e6f7f68ea13eb63ef58e8b37 (diff) | |
| download | rockbox-2c096e463dbdca6ad1d470301709ac83aa84677d.zip rockbox-2c096e463dbdca6ad1d470301709ac83aa84677d.tar.gz rockbox-2c096e463dbdca6ad1d470301709ac83aa84677d.tar.bz2 rockbox-2c096e463dbdca6ad1d470301709ac83aa84677d.tar.xz | |
It turns out that in-place UCL decompression isn't as easy as we thought, so we copy the OF to an unused part of RAM before decompressing it. This works - I have successfully patched m300a-1.1.17A.bin and installed on my Clip with this code. Thanks to Rafael Carre (funman) for the actual patch.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18679 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/AMS/hacking')
| -rw-r--r-- | utils/AMS/hacking/test.S | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/utils/AMS/hacking/test.S b/utils/AMS/hacking/test.S index 2e1796f..79d23de 100644 --- a/utils/AMS/hacking/test.S +++ b/utils/AMS/hacking/test.S @@ -27,10 +27,30 @@ start: loop: subs r1, r1, #1 bne loop - /* Call the ucl decompress function, which will branch to 0x0 - on completion */ + /* First copy the compressed firmware to unused RAM */ + ldr r0, ucl_start /* Source */ ldr r1, ucl_size /* Source length */ + + mov r2, #0x40000 /* Destination end */ + sub r2, r2, r1 + +memcpy: + ldrb r3, [r0] + strb r3, [r2] + adds r0, r0, #1 + adds r2, r2, #1 + cmp r2, #0x40000 /* Stop when we reached dest_end */ + bne memcpy + + sub r0, r2, r1 /* Point to the compressed firmware */ + + /* Call the ucl decompress function, which will branch to 0x0 */ + /* on completion */ + mov r2, #0 /* Destination */ + ldr r3, ucl_unpack bx r3 + + /* never reached */ |