diff --git a/020.shrinkler/README.md b/020.shrinkler/README.md index d40d893..ce330ac 100644 --- a/020.shrinkler/README.md +++ b/020.shrinkler/README.md @@ -6,7 +6,7 @@ In this example I try to integrate the amazing and generally super awsome Shrink * [Source repository](https://bitbucket.org/askeksa/shrinkler) * [Forum thread with discussion] (http://ada.untergrund.net/?p=boardthread&id=264&page=0) -This is a pretty cool bit of kit. I think you can just point an exe and this program and it will produce a compressed version of the exe that it runnable. Seeing as all my examples are based on a trackloaded setup, we use it slightly differently. +This is a pretty cool bit of kit. I think you can just point an exe at it and it will produce a compressed version of the exe that it runnable. Seeing as all my examples are based on a trackloaded setup, we use it slightly differently. We shrink the "program" that our trackloaded loads as if it were data: @@ -16,16 +16,18 @@ We shrink the "program" that our trackloaded loads as if it were data: Shrinker does a very impressive job of shrinking data: - ``` + +``` Crunching... Original After 1st pass After 2nd pass 51752 27545.297 26682.832 + ``` For comparison: - ``` +``` # gzip out/main.bin # ls -l out/main.bin.gz -rwxr-xr-x 1 alpine staff 29811 Mar 16 06:04 main.bin.gz @@ -33,7 +35,7 @@ For comparison: So now we have compressed data we need the bootloader to decompress it after it has loaded it. See [../shared/shrinkler_bootblock.s](../shared/shrinkler_bootblock.s) for the modified bootblock. But in a nutshell it's as simple as: - ``` +``` ; a0 = compressed data lea DECOMPRESS_ADDRESS,a0 ; Where we asked the trackloaded to load the compressed data ; a1 = decompressed data destination @@ -45,7 +47,7 @@ So now we have compressed data we need the bootloader to decompress it after it With our progress callback as simple as: - ``` +``` Callback: ;; d0 = Number of bytes decompressed so far ;; a0 = Callback argument @@ -58,20 +60,19 @@ Callback: And then we just include the Shrinkler [decompression code](../tools/external/shrinkler/ShrinklerDecompress.S): - ``` +``` include "../tools/external/shrinkler/ShrinklerDecompress.S" ``` In the [Makefile](Makefile) we can enable or disable Shrinkler: - ``` +``` SHRINKLER=1 ``` In this example I have also started to refactor the structure of the code base ready for slightly more complex examples going forward. - try it ------ * [Download disk image](bin/shrinker.adf?raw=true) - * Run in SAE \ No newline at end of file + * Run in SAE