IBMR-утилита переноса файлов с IBM РС на ПЭВМ Роботрон-1715

Публикация об утилите переноса файлов с дискет ПЭВМ Ро- ботрон-1715 на IBM PC - RIBM, появившаяся летом 1990 г. в первом выпуске "БИТ" , вызвала значительный интерес пользователей. Последовали многочисленные телефонные звонки из самых разных городов нашей страны - от Риги до Печоры. Обращались как представители предприятий и организаций, так и частные лица. Большинство звонивших хотели приобрести RIBM, однако были и такие, которые интересовались возможностями утилиты обратного переноса файлов - IBMR, сообщение о готовящемся выпуске которой было сделано там же. В последнее время (видимо, в связи с увеличением доступности IBM PC) число таких пользователей существенно возросло. Это обстоятельство убедило автора в целесообразности отдельной публикации, посвященной утилите IBMR, в результате чего и возникла предлагаемая вашему вниманию статья. И хотя она посвящена утилите IBMR, автор все же не сумел побороть в себе искушение уделить в ней немного места и RIBM. Дело в том, что с момента поступления в редакцию статьи об RIBM (совпавшего с появлением первых коммерчески доступных версий) до ее выхода прошло около года, за это время RIBM подверглась некоторой модернизации, и, кроме того, появилась специальная версия, поддерживающая ПЭВМ "Корвет". Таким образом, приведенные в ней сведения уже не вполне отражают возможности RIBM. Это несоответствие будет исправлено ниже.

Требования к утилите IBMR
Из аббревиатуры названия (IBM PC to Robotron-1715) видно, что основное назначение утилиты состоит в переносе текстовых и двоичных файлов с IBM PC-совместимых компьютеров на дискеты ПЭВМ Роботрон-1715, однако было бы ошибкрй ограничиться реализацией только функции копирования файлов. Для удобства переноса файлов необходимо иметь возможность форматирования дискет Роботрон-1715 на IBM PC. Должны также выполняться функции просмотра оглавления и получения информации о наличии на целевой дискете свободного места, а также удаления и переименования файлов. Желательно, чтобы эти функции допускали задание имен файлов в формате "wildcard" (*.*).
Очевидно, что указанные функции должны осуществляться применительно ко всем форматам дискет Роботрон-1715, получившим распространение в нашей стране. Таких форматов, соответствующих трем модификациям Роботрон-1715

Примечание. Все три формата имеют 5 секторов по 1024 байт на любой дорожке.
Первые два формата используют только одну поверхность дискеты (они поддерживаются ОС SCP v.5, предназначены для дисководов с одной головкой) и отличаются только числом цилиндров. Третий формат - двусторонний (поддерживается ОС SCP v.6, предназначен для ПЭВМ Роботрон-1715М, оснащенной дисководами с двумя головками). Он имеет другое смещение оглавления, кроме того, в связи с тем, что максимальный номер блока при таком формате не помещается в одном байте, в элементах оглавления применяются поля номеров блоков длиной в слово. Дискеты описанных трех форматов должны обрабатываться IBMR.
Так же как и в утилите RIBM, в IBMR должна предусматриваться возможность перекодировки кириллицы в процессе копирования файлов из альтернативной кодировки IBM PC в код Роботрон-1715.
Ввиду того что утилита IBMR задумана как парная к RIBM, формат ее командной строки, стиль сообщений и идеология работы должны быть как можно более близки последней.
И, наконец, IBMR должна обладать значительной устойчивостью при сбоях и обеспечивать подробную диагностику при их возникновении.
Все перечисленные здесь требования были учтены при разработке IBMR.

