А.М.Ермаков


РАМОН — РАСШИРЕНИЕ МОНИТОРА БК-0010


Вечером, когда в доме все затихает, а на улице зажигаются фонари, с необъяснимым чувством, знакомым только владельцам персонального компьютера, сажусь к столу и щелкаю тумблером. Мягко загорается экран, диск послушно входит в щель, руки опускаются на хорошо знакомые клавший — начинаю священнодействие. А действие уже привычное: команда — и через секунду загружается текстовый редактор, еще мгновение — и на экране появляется заготовка статьи, сохраненная на диске вчера. Все мило сердцу, все под рукой, БК как верный и надежный друг.

Сначала был модуль перепрограммируемого ПЗУ для БК на микросхемах 558РР3. Он позволял БэКаману всегда иметь под рукой наиболее часто используемые программы и при этом не расходовать ОЗУ (согласитесь, что это своеобразное расширение памяти!). И первой "зашитой" в ПЗУ программой оказался широко распространенный отладчик, автор которого остался для меня неизвестным, но которому я глубоко признателен.

Но в ПЗУ оставалось еще достаточно места, а на моем столе волею судеб появился наконец принтер. Эти два обстоятельства да плюс еще появление знаменитого Кумандинского ассемблера МИКРО10К, подтолкнули меня к написанию программы печати. Через месяц программа уже печатала тексты и графику. Она сразу же была "зашита" в ПЗУ или, как говорят профессионалы, стала резидентной в памяти. Казалось бы, что еще нужно? А нужно было избавиться от магнитофона!

Тогда-то и возникла идея расширенного монитора, а позднее из нее родилась уже упомянутая формула "БК+дисковод".

Начало самой идее было положено летом 1989 года. А до этого все было как и у любого обладателя БК — жадный поиск и накопление программ, жалкие попытки классификации и упорядочения собранного, обязательные потери информации на испорченных лентах, неизбежная несовместимость с чужими записями и другие малоприятные вещи. Общение с компьютером было совсем не дружественным (как этому полагалось бы быть), а скорее напоминало противоборство, причем победа человека отнюдь не гарантировалась.

Основная проблема заключалась в драйвере магнитофона. О его недостатках и различных способах их преодоления сказано и написано так много, что, честное слово, эти титанические усилия достойны лучшего применения. Конечно, можно винить разработчиков драйвера — безвестных отважных ребят, которые бесстрашно отринули все уже известные и отработанные драйверы для бытовых компьютеров (к примеру, уже тогда отлично себя зарекомендовавший драйвер от компьютера ZX Spectrum 48K) и создали оригинальную разработку, ни с чем не совместимую. Не они одни так соригинальничали — попробуйте назовите хотя бы две пары отечественных бытовых компьютеров, совместимых по способу и формату записи на ленту.

И очень многие БэКаманы объявили штатному драйверу магнитофона настоящую войну. Была предложена сотня различных копировщиков, использующих десяток оригинальных способов записи, и несколько совершенно новых драйверов. Мало кого обошла стороной эта война. Сколько сабель было скрещено, сколько копий сломано. Я тоже участвовал в ней со своим автоматическим копировщиком кассет на двух магнитофонах, слава Богу, не получившим никакого распространения.

И теперь, став счастливым обладателем cartridge, я мог бы "зашить" один из новых драйверов магнитофона в постоянную память и почти решить для себя все проблемы. Но волею случая в мои руки попал дисковод и проблема решилась полностью.

Передо мною встала задача сопрячь дисковод с БК. Не скажу, что это оказалось просто, но за полтора года поисков и ненапряженной работы удалось найти, на мой взгляд, оптимальное решение. Твердую часть решения, его, так сказать, hardware, составили контроллер дисковода от БК-0011 и модуль ПЗУ на 558РРЗ, а мягкую часть, software, расширенный монитор.

Что такое расширенный монитор? В данном случае это штатный монитор БК-0010 с добавленными драйверами принтера и дисковода и расширенным набором команд. В принципе подобная программа могла бы претендовать на звание операционной системы, если бы не любительское исполнение. Так что я назвал свое детище сокращенно РАМОН2 и теперь представляю его на суд читателей.

***

Любознательные читатели могут спросить: что означает название системы РАМОН2? А расшифровывается оно, очень просто: Расширенный Монитор, версия 2. Версия 1 представляла собой резидентный драйвер принтера. И чтобы не забыть об этом, я присвоил первой, по существу, версии РАМОН второй номер.

Назначение системы

РАМОН2 предназначена для организации обмена файлами между памятью компьютера и периферийными устройствами. Состав периферийных устройств, обслуживаемых РАМОН2:

а) магнитофон,

б) от одного до четырех дисководов,

в) принтер.

Основное достоинство РАМОН2 заключается в совместимости по файловой системе с широко распространенной операционной системой RT11, применяемой на компьютерах ряда СМ3, СМ4, ДВК2, ДВКЗ, ДВК4, "Электроника 60", "Электроника 100/25". Совместимость по файловой системе означает возможность обработки дисков РАМОН2 на перечисленных компьютерах, и наоборот.

Второе достоинство заключается в совместимости, как это ни парадоксально звучит, с самой БК, то есть с традиционной БК без расширенного монитора. Недаром в списке периферийных устройств, обслуживаемых PAMOН2, на первом месте указан магнитофон, хотя РАМОН2, откровенно говоря, пользуется при работе с магнитофоном штатным драйвером обычного монитора БК. Магнитофон в среде РАМОН не забыт, и даже при отсутствии дисковода можно работать обычным способом с лентой, в этом случае РАМОН2 более всего похож на копировщик.

Следует отметить, что эти два вышеназванных достоинства — совместимость с мощной дисковой системой RT11 и достаточно простым драйвером магнитофона БК — отнюдь не так просто было совместить. Проблема заключалась в разных форматах имен файлов на диске и на ленте. Приходилось или выбирать формат RT11 и при этом переименовывать все ленточные файлы, имеющие длину больше шести символов и содержащие кириллицу, или оставлять свободный формат драйвера БК и при этом иметь большие проблемы с каталогом файлов на диске, предъявляющим жесткие требования к длине имени файла. Компромиссное решение было реализовано за счет избыточности файла на диске — в его теле было отведено место для "ленточного" имени. Это имя никак не использовалось при копировании файла с диска на диск (но и не терялось), зато при записи на ленту снова возвращалось в качестве заголовка программы. При этом "ленточный" файл, будучи записан на диск, а после снова на ленту, никак не менялся. Такое решение было весьма привлекательным для тех, кто занимается тиражированием программ.

Еще одно достоинство, вытекающее из уже перечисленных, заключается в возможности применять при разработке программ для БК ресурсы более мощных компьютеров. Формат файлов БК выбран совместимым с форматом исполняемых файлов, получаемых макроассемблером MACRO11 и компоновщиком LINK. И если трансляторы языков высокого уровня создают файлы того же формата, то получается, что можно разрабатывать программы для БК не только на макроассемблере, но и на ПАСКАЛЕ или на СИ.

Но вернемся к характеристикам РАМОН2. Он позволяет:

а) записывать и считывать файлы на ленте;

б) читать файлы с ленты без предварительного задания имени;

в) распечатывать тексты;

г) распечатывать твердую копию экрана;

д) записывать и считывать файлы на диске.

Кроме того, РАМОН2 обладает некоторым сервисом, облегчающим жизнь пользователю, о чем более подробно изложено в описании командного монитора.

Командный монитор

Если вы включите БК с установленной системой РАМОН2, то экран вашего монитора очистится, в служебной строке появится соответствующее информационное сообщение, и наконец, на экран будет выведена строка вида:

00>

