-=RUS=- | Дата: Вторник, 22.04.2014, 21:54 | Сообщение # 1 |
 Генералиссимус
Группа: Администраторы
Сообщений: 352
Статус: Offline
| Приложение 2.
Контроллер дисковода. Программный интерфейс.
1. Регистры контроллера
Регистр состояния: 177130
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14│13│12│11│10│ 9│ 8│ 7│ 6│ 5│ 4│ 3│ 2│ 1│ 0│ └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
┌──┬───────────────────────────┬──────────────────────────────┐ │Р.│ Назначение по записи │ Назначение по чтению │ ├──┼───────────────────────────┼──────────────────────────────┤ │0 │ выбор накопителя 0 │ признак "0 ДОРОЖКА" │ │1 │ выбор накопителя 1 │ признак готовности (не исп.) │ │2 │ │ запрет (защита) записи │ │3 │ │ │ │4 │ включение двигателя │ │ │5 │ выбор стороны (0-низ) │ │ │6 │ напр. шага (0-от центра) │ │ │7 │ шаг │ готовность регистра данных │ │8 │ признак "НАЧАЛО ЧТЕНИЯ" │ │ │9 │ признак "ЗАПИСЬ МАРКЕРА" │ │ │10│ включение прекоррекции │ │ │11│ │ │ │12│ │ │ │13│ │ │ │14│ │признак записи CRC на диск │ │15│ │признак "0 СЕКТОР" │ └──┴───────────────────────────┴──────────────────────────────┘ Разряды, назначение которых не указано не используются. Появление "1" в 7 разряде означает требование съема информации с регистра данных или записи в него новой информации.
Регистр данных: 177132
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14│13│12│11│10│ 9│ 8│ 7│ 6│ 5│ 4│ 3│ 2│ 1│ 0│ └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ Все разряды регистра доступны по записи и чтению.
2. Программный интерфейс драйвера НГМД
Драйвер НГМД размещен в ПЗУ, находящемся в контроллере дисковода, и имеет насколько точек входа:
┌────────┬────────────────────────────────────────┐ │ Адрес: │ Функция: │ ├────────┼────────────────────────────────────────┤ │ 160000 │ Автоматическая загрузка │ │ 160002 │ Загрузка с выбранного привода │ │ 160004 │ Чтение-запись по номеру блока │ │ 160006 │ Чтение запись по номеру сектора │ │ 160010 │ Инициализация рабочей области драйвера │ │ 160012 │ Форматирование дорожки │ └────────┴────────────────────────────────────────┘
Для работы драйвера необходима область ОЗУ размером 66 байт для размещения параметров и рабочих ячеек.
Формат рабочей области: ┌──┬──┬──────┬─────────────┬──────────────────────────────────┐ │См│Дл│ Имя │ Нач.значение│ Назначение │ ├──┼──┼──────┼─────────────┼──────────────────────────────────┤ │0 │2 │CSRW │ 0 │Копия по записи регистра состояния│ │2 │2 │CURTRK│ - │Адрес текущей дорожки │ │4 │4 │TRKTAB│177777,177777│Таблица текущих дорожек │ │10│2 │TDOWN │ 10000. │Время опускания головки │ │12│2 │TSTEP │ 10000. │Время перехода с дор. на дорожку │ │14│1 │TRKCOR│ 32. │Номер дор. вкл. прекоррекции │ │15│1 │BRETRY│ 20. │Число повторов при ошибках │ │16│1 │FLAGS │ 0 │Рабочая ячейка драйвера │ │17│1 │FILLB │вх. параметр │Код заполнения при форматировании │ │20│2 │FLGPTR│ - │Указатель на байт признаков │ │22│4 │FLGTAB│ 0 │Таблица признаков (см ниже) │ │26│2 │ADDR │вх. параметр │Адрес буфера ОЗУ │ │30│2 │WCNT │вх. параметр │Число слов для пересылки │ │32│1 │SIDE │вх. параметр │Номер стороны диска │ │33│1 │TRK │вх. параметр │Номер дорожки │ │34│1 │UNIT │вх. параметр │Номер привода │ │35│1 │SECTOR│вх. параметр │Номер сектора │ │36│22│ │ - │Рабочие ячейки драйвера │ │60│2 │MAXSEC│ 10. │Число секторов на дорожке │ │62│2 │ │ - │Рабочая ячейка драйвера │ │64│2 │BYTSEC│ 400 │Число байт в секторе │ └──┴──┴──────┴─────────────┴──────────────────────────────────┘
Таблица FLGTAB содержит по одному байту на привод и ис- пользуется для обработки нестандартных дисков. В каждом байте используется три бита для указания параметров операции. Бит 0 - при установке в 1 драйвер производит пропуск доро- жек при поиске, т.е. фактически обрабатываются только четные дорожки. Эта возможность используется для обработки на 80-доро- жечном дисководе, дискет, размеченных на 40-дорожечном дисково- де. Бит 1 - при установке в 1 драйвер производит обращение только к нижней стороне дискеты. Эта возможность используется при подключении дисководов, имеющих только одну головку, а так- же при обработке дискет, записанных на таком дисководе, на двустороннем дисководе. Бит 2 - при равенстве 0 драйвер обрабатывает сектора дли- ной 512. байт, иначе длиной 1024. байта (из-за ошибки, допущен- ной в драйвере, данный режим не работает).
2.1. Автоматическая загрузка
Вызов: CALL @#160000
Производится попытка загрузить операционную систему с при- вода 0. Если попытка загрузки была неудачной, то драйвер пыта- ется загрузить систему с 1 привода. Если обе попытки оказались неудачными, драйвер возвращает управление вызвавшей его программе командой "RTS PC". При загрузке сначала инициализируется рабочая область драйвера с адреса 2000, затем считывается 1 сектор 0 дорожки, начиная с адреса 1000. При удачной загрузке драйвер передает управление по адресу 1000, при этом в R0 помещается номер при- вода, откуда произошла загрузка. Неудачной загрузка считается если произошла ошибка чтения, первое слово считанного сектора отличается от 240 или второе слово равно 5 .
2.2. Загрузка с выбранного привода
Вызов: CALL @#160002 Параметры: R0 - Номер привода
Действие аналогично автоматической загрузке, однако заг- рузка начинается сразу с выбранного привода и при неудачной загрузке попытки загрузиться с другого привода не производится.
2.3. Чтение/запись по номеру блока
Вызов: CALL @#160004 Параметры: R0 - номер блока на диске, R1 - длина пересылаемого массива данных, R2 - начальный адрес массива данных, R3 - базовый адрес рабочей области драйвера, Поле UNIT в рабочей области - номер привода.
Блок является логической единицей информации на внешних носителях и равен 512 байтам. В используемом формате записи на диск размер блока совпадает с размером сектора. Первый сектор нижней стороны нулевой дорожки соответствует блоку 0. Вычисле- ние номера сектора и дорожки по номеру блока производится с учетом установленных признаков в таблице FLGTAB. Длина массива данных, записанная в R1 задает число слов, подлежащих пересылке, а также тип операции: если длина положи- тельна - чтение, отрицательна - запись. При записи пересылаемое число слов равно абсолютному значению длины. Если заданное чис- ло слов превышает размер сектора, осуществляется автоматический переход к следующему сектору, а если необходимо, то и на другую сторону и дорожку. Если при записи число слов не кратно размеру сектора, то остаток последнего сектора заполняется нулями. Перед самым первым вызовом драйвера поля CSRW, TRKTAB, FLAGS в рабочей области должны быть заполнены значениями, ука- занными в таблице, и не должны изменяться программой пользова- теля. Поля TDOWN, TSTEP, TRKCOR, BRETRY, FLGTAB могут быть изме- нены в зависимости от конкретных условий. Возврат из драйвера осуществляется командой RTS PC. Содер- жимое регистров R0, R1, R2, R4, R5 не сохраняется. При возник- новении ошибки устанавливается бит "С", и в байт 52 помещается код ошибки: ┌───┬──────────────────────────────────────────────────┐ │Код│ Причина ошибки │ ├───┼──────────────────────────────────────────────────┤ │ 1 │ При чтении - ошибка CRC в зоне данных │ │ │ При записи - установлена защита записи │ │ 2 │ Ошибка CRC в зоне заголовка │ │ 3 │ Нет позиционирования на нулевую дорожку │ │ 4 │ Ошибка позиционирования │ │ 5 │ Не найден сектор │ │ 6 │ Нет диска или диск не вращается │ │ 7 │ Прерывание по вектору 4 при операции │ │ 8 │ Не найден адресный маркер │ │ 9 │ Не найден маркер данных │ │ 10│ Недопустимые параметры команды или нестандартный │ │ │ формат диска │ └───┴──────────────────────────────────────────────────┘ Возникновение прерывания по вектору 4 (нажатие клавиши СТОП) во время записи на диск может привести к появлению сбоя в секторе, в который осуществляется запись. Сбой может быть уст- ранен при повторной записи в этот сектор. После завершения операции драйвер оставляет двигатель дис- ковода включенным. Для остановки двигателя программа пользова- теля должна записать 0 по адресу 177130, а также в ячейку CSRW рабочей области.
2.4. Чтение-запись по номеру сектора и дорожки
Вызов: CALL @#160006 Параметры: R3 - адрес рабочей области ADDR - начальный адрес массива данных WCNT - длина массива данных SIDE - сторона (0-нижняя, 1-верхняя) TRK - номер дорожки UNIT - номер привода (0-1) SECTOR - номер сектора (1-10.)
Действие аналогично чтению-записи логического блока.
2.5. Инициализация рабочей области
Вызов: CALL @#160010 Параметры: R3 - адрес рабочей области.
Эта точка входа является вспомогательной и служит для об- легчения написания программ, использующих драйвер НГМД.
Заполняются поля рабочей области:
┌────────┬────────────────┐ │ CSRW │ 0 │ │ TRKTAB │ 177777, 177777 │ │ TDOWN │ 10000. │ │ TSTEP │ 10000. │ │ TRKCOR │ 32. │ │ BRETRY │ 20. │ │ FLAGS │ 0 │ │ FLGTAB │ 0,0 │ │ MAXSEC │ 10. │ └────────┴────────────────┘
2.6. Форматирование дорожки
Вызов: CALL @#160012 Параметры: R3 - базовый адрес рабочей области FILLB - код, которым будет заполнено поле данных при форматировании SIDE - номер стороны, TRK - номер дорожки, UNIT - номер привода.
Форматируется указанная дорожка с указанной стороны, поле данных всех секторов заполняется кодом FILLB
Заключение ~~~~~~~~~~ Автор надеется, что информация приведенная в этом докумен- те поможет Вам создавать программы, работающие в среде ANDOS и новые утилиты. Если Вы обнаружите какие-либо ошибки, неточности, или от- сутствие какой-либо важной информации - обращайтесь к автору по телефону: (095)180-3002, Алексей. Если Вы, пользуясь этим документом, создадите что-либо стоящее, фирмы "Алексей Надежин" и "Центр БК Альтек" готовы взять на распространение Ваши программные продуктов.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
© 25.7.1994, Алексей М. Надежин
|
|
| |