|
ZX Club
#06
31 декабря 1997 |
|
Users group - Компрессия кодовых блоков - работа с 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'ом куда более приятно и понятно, чем
читать вот этот самый текст.
Дмитрий Пьянков
Другие статьи номера:
Похожие статьи:
В этот день... 15 ноября