> Thanks, I am currently researching which compression algorithm to use, under > following conditions:
> a) running (reasonably fast) on a 8086 with little RAM I know these tiny little things were slow, but I'd still expect 10 KB/sec decompression speed on a 8088; i.e. 'fast enough' (tm). > b) small code size, easy to implement / understand no need to implement/understand (while interesting). there are enough implementations in the wild. upx's LZO would be another candidate. > c) decent compression ratio for text expect compression by 65% or better for text - if the compression unit is large enough. chunks of a few 100 bytes don't compress well. > I plan to compress the individual help files inside the AMB container [1]. > Compressing the individual files and not the whole container guarantees fast > seeking. First, deflate [2] came into my mind, which is basically LZSS + > Huffman. But, for sake of simplicity, I wanted to test if one of the two > steps could be left out without massively impacting the compression ratio. > The algorithm you mention seems to implement exactly this, some LSZZ > derivative while skipping the Huffman coding. I will have a detailed look at > it, but tend to make / re-use a C implementation, so it can be included in > the official AMB, if Matheusz is interested. I'd expect some rather big factor using Huffman because natural language (26 lower case characters, the occasional upper case) have only ~4.5 Bit Entropy for each character. good luck measuring... Tom > Thanks for the hint! > Bernd > [1] http://amb.osdn.io/phpamb.php?fname=archiwum/format-20201216.amb > [2] https://datatracker.ietf.org/doc/html/rfc1951 > On 01.09.2023 20:00, C. Masloch via Freedos-devel wrote: >> 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 > _______________________________________________ > Freedos-devel mailing list > Freedos-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/freedos-devel Mit freundlichen Grüßen / with kind regards Tom Ehlert +49-15151898538 _______________________________________________ Freedos-devel mailing list Freedos-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-devel