Info Guide #05
30 апреля 2004

Sofтинка - компрессор текстов MS Pack 01.96.

<b>Sofтинка</b> - компрессор текстов MS Pack 01.96.
MS Pack 01.96
 

   По  мнению Hrumer'а, автора упаковщиков
Hrust, лучшим  компрессором  текстов на ZX 
до 2000 года был MS Pack. Жаль,конечно,что 
Hrumer никогда не писал статей по вопросам 
компрессии  и не стал отвечать на мои воп- 
росы  лично, а  ведь  его  имя и программы 
всплывают  в этом  разделе  уже  не первый 
раз. Однако,что же представляет собой фор- 
мат компрессора Microspace? 

   Распаковщик, к сожалению,неоптимален по
длине. Структура переходов поддаётся опти-
мизации, лишний XOR A, малополезное сохра-
нение HL'... Но скорость декомпрессии при-
личная - например,для упаковки ПЗУ MS Pack
и сегодня почти незаменим. Ведь в нём сло-
варь, в  отличие  от  Hrum, составляет всю
длину файла. Конечно,это сказалось на ско-
рости  самого  упаковщика. Хэширования для
ускорения  поиска  повторов нет ни в Hrum,
ни в MS Pack.
   Имеются битовый и байтовый потоки,бито-
вый поток выбирается по 2 байта. Для рабо-
ты используется  стек (принцип  ADD HL,HL:
DJNZ:POP HL:LD B,C ). 

   Упакованный  блок  должен  лежать после
распаковщика  (Hrum-подобный принцип). Бу- 
дем отсчитывать байты  от начала распаков- 
щика: 

 +#e9 - адрес,по которому лежат 5 байт кон- 
  ца файла. Точнее,адрес+4, т.к.байты копи-
  руются через LDDR. Почему 5 байт не лежат
  непосредственно  без указателя? Тем более
  что 4 байта (или даже 6, если в конце де-
  компрессора не JP, а RET) до упакованного
  блока не используются? Если бы 5 байт ко-
  нца файла лежали впритык за депакером, их
  не  пришлось  бы и перебрасывать! Так что
 это решение авторов довольно странно.
 +#eb - 2 байта HL для  перемещения  упако- 
 ванного блока (с помощью LDDR );
+#ed - 2 байта DE, аналогично; 
+#ef - 2 байта BC, аналогично; 
+#f1 - адрес, куда распаковывать (DE'); 
+#f3 - первые 2 байта битового потока. 

   Далее согласно битовому потоку:

%0 - просто байт (из байтового потока); 
 %100 - puts=2. Короткая  ссылка:  disp8  в 
  байтовом потоке (1..256, причём 0 соотве-
 тствует 1 и т.д.!);
%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; 
 %11100 - взять некий byte из байтового по- 
  тока.  Если -1, то  прервать  распаковку.
  Если -2, то следующие  2 байта в байтовом
  потоке - это  puts,  иначе  puts=byte+17=
 =17..270.

   Потом для всех ссылок,кроме puts=2 (для
неё  выше  было написано особо), следующим 
образом вычисляется disp (учтите, что в MS 
Pack disp нестандартный - он вычитается из 
адреса-1! Именно поэтому  в puts=2 уточне- 
но, что чему соответствует!): 

%1 - аналогично puts=2; 
 %0000 - dispH=1, здесь и далее dispL берё- 
 тся из байтового потока после 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 из байтового потока. 

                       подготовил А. Кодер



Другие статьи номера:

CacheVox - Пакет программ для импорта и последующего проигрывания с дискет цифровой музыки.

For Coderz - RAYCASTING - сделай себе немного DOOM'a. Алгоритм трассировки 3D лабиринта как в игре WOLF.

Inferno - О журнале.

DIY - Приспосабливаем мышь от Amiga к ZX Spectrum.

Sofтинка - обзор экранных упаковщиков для ZX Spectrum.

Inferno - Авторы и контакты редакции.

Gameland - описание игры Stronghold (Бастион).

Sofтинка - Пакет CacheVox v1.0 для импорта и проигрывания с дискет цифровой музыки.

Интервью - интервью с Disabler'ом - кодером, художником и железячником из Ростова-на-Дону.

Others - Глюки записи на дискеты. Причины и методы борьбы.

Gameland - Краткое описание проблем игры Dune: Imperia 2.

Inferno - Ошибки в предыдущих номерах.

For Coderz - Маленькие программерские хитрости.

Spectrum - Форматы упакованных данных на ZX Spectrum.

Gameland - об игре Hexagonal Filler.

Sofтинка - Hrum 3.5i - самый быстрый LZ-распаковщик с битовым потоком.

DIY - Изготовление хвоста для мышки.

Железо - Исследуем микросхему К561ИЕ10A.

Железо - Исследуем микросхему КР1533ИЕ7.

Железо - Исследуем микросхему К561ТЛ1. .

Sofтинка - экранный компрессор Laser Compact 4.0.

Inferno - Письма в редакцию.

Sofтинка - компрессор текстов MS Pack 01.96.

Inferno - Об оболочке.

Sofтинка - преимущества архиватора Rar.

Sofтинка - Упаковщик RGB картинок Powerful Code Decreaser v6.2.

Ликбез - Что такое плюс и минус напряжения.

Ликбез - Как работает защита элементов цепи.

For Coderz - Нюансы Raycasting-а.

Sofтинка - Real Information Packer 0.2x - один из самых мощных компрессоров на ZX.

For Coderz - Автосборка программы. Оптимизируем процесс сборки.

Inferno - Вступление.

Others - Результаты анкетирования.

Others - The Compo. Об анкетировании.

О Спектруме - размышления о будущем спектрума.

Железо - Еще раз о защите микросхемы КР1818ВГ93.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Слово авторов - Полтора месяца спустя...
Интервью - с известным музыкантом и программистом IMP.
Мозаика - Споры о журнале "Оберон".
WANTED - Розыск программ...
Новые строки летописи - Аэлита-94.

В этот день...   26 апреля