Inferno #05
30 апреля 2004 |
|
Softinka - Compressor texts MS Pack 01.96.
MS Pack 01.96 According to Hrumer'a, author Packers Hrust, the best compressor texts ZX until 2000 was MS Pack. It is unfortunate that Hrumer never wrote articles on compression and did not answer my questions in person, and yet his name and the program emerge in this section is not the first times. However, what is the format of the compressor Microspace? Extractor, unfortunately, not optimal for length. The navigation structure amenable to optimization, extra XOR A, little use conservation HL '... But a decent rate of decompression - for example, for packaging ROM MS Pack and today almost irreplaceable. After all, it dictionary, unlike Hrum, is all length of the file. Of course, it affected the speed of the packer. Hashing for accelerate the search for repetitions in no Hrum, either in MS Pack. There is bit and byte streams, bit stream is selected by 2 bytes. To work uses a stack (the principle ADD HL, HL: DJNZ: POP HL: LD B, C). Packaged unit shall lie after unpacker (Hrum-similar principle). Let us count the bytes from the beginning unpacker: + # E9 - the address to which 5 bytes are con sample file. More precisely, the address 4, t.k.bayty Mine ruyutsya through LDDR. Why not 5 bytes are directly without a pointer? Especially that 4 bytes (or even 6, if at the end of the de compressor is not JP, and RET) to the packed block is not used? If 5 bytes to ntsa file lying right next depakerom for their would not have, and to throw! So this solution the authors rather strange. + # Eb - HL 2 bytes to move the packed vannogo block (using LDDR); + # Ed - 2 bytes DE, similarly; + # Ef - 2 bytes of BC, the same; + # F1 - address where to unpack (DE '); + # F3 - the first 2 bytes of the bitstream. Further, according to the bit stream: % 0 - just bytes (of a byte stream); % 100 - puts = 2. Slug: disp8 in byte stream (1 .. 256, with 0 resp tstvuet 1 and so on!) 101% - puts = 3; % 110 - puts = 4; % 11101 - puts = 5; % 11110 - puts = 6; % 1111100 - puts = 7; % 1111101 - puts = 8; % 1111110 - puts = 9; 111111100% - puts = 10; 111111101% - puts = 11; 111111110% - puts = 12; 11111111100% - puts = 13; 11111111101% - puts = 14; 11111111110% - puts = 15; 11111111111% - puts = 16; % 11,100 - to take a byte from byte to current. If -1, then stop unpacking. If -2, the next 2 bytes in the byte stream - it puts, otherwise puts = byte +17 = = 17 .. 270. Then for all links, except puts = 2 (for It was written above mentioned), the following manner calculated disp (note that in MS Pack disp unusual - it is subtracted from the Address-1! That is why in puts = 2 clarified that which corresponds to!): % 1 - similarly puts = 2; % 0000 - dispH = 1, hereafter dispL pregnant tsya from a byte stream after dispH; % 0001 - dispH = 2; % 00100 - dispH = 3; % 00101 - dispH = 4; % 00110 - dispH = 5; % 00111 - dispH = 6; % 010000 - dispH = 7; % 010001 - dispH = 8; % 010010 - dispH = 9; % 010011 - dispH = 10; % 010100 - dispH = 11; % 010101 - dispH = 12; % 010110 - dispH = 13; % 0101110 - dispH = 14; % 0101111 - dispH = 15; % 0110000 - dispH = 16; ... % 0111110 - dispH = 30; % 0111111 - dispH from a byte stream. Prepared by Coder
Other articles:
Similar articles:
В этот день... 21 November