2.3.4. Мультиселекторный обмен с диском
МикроДОС может обеспечить обмен несколькими записями с диском
за одну операцию БДОС. Этот процесс называемый
мультиселекторным обменом, удобно использовать при операциях
обмена, когда размер физической записи больше 128 байт.
Количество записей, которое может участвовать в
мультиселекторном обмене, изменяется в пределах от 1 до 128. Это
значение устанавливается операцией БДОС 44 (установка
мультиселекторного счетчика). Значение мультиселекторного счетчика
определяет количество секторов, участвующих в обмене, для операций
последовательного и произвольного обмена (операции 20, 21, 33, 34 и
40). Если значение мультиселекторного счетчика равно N, то вызов
одной из указанных выше операций эквивалентен N последовательным
вызовам при обмене по одному сектору. Если операция прерывается по
ошибке (например, при достижении конца файла), файловая система
возвращает в регистре Н количество записей, с которыми успешно
осуществился обмен. См. также операции 50/129 50/130.
2.3.5. Счетчик байтов файла
Несмотря на то, что логический размер записи в МикроДОС равен
128 байт, МикроДОС имеет механизм определения числа байтов в
файле. Размер файла может быть вычислен, если известен последний
байт последней записи файла. Операция 35: получение размеров файла
возвращает виртуальный размер файла, который является номером
последней записи файла плюс 1. Операция 30: установка атрибутов
файла может установить счетчик байтов файла. Операция 15:
открытие файла может в свою очередь вернуть счетчик байтов файла
в поле ТЗ БУФ. Операции 17: поиск первого и операция 18: поиск
следующего также возвращает счетчик байтов файла в поле С1 БУФ в
текущем буфере прямого доступа к памяти (ПДП) (см.также операцию
26: Установка адреса буфера прямого доступа). Операция 22: создание
файла устанавливает счетчик байтов в 0 при создании файла в
оглавлении диска.
Следует принять во внимание, что файловая система не имеет
доступа к счетчику байтов во время операций записи или ч^ния
файла.
2.4 Обработка ошибок.
При работе с файлами БДОС обнаруживает физические и логические
ошибки и выдает на консоль сообщения об этих ошибках. Общий вид
сообщения приведен ниже:
Ошибка БДОС на X: [имя файла] тип ошибки
ОР = NN PC = АААА
1ST = SS Т = ТТ S = YY]
(Игнорировать (Y/N<BK>)]
,где X - диск, при обмене с которым произошла ошибка
имя файла - указывает файл, в котором произошла ошибка
тип ошибки - указывает тип ошибки.
Микро ДОС определяет следующие типы ошибок:
сбой диска - физическая ошибка при работе с диском
выбор - выбор для операции диска, не поддерживаемого
БСВВ
только для - попытка удаления или записи в файл, у которого
чтения установлен атрибут только для чтения (R)
системный - попытка удаления или записи в файл, у которого
установлеен,. системный атрибут (S)
неявное имя - БУФ указывает неявное имя для операции, которая
не допускает неявного имени
файл есть - попытка создания или переименования файла с
именем, которое уже присвоено какому-то файлу.
NN - указывает десятичный номер операции БДОС, при
исполнении которой произошла ошибка
АААА - указывает адрес команды, куда возвращается
управление после исполнения операции БДОС
SS - байт состояния диска
ТТ - номер дорожки диска
ВНИМАНИЕ: конкретный текст сообщений определен в БСВВ. он
может быть изменен при простановке МикроДОС. В зависимости от
вида ошибки текст, указанный в квадратных скобках, может не
выводиться.
БДОС использует два режима обработки ошибок, которые могут
выбираться с помощью операции 45. В режиме обработки по
умолчанию (режим,устанавливающийся после начальной загрузки и
"горячего старта") управление возвращается вызывающей программе
только при отсутствии ошибок, иначе вызывающая программа
прерывается, выводится сообщение об шибке и производится "горячий
старт". В режиме возврата обработки ошибок при обнаружении ошибок
управление возвращается вызывающей программе с признаком
ошибочного исполнения.
В режиме отображения и возврата при обнаружении ошибки
выводится сообщение об ошибке, и управление возвращается
вызывающей программе с признаком ошибки. В режиме возврата
управление возвращается вызывающей программе без вывода
сообщения.
В зависимости от типа ошибки режима обработки ошибок ОС
производит различные действия. При обнаружении ошибки выбора
диска, попытки удаления или записи в системный файл,
использовании неявного имени в операциях (не допускающих его
использование), а также при попытке создания файла или
переименования файла с существующим именем выводится сообщение
об ошибке (в режиме обработки ошибок по умолчанию), вызывающая
программа прерывается и произволдится "горячий старт" системы. В
режиме возврата управление возвращается вызывающей программе с
указанием ошибки. Аналогичные действия производятся при
обнаружении физической ошибки при записи в оглавление. Во всех
остальных случаях после вывода сообщения об ошибке выводится
вопрос "игнорировать ?" и ожидается ответ оператора. Если оператор
вводит один символ Д или Y (в нижнем или верхнем регистре), ошибка
игнорируется и управленние возвращается вызывающей программе с
признаком успешного окончания. При любом другом ответе или
перывается выполнение вызывающей программы и производится
"горячий старт" (в режиме обработки ошибок по умолчанию), или
управление возвращается вызывающей программе с кодом ошибки (в
режиме возврата).
Байт состояния диска, номер дорожки и сектора выводится в
сообщении только в случае физического сбоя диска. Байт состояния
диска, выводимый в сообщеннии об ошибке, - это байт, возвращаемый
БСВВ после исполнения дисковых операций. БДОС считает дисковую
операцию успешно завершившейся, если в результате исполнения
операции БСВВ возвращает байт состояния диска, равный 0. Все
остальные значения считаются ошибочными. Конкретное значение
байта состояния определяется контроллером диска и БСВВ.
В МикроДОС приняты следующие необязательные значения байта
состояния для ошибок:
2.5 Инициализация базовой страници памяти
Базовая страница памяти содержит сегменты кодов и данных,
которые используются прикладными программами, работающими под
управлением МикроДОС.
Ниже приведены размещение этих сегментов в базовой странице, а
также их назначение.
АДРЕСА |
СОДЕРЖАНИЕ |
оооон - |
0002Н |
содержит команды перехода в точку БДОС, обеспечиващую "горячий" старт системы. |
0003Н - |
0004Н |
не используется (резерв) |
0005Н - |
0007Н |
содержит команду перехода в БДОС и может использоваться с двумя целями - для вызова операций БДОС и для определения последней ячейки памяти, доступной пользователю. Для вызова операций БДОС нужно использовать команду CALL 0005Н, а для определения верхушки памяти-команду LIILD 0006. Впоследнем случае в регистры H&L загружается адрес начала БДОС, который на 1 больше адреса последней доступной ячейки памяти |
0008Н - |
0038Н |
этот сегмент резервируется для обработки прерывания 1-7 уровней |
003ВН - |
005ВН |
не используется (резерв) |
005СН - |
006ВН |
БУФ (область 1): Интерпретатор команд подготавливает в этом сегменте БУФ из первого имени в параметрах команды |
006СН - |
007ВН |
БУФ (область 2): Интерпретатор команд подготавливает в этом сегменте БУФ- из второго |
007СН |
|
имени в параметрах команды |
|
позиция текущей записи БУФ (область 1) |
007DH - |
■ 007FH |
позиция номера произвольной записи БУФ(область1) |
0080Н - |
00FFH |
буфер прямого доступа по умолчанию |
Интерпретатор команд перед передачей управления транзитной
программе инициализирует базовую страницу, начиная с адреса 005С.
Если параметры команды определены, то в области 1 БУФ
подготавливается БУФ из первого имени файла в параметрах команды,
а в области 2 из второго имени. Если в параметрах команды имена
файлов не указаны, то соответствующие поля заполняются пробелами.
Буфер ПДП по умолчанию с адреса 80Н заполняется остатком
командного предложения (параметрами команды), при этом в первый
байт заносится количество символов остатка, а в последующие сам
остаток. В буфере прямого доступа остаток ограничивается нулевым
байтом. Так как файловая система использует вторую часть БУФ и
буфер ПДП для дисковых операций, прикладные программы перед
вызовом операций БДОС должны сохранить информацию, занесенную
в них интерпретатором команд.
Ниже приведен пример инициализации базовой страницы для
следующего командного предложения: