Среда, 28.06.2017, 11:53

..



Главная Регистрация Вход
Приветствую Вас, Гость · Браузер: « v»
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Всё об «Электроника БК0010(-01), БК0011(М)»! » Программы | Утилиты | ДОСы » Упаковщики (Архиваторы) данных » «BKpack» » «BKpack v1.5» [xx.xx.92] (Автор: Ходулёв А.)
«BKpack v1.5» [xx.xx.92]
-=RUS=-Дата: Пятница, 28.11.2014, 00:13 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 350
Репутация: 1
Статус: Offline
(BKpack v1.5.doc)

        Программа BKpack - упаковщик исполняемых программ

        ▓▓▓▓▓▓┐ ▓▓┐  ▓▓┐▓▓▓▓▓▓┐   ▓▓▓▓▓┐ ▓▓▓▓▓┐ ▓▓┐  ▓▓┐
        ▓▓┼┴┴▓▓┐▓▓┤ ▓▓┼┘▓▓┼┴┴▓▓┐ ▓▓┼┴▓▓┤▓▓┼┴┴▓▓┐▓▓┤ ▓▓┼┘
        ▓▓▓▓▓▓┼┘▓▓▓▓▓┼┘ ▓▓▓▓▓▓┼┘▓▓┼┘ ▓▓┤▓▓┤  └┴┘▓▓▓▓▓┼┘
        ▓▓┼┴┴▓▓┐▓▓┼┴▓▓┐ ▓▓┼┴┴┴┘ ▓▓▓▓▓▓▓┤▓▓┤  ▓▓┐▓▓┼┴▓▓┐
        ▓▓▓▓▓▓┼┘▓▓┤  ▓▓┐▓▓┤     ▓▓┤  ▓▓┤└▓▓▓▓▓┼┘▓▓┤  ▓▓┐
        └┴┴┴┴┴┘ └┴┘  └┴┘└┴┘     └┴┘  └┴┘ └┴┴┴┴┘ └┴┘  └┴┘

                           Версия 1.5

                   Инструкция по использованию

                  Андрей Ходулёв, Москва, 1992

   Упаковщик "BKpack" ориентирован на упаковку исполняемых прог-
рамм,  состоящих преимущественно из исполняемых команд.  Однако,
этот  упаковщик  заметно  сжимает практически  любой  достаточно
длинный файл  (за исключением,  разумеется,  зашифрованных и уже
упакованных файлов).  Упакованные файлы снабжаются блоком  авто-
распаковки,  обеспечивающим  восстановление  в  памяти исходного
содержимого файла.  Таким образом, внешне загрузка и запуск упа-
кованных файлов не отличается от работы с исходными файлами.

   Ниже приведены  подробные инструкции  по  работе с программой
"BKpack". Результаты экспериментов с упаковщиком и некоторые об-
щие рассуждения можно найти в файле BKpack.about.

                 1. Технические характеристики.
                 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Начальный адрес =  1000,  длина =  6236,  контрольная сумма =
105533, после выхода возможен повторный вход по адресу 1000.

        Максимальная длина исходного файла   - 63000

        Длина кодовой части автораспаковщика - 210

        Длина рабочей области при распаковке - 1070

        Время упаковки файла длиной 40000    - ок. 40 сек

        Время распаковки файла длиной 40000  - 1.2 сек

                       2. Упаковка файлов.
                       ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   После запуска  "BKpack"  на  экран  выдаётся главное  (и пока
единственное) меню:

                          1 - ПРОГРАММА
                          2 - ДАННЫЕ
                          0 - ВЫХОД

   Следует  выбрать  режим  ПРОГРАММА  (нажать клавишу 1),  если
упаковывается  исполняемая  программа,  и  режим   ДАННЫЕ,  если
упаковываемый файл  не  требует запуска на выполнение.  Различие
двух режимов проявляется лишь в том, что после распаковки упако-
ванной  ПРОГРАММЫ  автораспаковщик   автоматически  передаёт  ей
управление,  тогда  как  распаковка ДАННЫХ завершается  командой
HALT.

   После выбора режима (выбранный режим индицируется в служебной
строке) запрашивается имя исходного файла и этот файл вводится с
МЛ. В случае ошибки чтения автоматически повторяется чтение того
же файла. Выход из цикла чтения – по клавише СТОП.

   Вообще, клавишей СТОП можно пользоваться всегда, когда вы ре-
шаете,  что  продолжать упаковку данного файла  не  имеет смысла
(например, если длина упакованного файла оказалась слишком боль-
шой); клавиша СТОП в любой ситуации возвращает упаковщик к глав-
ному меню.

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

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

   Затем запрашивается адрес так называемой рабочей области. Бо-
лее подробно об этом написано в разд.3;  в большинстве случаев в
ответ на запрос адреса рабочей области можно просто нажать ВВОД,
и тогда будет использовано указанное в скобках значение по умол-
чанию.

   В последнюю очередь запрашивается имя файла для записи.  Если
