Hello Guys,
This is a context mixing file compressor written in pure x86-64 assembly language.
I would like to contribute to the forum by sharing it's source.
The compressor is mainly made for MenuetOS which is an x86-64 based OS as well.
So, 'mntcm' is not intended to be better than any of the other codecs, it just suits MeOS' needs.
- the codec uses 12+2 models, from which two are low-order match models.
- has a balance between speed and memory optimization (not the fastest out there, but can work by using a moderate amount of memory)
- fits into 4k
The codec is mainly based on the descriptions (Data Compression Explained) provided by Mr. Mahoney.
The source contains a C-based 'template', both a nasm and a fasm version and a C-interface example 'mntcm.exe' for Win64 (can be compiled for Linux I suppose).
Some test results here:
kernel.mnt (Menuet's 1.0 kernel or so):
original: 218880 bytes
compressed: 77040 bytes
x86-filtered and compressed: 72790 bytes
calgary.tar:
compressed: 701,112 bytes
RLE filtered and compressed: 698,705 bytes
enwik8:
compressed: 22,112,131 bytes
As can be seen, the compressor is mainly suitable - and tuned - for executables, especially when x86 filtering is done.
Currently, it does not use any filter.
It's speed is not as good as cmm's or ccm's, but operates around ~600KB/s on my Core2 Duo.
(Since it's an old machine, the asm version employs only SSE2-3-SSSE3 instructions)
Can be downloaded here:
https://www.mediafire.com/?i626w66m7f6hl57
Details are later, the overall code is still not finalized, some models were removed etc..
Regards,
Akos