Несколько слов об алгоритмах
Алгоритмы работы IBMR достаточно, просты и основаны на сведениях и соотношениях, описанных в [1]. Тем не менее, целесообразно все же сказать несколько слов об алгоритмах функций копирования, удаления и переименования, так хак это позволит пользователю лучше понять, что же именно делает утилита. Следует оговориться, что приводимая здесь информация не претендует на формализованность и не является исчерпывающим описанием логики работы утилиты. В связи с тем, что функции копирования, удаления и переименования основаны на манипуляциях с элементами оглавления, выполнению каждой из них предшествует считывание оглавления с дискеты в оперативную память, а после нормального завершения выполнения функции оглавление записывается обратно на дискету.
Копирование. Принципиальное отличие копирования файлов с IBM PC на дискеты Роботрон-1715 от копирования в прямом направлении заключается в необходимости планирования дискетного пространства. С этой целью в IBMR принят простой, но достаточно эффективный алгоритм, основанный на поиске номера свободного блока в списке свободных блоков, который представляет собой массив, слов с количеством элементов, равным номеру максимального блока (файлам могут быть выделены блоки, имеющие нумерацию начиная с единицы, нулевой блок занимает на дискете оглавление). Каждое слово этого списка равно либо нулю, если соответствующий ему блок занят, либо номеру блока, если блок свободен. Выполнению функции копирования предшествует формирование списка свободных блоков. Оно сводится к следующему. Сначала всем словам списка присваиваются их собственные индексы в массиве, в результате все элементы списка соответствуют свободным блокам. Затем список уточняется, для чего просматриваются все занятые элементы оглавления, и элементы списка, индексы которых равны номерам занятых блоков, содержащихся в элементах оглавления, обнуляются.
Алгоритм копирования укрупненно выглядит так. В соответствии с заданным критерием поиска (имеется в виду формат "wildcard") в заданной директории на заданном дисководе отыскивается файл с требуемым именем. Если такой файл найти не удается, выдается сообщение об ошибке и процесс копирования заканчивается. Далее делается попытка найти элементы оглавления, содержащие данное имя файла, найденные элементы удаляются, за счет чего пополняется список свободных блоков. Затем в оглавлении дискеты отыскивается свободный элемент и в него заносится имя файла. Если в оглавлении свободного места нет, выдается сообщение об ошибке и процесс копирования завершается. Далее файл на IBM PC открывается для считывания и делается попытка считать из него порцию данных в 2048 байт (размер блока на дискете Роботрон-1715), если требуется, выполняется перекодировка кириллицы, затем запрашивается номер свободного блока, если номер получен, он преобразуется в физический адрес на дискете [1] и по нему осуществляется запись данных, номер блока заносится в текущий элемент оглавления, а соответствующий элемент списка обнуляется. Если свободного блока не находится, входной файл закрывается, выдается сообщение об ошибке и процесс копирования завершается.
Процесс считывания и записи продолжается до тех пор, пока текущий элемент оглавления не будет заполнен номерами блоков. После этого происходит дозаполнение некоторых служебных полей элемента [1] и ищется следующий свободный элемент оглавления. По достижении конца файла он закрывается. Если последняя считанная порция данных оказалась менее 2048 байт, свободная часть блока заполняется символами "Z (1АН).
Процесс копирования повторяется для каждого файла из заданной директории на дисководе, имя которого соответствует критерию.
В случае возникновения сбоя при записи файла на дискету выдается сообщение об ошибке, входной файл закрывается, уже сформированные элементы оглавления удаляются, но номер сбойного блока в список свободных блоков не возвращается. Это необходимо для того, чтобы он не был выделен следующему копируемому файлу.
Удаление. В оглавлении отыскиваются неудаленные элементы, содержащие имена файлов, удовлетворяющие заданному критерию поиска. Найденные элементы удаляются. Если не удается найти ни одного элемента, выдается сообщение об ошибке.
Переименование. Отыскивается первый элемент оглавления, относящийся к файлу, имя которого соответствует критерию поиска. На основе этого имени и макета нового имени (которое, естественно, может быть задано неявно, например как *.asm) формируется новое имя, затем проверяется, не содержатся ли уже в оглавлении элементы с новым именем. Если нет, то во все элементы, включающие старое имя файла, заносится новое имя, если да, выдается сообщение об ошибке и делается попытка найти первый элемент оглавления, относящийся к следующему файлу, и т.д. Первый элемент оглавления (первый экстент) данного файла отыскивается по номеру экстента, содержащемуся в элементе оглавления [ 1 ].