сразу нажать ввод,  то имя упакованного файла  будет совпадать с
именем исходного. Можно, однако, исправить это имя (оно выводит-
ся  на  экран),  при  этом единственная допустимая редактирующая
клавиша - "Стирание последнего символа",как при вводе по EMT 10.
Лучше всего следовать какому-либо  стандарту при именовании фай-
лов, например, приписывать к именам упакованных файлов  «*.pck».

   Сразу же после того, как вы нажмете  ВВОД  после имени упако-
ванного файла, начнется его запись на МЛ.  Записываются 2 копии.
Если вторая копия  не  нужна,  можно прервать её запись клавишей
СТОП.

   Используемый "BKpack" алгоритм упаковки двухпроходный, причём
на первом проходе исходный файл  в  памяти разрушается.  Поэтому
описанная выше  схема  работает только  для  достаточно коротких
файлов (меньше половины максимальной длины), когда в памяти есть
место для хранения копии. В случае большей длины  файла "BKpack"
после первого прохода попросит повторно ввести файл. При этом на
экране  сообщается  приблизительная  длина  упакованного  файла.
Окончательно упакованный файл может  оказаться на несколько бай-
тов короче  (а может и не оказаться, но, во всяком случае, он не
будет длиннее этой оценки).

                 3. Загрузка упакованного файла.
                 ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
   Для восстановления в памяти исходного  (распакованного) файла
после загрузки упакованного  файла  следует  передать управление
автораспаковщику (с помощью явной команды  или  из блока автоза-
пуска).  Автораспаковщик располагается в самом начале  упакован-
ного файла,  и  адрес входа в него совпадает с начальным адресом
файла для программ без автозапуска,  а для программ с автозапус-
ком адрес входа в автораспаковщик - 1000.

   После окончания работы автораспаковщик  передаёт управление в
точку входа программы,если при упаковке данного файла был выбран
режим ПРОГРАММА.  В  противном  случае  работа  автораспаковщика
завершается остановом.

   Автораспаковщику для работы требуется некоторая область памя-
ти, называемая рабочей областью.  Её размер для текущей версии –
1070 (восьм.) байтов. Адрес рабочей области запрашивается в про-
цессе упаковки. Рабочую область можно расположить в ОЗУ с любого
чётного адреса, с тем лишь условием, чтобы она не пересекалась с
распакованной программой. Предлагаемое "BKpack" расположение ра-
бочей области выбирается исходя из предположения,  что упакован-
ный файл будет загружаться с начального адреса,  записанного при
файле. При этом "BKpack" предпочитает взять  в  качестве рабочей
области конец основной памяти (адрес 36710),  а  если это невоз-
можно – то конец  экранной памяти  (адрес 76710).  Если файл бу-
дет загружаться с другого адреса (скажем,  он перемещаемый),  то
вам, возможно, потребуется ввести другое значение адреса рабочей
области.

                  4. О перемещаемых программах.
                  ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Блок автораспаковщика  является перемещаемым,  поэтому,  если
исходный файл был перемещаемым,  то таковым окажется и упакован-
ный файл (однако, рабочая область не перемещается).

   Распакованный файл строится  автораспаковщиком  всегда с того
же адреса, с которого был загружен упакованный файл.

                       5. Об автозапуске.
                       ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Исходный файл может содержать автозапуск.  Программа "BKpack"
никогда не упаковывает блок автозапуска (но может изменить в нём
стартовый  адрес).  В точности алгоритм работы "BKpack" с блоком
автозапуска описывается следующим образом:

   1. В качестве блока автозапуска  рассматривается часть файла,
      загружаемая в адреса меньше 1000. Значение, загружаемое по
      адресу 776, считается стартовым адресом программы.

   2. Если стартовый  адрес меньше  1000,  то  блок  автозапуска
      переписывается в упакованный файл без изменений. Предпола-
      гается,  что программа автозапуска,  работающая  в  стеке,
      передаст  в  конце концов управление по адресу  1000,  где
      располагается автораспаковщик.

   3. Блок автозапуска  не  меняется  также при стартовом адресе
      1000.  Такой  автозапуск  обеспечивает  немедленный  вызов
      автораспаковщика.

   4. Если стартовый  адрес больше  1000,  то  упаковщик  меняет
      стартовый адрес  на  1000  (во всех  ячейках  перед  1000,
      содержащем подряд то  же значение).  Остальная часть блока
      автозапуска переписывается в упакованный  файл без измене-
      ний.  Стартовый адрес  запоминается  в  автораспаковщике и
      управление по нему передается  после  окончания распаковки
      (если упаковывалась ПРОГРАММА).

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

   В большинстве случаев такой  алгоритм обеспечивает корректное
сохранение автозапуска у упакованных программ.  Если же нет,  то
можно вручную убрать автозапуск у исходного файла и присоединить
его к упакованному, возможно,  изменив стартовый адрес программы
после распаковки (как это сделать, объясняется в разд. 7).

                      6. Работа с Бейсиком.
                      ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Из различных форматов файлов,  используемых в Бейсике, упако-
вывать с помощью "BKpack" можно только BIN-файлы, загружаемые по
команде BLOAD (в остальных случаях нет простого способа передать
управление  автораспаковщику).

   BIN-файлы следует упаковывать в режиме ДАННЫЕ (за исключением
того случая,  когда исходный BIN-файл надлежит загружать с пара-
метром R; в этом случае нужно использовать режим ПРОГРАММА).

   Имя упакованного BIN-файла лучше  оставить совпадающим с име-
нем  исходного файла, или изменить только начальную часть имени,
не трогая расширения «*.bin» с 7 позиции – иначе  Бейсик не смо-
жет загрузить файл.

   Упакованный BIN-файл следует в любом случае загружать с пара-метром R. Например:

   BLOAD "SOKO-P",R

   Загрузка завершается  сообщением  "СТОП",  после  чего  можно
работать с файлом как обычно (например, запускать его по АР2+5).

             7. Восстановление распакованного файла
             ¯¯¯¯и изменение стартового адреса.¯¯¯¯
                 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   Обе указанные операции бывают нужны  не  очень часто, поэтому
для их выполнения не предусмотрено какой-либо автоматики. Вместо
этого ниже описано,  как это сделать при помощи ручных манипуля-
ций с упакованным файлом.

   Для восстановления исходного  неупакованного  файла из упако-
ванной  ПРОГРАММЫ  следует сначала  преобразовать  её  в  формат
ДАННЫЕ. Для этого следует подправить слово по адресу S+204,  где
S - начальный адрес автораспаковщика (=адрес файла или 1000,если
есть автозапуск).  В этой ячейке располагается команда, выполня-
емая после завершения распаковки.  В упакованной  ПРОГРАММЕ  там
записано слово  160  (переход относительно R0).  Следует занести
туда слово 0 (код команды  HALT).  (Возможно и обратное преобра-
зование файла, упакованного  в режиме ДАННЫЕ в запускаемую после
распаковки ПРОГРАММУ,  если заменить слово 0, помещаемое упаков-
щиком по адресу  S+204  упакованных ДАННЫХ, на слово 160.  Необ-
ходимое  для  этой команды смещение  в  любом случае  помещается
упаковщиком в следующую ячейку.)

   Затем следует запустить  автораспаковщик,  передав управление
по начальному адресу файла.  Исходный файл  будет восстановлен в
памяти.

   Теперь можно записывать файл из памяти на МЛ. Начальный адрес
файла не изменился,  а  длину распакованного файла можно посмот-
реть в ячейке 266 (ее туда заносит автораспаковщик).

   Для изменения  адреса  старта  программы следует  по  адресам
S+204, S+206 записать соответствующую команду перехода.
   Например, если записать:

   S+204: 000137   (JMP @#30000)
   S+206: 030000

то автораспаковщик после  завершения  работы передаст управление
по адресу 30000. (При таком способе исправления программа теряет
свойство перемещаемости;  если требуется перемещаемость,  то для
исправления стартового адреса требуется подправить смещение, ос-
тавив в S+204 команду 160.)

                  8. Заключительные замечания.
                  ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
   При использовании упаковщика "BKpack" следует учитывать неко-
торые его особенности:

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

   2. Автораспаковщик обеспечивает восстановление исходного фай-
      ла в области памяти, занимаемой этим файлом. При этом сос-
      тояние остальной памяти  и  регистров может  отличаться от
      того, что получается при непосредственном чтении исходного
      файла с МЛ. Например, контрольная сумма в ячейке 312 отве-
      чает упакованному файлу, а не исходному.  Единственное ис-
      ключение: как уже говорилось,  длина распакованного  файла
      помещается в ячейку 266  (но не в 350,  где после чтения с
      МЛ остается длина упакованного файла).  В результате неко-
      торые программы,  контролирующие состояние окружения в мо-
      мент их вызова,  могут  после  распаковки  работать непра-
      вильно.

   3. Если попытаться упаковать уже упакованный файл,  то вторая
      упаковка, скорее всего, удлинит файл.  Однако, как показы-
      вает опыт,  иногда повторная упаковка может дать некоторый
      дополнительный эффект  (бывает,  что весьма заметный,  см.
      BKpack.about). Независимо от того, в каком режиме упаковы-
      вался файл первый раз,  во второй раз его следует упаковы-
      вать в режиме  ПРОГРАММА,  чтобы обеспечить автоматический
      запуск первого автораспаковщика  после срабатывания второ-
      го.  Два этих автораспаковщика не мешают друг другу,  даже
      если их рабочие области совпадают.

   4. Если вы сами разрабатываете программу, которую затем соби-
      раетесь упаковать,  то для достижения максимального сжатия
      полезно будет собрать  все  рабочие ячейки  в  одно место,
      чтобы "BKpack" мог упаковать их как единый массив нулей.

                              * * *

   При разработке  программы  "BKpack"  использовался  ассемблер
"Turbo 3" В.С.Коренкова и А.М.Надежина,а также редактор "TED-8".


 
Всё об «Электроника БК0010(-01), БК0011(М)»! » Программы | Утилиты | ДОСы » Упаковщики (Архиваторы) данных » «BKpack» » «BKpack v1.5» [xx.xx.92] (Автор: Ходулёв А.)
Страница 1 из 11
Поиск:

-=RUS=-
ICQ: 320867225