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'ом куда более приятно и понятно, чем читать вот этот самый текст. Дмитрий Пьянков
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября