ZX Club #06
31 декабря 1997
  Софт  

Users group - Компрессия кодовых блоков - работа с HRUM v3.5.

<b>Users group</b> - Компрессия кодовых блоков - работа с HRUM v3.5.
        КОМПРЕССИЯ КОДОВЫХ БЛОКОВ
           Работа с Hrum v3.5i


  Цель написания этого текста - дать наи-
более полную информацию по работе с прог-
раммой hrum 3.5i  -  упаковщиком  кодовых
блоков.

┌───────────────────────────────────────┐
│  Некоторые характеристики HRUM 3.5i   │
└───────────────────────────────────────┘

Максимальная  длина  файла, который может
быть  упакован и в дальнейшем распакован:
                 49033 байт
    Полная длина декомпрессора: 150 байт
       Длина декомпрессора: 119 байт
       Скорость компрессии: 1 кб/с
     Скорость декомпрессии: 33 кб/с
          Возможность работы с
   включенными IM 2 прерываниями: есть
       Степень сжатия: немеряная

 Теперь  можно  загружать и запускать ог-
ромные  файлы  (по Спектрумовским меркам,
естественно) - длиной до 49033 байт, даже
из бейсика...

┌───────────────────────────────────────┐
│    Установка параметров / Опции :     │
└───────────────────────────────────────┘

Change Drive - Выбор  дисковода.  Клавиши
              A, B, C, D + ENTER; ENTER -
              смена дискеты. EDIT-отмена.
Optimization - Рудимент.  В версиях 1.х и
              2.х     повышал     степень
              компрессии на 1 - 1.5 %
              В  версии 3.х признан неце-
              лесообразным,  т.к. степень
              компрессии повышал всего на
              0.01 %. Установка знака "+"
              вместо  "-" поможет сэконо-
              мить на рыхлых файлах около
              3 - 30 байт.
Compression - Компрессия  файла. Владель-
              цам  SPECTRUM  48  не стоит
              менять  диски  при упаковке
              файлов,    длина    которых
              больше 25600 байт.
              По окончании упаковки выво-
              дятся   длина  упакованного
              файла и степень компрессии.
              Запрашивается имя файла:
                     "A:________"
              Изменив  "A:" на "B:", нап-
              ример,  файл  запишется  на
              дисковод "B".
File address - Стартовый  адрес упакован-
              ного файла.
Decompres to - Адрес ,  указывающий  куда
              будет произведена распаков-
              ка.  <cat>  - означает, что
              адрес  берется из каталога.
Decompressor - По этому адресу будет рас-
              полагаться 119 байтный блок
              обеспечивающий распаковку.
              Важно,  чтобы  этот блок не
              перекрывал адреса:
              1) стека на данный момент
              2) упакованных данных
              3) еще не распакованных
                                 данных.
Int. on exit - Прерывания на выходе.
Auto - Start - Адрес автозапуска.
New SP       - Новый указатель стека
                              на выходе.
About compressor - Информация.
Exit to TR-DOS   - Выход.


┌───────────────────────────────────────┐
│    Простейший пример использования    │
└───────────────────────────────────────┘

               Игра DIZZY3
      На диске состоит из 3 файлов:

  DIZZY3.B  - загрузчик на бейсике.

  dizzy31.C start:40000,length:4054
                  - упакованная заставка.

  dizzy32.C start:24576,length:40959
                         - основной блок.

  Файл DIZZY3.B:
 <R.U.=RANDOMIZE USR>

 10 CLEAR 24575
 20 R.U.15619:REM:LOAD"dizzy31"CODE
 30 R.U.40000
 40 R.U.15619:REM:LOAD"dizzy32"CODE
 50 REM:POKE 63001,0
 60 R.U. 24832

             Упакуем файл
  dizzy32.C start:24576,length:40959

Перед упаковкой файла установим:
 File address:<cat> (равносильно 24576)
  По  этому  адресу загружаем упакованный