Эту строчку выдает та часть системы РАМОН2, которая занимается обработкой команд пользователя и называется поэтому командным монитором. А сама строчка служит приглашением к вводу команды и, кроме того, является подсказкой (у программистов такая строка-подсказка называется prompt). О том, что она подсказывает, расскажу позднее, а сейчас коротко о командном мониторе.

Общение пользователя с РАМОН2, в сущности, ничем не отличается от общения с другими операционными системами. Оно имеет форму приказного диалога. Пользователь отдает команду, РАМОН2 пытается ее выполнить и сообщает о результатах, после чего ждет следующей команды. Цикл замыкается. Такую форму диалога и обеспечивает командный монитор. Чтобы освоить работу с РАМОН2, пользователю достаточно изучить все команды и сообщения командного монитора.

Первое сообщение, выдаваемое командным монитором в начале цикла ввода команды, или prompt, сообщает пользователю о принятом на текущий момент направлении обмена файлами, т.е. периферийное устройство, с которого проводится чтение, и устройство, на которое будет вестись запись. При включении компьютера устанавливается обмен с диском, о чем и сообщает соответствующая подсказка "00>". Но почему не "DiskDisk>"? А потому что РАМОН2 может работать не с одним дисководом, а с четырьмя, каждому из которых присвоен номер от 0 до 3. Вот эти номера и отмечены в подсказке. Отдельно взятый дисковод (работающий с одним диском) называют приводом, карманом или окном (а по-английски "drive"). Я буду применять первое из перечисленных наименований. С учетом этого можно сказать, что РАМОН2 обрабатывает приводы с номерами 0, 1, 2, 3.

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

Как уже было сказано, РАМОН2 обслуживает, помимо четырех приводов, еще принтер и магнитофон. Им соответственно присвоены имена Р (Printer — принтер) и Т (Таре — запись). Других устройств пока не предусмотрено.

Теперь вы сможете разобраться с примерами подсказок.

00> — чтение с привода 0, запись на привод 0. Этот режим устанавливается при запуске системы.

01> — чтение с привода 0, запись на привод 1. Такой режим используется для копирования дисков при наличии двух приводов.

0Т> — чтение с привода 0, запись на магнитофон. Удобно при тиражировании программ.

Т0> — чтение с магнитофона, запись на диск. Используется при сохранении ленточных файлов на диске.

ТТ> — чтение и запись на магнитофон. Традиционный, привычный режим. РАМОН2 при этом выполняет функцию ленточного копировщика.

0Р> — чтение с диска, запись на принтер. Конечно, никакой записи в привычном понимании этого слова на принтере не происходит, на самом деле производится печать файла с диска.

P0> — чтение с принтера, запись на диск. Как можно догадаться, чтение с принтера является для современных принтеров бессмыслицей, поэтому такой режим запрещен.

Допустим, что с помощью какой-либо команды вы указали командному монитору направление обмена, т.е. откуда брать и куда помещать, но этого, естественно, недостаточно, так как требуется указать сам предмет обмена, а именно файл, а еще точнее — имя файла.

К имени файла в РАМОН2 предъявляются более жесткие требования, чем в мониторе БК. В общем случае имя указывается так:

D:NAMFIL.EXP,

где:

D — имя устройства (0, 1, 2, 3, Т, Р, если помните),

: — обязательный знак, отделяющий имя устройства от имени файла,

NAMFIL — имя файла (содержит не более шести допустимых символов),

. — разделитель между именем файла и расширением,

ЕХР — расширение имени файла (содержит не более трех допустимых символов).

В имени файла допустимы следующие символы:

