PDA

Просмотр полной версии : Формат файлов Hrust 1.3



Sinus
26.06.2005, 04:14
Хелп анегай!

Надо описание формата Hrust'a (Hrumer, ауууу ^_^)
В AlCoNews#11 есть про 2.1, а мне надо про 1.1 (вроде 1.3 тоже самое)

Пытался втыкать по распаковщику, но на самом деле слабо въехал.

Alexandr Medvedev
26.06.2005, 09:07
Надо описание формата Hrust'a (Hrumer, ауууу ^_^) Hrust 1.x

Распаковщик Hrust 1.x - самый хитрый
распаковщик на ZX. Несмотря на небольшой
размер, он вполне способен запутать любого
заглянувшего.

Уникальность формата в том,что он прямо
предназначен для сжатия кодов.Для этого он
снабжён кодами копирования с разрывом, ка-
ких больше нигде нет. Дополнительно приме-
нены расширяющиеся коды смещений,которые в
начале файла короткие и указывают недале-
ко, а ближе к концу - длинные.
В авторском комплекте имеется два рас-
паковщика - с входным потоком в стеке и с
входным потоком в IX. Еще один распаковщик
в виде бейсик-загрузчика сделал из первого
Alone Coder. Все они эквивалентны.
Распаковщик начинается с переброски
упакованного блока в конец памяти,выделен-
ной для распаковки. Переброска идёт только
в случае, если адрес конца упакованного
блока изначально меньше адреса конца памя-
ти для распаковки. Бейсик-вариант этого
фрагмента не содержит,там нужно самому ко-
нтролировать,чтобы упакованный блок в про-
цессе распаковки не портился.Тем не менее,
есть шанс, что он запорется и в авторских
распаковщиках, после переброски. Для этого
конец блока должен плохо паковаться.

Битовый поток берётся кусками по 16
бит. C содержит константу 16. D содержит
один сброшенный бит,положение которого от-
носительно левого края байта определяет
длину расширяемых ссылок. Изначально D= bf
(назовём это состояние "2 бита расширяемой
ссылки"),далее периодическо происходит RRC
D ("3..8 бит расширяемой ссылки").

Упакованные блоки имеют заголовок:

+0 "HR".
+2 распакованная длина.
+4 упакованная длина.
+6 шесть последних байт блока.
+12 два байта начала битового потока.
+13 первый байт блока.
+14 сами упакованные данные.

Обработка упакованных данных осуществ-
ляется согласно указаниям битового потока:

%1 - получить байт из байтового потока и
поместить куда распаковываем.
%000,-disp3 - копировать 1 байт со смеще-
ния -1..8
%001 - копировать C=2 байта. disp кодируе-
тся так:
%00Ў%01: -dispH= fdЎ fe, -dispL в битовом
потоке;
%10: -dispH= ff, далее исходя из байтово-
го потока: числа < e0 понимаются как
-dispL (ссылка обычная), Є e0 хитро:
RLCA:XOR C, при A=-1 расширяется длина
ссылки, иначе SUB 15 и получаем -dispL=
= b2Ў ee (ссылка со вставным байтом:байт
из $-disp, байт из байтового потока,байт
из $+2-disp );
%11,-disp5: обычная ссылка (через %10 та-
кие короткие disp описать нельзя);
%010 - копировать C=3 байта. Здесь и далее
disp кодируется так:
%00: -dispH= fe, -dispL в битовом потоке;
%01: -dispH= ff, далее исходя из байтово-
го потока: числа < e0 понимаются как
-dispL (ссылка обычная), Є e0 хитро:
RLCA:XOR C, при A=-1 расширяется длина
ссылки (на самом деле не используется),
иначе SUB 15 и получаем -dispL= b1Ў ef
(со вставным байтом:байт из $-disp, байт
из байтового потока, байт из $+2-disp );
%10,-disp5;
%11: расширяющаяся ссылка. -dispH берётся
из битового потока, число битов согласно
D ( bf.. fe соответствует 2..8 бит).
-dispL берётся из байтового потока. В
остальном ссылка как ссылка.
%01100 - копировать C=4 байта как выше.
Здесь и далее коды ссылок со вставным ба-
йтом невыгодны, но есть.
%01110 - копировать 5.
%0111100 - копировать 6.
%0111101 - копировать 7.
%0111110 - копировать 8.
%011111100 - копировать 9.
%011111101 - копировать 10.
%011111110 - копировать 11.
%01111111100 - копировать 12.
%01111111101 - копировать 13.
%01111111110 - копировать 14.
%01111111111 - копировать 15.
И особенные случаи:
%01101000001111 - конец файла.
%0110100,len7 - если len7>15, то len будет
равно len7*256+байт_из_байтового_пото ка.
В любом случае результат ляжет в BC, а
далее см. случаи с len=3..15.
%0110101xxxx - 12Ў42 (чётное число) байтов
из байтового потока.
%011011,-disp4: ссылка со вставным байтом:
байт из $-disp, байт из байтового потока,
байт из $+2-disp. Сделано из-за того, что
в %001 предусмотрены только -dispL= b2..
ee, причем чётные, а в %010 только b1..
ef, нечётные.

Sinus
26.06.2005, 12:44
Вроде то что надо.

lvd
26.06.2005, 15:05
Hrust 1.x

Распаковщик Hrust 1.x - самый хитрый
распаковщик на ZX. Несмотря на небольшой
размер, он вполне способен запутать любого
заглянувшего.

Уникальность формата в том,что он прямо
предназначен для сжатия кодов.Для этого он
снабжён кодами копирования с разрывом, ка-
ких больше нигде нет. Дополнительно приме-
нены расширяющиеся коды смещений,которые в
начале файла короткие и указывают недале-
ко, а ближе к концу - длинные.
[skip]



...продираясь сквозь белорусские буквы...

А что имеется в виду под копированием с разрывом?

jtn
27.06.2005, 01:08
......и всё таки лучший пакер для кодов это HRUM!!

Dr.Lion/RSM
27.06.2005, 02:42
......и всё таки лучший пакер для кодов это HRUM!!
А в чем основные отличия в алгоритмах паковки между HRUM и HRUST? Просветите, если кто вкурсе!

Sinus
27.06.2005, 03:14
...продираясь сквозь белорусские буквы...

А что имеется в виду под копированием с разрывом?
Копирование с разрывом?
Наверное имелось ввиду копировать N байт со смешения (-OFS)

З.Ы. А депакер действительно странно написан. Я посидел, поизменял чуток. Может и стало на 10-20 байт больше, но зато стало возможно разобраться в логике работы ;)