файл и запускаем для распаковки.

 Decompress to:<cat>(равносильно 24576)
  Именно сюда произойдет распаковка файла

 Decompressor:23433  (распаковщик  длиной
  119  б. будет находиться в буфере прин-
                                   тера).

 Int.on  exit:EI(на  выходе  из  депакера
                    прерывания разрешены)

 Auto start:24832 (после распаковки прои-
           зойдет переход на этот адрес).

 Полученный файл назовем dizzy32c.C
 Переделаем загрузчик:

 10 CLEAR 24575
 20 R.U.15619:REM:LOAD"dizzy31"CODE
 30 R.U.40000
 40 R.U.15619:REM:LOAD"dizzy32с"CODE
 50 REM:POKE 63001,0
 60 R.U. 24576 ; распаковка и запуск.

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

  Auto start:NO

 А строки бейсика изменить(добавить):

 45 R.U. 24576   ; распаковка
 50 POKE 63001,0 ; бессмертие
 60 R.U. 24832   ; запуск

┌───────────────────────────────────────┐
│             Другой пример             │
└───────────────────────────────────────┘

  Допустим, Вы делаете адаптацию игры под
trdos и необходимо загрузить файл под ад-
рес  23296 и до конца памяти, а затем за-
пустить  игру  с некоего адреса. Запросто
так  загрузить такой длинный файл под та-
кой  адрес у Вас не получится. В одном из
журналов   zxformat  предлагалось  резать
файл на куски, один из кусков загружать в
экранную область, перебрасывать на нужное
место... Забудьте об этом кошмаре!!!
  Hrum  не  только может запаковать файлы
длиной  до 49033 байта, он так же поможет
загрузить вот такие длинные файлы (в упа-
кованной  форме - загрузить можно хоть из
бейсика),  распаковать,  изменить  статус
прерываний(EI/DI),SP, а так же перейти на
нужный адрес:

 В данном случае:
 File address:24576

 Decompress to:23296

 Decompressor:16384

 Int.on  exit:EI или DI

 Auto start: куда нужно перейти.

 New SP on exit: какой  нужен.

 Грузим  упакованный файл под адрес 24576
и запускаем с этого же адреса. ВСЕ!!!


┌───────────────────────────────────────┐
│       Как работает распаковщик        │
└───────────────────────────────────────┘

  После  запуска  программа  перекидывает
распаковщик  в определенную область и за-
пускает этот распаковщик. Далее упакован-
ный  блок перебрасывается в область, куда
будет  происходить  распаковка(в  верхние
адреса).  Потом происходит сама распаков-
ка.

   Особенности работы декомпрессора с
         включенным IM2 режимом:
Пусть ADR - адрес старта декомпрессора.
 Итак...
            1. Включаем IM 2
       2. Делаем: EI & CALL ADR+1
                  все.
 ISR должна использовать свой стек, типа:

       myim2
               LD (oldsp),SP
               LD SP,mysp
               PUSH ...

               ........

               POP ...
       oldsp   EQU $+1
               LD SP,0
               EI
               RET

  В    заключение   скажу:   пользоваться
Hrum'ом куда более приятно и понятно, чем
читать вот этот самый текст.

                          Дмитрий Пьянков



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

От редакции - ZX-CLUB развивается и формируется.

Soft group - Драйвер ввода в режимах последовательного и прямого доступа из файлов системы TR-DOS. Как использовать драйвер.

Hard group - ZS Scorpion 2000 - о GMX-контроллере.

Users group - Компрессия экранных файлов: Обзор ПО. Дискография. Анализ результатов компрессии.

Users group - Компрессия кодовых блоков - работа с HRUM v3.5.

News - Барнаульская олимпиада по информатике 1997 года.

News - Барнаульская фирма Komel приняла решение о поддержкеавторских программ.

News - конкурс на лучший вирус продолжается.

Досье - О деятельности барнаульских программистов: Кротов Олег , Маяцкий Виталий , Ростов Александр , Ковалев Роман (DJ RUSH), Командир Нортон (NC).

ZX-Поппури - Письма читателей из Магадана и Коврова , Воронежа и Чебоксар.

Enjoy - Как выйти замуж за программиста.

Фантастика - Повесть А.Питерского "Четырнадцатое измерение".

Toys - Новелла к игре "BISMARK".

Toys - описание к игре "BISMARK".

Toys - словарь к игре "BISMARK".


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

Похожие статьи:
Письмо №291
Лит.Страничка - Красный Винни (глава 5,6)
Виртуальный Spectrum - Тестирование эмуляторов ZX-Spectrum.
HARD and SOFT - Простейший Turbo Load/Save-ер.
interview - plaid^3umf.

В этот день...   21 ноября