On at 2023-09-01 19:03 +0200, Bernd Böckmann via Freedos-devel wrote:
Well, I think it's me to blame ;-)

I will try to build some compression mechanism into AMB, so that the help files get smaller. The main FreeDOS help file would also benefit from that, I think.

Bernd

I recently added one of my executable compression formats to my debugger's online help, allowing it to "assemble" (build) the help pages at build time and then compress them before inclusion (by NASM incbin directive) into the main assembly pass. Perhaps you want to copy parts of this.

I used the heatshrink library, "A data compression/decompression library for embedded/real-time systems." [1]. It is available under the ISC License [2]. I created two different depackers, both under the Fair License (but feel free to use and copy these under any usage conditions). One is the executable depacker, which can deal with data (both compressed and decompressed) exceeding 64 KiB, using 8086 segmented addressing [3]. The other is a bit smaller and assumes that all data fits in a single segment each, though the source and destination can be in different segments [4].

For the recent lDebug release 6 I did not yet enable these build options, although everything is implemented for the in-memory online help to be largely compressed. I'm compressing each help page as its own data block, unrelated to one another. Despite this, almost all of the data does compress down by 20% to 60%. (In heatshrink use, the percentage indicates how much of the uncompressed size is dropped to reach the compressed size.)

The depacker needs about 300 bytes in my application (for only the memory-to-memory depacker). The compression is done in a loop at build time [5]. I try every -w parameter from 10 to 14 and every -l parameter from 4 to 14 (but -l must be below -w), and use the best result. (Usually -w 10 -l 4.) (I just found that the valid ranges for the parameters are actually larger than this, still testing how well those work.) I use a slightly modified compressed file format, in which the first byte is the -w parameter and the second byte is the -l parameter, and then the original compressed data file is appended. The depacker needs to know the packed size to know when to end depacking. In my debugger's depacker, I append a NUL byte at the end for the user to know how long the unpacked data is, but this could be modified easily to return the size.

Regards,
ecm


[1]: https://github.com/atomicobject/heatshrink
[2]: https://github.com/atomicobject/heatshrink/blob/7d419e1fa4830d0b919b9b6a91fe2fb786cf3280/LICENSE
[3]: https://hg.pushbx.org/ecm/inicomp/file/41860de1db0e/heatshr.asm
[4]: https://hg.pushbx.org/ecm/ldebug/file/654bf2cbfffb/source/hshrink.asm#l208
[5]: https://hg.pushbx.org/ecm/ldebug/file/654bf2cbfffb/source/mak.sh#l309


_______________________________________________
Freedos-devel mailing list
Freedos-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to