Hrumer
27.06.2005, 12:13
Привет!

Копирование с разрывом:

Если ранее встретилась последовательность ABC, и далее встретилась на каком то расстоянии от нее последовательность AXC, то вставляем спец.код, говорящий о такой ситуации, указываем расстояние до ABC, далее указываем сам символ X.

hrum-hrust:

hrum: короткий распаковщик, подвязываемый к упакованном блоку.
hrust: отдельный распаковщик, не более 256 байт, по максимуму забитый всем, чем можно.

elf/2
27.06.2005, 12:14
Копирование с разрывом?
Наверное имелось ввиду копировать N байт со смешения (-OFS)
нет. имелось ввиду:
1. копируем один байт по смещению -off
2. копируем один байт из байтового потока
3. копируем один байт по смещению -off+2

elf/2
27.06.2005, 12:16
Привет!
hrum-hrust:

hrum: короткий распаковщик, подвязываемый к упакованном блоку.
hrust: отдельный распаковщик, не более 256 байт, по максимуму забитый всем, чем можно.
в аттаче распаковщики на си, развернутые. если присмотреться то алгоритм понятен...

Sinus
01.07.2005, 02:07
elf/2 объясняет Hrumer'у как работает hrust ;) ;) ;) ;) ;) ;) ;)

Всем спасибо, всё круто, ждите TargeT ;)

elf/2
01.07.2005, 12:58
elf/2 объясняет Hrumer'у как работает hrust
ты все неправильно понял: elf/2 отдает исходники написанные коллективно с hrumer'ом в народ :)

Sinus
02.07.2005, 22:59
А! Всё ясно. Гоменасай (яп. звиняй) тогда ;)

MadCat!
12.08.2005, 17:12
а на pc есть упаковщики типа hrum/hrust/rip?
было бы очень удобно иметь тот же RIP с автовыбором оптимального размера словаря

Sinus
13.08.2005, 21:31
hrum и hrust есть точно.
rip вроде нету.

Sergey Zotov (2:5057/56)
13.08.2005, 22:47
Прошёл день, а ты всё жив! Sinus!

On 13 Aug 05, Sinus wrote to MadCat!:

S> hrum и hrust есть точно.
S> rip вроде нету.

Вообще-то где-то описание я встречал. Только оно такое запутанное было, что я нифига не понял... :(

MadCat!
14.08.2005, 12:30
hrum и hrust есть точно.
rip вроде нету.
забыл спросить, где взять???

2 Hrumer: если у тебя, говори, где лежит :) А они с автоподбором размера окна/словаря? если нет, ищу и исходники ;)

Alexandr Medvedev
18.08.2005, 14:43
а на pc есть упаковщики типа hrum/hrust/rip?Есть для hrum, hrust (только 1.x), laser compact.