Чтения/записи основные
Команды этой группы предназначены для чтения и записи секторов.
Позиция начального сектора в операции задается в регистрах дорожки й
сектора. После получения команды микроконтроллер начинает поиск на-
чального сектора на дискете, а когда он найден, устанавливает единицу в 1
бите регистра состояний. В ответ на это необходимо начать прием или
передачу информации через регистр данных. Для этих и последующих
команд назначения битов служебного регистра приведены в табл. 14.
Чтение секторов 10OmsecO
Чтение группы секторов. Команда имеет следующие параметры:
m бит задает количество секторов, участвующих в операции. Если он
сброшен, то обрабатывается один сектор, если установлен — обрабаты-
ваются последовательно все сектора на текущей дорожке, начиная с того,
который указан в регистре сектора;
s значение этого бита определяет номер стороны дискеты (0 — нижняя
сторона, 1 — верхняя). Микросхема не имеет аппаратных сигналов для
выбора магнитных головок на дисководе (это делает системный регистр
Beta Disk-интерфейса), но номер стороны содержится в заголовке сек-
тора;
е этот бит используется для задания задержки при установке магнитной
головки в рабочее положение. Если бит сброшен, задержка не произво-
дится, в противном случае между выдачей сигнала на установку головки
в рабочее состояние и началом операции делается задержка в 15 мс;
с значение этого бита определяет, делать или не делать проверку стороны
дискеты при операции. Если бит сброшен, то проверки не производится.
Разряды системного регистра для этой команды имеют следующие
значения:
5 считан сектор, для которого при записи был установлен бит а (см. коман-
ду «Запись секторов»);
4 не найден требуемый сектор;
3 ошибка в контрольном коде, при считывании записи. Такая ошибка
может произойти при считывании поля заголовка сектора, а при чтении
— и поля данных;
2 потеря данных. Единица в этом разряде указывает на то, что при передаче
байтов в/из регистра данных были пропуски данных микросхемы (оче-
редной байт не был записан или считан в/из регистра);
1 запрос данных. По единице в этом разряде необходимо извлечь (или
занести) очередной байт в регистр данных.
Запись секторов lOlmseca
Запись секторов. Бит а указывает на один из двух возможных форма-
тов сектора. В дальнейшем при считывании этот формат будет индициро-
ваться в 5 бите системного регистра. Обычно этот бит обнуляют, при этом в
поле заголовка сектора формируется специальный байт #FB, в противном
случае — байт #F8. Остальные параметры аналогичны команде «Чтение
секторов
Чтения/записи вспомогательные
В эту группу входят три команды: чтения адреса, чтения и записи
дорожки. Параметр е в командах означает то же, что и для основных
чтения/записи.
Запись (форматирование) дорожки 1111 ОеОО
Эта команда предназначена для разметки дискеты, то есть для ее
форматирования. Информация, посылаемая в микроконтроллер, должна
полностью соответствовать выбранному формату. Запись автоматически
начинается по приходу индексного импульса, то есть с начала дорожки. В
отличие от записи сектора, количество записываемыхбайтой не фиксирова-
но, оно определяется конкретным форматом дискеты. Часть байтов будет
просто записываться, однако несколько из них интерпретируются в этой
команде специальным образом. Они предназначены для формирования
служебных отметок, таких как адресные маркеры или контрольные коды
(КК). В табл. 15 приведено назначение таких служебных байтов.
Формат дорожки включает в себя несколько полей, для правильного
формирования которых необходимо придерживаться определенных стандар-
тов. Ниже приведены форматы массивов данных для создания правильной
дорожки в режимах частотной модуляции (табл. 16) и модифицированной
частотной модуляции (табл. 17).
Рассмотрим формат дорожки более подробно. Между информацион-
ными полями находятся области пробелов, служащие для синхронизации
внутренних схем микроконтроллера. Чем больше поля пробелов, тем лучше
синхронизируется контроллер, тем меньше сбоев происходит при передаче
информации. В Таблицах приведены рекомендуемые значения длин пробе-
лов, а также значения байта, которым они заполняются. Уменьшив длину
пробелов, можно получить некоторый выигрыш в объеме за счет потери
надежности*.
Каждый сектор логически состоит из двух информационных полей:
поля заголовка и непосредственно следующего за ним поля данных. В
заголовке записана служебная информация о секторе, для этого использова-
ны четыре байта. Номер дорожки и номер сектора идентифицируют кон-
*) Величина последнего пробела (последнего, потому, что он предшествует
формированию дорожки) особенно важна. Небольшая длина, установ-
ленная авторами Tk-DOS, не позволяет, кроме всего прочего, считывать
первый сектор дискеты на большинстве IBM-совместимых компьютеров.
Количество байтов |
Код |
Назначение |
~40 |
#FF |
Последний пробел |
6 |
0 |
|
1 |
#FC |
Индексная метка |
-26 |
#FF |
Первый пробел |
6 |
0 |
|
1 |
#FE |
Адресная метка заголовка сектора |
1 |
xx |
Номер д орожки |
1 |
xx |
Номер стороны дискеты |
1 |
xx |
Номер сектора |
1 |
xx |
Длина сектора |
1 |
#F7 |
Формирование двух байтов КК заголовка |
-11 |
#FF |
Второй пробел |
6 |
0 |
|
1 |
#FB |
Адресная метка данных |
xx |
xx |
Данные |
1 |
#F 7 |
Формирование двух байтов КК данных |
-27 |
#FF |
Третий пробел |
-247 |
#FF |
Четвертый пробел |
Таблица 17. Формат дорожки для MFM. |
Количество байтов |
Код |
Назначение |
-80 |
#4E |
Последний пробел |
-12 |
0 |
|
3 |
#F6 |
Поле С2 |
1 |
#FC |
Индексная метка |
-50 |
#4E |
Первый пробел |
-12 |
0 |
|
3 |
#F5 |
Попе А1 |
|
#FE |
Адресная метка заголовка |
|
xx |
Номер д орожки |
|
xx |
Номер стороны |
|
xx |
Номер сектора |
|
xx |
Длина сектора |
|
#F 7 |
Формирование двух байтов КК заголовка |
-22 |
#4E |
Второй пробел |
-12 |
0 |
|
3 |
#F5 |
Поле А1 |
1 |
#FB |
Адресная метка поля данных |
xx |
xx |
Данные |
1 |
#F 7 |
Формирование двух байтов КК поля данных |
-54 |
#4E |
Третий пробел |
-598 |
#4E |
Четвертый пробел |
кретный сектор. Принято, что дорожки
считаются с нуля, а сектора с единицы. В
байте номера стороны может быть два зна-
чения: 0 для нижней и 1 для верхней.
Длина сектора записывается специальным
кодом и определяет размер поля данных
(см. табл. 18).
Каждое информационное поле за-
канчивается двумя байтами контрольного
кода.
В качестве данных при форматировании дорожки можно использо-
вать любой не служебный байт, но обычно применяют коды 0 или #FF.
Порядок следования секторов на дорожке может быть произвольным.
Обычно он кратен некоторому целому числу, называемому interleaving —
чередование. Если это число равно единице, то сектора расположены после-
довательно: 0, 1, 2.... Для Двух сектора располагаются через 1, для трех —
через 2 и так далее. Чередование секторов влияет на скорость обращения к
диску. После окончания записи или считывания очередного сектора про-
грамма обычно должна выполнить какие-либо действия, а на это затрачива-
ется время, за которое дискета успевает повернуться на определенный угол.
И ж моменту очередного обращения к диску под магнитной головкой может
оказаться сектор, далеко отстоящий от предыдущего. Если секторы располо-
жены последовательно, то при обращении к следующему сектору программе
придется ждать, пока дискета сделает целый оборот. При соответствующем
чередовании секторов время ожидания очередного сектора можно свести к
минимуму.
Чтение дорожки 1110ОеОО
Эта команда считывает с дорожки всю имеющуюся на ней информа-
цию, включая поля пробелов, заголовков и служебные байты. В силу неко-
торых аппаратных особенностей Beta Disk'а при выполнении этой команды
происходит потеря синхронизации данных микроконтроллером. Таким об-
разом* использовать команду затруднительно.
Чтение адреса НОООеОО
По этой команде с дискеты считывается первый встреченный заголо-
вок сектора. Из поля заголовка передаются 6 байтов — 4 байта информаци-
онные (номер дорожки, номер стороны, номер сектора и длина сектора) и 2
байта контрольного кода. При выполнении этой Команды содержимое реги-
стра дорожки пересылается в регистр сектора. Командой удобно пользовать-
ся для сканирования дорожки, последовательно считывая информацию о
имеющихся секторах. Подробнее об этом будет сказано в разделе «Драйвер
дисковых операций».