Компрессоры, «сжиматели», «имплодеры»…
Или зачем нужен пакер дома
Частая проблема пользователей компьютеров, собирающих программы, — необходимость покупать дополнительные носители (диски или кассеты). Игры обычно довольно большие и занимают много места на носителе. Да и ожидание загрузки программы иногда может начать раздражать.
Именно тут кому-то пришла в голову замечательная идея написать программу, которая будет «укорачивать» блоки памяти, удаляя «ненужные» байты. Я так это назвал, хотя на самом деле всё устроено немного иначе.
В чём заключается сжатие? (Этим словом я буду обозначать все виды «упаковки».) Это процесс, который ищет в памяти подряд идущие повторяющиеся байты и заменяет их одним условным маркером. Другой способ — искать наиболее часто повторяющиеся последовательности байтов и заменять их одной такой последовательностью в памяти, а специальные маркеры указывают, куда её поместить. Часто сочетают несколько методов, благодаря чему сжатие становится эффективнее.
Однако эта статья не о том, как написать собственный компрессор. Здесь я сравниваю лучшие спектрумовские компрессоры.
Чтобы выяснить, какой из них лучший, я использовал самые обычные блоки памяти. Впрочем, слово «лучший» здесь не совсем подходит: у каждой из этих программ есть свои достоинства и недостатки.
Ещё отмечу, что на подготовку этой статьи у меня ушло два дня — только на само сжатие. Думаю, я протестировал почти всё (или, по крайней мере, самые распространённые случаи).
Но перейдём к сравнению.
Музыкальные сэмплы
Для начала я решил заняться сэмплами. Для этого взял одну из мелодий Kriss.
Sample-Music — длина: 21 383 байта
| Компрессор | Размер после сжатия | Очки |
|---|---|---|
| IMPLODER | 11 439 | 1 |
| PACK MAKER | 9 620 | 4 |
| TOMPACKER | 10 037 | 2 |
| TURBO IMPLODER | 10 031 | 3 |
Данные игры
Затем я взял из игры SAVAGE 1 блок длиной 32 768 байт, начиная с адреса 32768. Я выбрал именно его, потому что в нём есть и музыка, и графика, и код — то есть всё, из чего состоит программа.
| Компрессор | Размер после сжатия | Очки |
|---|---|---|
| IMPLODER | 20 955 | 2 |
| PACK MAKER | 23 180 | 1 |
| TOMPACKER | 20 224 | 3 |
| TURBO IMPLODER | 20 218 | 4 |
Графика
Теперь очередь дошла до графики. Я использовал рисунок из игры GRELL & FALLA (он очень сложный, поэтому отлично подходит для теста). Размер блока — 6 912 байт.
| Компрессор | Размер после сжатия | Очки |
|---|---|---|
| IMPLODER | 6 184 | 1 |
| PACK MAKER | 6 067 | 2 |
| TOMPACKER | 5 970 | 3 |
| TURBO IMPLODER | 5 964 | 4 |
Случайные байты
Чтобы проверить, какая программа лучше справится со сжатием полной бессмыслицы — случайных байтов, — я написал короткую программу на BASIC. Она брала из ROM какой-то байт и умножала его на синус случайно выбранного числа (RND), а затем выполняла различные умножения, деления, извлечения квадратного корня и прочие операции. Так я получил 16 КБ «странных» байтов. Чтобы устроить ещё большую «кашу», я обработал эти 16 КБ дополнительными операциями по той же формуле и присоединил полученный блок (ещё 16 КБ) к первому. Итого для сжатия было 32 768 байт.
И какая программа справилась лучше?
| Компрессор | Размер после сжатия | Очки |
|---|---|---|
| IMPLODER | 32 488 | 1 |
| PACK MAKER | 28 447 | 4 |
| TOMPACKER | 32 411 | 2 |
| TURBO IMPLODER | 32 405 | 3 |
Кадры анимации
Поскольку в демо часто используют так называемую анимацию, я решил снять несколько кадров из демо BRANCH OF MIND (сферы с трассировкой лучей). В результате получился блок длиной 34 560 байт.
| Компрессор | Размер после сжатия | Очки |
|---|---|---|
| IMPLODER | 6 554 | 4 |
| PACK MAKER | 10 248 | 1 |
| TOMPACKER | 9 490 | 2 |
| TURBO IMPLODER | 8 443 | 3 |
Тексты
Как будто этого было мало, я придумал испытать то, что мне особенно близко, — тексты. Отлично подошли тексты из ZX LAND 4. Я скопировал некоторые из них (не все) и получил блок длиной 40 330 байт. Вот результаты:
| Компрессор | Размер после сжатия | Очки |
|---|---|---|
| IMPLODER | 25 977 | 3 |
| PACK MAKER | 23 087 | 4 |
| TOMPACKER | 26 527 | 1 |
| TURBO IMPLODER | 26 521 | 2 |
Общий результат
За лучшее сжатие программа получала 4 очка, за второе место — 3, за третье — 2, а за последнее — 1. Итого:
- IMPLODER — 1+2+1+1+4+3 = 12
- PACK MAKER — 4+1+2+4+1+4 = 16
- TOMPACKER — 2+3+3+2+2+1 = 13
- TURBO IMPLODER — 3+4+4+3+3+2 = 19
Как видно, лучше всех показал себя TURBO IMPLODER, но я бы поставил его наравне с TOMPACKER. У них один и тот же алгоритм сжатия. Разница объясняется тем, что декомпрессор, добавляемый к сжатому блоку, у одного из них на 6 байт длиннее.
Но сейчас не время углубляться в эту тему. О достоинствах и недостатках этих программ я расскажу во второй части статьи.
Pyza
Поделитесь вашим мнением о статье