В ПЗУ контроллера дисковода имеется ряд подпрограмм, служащих для работы с диском на уровне секторов. Все прочие программы, обеспечивающие чтение/запись файлов или форматирование дискет, обращаются к этим подпрограммам, и знания о них понадобятся вам, особенно если начать писать свои “спасающие” программы.
@#160000 — подпрограмма-автозагрузчик операционной системы с загрузочной дискеты. Автоматически ищет загрузочный диск на всех имеющихся дисководах и найдя, загружает. Не требует параметров. Может быть вызвана командой БК-0010 ЕМТ52.
@#160004 — подпрограмма чтения/записи секторов (ЕМТ54). Подпрограмме передаются параметры:
Подпрограмма читает или записывает указанное количество двухбайтных слов, начиная с заданных адреса в ОЗУ и сектора на диске. Количество читаемых или записываемых секторов зависит от длины файла (каждый сектор занимает 0.5 кб или в БКшечном восьмеричном представлении 1000). По результатам чтения устанавливается состояние бита С слова состояния процессора. Если чтение произведено без ошибок, С=0. Если возникла ошибка чтения/записи, С=1 и в ячейке ОЗУ по адресу @#52 находится байт — номер ошибки (коды ошибок восьмеричные):
Код | Причина ошибки |
---|---|
1 | Запись: диск заклеен; чтение: ошибка контрольной суммы в зоне данных |
2 | Ошибка в заголовке сектора |
3 | Нет выхода на 0 дорожку |
4 | Ошибка позиционирования |
5 | Не найден сектор |
6 | Нет диска или он не вращается |
7 | Прерывание по клавише СТОП |
010 | Не найден адресный маркер |
011 | Не найден маркер данных |
012 | Недопустимые параметры команды или формат диска |
@#160010 — подпрограмма создания в ОЗУ и заполнения служебной области для функционирования контроллера и дисковода (рабочей области). Подпрограмма может быть вызвана по ЕМТ56. Параметр: R3 — адрес начала рабочей области в ОЗУ.
В рабочей области записаны данные (указано смещение в байтах от начала, восьм.):
Остальные участки рабочей области являются служебными.
Таблица признаков (смещение 022 от начала рабочей области) содержит четыре байта, соответствующие четырем дисководам. Для каждого из них биты байта таблицы имеют значения:
Остальные биты не используются.
@#160012 — подпрограмма форматирования отдельной дорожки диска. В качестве параметра подпрограмме передается в R3 адрес размещения в ОЗУ рабочей области контроллера, в которой, в соответствии с вышеприведенным списком, должны быть указаны номер диска, номер стороны и номер форматируемой дорожки, а также записываемый при форматировании “нулевой код”.
Кроме того, имеются две дополнительные подпрограммы, используемые реже названных выше:
(Сведения о подпрограммах приведены для “326” прошивки ПЗУ контроллера.)
Кроме того, чтобы после выполнения операций чтения/записи остановить дисковод, нужно обнулить содержимое служебного регистра контроллера @#177130 (CLR @#177130).