+174.96
Рейтинг
748.12
Сила

spke, specke или просто лёша

Ну как-то дыхнуло на меня Раскольниковым от этого, ну или Смердяковым, я как-то не до конца понял :)
Только для подлостей ничего не нужно. Тут русский дух, тут Достоевским пахнет.
Которых будут сетовать предлагаю расстреливать. Чтобы не мучались.

А вообще, компрессия — реально другой способ делать size-intro. Требует другие навыки, во многом ортогональные нормальному size-coding. Поэтому, с моей точки зрения, это скорее способ поддержать основы, путём увеличения видового разнообразия.
«Down with rules 256b» использует чуть подпиленный ZX7mini. Лично для меня это было важной частью задачи — показать, что компрессия актуальна в 256b, тем более что бут-сектор для Atari ST, послуживший моим вдохновением, занимал 512б и распаковывался, по словам автора, до 39438 байт: www.pouet.net/prod.php?which=57063

«Splash 1K» и «Chaos Construction 1K» используют ZX7 со стандартным распаковщиком.
Да, тоже этим занимался :) Хотя это очень быстро меня утомляет, экспоненциальный рост сложности такой оптимизации всё же парит :)

Ещё возил программу по памяти, чтобы константы брать из случайных регистров. Ещё, в самом конце уже, модифицировал распаковщики, чтобы сберечь несколько бит на настройках уже самого распаковщика (скажем, zx7mini копирует первый байт вслепую, а потом уже следит по битовому потоку. У меня выходило, что всё равно первые 6-8 байт не паковались, поэтому я просто копировал их автоматом, меняя настойки самого распаковщика).
Упаковщик Hrum в составе mhmt УЖЕ оптимальный. Нет, Hrust 1 объективно лучший пакер Пьянкова на данный момент. Но по сжатию их вроде выжали на 100%. Теперь есть запас только по скорости.

Хотя, нужно будет расследовать, как именно там выбираются моменты для вставки кодов расширения ссылок в Hrust 1, потому что я что-то не совсем понимаю как это можно сделать оптимально, особенно с учётом того, что укорачивать коды вроде тоже декомпрессор позволяет.
Для ловли блох такого рода, рекомендую пересобрать избранный оптимальный пакер, добавив к нему функцию печати итогового числа бит. Часто бывает, что есть 2-3 варианта кода, вроде примерно одно и то же, на итоговый размер в байтах не влияет, но в таком упаковщике с битами видишь, какой вариант был реально оптимальнее. Я много сберёг используя такой подход в «Down with the rules». Очень много циклов развернул и т.д. У меня гораздо больше итоговый неупакованный размер интры, по сравнению с тем, что делал ты. Подозреваю, что на 4кб должно получаться 6-7кб кода «оптимизированного под упаковщик». Например, вместо декранчера писать хорошо жмущийся код — ну, ты понимаешь.
Т.е. для себя я сделал такой вывод: нужно переписать Hrust 1 и Hrum для работы с битовым потоком в байтах (вместо битов) и переписать их распаковщики примерно по той же схеме, по которой написаны сейчас ApLib, Exomizer и ZX7. Думаю, это уменьшит их размер Hrust 1 и сделает его вполне конкурентными в чём-то вроде 4K; в случае с Hrum я думаю больше смысла пытаться конкурировать с пакерами типа ZX7, т.е. брать размером распаковщика и скоростью распаковки.
Распаковщик Hrust мне кажется великоват, не пробовал его. Хотя...

                  dizzy4k (unpacked size 4973)

                 smallest  packed   total   free
                 unpacker   size     size   bytes

appack             156      3906     4062    34
exomizer -c        154      3855     4009    87
hrum               105      3968     4073    23
hrust 1            209      3851     4060    36
hrust 2            212      3944     4156   -60
megalz             110      3963     4073    23
zx7                 69      4006     4075    21

                  c2h5oh (unpacked size 5232)

                 smallest  packed   total   free
                 unpacker   size     size   bytes

appack             156      3887     4043    53
exomizer -c        154      3816     3970   126
hrum               105      3937     4042    54
hrust 1            209      3825     4034    62
hrust 2            212      3903     4115   -19
megalz             110      3931     4041    55
zx7                 69      3988     4057    39
Т.е. Exomizer однозначный лидер, ZX7 скорее всего уже на этом масштабе неактуально использовать.
ApPack, Hrum, MegaLZ на этом масштабе почти неразличимы, чего и следовало ожидать по итогам больших тестов.
Ну вот что получилось у меня сейчас:

                  dizzy4k (unpacked size 4973)

                 smallest  packed   total   free
                 unpacker   size     size   bytes

appack             156      3906     4062    34
exomizer -c        154      3855     4009    87
hrum               105      3968     4073    23
megalz             110      3963     4073    23
zx7                 69      4006     4075    21

                  c2h5oh (unpacked size 5232)

                 smallest  packed   total   free
                 unpacker   size     size   bytes

appack             156      3887     4043    53
exomizer -c        154      3816     3970   126
hrum               105      3937     4042    54
megalz             110      3931     4041    55
zx7                 69      3988     4057    39
Чисто наобум я бы предложил Exomizer, т.к. распаковщик не очень большой, буфер — не проблема, равно как и медленная распаковка. Вечером прогоню тест.
Это сознательное решение: я не включил ни один специализированный упаковщик для упаковки картинок. Они, всё же, немного вещь в себе; тем более что там есть вариации ZX7 (RCS), различные версии Laser Compact и т.д. Это какое-то отдельное упражнение, которое я думаю оставить кому-то другому, отчасти из-за того, что сам я этими технологиями почти никогда не пользуюсь.
Всё, сделал для него распаковщик.
Добавил распаковщик Hrum; он получился слегка быстрее, чем Hrumer оценил в своей документации, скорее всего из-за того, что упакованный блок больше не перекидывается по памяти.
Понял. Тогда делай поправку на то, что у меня все заголовки и депакеры убраны (кроме Hrust 2, с которым я поленился возиться, т.к. Hrust 1 показался мне более полезным и LZ4).
Только он с депакером или все твои цифры с депакерами?
ApLib              |  8397
Exomizer           |  8317
Hrum (optimal)     |  8705 - упаковано используя mhmt
Hrust 1 (optimal)  |  8337
Hrust 2 (optimal)  |  8493
MegaLZ (optimal)   |  8666 - перепроверь свою цифру (я паковал используя mhmt)
Pletter5           |  8677
PuCrunch           |  8542
ZX7                |  9065
LZ4 optimal        | 9804 (9791 если удалить заголовки)
Т.е., видимо, есть смысл посмотреть на TLZ.
В любом случае, спасибо за дополнительные данные — тем более что наблюдения по коэффициентам сжатия вполне совпадают, насколько я вижу.