Сравнение компрессоров для Spectrum: Imploder, Pack Maker, TomPacker и Turbo Imploder

ZX Land #05

Компрессоры, «сжиматели», «имплодеры»…

Или зачем нужен пакер дома

Частая проблема пользователей компьютеров, собирающих программы, — необходимость покупать дополнительные носители (диски или кассеты). Игры обычно довольно большие и занимают много места на носителе. Да и ожидание загрузки программы иногда может начать раздражать.

Именно тут кому-то пришла в голову замечательная идея написать программу, которая будет «укорачивать» блоки памяти, удаляя «ненужные» байты. Я так это назвал, хотя на самом деле всё устроено немного иначе.

В чём заключается сжатие? (Этим словом я буду обозначать все виды «упаковки».) Это процесс, который ищет в памяти подряд идущие повторяющиеся байты и заменяет их одним условным маркером. Другой способ — искать наиболее часто повторяющиеся последовательности байтов и заменять их одной такой последовательностью в памяти, а специальные маркеры указывают, куда её поместить. Часто сочетают несколько методов, благодаря чему сжатие становится эффективнее.

Однако эта статья не о том, как написать собственный компрессор. Здесь я сравниваю лучшие спектрумовские компрессоры.

Чтобы выяснить, какой из них лучший, я использовал самые обычные блоки памяти. Впрочем, слово «лучший» здесь не совсем подходит: у каждой из этих программ есть свои достоинства и недостатки.

Ещё отмечу, что на подготовку этой статьи у меня ушло два дня — только на само сжатие. Думаю, я протестировал почти всё (или, по крайней мере, самые распространённые случаи).

Но перейдём к сравнению.

Музыкальные сэмплы

Для начала я решил заняться сэмплами. Для этого взял одну из мелодий 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

Поделитесь вашим мнением о статье