Допустимо неполное задание имени. Если в нем пропущено имя устройства, то подразумевается то самое устройство, которое указано в приглашении командного монитора (для операции чтения подразумевается первое устройство, указанное в приглашении, для записи — второе). Здесь реализован так называемый принцип назначения по умолчанию, присущий многим операционным системам. Этот же принцип применен и для расширения имени — если его не указывать, то будет подразумеваться расширение ".ВК". Вообще же пользователь может сам выбрать любое расширение, однако удобно придерживаться рекомендаций, предложенных в номере 1/1991 журнала "Информатика и образование". Расширение должно отражать или источник получения файла (язык программирования, редактор и т.п.), или назначение программы. Примеры расширений:

.ВК — исполняемая программа в машинных кодах,

.COD — программа на языке BASIC,

.FOC — программа на языке FOCAL,

.EDP — текст в формате EDASP,

.DEM — демонстрационная программа,

.DOC — документация, описание.

Вы спросите, зачем нужен такой сложный и ограниченный формат имени файла, чем он лучше гораздо более свободного формата, принятого в мониторе БК (16 произвольных символов)? Ну, во-первых, при работе с лентой формат имени остается прежним, а вот такой сложный формат применяется только при обращениях к диску. И обусловлен, естественно, требованиями совместимости с RT11, где такой формат и применяется.

Примеры допустимых имен:

0:PRIMER.DOC - файл «PRIMER.DOC» на приводе 0,

1:PRIMER - файл «PRIMER.BK» на приводе 1,

Р:ПРИМЕР - файл «ПРИМЕР» печатается,

Т:ПРИМЕР - файл «ПРИМЕР» на ленте,

PRIMER - файл «PRIMER» на устройстве по умолчанию.

Недопустимые имена:

4:PRIMER.DOC — недопустимое устройство,

0:PRIMERIK.DOC — длина имени больше шести символов.

Некоторые команды запрашивают дополнительные параметры:

Адрес: следует ввести восьмеричное число или просто нажать <ВВОД>.

Устройство: следует ввести допустимое имя устройства.

***

Итак, компьютер включен, на экране приглашение к вводу команды, остается ввести команду из списка тех, которые понимает командный монитор.

Команды

По своему назначению команды РАМОН2 делятся на команды:

Команды обмена предназначены для управления обменом файлами и включают в себя:

LOAD — (LO) загрузка файла в память по адресу, указанному в оглавлении файла;

RUN — (RU) загрузка файла по адресу, указанному в его оглавлении, и запуск по тому же адресу;

SAVE — (SA) запись файла на устройство (если на принтер, то распечатка файла). Параметры файла (адрес и длина) берутся из оглавления последнего загруженного файла.

GET — (GE) загрузка файла по заданному адресу. Адрес запрашивается.

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

Ввод имени в РАМОН2 не совсем обычен - он слегка усовершенствован. Вместо запроса имени и ожидания его побуквенного ввода монитор печатает последнее введенное имя и ждет реакции пользователя. Если пользователь нажимает <ВВОД>, то монитор принимает последнее введенное имя для текущей команды, если же нет, то пользователю предоставляется возможность повторить команду, например при неудачном ее исполнении. Это удобно при копировании файла, когда нужно вводить одно и то же имя для команды чтения и записи.

А при чтении с магнитной ленты можно имени вообще не вводить. Такое решение я позаимствовал из Бейсика популярного бытового компьютера ZX Spectrum. У владельцев этой машины самая любимая команда — это команда загрузки с ленты первого встреченного файла : LOAD «», в которой имя файла пропущено. В РАМОН2 решение аналогично: для чтения с ленты файла с любым именем достаточно на запрос имени нажать <ПРОБЕЛ>.

Команда SAVE не просто записывает файл на диск, но и проводит его поблочное контрольное чтение в специальный буфер. При этом достигается наивысшая надежность хранения файлов на диске. В случае ошибки контрольного чтения файл попросту не создается в каталоге, и пользователь может или повторить запись, или сменить диск на более качественный.

В число команд установки параметров входят:

SET — (SE) установка параметров драйверов;

ASSIGN — (AS) назначение устройства ввода-вывода.

С помощью команды SET можно изменить параметры печати графической копии экрана и настроить систему на применяемый дисковод. Команда запрашивает имя устройства — принтер или привод и числовые параметры, которые означают следующее:

для драйвера принтера:

0 — печать экрана без служебной строки,

1 — печать полного экрана ( со служебной строкой),

2 — печать с инверсией.

Допускается сочетание этих режимов, например, режим 3 означает печать полного экрана с инверсией. При инициализации РАМОН2 устанавливается режим 0,

для драйвера дисковода:

первый параметр — тип привода:

0 — 80 дорожек,

1 — 40 дорожек,

2 — односторонний привод.

Допускается сочетание этих режимов. Режим 1 означает пропуск нечетной дорожки и применяется для обработки 40-дорожечных дисков на 80-дорожечных дисководах.

Второй параметр - время позиционирования головки:

23240 - для НГМД 6022,

4000 - для МС5305.

Третий параметр - время опускания головки:

23240 - для НГМД 6022,

1000 - для МС5305.

Четвертый параметр - дорожка включения коррекции:

36 - для НГМД 6022,

74 - для МС5305.

Вводимые числа интерпретируются как восьмеричные. Временные параметры определяют программные задержки в драйвере, предназначенные для ожидания механических перемещении головки дисковода, и могут быть настроены на конкретный дисковод. Например, для японских Теас задержки могут быть на порядок меньше указанных.

Команда ASSIGN запрашивает сначала имя устройства чтения, а потом устройства записи. Эти имена используются впоследствии по умолчанию, когда пользователь не задает явно имена устройств в именах файлов (то есть использует сокращенную форму имени файла). Установленное назначение отображается в строке-приглашении.

Для передачи управления в РАМОН2 используются следующие команды:

START — (ST) запуск программы по заданному адресу. Если адрес не указывать, то он будет взят из оглавления последнего загруженного файла.

DIRECTORY — (DI) вызов программы распечатки каталога диска.

MICRO - (MI) вызов отладчика из ПЗУ (если есть).

Наконец остались вспомогательные команды:

EXIT - (EX) выход из РАМОН2 в монитор ПК,

RESET - (RS) переустановка РАМОН2.

Ключ 0 — печать графической копии экрана на принтере.

Сообщения об ошибках

При различных ошибках, возникающих в системе, выдается сообщение, содержащее номер ошибки. Номера от 1 до 12 свидетельствуют об ошибках обмена с диском, остальные — о том, что вы что-то не так ввели. Обращаю внимание на то, что все эти сообщения выдает только командный монитор. В программах пользователей все это разнообразие будет сводиться к одной ошибке типа "прервано".

Итак, список ошибок:

1 — при чтении — ошибка синхронизации в зоне данных, при записи — установлена защита записи,

2 — ошибка синхронизации в зоне заголовка сектора,

3 — нет позиционирования на нулевую дорожку,

4 — ошибка позиционирования,

5 — не найден сектор,

6 — нет диска или он не вращается,

7 — зависание или прервано,

10 — не найден адресный маркер,

11 — не найден маркер данных,

12 — недопустимый параметр команды или нестандартный формат диска,

14 — неверное устройство,

15 — неверное имя файла,

21 — ошибка записи на диск,

22 — файл не найден,

23 — нет места на диске,

24 — нет места в каталоге,

26 — неверная длина файла,

27 — файл защищен,

30 — неверная команда.

Системные программы

Те читатели, у которых есть опыт работы с большими компьютерами, могли заметить, что функций, которые предоставляет РАМОН2, явно недостаточно для полноценной работы с диском. Многие команды просто перенесены с "ленточного" монитора БК и приспособлены для работы с диском. Это следствие моего стремления максимально совместить РАМОН2 с монитором БК. Организация же файлов на диске имеет принципиальные отличия от размещения на ленте, поэтому в дисковой операционной системе должны иметься по крайней мере команды форматирования и инициализации диска, а также вывода каталога.

