Эмулятор БК0010: работа с файлами


Сам по себе БК хранит файлы на магнитной ленте. У файла есть такие атрибуты, как имя - 16 произвольных символов в кодировке КОИ-8 без ограничения на диапазон кодов, длина до 65535 байт, и начальный адрес в диапазоне от нуля до 65535 ($FFFF, @177777). Начальный адрес учитывается при загрузке файла, если прямо не указан адрес его загрузки.

Когда на БК появились дисковые накопители (включая винчестер), и задолго до этого при появлении локальных сетей на базе БК, а в настоящее время - и эмуляторов БК, встал вопрос о хранении файлов БК на дисках разнообразных систем. Ни одна из существующих ОС не имеет возможности хранить начальный адрес файла. В связи с этим на БК было «изобретено» множество форматов дисков, которые представляли собой как модификацию существующих форматов (MS-DOS), так и свои уникальные разработки.

Известные способы и форматы хранения файлов БК на дисках других ОС
ФорматЧто собой представляет
#?.BIN Самый старый и один из самых известных. Файл имеет заголовок, состоящий из двух слов (младший байт в слове идёт первым) - начального адреса файла и его длины. Этот формат применялся в системе RT-11 на центральной машине локальной сети КУВТ-86, а такая структура была обусловлена тем, что информация о длине файла в RT-11 хранилась в 512-байтных блоках, а адрес загрузки хранить было вообще негде. Имя файла - обычно до шести заглавных латинских символов (два слова в коде RADIX-50), плюс суффикс (расширение) .BIN (необязательное), либо любое другое, если в исходном имени уже присутствует расширение.
ALTEC Применялся (не исключено, что применяется и до сих пор:) в эмуляторе БК0010 Николая Подкопаева, работавшем в среде ОС БК (RT-11) на БК0011М. Похож на предыдущий, но в отличие от него хранил в заголовке файла ещё и информацию о его полном имени (16 символов), а также некоторую служебную информацию - такую, например, как номер палитры на БК0011М.
ANDOS Формат операционки ANDOS. ANDOS для хранения файлов использует диски в формате MS-DOS, а начальный адрес хранится в поле времени создания файла. При копировании этих файлов на диск AMIGA DOS время создания файла сохраняется неизменным, следовательно, информация о начальном адресе файла сохраняется.
Другие Формат эмулятора БК от Дмитрия Тюрева на IBM PC - кроме самих файлов, хранится их список в отдельном файле, где и приведены полные имена, адреса и длины.
Disk Image - «образ дискеты» БК. Формат диска в данном случае не имеет особого значения, поскольку с дискетой в данном случае работает сама операционка на БК. Форматы дискет расписаны ниже.


Теперь несколько слов о форматах, применяемых в ОС на самом БК. В эмуляторах БК эти форматы обычно поддерживаются в виде файлов - образов дискет (disk image). Кроме того, возможна и непосредственная поддержка дискет самого БК.

Известные форматы хранения файлов БК на дисках самой БК
ФорматЧто собой представляет
ANDOS Формат ANDOS - подмножество форматов MS-DOS. В отличие от MS-DOS, имеет фиксированный размер служебных областей, другую организацию поддиректорий и несколько другое назначение некоторых полей записи каталога - но несмотря на это, совместимость с MS-DOS сохранена, и диски ANDOS легко пишутся/читаются под MS-DOS (соответственно, и под CrossDOS - тоже). Кроме того, изменено назначение поля времени создания файла - вместо него ANDOS хранит начальный адрес этого файла. Формат имени файла не изменён, и так и остался 8+3. При записи файла ANDOS анализирует имя, выделяет из него до восьми символов до первой точки, если символов больше - берётся первые семь и последний. Аналогично ANDOS поступает и с расширением имени. Эти преобразования делаются как при записи файлов, так и при чтении. Поскольку даже файлы с «длинными» (в категориях PC) именами как правило различаются последним символом в имени, проблем с таким сокращением имени не возникает.
Назначение остальных полей записи каталога оставлено прежним. Поддиректории ANDOS основаны на идее USER-областей CP/M - у каждой поддиректории есть номер, и у каждого файла указано, к какой поддиректории он принадлежит. Имена поддиректорий - такие же записи каталога, как и файлы, и отличаются от них установленным флагом VOLUME, благодаря чему MS-DOS «не видит» эти записи, и для MS-DOS такие диски представляются линейным списком файлов.
MicroDOS, MK-DOS, AO-DOS, NORD Чисто «самодельный» формат, совместим только сам с собой. Диск не имеет кластерной структуры, фрагментация файлов не допускается, файлы размещаются только линейно. Длина имени файла - 14 символов. Структура поддиректорий, так же как и в ANDOS, аналогична CP/M. В MicroDOS поддиректорий ещё не было, впервые они появились в NORD, затем уже были AO-DOS и MK-DOS. В отличие от ANDOS, нестандартный формат диска (например, односторонний диск) не допускается. Ввиду несовместимости с MS-DOS перенос файлов непосредственно на диск AMIGA DOS затруднён.
ОС БК (RT-11) Формат разработан Digital Equipment Corporation ещё в 1970-х годах. Структура диска тоже исключительно линейная, значительные ограничения на имя файла - 6 символов имени и 3 символа расширения, при этом символы только заглавные латинские, цифры и несколько специальных знаков. Длина файла кратна 512 байтам (задаётся в блоках). RT-11 работает только на БК0011М, при этом запуск программ для БК0010 осуществляется с помощью различных эмуляторов среды БК0010 - «фирменного» (прилагающимся к ОС БК) и уже упоминавшегося выше эмулятора, написанного Николаем Подкопаевым (эта процедура чем-то напоминает загрузку kickstart 1.3 на современных AMIGAх).
DOSB10 (Вариант формата RT-11) Расширение формата диска RT-11. Каталог RT-11 содержит число дополнительных слов в записи, в DOSB10 это число отлично от нуля. В дополнительные поля занесены все необходимые для БК параметры - 16-символьное имя, начальный адрес и длина файла в байтах. Такой диск читается и пишется под RT-11 без проблем, благодаря совместимости форматов файлы легко переносимы.
BK-DOS Малораспространённая система. В ней практически полностью реализован формат MS-DOS, включая поддиректории. Наиболее удобный для переноса файлов в AMIGA DOS вариант. Но, к сожалению, ввиду малой распространённости этой системы преимущество сводится почти к нулю.


Большинство из вышеперечисленных форматов применялись исключительно из-за ограничений, налагаемых на имена файлов различными операционными системами, невозможности применения во многих случаях русских букв и даже латинских строчных. Кроме этого, ни одна из не-БКшных ОС не имела такого параметра, как адрес загрузки файла. AMIGA DOS не имеет ограничений на имя файла, и практически любые БКшные имена могут быть представлены корректно (за исключением служебных символов с кодом менее пробела). Однако, адреса у файлов AMIGA DOS тоже нет, и эта проблема обойдена довольно оригинальным способом.

В результате взвешивания всех «за» и «против» был выработан следующий механизм работы с файлами. За основу был взят формат ANDOS. Благодаря совместимости по формату диска с MS-DOS диски ANDOS легко читаются с помощью CrossDOS filesystem, и БКшные файлы можно просто скопировать с этих дискет. Имена файлов на диске MS-DOS состоят из двух частей - собственно имени (до восьми символов) и расширения (до трёх символов); со стороны AMIGA DOS они сливаются в одну строку, разделяясь точкой при наличии расширения. Ряд программ на БК (в частности, прошитый в ПЗУ Бейсик) тоже ориентируется на такое разделение имени файла на части, поэтому эмулятор выделяет в имени файла участки, начинающиеся с точки, и сдвигает их влево при наличии пробелов перед ними.

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


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

Параметры управления режимами работы эмулятора
ПараметрЕго действие
M (Monochrome) Переключение в монохромный режим, независимо от текущего. Переключение происходит при любой попытке загрузки этого файла. Если в данный момент уже установлен монохромный режим, он не изменится. Этот параметр имеет смысл использовать для программ, работающих только в монохромном режиме, например, для большинства отладчиков.
C (Color) Переключение в цветной режим, независимо от текущего. Действует аналогично параметру M. В основном применимо для «игрушек».
R (ROM) Правомерность загрузки файла в ПЗУ, например, для шрифтов. Попытка загрузить в ПЗУ файл, не имеющий такого параметра, будет игнорироваться.
S (Slow) Включение замедления эмуляции до реальной скорости БК. Если при этом быстродействие получается меньше, чем надо - режим не включается. Применимо опять же в основном для игрушек.
F (Fast) Выключение замедления. Полезно для прикладных программ.

Несколько примеров:
Комментарий S720- означает адрес загрузки 720 и включение замедления после загрузки.
Комментарий MF- означает включение монохромного режима и выключение замедления при загрузке файла.
Комментарий
R116076
- устанавливается у файла, содержащего шрифт для загрузки в ПЗУ по адресу 116076.


В комментарии может располагаться в принципе любая информация - не известные ему символы эмулятор игнорирует. Самое главное - адрес (если он указан) должен быть в восьмеричной системе счисления и стоять последним в строке комментария. Параметры M и C (равно как и «парочка» S и F) являются взаимоисключающими, при их одновременном использовании «срабатывает» последний по порядку в строке. Никакая другая информация, находящаяся в комментарии, не способна нарушить работу эмулятора (за исключением случаев некорректной загрузки в ПЗУ файлов, содержащих R).

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

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


Перейти к [ Содержанию ] [ FAQ ]