ДРАЙВЕР обмена с дисководом
Широко распространенным устройством внешней памяти, применяемым в МП системах, является НЕМД. Носителем информации в нем служит полимерный диск стандартного диаметра (например, 203 мм, или 8 дюймов), покрытый с обеих сторон ферромагнитным материалом и заключенный в плотный конверт с отверстиями, через которые производятся чтение и запись информации (рис.
6.5). Поверхность диска разбита на 77 концентрических окружностей — дорожек. Каждая дорожка содержит 26 секторов. Один сектор может хранить 128 байт полезной информации, а диск в целом — 256 К байт. Рассматриваемый ниже драйвер ориентирован на управление обменом с накопителем типа «Электроника ЕМД-7012», который имеет два устройства для установки дисков и взаимодействует с МП системой посредством интерфейсных команд. Эти команды позволяют выполнять обмен данными между внутренним буфером НГМД и заданным сектором на диске, а также между МП системой и внутренним буфером НГМД.Основные линии физического взаимодействия НГМД с МП системой показаны на рис. 6.6. Данные и команды передаются последовательным кодом по линии ДАННЫЕ. Направление обмена по этой линии определяется состоянием линии ВЫВОД. Линия СДВИГ служит для стробирования битов символа, передаваемых по линии ДАННЫЕ. По линии ПУСК передаются сигналы, информирующие накопитель, что УС готово принять или передать очередной символ. Аналогичное назначение имеет линия ЗАПРОС ПЕРЕДАЧИ (только сигналы передаются со стороны накопителя). По линии ЗАВЕРШЕНО
Рис. 6.5. Структура размещения информации на ГМД
Рис. 6.6. Внешний интерфейс НГМД
накопитель информирует устройство сопряжения об окончании выполнения команды. По линии ОШИБКА фиксируется факт удачного или неудачного выполнения команды.
Взаимодействие драйвера с УС осуществляется через порты ввода-вывода данных. Порт вывода (ПВЫ) предназначен для передачи байта информации в накопитель, а порт ввода (ПВВ) — для его приема. Порт вывода ПУСК служит для генерации сигнала «Пуск». Порт ввода СОСТ, формат которого приведен на рис. 6.7, служит для фиксации сигналов, поступающих из накопителя. Драйвер обеспечивает выполнение двух функций: запись информации из памяти МП системы в указанный сектор
на диске и чтение информации из сектора на диске в память МП системы.
Для выполнения записи на диск необходимо предварительно записать информацию из памяти во внутренний буфер НГМД. Это делается с помощью интерфейсной команды «Запись буфера», которая состоит из 129 байт: первый байт содержит код команды (рис. 6.8), а остальные 128 байт — данные, предназначенные для записи в сектор. Каждый байт команды загружается в порт ПВЫ, после чего генерируется сигнал «Пуск». Очередной байт можно загружать только после появления сигнала «Запрос передачи». После вывода 129-го байта вместо сигнала «Запрос передачи» накопитель передает сигнал «Завершено». После записи информации в буфер НГМД необходимо выполнить перезапись из буфера на диск командой «Запись сектора». Для реализации этой команды следует загрузить в накопитель 3 байта. Первый байт содержит код команды, второй и третий — соответственно номер сектора (1—26) и номер дорожки (0—76).
Чтение сектора диска в память МП системы осуществляется также в два этапа — с диска во внутренний буфер и из буфера НГМД в память МП системы. Чтение сектора диска во внутренний буфер НГМД выполняется
Рис. 6.9. Структура драйвера НГМД
командой «Чтение сектора», которая задается аналогично команде «Запись сектора» (но с другим кодом). Для перемещения информации из буфера накопителя в память МП системы служит команда «Чтение буфера», для выполнения которой необходимо в порт ПВЫ выдать код команды, а затем из порта ПВВ по каждому сигналу «Запрос передачи» прочесть 128 байт данных.
После последнего байта вместо сигнала «Запрос передачи» передается сигнал «Завершено».Структура драйвера НГМД приведена на рис. 6.9. Драйвер состоит из 9 программ. Внешние программы взаимодействуют с драйвером только через программы
3- го уровня. Побайтный обмен с накопителем выполняют программы 1-го уровня:
Программа ВЫБ управляет выводом байта в накопитель. Байт загружается в порт ПВЫ, после чего генерируется сигнал «Пуск» путем выполнения команды OUT ПУСК- Возврат из программы выполняется только при наличии сигналов «Завершено» или «Запрос передачи». Программа ВВБ производит ввод байта из накопителя. Сначала выдается сигнал «Пуск», а затем происходит ожидание сигналов «Завершено» или «Запрос передачи». Для организации этого ожидания с помощью команды CALL вызывается соответствующий фрагмент подпрограммы ВЫБ. Затем из порта ПВВ вводится байт. Программа вывода команды (ВЫКОМ) обеспечивает установку в заданной команде бита номера устройства в соответствии с содержимым ячейки NYCT.
Выполнение основных функций накопителя обеспечивают подпрограммы 2-го уровня драйвера:
Программа ВВБУФ реализует чтение 128 байт из буфера НГМД в область памяти, адрес которой записан в ячейке АБУФ. Вначале подпрограммой ВЫК.ОМ выводится байт с кодом команды «Чтение буфера», а затем следует цикл приема 127 байт информации. На каждой итерации цикла посредством обращения к подпрограмме ВВБ вводится из НГМД один байт и записывается в память. Для адресации очередного байта используется указатель в регистровой паре (Н, L). Контроль окончания цикла производится с помощью счетчика, который располагается в регистре (В) и декрементируется на каждой итерации.
После каждого вызова программы ВВБ проверяется отсутствие сигнала «Завершено». Последний, 128-й, байт вводится вне цикла, так как после него проверяется наличие сигнала «Завершено». Отрицательный статус завершения операции устанавливается в трех случаях: 1) сигнал «Завершено» появляется в процессе выполнения команды; 2) сигнал «Завершено» отсутствует после выполнения команды; 3) появляется сигнал «Ошибка».Структура программы ВЫБУФ, выполняющей запись
128 байт информации из памяти МП системы в буфер НГМД, аналогична структуре программы ВВБУФ. Отличие лишь в том, что в первом фрагменте выводится код команды «Запись буфера» и для вывода информации используется программа ВЫБ. Программа ВВСЕК обеспечивает чтение информации из сектора на диске во внутренний буфер НГМД: в накопитель последовательно выводятся код команды «Чтение сектора» и содержимое ячеек NCEK и ЫДОР, в которых записаны номера соответственно сектора и дорожки. Отрицательный статус завершения операции устанавливается при наличии сигнала «Завершено» во время выполнения команды или его отсутствии в момент завершения команды. Запись информации из буфера НГМД в сектор на диске выполняет программа ВЬІСЕК. Она отличается от программы ВВСЕК только одной командой, которая определяет код команды накопителя. Поэтому после 'загрузки кода команды в регистр (С) управление передается соответствующему фрагменту программы ВВСЕК-
Программы 3-го уровня драйвера обеспечивают с помощью программ 2-го уровня передачу информации из памяти МП системы в заданный сектор на диске и обратно. Внешние программы, которым необходимо осуществить операцию обмена с накопителем, должны записать в ячейки памяти ЫУСТ, ЫДОР и NCEK соответственно номера нужных устойства, дорожки и сектора и вызвать необходимую подпрограмму 3-го уровня:
В программе ВВДСК, которая выполняет чтение содержимого сектора в память, сначала с помощью подпрограммы ВВСЕК информация из сектора считывается в буфер накопителя, а затем посредством подпрограммы ВВБУФ — в память МП системы. Если хотя бы одна из этих подпрограмм возвращает в вызывающую программу отрицательный статус своего завершения, описанная процедура повторяется до 32 раз. Если все попытки оказываются неудачными, программа ВВДСК устанавливает отрицательный статус своего завершения. Запись информации из памяти МП системы в сектор на диске реализует подпрограмма ВЫДСК- В этой программе с помощью подпрограмм ВЫБУФ и ВЫСЕК информация записывается сначала в буфер накопителя, а затем на диск. Так же как и в программе ВВДСК, предусмотрен 32-кратный повтор в случае получения От вызываемых подпрограмм отрицательного статуса их завершения.
6.6.