Все эти функции и некоторые другие реализованы в специальных программах: TESTMY, INIT и DIR. Перечисленные программы выполняют отдельные функции операционной системы и называются системными. К примеру, в RT11 для этого существуют программы TSTGMD, FORMAT, DIR, а в системе СР/М -программа POWER.

Программа TESTMY может выполнять много разных действий, все они приводятся в меню. Это:

Системная программа TESTMY обычно используется для проверки работоспособности дисковода и для форматирования дисков.

Программа INIT несложна. Она предназначена для так называемой инициализации дисков и попросту записывает на заранее отформатированный диск пустой каталог. Ее применяют и в том случае, когда нужно удалить с диска всю информацию. Следует быть осторожным и не инициализировать ценные для вас диски. На этот случай программа запрашивает дополнительное подтверждение.

Программа DIR используется чаще всего. Она позволяет пользователю ориентироваться во всем том бардаке, который он успел завести на своих дисках. DIR распечатывает на экране каталог диска почти в полном формате. Сначала выводятся метка диска и имя владельца, потом по порядку все записи о файлах. В конце каталога выводятся количество файлов на диске, число использованных блоков и число оставшихся свободных блоков. Запись о файле, кроме имени файла, содержит его длину в блоках и номер первого блока. Оба числа даются в десятичном виде. В режиме "32 символа в строке" каталог выводится в один столбик, в режиме "64 символа в строке" - в два столбика.

***

Ничто не стоит на месте. Как и любой программный продукт, РАМОН2 претерпевает развитие. Этот процесс знаком любому профессиональному программисту и называется сопровождением программы.

Я также планирую в дальнейшем уделить большое внимание дальнейшему усовершенствованию РАМОН2. Некоторые недостатки достаточно очевидны и сами напрашиваются на исправление. К примеру, необходимо добавить в список команд монитора команды: DIR — вывод каталога на экран, DIR OUT — вывод каталога в файл (и на принтер), COPY — копирование файла.

Кроме того, может оказаться легко реализуемой и эффективной команда COMMAND — запуск на исполнение командного файла.

Это все рабочие планы. Они реализуются по мере распространения РАМОН2 среди БэКаманов. Вообще судьба РАМОН и его дальнейших версии целиком зависит от того, насколько широкое распространение он получит. Поэтому всех, у кого есть идеи по поводу сопряжения БК с дисководом, прошу писать мне по адресу:

235410, Литва, г.Шяуляй,

Севастополе, 9-44.

Ермакову Александру Михайловичу.

Домашний телефон 8-0124-96160.


ПРИМЕЧАНИЯ РЕДАКТОРА

1. РАМОН2 размещается исключительно в ПЗУ. Его адреса: 120 000-157 777, но не все они заняты именно программой, есть много свободного места для размещения программ пользователя.

2. Так как РАМОН2 размещается в дополнительном ПЗУ, никаких ограничений на длину загружаемых с его помощью программ нет.

3. Установка модуля ПЗУ на м/с 558РРЗ на БК несложна. Его состав — 3 микросхемы серии 555 и 2 микросхемы 558РРЗ. Модуль может быть изготовлен компактным и установлен в отсек ПЗУ БК или внутри контроллера дисковода. Доработка схемы самой БК не требуется.

4. Работа с диском из Бейсика и Фокала не предусмотрена.

5. РАМОН2 перехватывает прерывание ЕМТ36, так что все программы, обращающиеся к магнитофону стандартным образом (т.е. через ЕМТ36), могут работать с диском под управлением данной дисковой системы без каких-либо переделок.

6. Печать графической копии экрана на принтер возможна в том случае, если программа пользователя не запрещает прерывание от клавиатуры и не изменяет значение вектора прерывания 274. Драйвер принтера написан для стандарта Robotron СМ6329.


Распознавание и преобразование в гипертекст: Владислав М. Антонов

2004 г.