Преобразователь формата кодовых файлов hdb.exe. Компьютер хранит в своей памяти программы и данные в виде двоич- ных кодов. Для того, чтобы пользователь мог просмотреть эти данные, их нужно представить в каком-либо понятном ему виде. Чаще всего - в виде последовательности шестнадцатиричных цифр. Так как каждая такая цифра отображает всего четыре двоичных разряда, для каждого байта их требуется две. В "Радио-86РК" шестнадцатиричное изображение содержимого памяти (его называют дампом) выводят на экран по директиве D МОНИТОРА. Для удобства в начале каждой строки дампа указан адрес первого из содержащихся в ней байтов. Необходимо помнить, что дамп существует только на экране, в памяти же находятся двоичные коды. Их же записывают на магнитную ленту директивой O МОНИТОРA, причем запись снабжается адресами первого и последнего из записанных байтов и контрольной суммой. При вводе подобных записей в IBM-совместимый компьютер сразу же возникает проблема - в каком виде их там хранить. Ответ на него зависит от цели, с которой вводится данная запись. Если предполагается ее ручное редактирование, распечатка или архивное хранение, то целесообразно преобразовать ее в текстовый файл, по формату совпадающий с хорошо знакомым дампом на экране "Радио-86РК". Такой файл в дальнейшем можно обрабатывать любым текстовым редактором. Если же предполагается использование данных какими-либо другими программами, то формат файла должен соответствовать требованиям именно этих программ. Например, многие программы-отладчики, дизассемблеры, программаторы ППЗУ требуют исходных данных в так называемом HEX-формате фирмы Intel. В нем же выдают результаты своей работы многие кросс-ассемблеры и трансляторы языков высокого уровня. HEX-формат представляет собой, по-существу, модификацию рассмотренного выше дампа, приспособленную к машинной обработке и передаче по линиям связи. Для сравнения рассмотрим представление в этих форматах одного и того же фрагмента данных: Дамп 1230 8E 8D 92 90 8E 8B 9C 8D 9B 95 20 91 93 8C 8C 20 1240 2A 2A 2A 0A 0A 0D 8D 80 97 80 8B 8E 2C 20 8A 8E 1250 8D 85 96 20 3A 00 HEX :101230008E8D92908E8B9C8D9B952091938C8C2083 :101240002A2A2A0A0A0D8D8097808B8E2C208A8E5E :061250008D8596203A0096 :0000000000 Каждая строка данных в HEX-формате начинается двоеточием, за которым следует двузначное шестнадцатиричное число, равное числу байтов данных, содержащихся в данной строке. Далее - шестнадцатиричный адрес первого байта (обязательно четырехзначный), два нуля и байты данных (без пробелов). Две последние цифры - контрольная сумма строки. Алгоритм ее подсчета очень прост. Младший байт арифметической суммы всех байтов строки, включая байт длины и два байта адреса, и байта контрольной суммы должен быть равен нулю. Последняя строка, состоящая из нулей, служит признаком конца HEX-файла. Обычно программа ввода данных с магнитной ленты представляет возможность выбора формата записи принятых данных на диск. Однако, не исключено, что в дальнейшем формат все-таки потребуется преобразовать. Именно эту задачу решает программа hdb.exe. Она позволяет преобразовать файл из формата дампа, HEX- или двоичного (т.е. простой последовательности двоичных кодов без всякой адресной информации) в любой другой из перечисленных. Дополнительно предусмотрен подсчет контрольных сумм по алгоритму, принятому в МОНИТОРЕ "Радио-86РК". Это делается для файла в целом, для каждого блока данных длиной 256 байт и строки дампа длиной 16 байт. Программу запускают командой hdb [<имя файла>] Если параметр <имя файла> отсутствует, после запуска будет задан вопрос: Какой файл обработать? В ответ следует ввести имя файла. Обрабатываемые данные должны иметь один из перечисленных выше форматов. Он распознается по первому коду, содержащемуся в файле и отличающемуся от ASCII кодов перевода строки (0AH), возврата каретки (0DH), пробела (20H) или конца файла (1AH). Если это код шестнадцатиричной цифры (30H...39H или 41H...46H), программа считает файл дампом, если код двоеточия (3AH), - HEX-файлом. Иначе предполагается простой двоичный формат. О результате опознавания программа сообщает на экране. Так как не исключено, что двоичный файл начинается с перечисленных выше кодов, в случаях, когда формат определен как дамп или HEX, программа задает дополнительный вопрос: Обработать как BIN (Y/N)? Если формат опознан правильно, на вопрос следует ответить отрицательно. Затем программа сообщает: Ждите, читаю данные... По завершению ввода и предварительной обработки файла на экране появится: 1 - Возврат в ДОС 5 - Преобразовать в DMP+симв. 2 - Перейти к другому файлу 6 - Преобразовать в DMP+КС строк 3 - Преобразовать в HEX 7 - Преобразовать в BIN 4 - Преобразовать в DMP 8 - Подсчитать контр. суммы блоков Ввод цифры 1 прекращает работу программы. После ввода цифры 2 Программа вновь запрашивает имя обрабатываемого файла. После нажатия на любую другую из перечисленных в меню цифровых клавиш будет задан вопрос: В какой файл записать результат? В ответ следует ввести имя выходного файла. Если задать имя prn:, результат будет выведен на принтер. Если исходный файл был двоичным и не содержал информации об адресах, программа запросит начальный адрес. Его вводят в шестнадцатиричном виде без буквы H в конце. Незначащие нули не обязательны. Если просто нажать ENTER, адрес будет установлен равным 0. Пояснения требуют три варианта формирования дампа. В первом случае (цифра 4) в выходной файл будет записан "чистый" дамп. Во втором случае (цифра 5) каждая строка дампа сопровождается символьным представлением находящихся в ней данных: 11F0 7B 95 7A 9C C9 1F 0D 0A 00 3A 20 00 20 20 43 53 Ш.З......: . CS 1200 3D 00 3E 56 BD CA 17 11 2B 7E FE 2C CA 00 11 23 =.>V....+Ч.,...# Формат символьного представления аналогичен директиве L МОНИТОРА "Радио-86РК". Непечатаемые символы программа заменяет точками, коды в диапазоне 61H-7EH интерпретирует как заглавные русские буквы. В третьем случае (цифра 6) в конце каждой строки дампа указана ее контрольная сумма, подсчитанная по алгоритму "Радио-86РК": 11F0 7B 95 7A 9C C9 1F 0D 0A 00 3A 20 00 20 20 43 53 0655 1200 3D 00 3E 56 BD CA 17 11 2B 7E FE 2C CA 00 11 23 3351 Все три варианта дампа в дальнейшем могут служить исходными для программы hdb. Признаком конца информационной части строки дампа для нее служат символы возврата каретки и перевода строки или два пробела подряд. Результат подсчета контрольных сумм (цифра 8) - таблица, в которой указаны граничные адреса всего обрабатываемого файла, каждого из его блоков по 256 байт и соответствующие контрольные суммы. Пример таблицы приведен ниже: 1100 - 11FF F9DE 1200 - 1255 8061 ----------------- 1100 - 1255 CD3F =================