This is an old revision of the document!
Table of Contents
Жесткие диски в IBM PC XT и контроллеры MFM/RLL
Здесь собраны различные заметки по подключению жестких дисков MFM/RLL к компьютеру IBM PC XT и совместимых. К сожалению, полную информации по этому вопросу найти уже сложно, кроме того, потихоньку все уже забывается.
Основное внимание в этом документе обращено на вопросы “Как сделано?” и “Почему так сделано?”. Текст написан технарем и для технарей, поэтому тут много жаргона и предполагаются базовые знания организации, схемотехники и функций BIOS XT. Что касается внешней стороны “Как это включить?” то можно почитать раздел “Дополнительные материалы”.
BIOS XT и HDD
Как известно, компьютер IBM PC XT 5160 был вторым персональным компьютером после IBM PC 5150. Как и предшественник, IBM PC XT имел на материнской плате BIOS объемом 8K, который поддерживал основные устройства XT. Давайте рассмотрим поддержку устройств в BIOS IBM PC XT 5160.
BIOS XT содержит драйвера очень ограниченного числа устройств:
- Драйвер контроллеров дисплея CGA или MDA, включая графические режиимы CGA и шрифты для них. Выбор типа контроллера осуществляется с переключателей на материнской плате.
- Драйвер клавиатуры (сканкоды типа XT)
- Драйвер COM-порта на 8250_UART
- Драйвер принтера CENTRONIX и поддержка кнопки Print Screen
- Драйвер флопи-контроллера на микросхеме i8272А.
На IBM PC XT драйвером в BIOS поддерживаются дисководы двойной плотности (96tpi) 40 дорожек, 2 стороны, 9 секторов. Таким образом, в BIOS XT имеется поддержка дискет 360К и только. Количество флопиков выбирается с переключателей на материнской плате, от 1 до 4. Все флопики с точки зрения BIOS одинаковые, по 360К.
На PC поддержка дисковых устройств осуществляется через прерывание BIOS INT 13, самые важные вызовы конечно же “Прочитать сектор”(INT 13/AH=02h) и “Записать сектор”(INT 13/AH=03h). BIOS поддерживает до 4-х флопии-приводов 360К с номерами устройств от 0 до 3.
Стандартный BIOS XT обрабатывает также вызов INT 19 (Boot) и поддерживает загрузку с нулевого устройства, которое, как несложно догадаться, является флопиком 360К. Фактически, обработчик INT 19 состоит из вызова INT 13 “Прочитать сектор” c первого сектора дискеты (Boot Sector) в память по адресу 0000:7С00H (на 1Кб меньше 32К). Если в конце сектора есть сигнатура AAH/55H, то это скорее всего нормальный Boot Sector и BIOS передает туда управление.
Таким образом, “стандартный” BIOS XT не содержит никаких драйверов жестких дисков, вся поддержка содержится в Optional ROM BIOS платы контроллера.
Материалы для дополнительного чтения:
- Роберт Журден. Справочник программиста на персональном компьютере фирмы IBM. Глава 5: Дисковые накопители
- Питер Нортон. Программно-аппаратная организация IBM-PC
- Ralf Brown Interrupt List http://www.ctyme.com/rbrown.htm
- Исходники BIOS из IBM PC XT Technical Reference Section 5
Важное отличие XT от AT286/386/+ : В BIOS IBM PC AT и старших машин дополнительно содержится драйвер “стандартного” 16-битного MFM контроллера жестких дисков Western Digital на чипсете WD1010. Машина IBM 5170 (это полное название AT-шки) продавалась сразу с жестким диском и контроллером WD1003-WA. Поэтому “стандартный” 16-битный MFM контроллер не имеет BIOS-а на борту, он ему просто не нужен, т.к. драйвер содержится в основном BIOS-е материнской платы AT. Далее, оказывается, что контроллер “внутре” любого IDE диска полностью совпадает по системе команд и регистрам с MFM WD1003-WA (плюс расширения). Это нисколько не удивительно, поскольку стандарты IDE разрабатывала та же фирма Western Digital. Этот набор регистров называется Task File, он стандартный и одинаковый у 16-битного MFM и обычных IDE и работает одинаково. Поэтому машине AT с IDE диском и контроллером тоже не нужны никакие дополнительные BIOS-ы.
Второе важное отличие AT286/386/+ - это наличие CMOS Clock. Это такие специальные часы с маленькой памятью на батарейке. В памяти хранятся настройки CMOS Setup, так что CMOS заменяет кучу переключателей. В одной из ячеек CMOS-памяти хранится так называемый “тип жесткого диска”. На самом деле это просто индекс (номер) в большой таблице BIOS, где хранятся параметры C/H/S дисков. Количество таких фиксированных типов постоянно росло, доросло до 46 и в конце концов это всем надоело. Сделали User Type = 47, в котором количество дорожек, головок и секторов можно задавать вручную.
UPD Для совсем нердов - последние редакции BIOS для IBM PС XT 5160 умеют работать с флопиками 1.2Mb. Но для этого нужно заменить штатный контроллер флопиков на контроллер с поддержкой высокой плотности.
Диски MFM
Компьютер IBM PC XT 5160 в отличии от просто IBM PC 5150 продавался уже с жестким диском аж на 10 магабайт. В качестве поставщика IBM выбрала популярного тогда производителя винтов Seagate с моделью диска ST-412. Компания Seagate к тому времени уже была известна как производитель жестких дисков для мини-компьютеров, например она выпускала жесткий диск ST-506 на 5 мегабайт, который применялся в мини-компьютерах DEC (RD50) с точно такими же шлейфами. Вскоре и другие производители выпустили множество совместимых моделей: Western Digital, Kalok, Tandon, Micropolis e.t.c. Таким образом, интерфейс модели винтов ST-506/412 фирмы Seagate стал де-факто “стандартом” в отрасли персоналок и названием интерфейса для подключения древних жестких дисков.
Подробнее в википедии: https://en.wikipedia.org/wiki/ST-506
Способ записи (кодировка битов) на такой жесткий диск был MFM (Modified Frequency Modulation). Таким образом, по названию способа записи и сами жесткие диски стали называться MFM. А интерфейс для подключения у них был уже знакомый нам ST-506/412.
Надо отметить, что, по сути, диск с интерфейсом ST-506/412 представляет из себя такой “цифровой магнитофон”. То есть, выбрав дорожку 0 сторону 1 мы получаем по кругу одни и те же данные 3600 раз в минуту (60 раз в секунду) и плюс сигнал индекса на каждый оборот. Поэтому, в теории, записать на дорожку ST-506/412 можно что угодно, не только MFM, а любой поток битов <10MHz. Формированием и распознаванием “заголовков секторов” и выделением данных занимается контроллер. Поэтому, перед использованием нового жесткого диска, его надо отформатировать на вашем контроллере. Такая схема разбиения на сектора называется “Soft Sectors”. Совместимость форматов дорожки между разными контроллерами - довольно посредственная. Например, если контроллеры сделаны на одинаковом чипсете (например WD), то совместимость скорее всего будет. А если на разных (WD и, например, OMTI) - то скорее всего нет.
Материалы для дополнительного чтения:
- ST 506/412 OEM Manual Фирменное руководство от Seagate на диски ST-506 и ST-412
- OA - IBM 10MB Fixed Disk Drive Содержит схему электроники ST-412
- Пример для изучения возможностей разгона ST-506/412: контроллер повышенной плотности Perstor PS180-16F
Шлейфы MFM
Интерфейс ST-506/412 состоит из двух шлейфов: узкого и широкого. По широкому идут управляющие сигналы: переключение головок, шаг, сигналы индекса (один на оборот) и т.д. По узкому шлейфу идут данные MFM для чтения и записи в виде диф-пар. Частота тактирования для передачи данных была 10MHz, что по тем временам было довольно много, поэтому и применялись дифпары, на контроллерах стоял специальный ФАПЧ и т.д.
Согласно стандарту ST-506/412 к одному контроллеру может подключаться до 4-х жестких дисков и имеются 4 сигнала DS0..DS3 (Drive Select). К сожалению, большинство контроллеров позволяют подключить только 2 жестких диска.
Применяется радиально-шинное подключение. Это означает, что управляющий (широкий) кабель - общий для всех дисков в системе (шина), а кабели данных (узкие) идут индивидуально от контроллера к каждому диску.
Поскольку управляющий кабель представляет из себя шину, то необходимо на концах кабеля ставить терминаторы - небольшие резисторные сборки. Это напоминает правила подключения SCSI: терминаторы должны стоять на концах кабеля, то есть на контроллере и “дальнем” диске. На “среднем” диске терминаторы необходимо отключать. Узкие шлейфы не терминируются, там стоят специальные приемопередатчики, обычно такие же как для EIA RS-422.
Параметры шлейфа:
- Шлейф (собственно сам кабель) - Ribbon cable (ленточный кабель) - толщина AWG24 на 34 и 20 проводников соответственно.
- Коннектор краевого разъема 34 пин - EC34, AMP P/N 88373-3, Molex 15-35-1351 или совместимый.
- Коннектор краевого разъема 20 пин - EC20, AMP P/N 88373-6, Molex 15-35-1201 или совместимый.
- Коннекторы для присоединения к контроллеру - IDC, Insulation-displacement connector на 34 и 20 пинов.
- Номинал резисторов для терминирования - сборка 220/330 ом.
Для упрощения подключения жестких дисков часто применяют управляющий кабель “с перекруткой”. Аналогичная схема часто применяется для кабеля флоппи-дисков. В этом случае, все флоппи-диски переключаются на адрес B: (DS1), а “перекруткой” жил кабеля подменяют сигналы DS0 и DS1. C кабелем MFM можно проделать то же самое, только перекручиваются другие жилы.
Дополнительные материалы для чтения:
- 4294826724.pdf ГОСТ 280143-98 Интерфейс накопителя на магнитных дисках (ИМД-М). Советское прочтение стандарта ST-506/412.
Контроллеры для XT и их BIOS
Оригинальная IBM PC XT 5160 продавалась с OEM контроллером жесткого диска фирмы Xebec 1210
http://www.minuszerodegrees.net/ibm_xebec/ibm_xebec.htm
Это было довольно интеллектуальное устройство - на борту целый процессор Z80, ПЗУ с микрокодом, собственный контроллер DMA i8237 и т.д. Такая схемотехника не является строгим каноном, например, контроллеры WD1002-WX и Seagate ST-11M для XT в качестве процессора используют однокристальную ЭВМ i8051 и т.д.
Контроллер Xebec 1210 поддерживал два жестких диска Seagate ST-412 и имел на борту ПЗУ (Optional ROM), то есть расширение BIOS. Интерфейс между BIOS и Optional ROM, как известно, является стандартом на IBM PC: во время POST процедуры BIOS материнской платы XT сканирует область дополнительных ROM и, если находит сигнатуру, пытается эти ROM запустить. Получив управление BIOS контроллера, в свою очередь, тестирует жесткий диск (читает 1-й сектор) и переписывает на себя вектора прерываний INT 13 и INT 19 (включается первым в цепочку). Если же диск неисправен - выводится ошибка 1701.
Новый обработчик INT 13H добавляет поддержку физических дисковых устройства с номером 80H (и 81H для второго диска). Обработка старых устройств (как мы помним - флопиков с номерами 00H и 01H) передается предыдущему обработчику INT 13 (стрый адрес сохраняется на INT 40). Новый обработчик INT 19 меняет логику загрузки: сначала пытается загрузиться с флопика, а в случае неудачи - с первого жесткого диска (устройство 80H).
BIOS контроллера XT использует некотрые ячейки BDA (BIOS data area), а кроме того, он заполняет область FDPT (Fixed Disk Parameter Table), на которую указывает INT 41 (INT 46 для второго диска). Обратите внимание, этот вектор используется не для вызова, а именно как x86 FAR-указатель на данные параметров жесткого диска. Указывать он может как прямо на таблицу в области ROM контроллера диска, так и в память. Для таблички FDPT часто используется или область старших прерываний (INT C0-C3 и INT C4-C7) которые не использует никто кроме ROM Basic, или область стека BIOS 0000:0500h, что конечно чревато ее затиранием. Иногда используют последний килобайт памяти 9000:FС00 (там же размещается EBDA (Extended BIOS Data Area)) и остается 639К вместо 640К. Для устройств с нормерами от 82H и выше таблицы FDPT не ведется, их параметры можно узнать только через INT 13H функцию 8H.
При старте MS-DOS опрашивает BIOS и FDPT на наличие жестких дисков в системе. Поддержка MS-DOS для жесткого диска устроена также несколько сложнее, чем для дискеты. Появилась поддержка Таблиц Разделов (Partition Table) и специальная программа FDISK в составе DOS (начиная с 2.0) для работы с разделами. Загрузчик в Boot Sector-е жесткого диска тоже несколько сложнее - он проверяет таблицу разделов и грузится с первого “активного” раздела. Когда загружается MS-DOS, он присваивает устройству 80H (а точнее, первому активному разделу) символическое имя C:, так как на уровне BIOS никаких имен нету, только номера.
Следом за Xebec, другие производители также выпустили на рынок массу контроллеров для XT. Самой, пожалуй, популярной была серия Western Digital WD1002-WX. Благодаря тому, что IBM опубликовала полные спецификации, контроллеры WD были практически совместимы с Xebec на уровне регистров, хотя и сделаны на других чипах. Кроме WD часто встречались контроллеры фирм Longshine, DTC и SMC OMTI. Даже фирма Seagate поспешила на рынок со своими контроллерами ST-11M и ST-11R (странно что они сразу не выпустили контроллер XT ISA-8 для своего сверх-популярного диска ST-412). В СССР также выпускались машины с жестким диском MFM. ПЭВМ “Искра-1030” имела контроллер жесткого диска, повторяющим ранний WD1002-WX на микросхемах - клонах набора WD. ПЭВМ “ЕС-1841” имела контроллер - близкий аналог Xebec.
Дополнительные материалы для чтения:
- OA - IBM Fixed Disk Adapter содержит схему контроллера Xebec (IBM 59×7921) и листинг его BIOS
- WD1002S-WX2 XT MFM OEM Manual содержит блок-схему контроллера и описание принципов его работы.
- SNOA710 AN-413 Disk Interface Design Guide and Users Manual. Много полезной информации от TI
- AN-0413 Оригинал AN-0413 от NS
- Документация на чип WD42C22C для жестких дисков и контроллеров - может работать как в режиме XT-BUS так и AT-BUS.
Форматирование жесткого диска MFM
Перед тем, как использовать жесткий диск MFM, необходимо записать на него служебную информацию для поиска секторов на дорожке - Sector address (см. выше про Soft Sectors). Поскольку разметка у разных контроллеров может отличаться, необходимо проводить эту операцию или после замены контроллера или для нового MFM диска. Нанесение служебной информации называется низкоуровневое форматирование (Low-level format, LLF). Эта операция отличается от создания служебных структур операционной системы: разбиение на разделы (partitioning) и создания файловой системы (собственно formatting или высокоуровневый формат).
BIOS контроллера XT (точнее его называть Optional ROM) INT 13 для этого предоставляет еще одну важную функцию: форматирование дорожки (INT 13/AH=05h). Самые древние контроллеры требовали внешнюю программу форматирования, которая просто вызывала форматирование для всех дорожек на диске. Позже программу форматирования зашили в ту же ПЗУ BIOS контроллера. Чаще всего Optional ROM контроллера диска сидит по адресу C800:0000, поэтому в разных популярных изданиях можно увидеть советы запуска форматирования из отладчика на g=C800:0005 (это не всегда так у различных контроллеров).
Встроенный форматтер на разных контроллерах имеет разный интеллект. В простейшем случае он просто начинает форматировать все дорожки/головки не задавая лишних вопросов, в других случаях ведет длинный диалог с пользователем. Вызов в BIOS тоже никуда не делся и появилось множество красивых диалоговых программ форматирования (они имеют проблемы с трансляцией, но об этом ниже).
После низкоуровневого форматирования получается жесткий диск, у которого все сектора читаются-пишутся (если они не сбойные), но пока забиты нулями (или каким-то другим мусором). Чтобы диск увидела система (например DOS), необходимо создать на диске таблицу разделов (утилитой fdisk) и создать структуру файловой системы (утилитой format).
Дополнительные материалы для чтения:
- Low-Level Format Via DEBUG Как отформатировать диск через DEBUG и вызовы BIOS
Разное
Геометрия
Как уже написано выше, диск MFM с физической точки зрения состоит из XXX дорожек (Cylinders) и YY головок (Heads) и “свободного” пространства на дорожке. Возникает два вопроса:
- Каким образом дорожка форматируется на сектора ?
- Как контроллер (и DOS) может узнать геометрию MFM диска C/H/S ?
Давайте сначала ответим на второй вопрос. Краткий ответ такой: автоматически определить геометрию MFM диска - невозможно. Ни MFM диск ни контроллер не могут сообщить физические параметры диска. Процесс тут идет с другой стороны: именно пользователь задает параметры жесткого диска для контроллера. Для этого надо, например, найти производителя и марку жесткого диска. Во времена MFM ходили огромные списки из десятков и сотен моделей жестких дисков, содержащие C/H/S. Для машин IBM AT+ необходимо было найти в BIOS подходящий тип и прописать CMOS (позже появился User Type). Для XT контроллеров все было проще. Самый первый оригинальный Xebec 1210 поддерживал только Seagate ST-412: 306 дорожек и 4 головки. Поздние версии Xebec и WD1002 получили два джампера, которые позволяли выбрать 4 различных типа диска. Но на самом деле, с этих джамперов просто считывался индекс (номер) в таблице C/H/S внутри BIOS-а и при некотором знакомстве с организацией Optional ROM можно их найти и прописать туда любые параметры на любой из 4-х типов (да, нужно прошить УФПЗУ).
Более того, если у нас есть например жесткой диск MFM в котором 820 дорожек и 8 головок, то можно задать контроллеру параметры 615/6 и все будет работать, не используя диск полностью.
Другие контроллеры XT имели 3 джампера (и 8 типов дисков) или даже 4 джампера (и 16 типов). В дальнейшем появилась другая идея: хранить параметры диска прямо на диске - или в секторе номер 1 головки 0 стороны 0 или в специальном скрытом секторе перед первым. Если MFM диск исправен, то этот сектор всегда можно прочитать и контроллер считывает параметры оттуда. Особенно эта идея получила развитие в контроллерах фирмы Longshine. Там даже можно было сделать Split drive, то есть один физический диск отформатировать в два: 80H и 81H - это иногда требовалось для больших (по тем временам) дисков. Понятно, что место, где хранится конфигурация недоступно через обычные функции INT 13.
Чтобы разобраться с секторами, надо взять в руки калькулятор и немного посчитать. Итак, диск крутится со скоростью 3600 RPM то есть 60 оборотов в секунду. Данные на него поступают со скоростью 5 Mbit/s (при тактировании 10MHz). Получается, что на дорожку теоретически влезает 1/60 * 5000000 = 83333 бит = 10416 байт. То есть, теоретически на дорожку можно записать примерно 20 секторов по 512 байт. Однако, практически, сектора должны иметь заголовки, а между секторами должны быть промежутки (GAP). Поэтому остановились на цифре 17 секторов на дорожку. Такое впечатление, что сначала хотели сделать ровную цифру 16, но оказалось, что надежно влезает 17. Кстати, на дискете 360К - 9 секторов на дорожке а не 8 именно по той же причине.
Формат записи на дорожку и форматы заголовков (Soft Sectors) отличается в разных контроллерах, именно поэтому они несовместимы между производителями и моделями. Наиболее хорошо документирован формат дорожки в контроллерах WD в документации на чипсет.
Таким образом, у BIOS MFM контроллера, конечно, можно запросить геометрию (INT 13/AH=08h), но он возвратит только ту, которую … мы сами в него записали (джамперами или из CMOS на AT). Более продвинутые жесткие диски IDE имеют команду определения геометрии, но чаще всего возвращают не настоящую физическую геометрию, а так называемую логическую, после процедуры трансляции.
Дополнительные материалы для чтения:
- CSC Hard Drive Bible http://www.bitsavers.org/pdf/csc/
Трансляция
Как несложно догадаться, трансляция прячет настоящие физические параметры диска, выдавая наружу некие логически “дорожки” и “головки”. Самый простой пример трансляции был выше, это Split Drive, когда один большой диск с точки зрения BIOS видится как два меньших по размеру. Другой популярный тип трансляции - это пересчет 26 секторов у RLL винчестера в 17 секторов “псевдо”-MFM для всякого старого софта.
Тут надо сказать, что IDE диски практически всегда работают с трансляцией, а физические параметры отдают только очень старые музейные модели. Во первых, большинство IDE дисков внутри вообще имеют не MFM, и даже не RLL, а другие продивинутые способы кодирования. Скорость вращения IDE дисков тоже быстро вышла за “стандартные” 3600 RPM (и скорость “с блина” давно превышает 5Mbit/s). Кроме того, большинство современных IDE имеет переменное число секторов на дорожке (Zone Recording), а наружу транслирует постоянное. Не следует забывать и об автоматической замене плохих секторов, которые “снаружи” не видны . Современные FLASH диски вообще не имеют никаких дорожек и головок, а показывают исключительно логические C/H/S.
Самое интересное, что система команд IDE имеет как команду “Установить параметры” INITIALIZE DRIVE PARAMETERS (91H) (унаследованную от древнего IBM PC AT с контроллером WD1003-WA) так и “Считать параметры” IDENTIFY DRIVE (ECH). Иногда это приводит к забавным результатам, когда в BIOS у жесткого диска одни параметры, а в операционке (например Linux) - другие. Хорошо если емкость совпадает. Или при переносе IDE жесткого диска с современной на старинную машину вдруг геометрия чудесным образом меняется, перестает соответствовать записям в Boot-секторе и система (в лучшем случае) не грузится.
Другая побочная проблема трансляции - это то, что программы форматирования пытаются работать с логическими секторами/дорожками. IDE диски по этой причине вообще не подлежат форматированию пользователем, это происходит на заводе или на специальном инженерном стенде в ремонтной мастерской.
Еще надо пару слов сказать об LBA. Это такой радикальный шаг отказа от геометрии C/H/S вообще. Диск LBA доступен как массив секторов 512 байт просто по номеру сектора. Никаких дорожек и головок нету вообще. Хотя LBA жесткие диски до сих пор отдают “геометрию” (конечно же логическую) для совместимости. Для поддержки LBA пришлось даже немного дополнить сервис BIOS INT 13H. В SCSI дисках геометрии также нету и вся видимость дорожек и головок создается BIOS-ом контроллера SCSI.
Материалы для дополнительного чтения (относится больше к AT+, но полезно):
- Phoenix BIOS Enhanced Disk Drive Specification v1.1 определяет правила трансляции и вводит дополнительные функции INT 13
RLL
Очень большое количество легенд связано с RLL дисками и контроллерами. Давайте разберемся.
Начнем с того, что RLL - это на самом деле такой метод кодирования битового потока. Он хорош тем, что уменьшает количество перепадов (фронтов) в потоке. Для наиболее широко распространенного в контроллерах XT метода RLL(2,7) скорость уменьшается практически на 50%. Это позволяет поднять битовую скорость при сохранении той же полосы. В большинстве RLL контроллеров битовая скорость составляет 7.5Mbit/s, причем “скорость перепадов” и соответственно спектр сигнала получается не намного больше, чем у MFM на 5Mbit/s. Это позволяет записать больше информации на жесткий диск, но предъявляет повышенные требования к самому жесткому диску (минимальный джиттер - неравномерное вращение “блина”, качественный маршевый двигатель, подшипники и головки, минимальные искажения в тракте чтения/записи) и к контроллеру (схема ФАПЧ).
Емкость нетрудно прикинуть. При скорости вращения 3600 RPM емкость дорожки составляет 1/60 * 7500000 = 125000 бит = 15625 байт то есть примерно 30.5 секторов по 512 байт. Из за требований организации промежутков и заголовков стабильно удается записать 26 секторов.
Таким образом, RLL диск - это просто “очень хороший” MFM. Например, фирма Seagate выпускала жесткий диск модели ST-238R, предназначенный для записи 30Mb данных методом RLL. На самом деле, это просто очень качественный аналог модели ST-225, на который влезало 20Mb методом MFM с такой же геометрией 615/4. Что будет, если отформатировать ST-238R на MFM контроллере ? Просто очень надежный MFM небольшой емкости 615/4/17. А наоборот, если отформатировать ST-225 на RLL контроллере ? Получится не очень ненадежный RLL повышенной емкости 615/4/26. Вот и все.
Скорость передачи
Интересно оценить скорость передачи контроллеров MFM и RLL на XT.
Как известно, частота шины ISA-8 составляет 4.77MHz. Контроллер жесткого диска работает по DMA. Согласно схемотехнике оригинальной IBM PC XT, цикл DMА может происходить в каждый 5-й цикл шины, плюс добавляется один цикл ожидания. Итого, получается, что максимальная теоретическая скорость передачи по DMA может достигать 4.77 / 6 = 0.795 Mб/c = 795 Кб/c. Это скорость передачи непрерывного блока. Поскольку блоки еще надо обрабатывать, а контроллер DMA - перепрограммировать каждый блок и т.д. то скорость передачи не может достигнуть максимальной.
С другой стороны, диск вращается со скоростью 3600RPM, то есть каждую 1/60 секунды “с блина” приходит 17 секторов по 512 байт. Итого: 60 * 17 * 512 = 522240 или 522Кб каждую секунду. Опять же, это без переходов с дорожки на дорожку т.е. 60 раз в секунду одни и те же сектора, чего при реальной работе не бывает. Скорость передачи RLL несколько выше : 60 * 26 * 512 = 798720 или 799Кб/c, что даже несколько превышает предел скорости DMA.
На практике все намного хуже. Контроллер сначала считывает сектор во внутренний буфер, а только потом передает его в память машины. На это требуется время. Оригинальный контроллер Xebec давал скорость около 85Кб/с при интерливе 6:1 и около 105Кб/с при интерливе 5:1. Контроллеры WD1002 несколько быстрее - 200..300Кб/с.
Интерлив
Для чего придумали интерлив (чередование) ? Дело в том, что машины тогда были довольно медленные. XT вместе с контроллером просто не успевала обрабатывать поступающую информацию, и сектор на вращающемся диске успевал “убежать” из под считывающей головки. Чтобы прочитать следующий сектор N+1, надо было ждать целый оборот диска. Идея пришла очень простая. Поскольку все сектора имеют внутри номер, то сектора можно записывать не подряд. Например, у нас на дорожке 9 секторов, и нам надо прочитать сектора 2 и 3. Записываем сектора в таком порядке:
1 4 7 2 5 8 3 6 9
Пока мы разбираемся с сектором 2 под головкой “проскакивают” сектора 5 и 8, а сектор 3 оказывается в нужное время в нужном месте. Тут получается интерлив 3:1, то есть один читаем, два пропускаем, читаем. Для чтения всех 9-ти секторов подряд нам нужно три оборота шпинделя. Соответственно, суммарная скорость “с блина” тоже падает, но зато нам не нужно ждать целый оборот для поиска следующего сектора. При интерливе 1:1 получилась бы самая высокая скорость, но далеко не все контроллеры и машины успевали обработать такой поток.
Программа форматирования большинства XT контроллеров позволяет задавать интерлив вручную. Как правило, оптимальное значение зависит от скорости материнской платы в TURBO моделях и модели контроллера. Обычно скорость плавно возрастает от примерно 80Кб/с на интерливе 6:1, а потом резко падает (сектора успевают “убежать”). На TURBO материках 12MHz и хорошем контроллере иногда достижим интерлив 2:1 и скорость передачи до 400Кб/с.
Существуют несколько программ, которые могут подобрать оптимальный интерлив для данной комбинации материнской платы плюс контроллер, например OPTUNE или CALIBRATE.
Дополнительные материалы для чтения:
Несколько контроллеров
Довольно интересен вопрос установки нескольких контроллеров жесткого диска на XT.
Краткий ответ такой: это во многом вопрос везения и добросовестности программистов Optional ROM.
Кроме MFM и RLL контроллеров для XT существовали 8-битные SCSI адаптеры (например Seagate ST-01, Trantor T-130B или Future Domain TMC950). Недавно был разработан XTIDE контроллер для ISA-8 по мотивам платы Silicon Valley Computer ADP50L и контроллер Compact Flash. Все они имеют набортный BIOS (Optional ROM), обслуживают дисковый INT 13 и поддерживают загрузку через INT 19.
Самое первое требование к устройствам на шине ISA-8 - это отсутствие конфликтов по портам ввода-вывода I/O, прерываниям IRQ, каналам DMA и адресам размещения Optional ROM. Поскольку в XT нету никакой поддержки Plug-n-Play, отсутствие конфликтов целиком ложится на пользователя.
Во время POST-процедуры BIOS материнской платы сканирует адресное пространство в поисках Optional ROM и запускает их. Эти BIOS-ы контроллеров переписывают вектора INT 13 и INT 19 и должны сохранять старое значение для передачи по цепочке. “Хороший” BIOS должен проверить наличие других контроллеров жесткого диска и выбрать следующее значение номера диска BIOS 81H, 82H и т.д. Нередки конфликты при заполнении области параметров дисков FDPT INT 41 и т.д. Фирма Western Digital для контроллеров WDXT-GEN гарантирует совместную работу двух контроллеров в системе. Все прочие комбинации требуют тестирования.
Важное замечание: BIOS материнской платы просматривает область Optional ROM и запускает их последовательно от C000 до EFFF. Поэтому работоспособность готовой системы иногда сильно зависит от порядка следования BIOS-ов в адресном пространстве. Например, иногда наблюдается такая ситуация: если BIOS контроллера MFM имеет адрес C800H, а контроллера SCSI - адрес CA00H - то система работает. А если наоборот - то система не загружается.
Современный BIOS контроллера XT-IDE, например, содержит целый Boot Manager, который позволяет выбрать загрузочное устройство (исходные тексты BIOS XTIDE доступны).
XT контроллер на AT
Что будет, если поставить 8-битный контроллер XT MFM/RLL в ISA-слот машины AT или выше ?
Как мы помним, в BIOS AT имеется драйвер “стандартного” 16-битного MFM контроллера WD1003-WA. Геометрия диска считывается из CMOS (точнее - считывается Тип Диска - индекс, а далее в таблице BIOS ищется геометрия).
BIOS контроллера XT не использует ни CMOS ни таблицу типов и не перекрывается по портамм I/O (XT=320H и AT=1F0H), поэтому обычно он вполне совместим и с контроллером WD1003-WA и с IDE Task File (что как мы помним, практически то же самое). При этом BIOS AT работает со своими дисками, а BIOS контроллера XT - со своими. Если AT дисков нет (например, в BIOS AT стоит Drive Type = 0), то контроллер XT становится единственным, его диск получает номер 80H при старте его Optional ROM, а активный раздел на нем - букву C: после загрузки DOS.
Справедливости ради следует отметить, что существуют и “продвинутые” 16-bit ISA MFM/RLL контроллеры, которые не соответствуют WD1003-WA (например, Seagate ST-21/ST-22 или многие DTC) и которые имеют собственный BIOS на борту и “отзываются” на собственных I/O адресах. Как правило, они не используют данные из CMOS и прекрасно уживаются в качестве второго контроллера с WD1003-WA или единственными в системе. Такие “продвинутые” MFM/RLL карты очень напоминают SCSI ISA-16 контроллеры, также имеющие собственный BIOS.
XT-BUS
Большое количество вопросов связано с дисками XT-BUS. На самом деле, предком XT-BUS можно считать устройство типа Hardcard (или WD FileCard). После изобретения малогабаритных 3-дюймовых жестких дисков некоторые фирмы выпустили ISA-8 карточки, содержащие контроллер и диск на одной раме (или длинной плате). Причем иногда электроника накопителя и контроллера настолько сливалась, что кабелей ST-506/412 просто не было. Поэтому, вполне логично было выпустить диски, имеющие шлейф, в котором фактически передается минимальный вариант шины ISA-8, а контроллер расположен прямо на плате электроники диска (XT Attachment).
Таким образом, XT-BUS шина, это просто “удлинитель” урезанной шины ISA-8. На XT-BUS шлейф выведены “младшие” 2 линии адреса, 8 бит данных, сигналы дешифрации, Reset, а также заведены сигналы одного канала DMA и один IRQ. По набору команд контроллер “внутри” жесткого диска XT-BUS практически полностью соответствует ISA-8 контроллеру WD1002-WX и даже располагается на тех же адресах (320h или 324h). BIOS контроллера располагается “снаружи”, на плате (а не внутри диска), в отдельной ПЗУ или входит в состав BIOS-а материнской платы (на EuroXT).
XT-BUS полностью НЕсовместим с AT-BUS IDE, хотя использует такой же 40-жильный шлейф и IDC-коннекторы. Это становится понятно хотя бы по той причине, что “внутри” XT-BUS диска контроллер имитирует 8-битный WD1002-WX, а внутри AT-BUS IDE диска - 16-битный WD1003-WA с TaskFile.
Стандарт XT-BUS не получил широкого распространения. Было выпущено очень мало моделей жестких дисков XT-BUS и очень мало контроллеров ISA-8 XT-BUS в виде отдельной платы: например, WDXT-150 (где стоял дешифратор шины XT-BUS, коннектор IDC-40 и Optional ROM BIOS) или Seagate ST05X. Хотя… компьютеры Schneider Euro-XT выпускались с XT-BUS на материнской плате и получили некоторое распространение в Европе. Отдельно стоит упомянуть уникальный жесткий диск Seagate ST-351AX, который переключался джампером между стандартами XT-BUS и AT-BUS IDE.
Дополнительные материалы:
Распайка шлейфа XT-BUS:
RST B1 A1 GND SD7 B2 A2 GND SD6 B3 A3 GND SD5 B4 A4 GND SD4 B5 A5 GND SD3 B6 A6 GND SD2 B7 A7 GND SD1 B8 A8 GND SD0 B9 A9 GND ^CS1 B10 A10 GND AEN B11 A11 GND ^IOW B12 A12 GND ^IOR B13 A13 GND ^DACK B14 A14 GND DRQ B15 A15 GND IRQ B16 A16 GND A1 B17 A17 RSVD A0 B18 A18 GND ^PRICS B19 A19 GND ^ACTIVE B20 A20 GND
Список (практически полный) жестких дисков XT-BUS:
- Western Digital
- WD-93028-X
- WD-93038-X
- WD-93048-X
- WD-93024-X
- WD-93034-X
- WD-93044-X
- WD-95028-X
- WD-95038-X
- WD-95048-X
- WD-95024-X
- WD-95034-X
- WD-95044-X
- Minisribe
- Miniscribe 8225XT (20 MB)
- Miniscribe 8450XT (40 MB)
- Seagate
- Seagate ST-325X (20 MB)
- Seagate ST-325A/X (20 MB)
- Seagate ST-351X (40 MB)
- Seagate ST-351A/X (40 MB)
- Epson
- HMD-755 (20 MB)
- HMD-765 (40 MB)
- Tandy
- 25-1045 (20 MB)
- 25-1046 (40 MB)
Фирма Conner выпускала “близнецы” - жесткие диски CP-2024XT и CP-2024AT c XT-BUS и AT-BUS (IDE) интерфейсом соответственно (и еще чуть позже пару CP-4044XT/CP-4044AT).
XT-BUS и терминология
В настоящее время существует некоторое количество терминов, описывающих различные аспекты и способы подключения дисков к контроллеру и шине.
Термин IDE (Integrated Drive Electronics, “электроника, встроенная в привод”) первоначально означал конструктив, т.е. тот факт, что электроника контроллера (или большая ее часть) перенесена на сам жесткий диск. Название было введено фирмой Western Digital в 1986 году как торговое название для новых (тогда) жестких дисков. Первые продукты WD действительно представляли собой контроллер, прикрученный к диску с интерфейсом ST-506. Один из первых полноценных IDE жестких дисков был 40 мегабайтный 3.5” диск Conner CP341 для компьютера Compaq Portable III. Термин IDE первоначально относился именно к конструктивному исполнению, но стал обозначать и интерфейс подключения диска к контроллеру и протокол обмена и набор регистров (Task File в стиле WD1003-WA). Обычно термин “IDE” относится именно к 16-битному интерфейсу для присоединения диска к шине ISA-16 IBM AT-совместимых компьютеров, поэтому употребляется без уточнения, что это “AT IDE”. Формально говоря, можно сказать и “XT IDE диск”, если мы желаем описать (в первоначальном смысле термина) жесткий диск с интегрированным контроллером для подключения к XT ISA-8, но такой термин употребляется редко.
Термин EIDE опять же ввела компания Western Digital для обозначения дисков, размер которых превышал 528Mb, а скорость обмена была поднята до 16Mb в секунду. Позднее почти все наработки EIDE были включены в стандарт ATA-2 или FastATA.
Термин ATA был введен в 1994 комитетом ANSI X3.221-1994 под названием “AT Attachment Interface for Disk Drives”. Это стандарт именно на интерфейс (шлейф) жесткого диска, его протоколы и регистры. Первая версия стандарта называлась ATA-1, а дальше пошли ATA-2(1996), ATA-3 и т.д. все более и более скоростные и объемные. Стандарт ATA более точно определил форматы и скорости обмена с диском, самый медленный 3.3Mb/s получил название PIO-0 (Parallel I/O). Стандарт ATA-2 вобрал в себя EIDE, а в стандарте ATA-4 появилась спецификация ATAPI (AT Attachment Packet Interface) для присоединения ленточных и магнитооптических накопителей и даже флоппи-дисков. Наиболее широкое применение ATAPI получил для подключения CD-ROM накопителей, так называемые IDE CD-ROM на самом деле работают по ATA-4 ATAPI стандарту. Аналогично термину “ATA” также иногда применяется термин “XTA” (XT Attachment), но надо учитывать, что ни название, ни протокол не стандартизованы.
Когда появились контроллеры и диски Serial ATA, то обычный 16-битный IDE/ATA стали называть PATA (Parallel ATA).
Наконец, термин AT-BUS относится более к электрическим и логическим протоколам шлейфа и применяется для обозначения того факта, что электрические сигналы и протокол обмена являются производными от параметров шины ISA-16 компьютера IBM PC AT 5170. Термин не стандартизован. Аналогично, XT-BUS относится к шлейфу для подключения диска к 8-битной шине ISA-8.
Также следует упомянуть разработку “XT IDE” c Vintage Computer Forum. Это контроллер для шины ISA-8 для подключения обычных 16-битных IDE/ATA дисков. Название авторское и применяется именно для этой разработки.
Еще один интересный (но редко используемый) режим имеется у карточек Compact Flash. Как известно, электрический интерфейс Compact Flash может представляться или 16-bit шиной PCMCIA или шиной IDE. В режиме PCMCIA карточка Compact Flash работает как PCMCIA/ISA-16 контроллер IDE на “альтернативных” адресах 0x1e0 и т.д., а в режиме IDE - как обычный IDE “диск” (TrueIDE mode). Оказывается, в стандарте ATA-2 и Compact Flash определен дополнительный 8-битный режим работы для подключения Compact Flash к “простым” 8-битным системам (в ATA-3 этот режим пропал). Примерно 2/3 карт Compact Flash точно следуют спецификации и поддерживают 8-bit mode, а еще в этом режиме могут работать IBM Microdrive диски. Такой режим чрезвычайно упрощает схемотехнику ISA-8 контроллера, фактически он состоит из дешифратора адресов порта и BIOS и панельки под ПЗУ. Пример такого адаптера: XT CF Lite. Также компания LoTech выпускает адаптер для ISA-8 для Compact Flash ATA-2 карт: ISA CompactFlash Adapter.
Дополнительные материалы для чтения: