Skip to content
Nikita Zimin edited this page Jul 22, 2020 · 9 revisions

Контроллер дисковода УКНЦ

С УКНЦ могут использоваться дисководы НГМД-6022, МС-5305 или совместимые с ними. Контроллер дисковода УКНЦ построен на микросхеме 1801ВП1-097 либо 1801ВП1-128. Используется метод записи MFM.

В RT-11 соответствующий драйвер имеет название MZ.

Дискета вращается со скоростью 5 оборотов в секунду, скорость потока данных при чтении/записи — 250000 бит в секунду, поэтому ёмкость дорожки составляет (примерно) 50000 бит = 6250 байт = 3125 слов.

Регистры, команды и режимы контроллера

Со стороны УКНЦ контроллер представлен двумя 16-разрядными регистрами — регистр состояния 177130 и регистр данных 177132.

Формат регистра состояния РС (177130) по записи:

Бит Описание
0-3 Выбор накопителя
4 Включение двигателя
5 Выбор стороны
6 Направление шага головки
7 Шаг
8 Начало чтения
9 Запись маркера

Формат регистра состояния РС (177130) по чтению:

Бит Описание
0 TRACK0 - признак нулевой дорожки
1 RDY - готовность
2 WRITEPROTECT - защита от записи
7 MOREDATA - готовность" регистра данных
14 CHECKSUMOK - контрольная сумма верна / запись контрольной суммы
15 INDEXMARK - индексное отверстие

Структура дорожки

Структура дорожки основана на формате ISO. Драйвер контроллера УКНЦ умеет форматировать дорожки с размерами секторов 256/512/1024 байт (16/10/5 секторов на дорожку), но читать умеет только сектора по 512/1024 байт.

Дорожка имеет следующий формат. Отсчёт байт идёт от начала индексного отверстия.

Часть Длина Содержимое Описание
GAP1 34 байты 0x4E Промежуток в начале дорожки
Sync 12 байты 0x00 Начало сектора -- синхропоследовательность
ID AM 4 0xA1 0xA1 0xA1 0xFE Адресный маркер заголовка сектора
Sec hdr 4 CYL HD SEC NO Заголовок сектора
CRC 2 ?? ?? Контрольная сумма, считается включая ID AM
GAP2 24 байты 0x4E Промежуток перед данными сектора
Sync 12 0x00 × 12 Синхропоследовательность
DATA AM 4 0xA1 0xA1 0xA1 0xFB Адресный маркер данных
Sec data 256/512/1024 Данные сектора
CRC 2 ?? ?? Контрольная сумма, считается включая DATA AM
GAP3 56/38/118 байты 0x4E Промежуток между секторами, размер зависит от размера сектора
... Остальные сектора дорожки
GAP4B Промежуток в конце дорожки

Реализация в эмуляторе UKNCBTL

Поддерживается один формат файла образа диска (обычно имеет расширение .dsk) — в котором содержатся только чистые данные секторов. Обработка для файлов с расширением .trd немного отличается — для них предполагается что перед данными секторов располагается 256-байтный заголовок, который просто игнорируется.

При подключении файла образа диска в эмуляторе, файл открывается и держится открытым до его отключения в эмуляторе или до завершения эмулятора. Данные читаются из образа и пишутся в образ только целыми дорожками. При переходе с одной дорожки на другую данные секторов предыдущей дорожки сохраняются (если были операции записи), и читаются данные секторов другой дорожки.

В памяти держатся два массива байт — первый это 6250 байт данных дорожки, второй — массив в котором обозначено где стоят маркеры. Предполагается, что все дорожки диска всегда содержат сектора по 512 байт, 10 секторов на дорожку. При чтении секторов дорожки из файла образа диска, подготавливаются оба массива. При записи дорожки в файл образа диска, данные секторов выбираются из массива данных дорожки и сохраняются только чистые данные секторов.

Такая реализация является достаточной для большинства применений. Исключение составляют программы, работающие с диском нестандартным способом — используя свой код для чтения/записи данных.

Ссылки