Некоторые детали реализации
Реализация IBMR основана на применении нескольких стандартных функций файловой системы MS-DOS:
1АН - задать буфер DTA;
4ЕН - найти имя первого файла, соответствующее критерию;
4FH - найти имя следующего файла, соответствующее
критерию; 3DH - открыть файл; 3FH - считать данные из файла; ЗЕН - закрыть файл,
а также семейства подфункций функции 13Н базовой системы ввода-вывода (БСВВ, BIOS):
О - сбросить контроллер,
2    - прочесть сектор (ы),
3    - записать сектор (ы),
4    - проверить контрольную сумму сектора (секторов),
5    - отформатировать дорожку.
Применение функции 13Н БСВВ на 80-дорожечных дискетах сопряжено с использованием расширенного байта состояния среды, характерного для БСВВ IBM PC/AT. Данный байт расположен по смещению 490H+D, где D - номер дисковода (а: - нуль, Ь: - единица). Назначение битов этого байта [2] следующее:
7,6 - скорость передачи данных контроллером, 00: 500 Кбит/с; 01: 300 Кбит/с;. 10: 250 Кбит/с; 11: зарезервировано,
5 - признак двойного перемещения головок (дискета 360
Кбайт в дисководе 1,2 Мбайт), 4 - признак "среда установлена", 3 - зарезервирован,
2,1,0 - текущее состояние дисковода,
ООО: дискета 360 Кбайт в дисководе 360 Кбайт не установлена, 001: дискета 360 Кбайт в дисководе 1,2 Мбайт не установлена, 010: дискета 1,2 Мбайт в дисководе 1,2 Мбайт не установлена, 011: дискета 360 Кбайт в дисководе 360 Кбайт установлена, 100: дискета 360 Кбайт в дисководе 1,2 Мбайт установлена, 101: дискета 1,2 Мбайт в дисководе 1,2 Мбайт установлена, 110: зарезервировано,
111: состояние, отличное от всех предыдущих.
Установка в данном байте значения 54Н (скорость передачи данных 350 Кбайт/с, одинарное перемещение головок, 360 Кбайт в 1,2-Мбайт дисководе, признак "среда установлена") в БСВВ большинства фирм позволяет обеспечить требуемое одинарное перемещение головок при обработке 80-доро- жечных дискет. Если не установить это значение, распространенные БСВВ, такие как БСВВ фирмы AMI, попытаются определить тип дискеты, что достигается путем пробного считывания 15-го сектора на нескольких дорожках [2]. Если сектор не найден, делается вывод о том, что дискета 360 Кбайт, и устанавливается признак двойного перемещения головок.
Утилита IBMR написана на языке Си ( компилятор Microsoft) и макроассемблере. На носителе она занимает не более 26 Кбайт.
Формат командной строки IBMR
Так же как и утилита RIBM, IBMR управляется командной строкой. В зависимости от требуемой функции возможны следующие ее варианты:
ibmr [X:] [директория] имя файла [Y:]/ключи формата и
трансляции, (1)
ibmr [Y:] [имя файла]/d/ключи формата,    (2)
ibmr [Y:] имя файла/в/ключи формата,    (3)
ibmr [У:]имя файла новое имя/г/ключи формата,    (4)
ibmr [У:]Л/ключи формата,    (5)
где X: - входной дисковод, Y: - выходной дисковод (по
умолчанию а:); ключи формата:
/s5 - SCP v.5, 40 дорожек, одна сторона
(принят по умолчанию), /s580 - SCP v.5, 80 дорожек, одна сторона, /s6 - SCP v.6, 80 дорожек, две стороны;
ключи трансляции:
/к - (kirillic), трансляция всех символов кириллицы, /кс - (kirillic, capital only), трансляция только прописных символов кириллицы.
1.    Копирование файлов.
Примеры:
ibmr d:userl ort*.for a:/s6/kc - скопировать все файлы с расширением for с жесткого диска d: из директории userl ort на дискету Роботрон-1715 в формате SCP v.6 (две стороны, 80 дорожек);
ibmr c:user2 xt*.txt b:/k - скопировать все файлы с расширением txt с жесткого диска с: из директории user2 xt на дисковод Ь: на дискету в формате SCP v.5 (одна сторона, 40 дорожек); оттранслировать кириллицу;
ibmr *.*/k/s6 - скопировать все файлы из текущей директории с текущего диска на дисковод а: в формате SCP v.6, оттранслировать кириллицу;
2.    Просмотр оглавления (/d - directory).
Примеры:
ibmr *.c/d/s6 - просмотреть имена файлов с расширением С из оглав- пения дискеты в формате SCP v. 6 на дисководе а:;
bmr /d/s580 - просмотреть оглавление дискеты в формате SCP v.5 (1 ггорона, 80 дорожек) на дисководе а:.
5. Удаление файлов (/s - scratch). Пример:
bmr a:*.pas/s - удалить все файлы с расширением pas с дискеты эормата SCP v.5 (1 сторона, 80 дорожек) на'дисководе а:.
. Переименование файлов (/г - rename). Пример:
>mr *.lst *.txt - переименовать все файлы с расширением 1st на дис- ете в формате SCP v.5 (одна сторона, 40 дорожек) в файлы с расши- ением txt на дисководе а:.
5. Форматирование дискеты (/f - format). Примеры:
ibmr /f - отформатировать дискету в формате SCP v.5 (40 дорожек) на дисководе а:;
ibmr b:/f - отформатировать дискету в том же формате, но на дисководе Ь:;
ibmr a:/f/s6 - отформатировать дискету на дисководе а: в формате SCP v.6.
Утилита IBMR не имеет специального ключа помощи, помощь выводится на экран при отсутствии операндов в командной строке.
Некоторые усовершенствования в следующей версии утилиты IBMR
Предполагаемая к выпуску следующая версия утилиты IBMR будет содержать два усовершенствования, несколько повышающих удобство работы с ней. Первое - возможность преобразования всех символов переносимого текстового файла в верхний регистр с последующей трансляцией кириллицы. Для этого вводится дополнительный ключ трансляции /ки. Второе - введение автоматического распознавания формата дискеты в случае опускания ключа формата (оно возможно для всех функций, кроме форматирования).

Еще раз об утилите RIBM
Как уже было сказано, за время, прошедшее с момента подачи статьи о RIBM, в утилиту был внесен ряд усовершенствований, с которыми автор хотел бы вкратце познакомить читателей. Во-первых, RIBM стала работать с дискетами формата 3 (см. табл. 1), для чего был добавлен ключ /s6. После появления ключа /кс стало удобно переносить файлы, содержащие тексты программ на языках высокого уровня с русские комментариями. Также было введено автоматическое распознавание радиальной плотности дискет (40 или 80 дорожек) SCP v.5, что гарантирует нормальную работу RIBM с БСВВ большинства фирм. И, наконец, была выпущена специальная версия RIBM (RIBM-K), поддерживающая четыре формата дискет ПЭВМ "Корвет". Данные об этих форматах приведены в табл. 2.
В заключение автор хотел бы исправить неточность, имевшую место в [I] - соотношение (11) должно выглядеть так:
int((A+i-l)/64K) < int(A/64K)
 
 


Обсудить вопрос в студенческом форуме

 

Сайт содержит информацию о учебном заведении и студенческой общине и не является официальным