Skip to content
Nikita Zimin edited this page Sep 20, 2015 · 9 revisions

IDE-контроллеры и винчестеры для УКНЦ

IDE-контроллер для УКНЦ -- это плата расширения для вставки в разъём расширения, в качестве корпуса для устройства обычно использовался корпус КМД УКНЦ с подпиленной верхней частью. Винчестер ноутбучного формата прикреплялся прямо к печатной плате. Это разработка кооператива "Электронные работы", относится к 1994-1995 годам.

Схема ПЗУ в IDE контроллере довольно забавная. Там припаяны в параллель К573РФ5 (8 x 2Кб) младший байт и К155РЕ3 (8 x 32 байт) старший байт. В результате нижние 64 байт (32 слов) -- правильные, а дальше начинается каша из содержимого РФ5 (верного!) и повторяющегося содержимого РЕ3 (мусор). Но к счастью в нижних 32 словах сидит "загрузчик" который переносит побайтовое верное содержимое из РФ5 в память ПП, регистрирует хэндлер и запускается там. (Источник: AlecV, http://zx.pk.ru/showpost.php?p=254244&postcount=41)

Адресное пространство контроллера винчестера входит в окно 100000-117777. Подключается контроллер сбросом бита 0 в регистре 177054 (он отключает одновременно системное ПЗУ в диапазоне 100000-117777), и установкой или сбросом бита 3 в том же регистре (указывает номер слота). Само загрузочное ПЗУ расположено в диапазоне 100000-107777. В диапазоне 110000-117777 расположены регистры IDE. Собственно сама шина QBUS инверсная, поэтому инверсны и адреса IDE и данные, которые читаются и пишутся (собственно для самих записываемых и считываемых данных это по барабану, инвертировалось сначала при записи, обратно при чтении, а вот для команд это играет роль). Для адресации регистров контроллера используются линии AD1, AD2 и AD3.

Соответствие регистров на PC и УКНЦ:

 1F0 110016
 1F1 110014
 1F2 110012
 1F3 110010
 1F4 110006
 1F5 110004
 1F6 110002
 1F7 110000

Регистров, которым на PC соответствуют 3F6 и 3F7, нет.

В самом первом секторе записана таблица разделов. В первых двух байтах записаны кол-во секторов в дорожке и кол-во сторон в дорожке, эта информация нужны для вычисления номера дорожки при переводе номера блока в RT-11 в CHS. Далее идут размеры разделов, каждый элемент занимает одно слово (два байта), размеры указаны в блоках RT-11. В самом конце сектора два слова контрольной суммы. (Источник: Alex_K, http://zx.pk.ru/showpost.php?p=262194&postcount=28)

Существует две известных прошивки для контроллера IDE:

  • HDBOOT от ТОО "Электронные работы" -- используется драйвер ID -- до 8 разделов
  • WDROM от Олега Ховайко -- используются драйвера WD/WE/WF -- до 24 разделов. Загрузка возможна только с разделов WD. Есть возможность создать один скрытый раздел -- это использовалось для выделения неиспользуемой области с плохими секторами.

При загрузке с винчестера загрузчик сначала читает первый сектор, проверяет контрольную сумму и спрашивает у пользователя какой раздел использовать для загрузки.

Подготовка жёсткого диска

Инструкция по созданию загрузочного раздела на жестком диске УКНЦ, под драйвер WD. (Источник: http://uknc.narod.ru/Suvorov/uknc_ide.rar)

Примечание: для выполнения разметки диска наличие прошитого ПЗУ на контроллере не влияет.

  1. Загрузка с дискеты. Дискета обычная, системная. На дискеты должны присутствовать следующие файлы: WD.SYS, WDX.SAV (или WDXR.SAV -- русская версия), WDBOOT.SAV В случае использования WDXR.SAV потребуется еще KDAY.SAV -- чтобы русские буквы показывались.
  2. Запустить WDX.SAV, отвечать на вопросы. Получим размеченный винчестер.
  3. Запустить WDR.SAV -- это резидент работы с винчестером.
  4. Грузим драйвер WD -- LOAD WD. Если получаем ошибку -- SET WD SYSGEN
  5. Формируем директорию INIT WD0: Можно глянуть на нее до и после разметки командой DIR WD0:
  6. Копируем все файлы с дискеты (что б не заморачиваться): COPY/SYS MZ0: WD0:
  7. Копируем загрузчик: COPY/BOOT:WD WD0:RT11SJ WD0:
  8. Перегружаемся и стартуем с винчестера (пункт меню "Кассета ПЗУ").

Поддержка в эмуляторе UKNCBTL

Эмуляция винчестера встроена в эмулятор начиная с версии Beta-16. Эмулятор работает только с образом винчестера в виде файла, хранящего только данные секторов. Сначала была поддержка только "прямых" образов (т.е. в том виде когда данные визуально читаются), начиная с версии Beta-20 поддерживается работа с инвертированными образами (в том виде как они хранятся на реальных дисках).

Для использования в эмуляторе, размер файла образа должен быть кратен 512 байт. В первых двух байтах должно быть прописано число секторов на дорожку и число головок. Размер файла в блоках по 512 байт делится на количество секторов и количество головок -- получается число цилиндров. Допускаются диски с числом цилиндров меньше 1024.

Для подключения образа винчестера в эмулятор нужно сначала выбрать в качестве кассеты ПЗУ один из образов ПЗУ винчестера. После этого выбирается образ винчестера для работы. Для загрузки с винчестера выбирается пункт загрузки "Кассета ПЗУ".

Утилита RT11DSK умеет работать с образами винчестера: инвертировать образ, показывать таблицу разделов, работать с разделами как с отдельными дисками.

Подготовка образа HDD в эмуляторе

На эмуляторе можно подготовить образ винчестера практически так же как винчестер на реальной машине.

  1. Сначала нужно подготовить пустой образ -- файл нужной длины. Например, (63 sectors/track) x (4 heads) x (80 tracks) x (512 bytes/sector) = 10321920 байт. В первые два байта файла прописать числа 63 (секторов на дорожку) и 4 (число головок). Остальные байты -- нули.

  2. Загрузка с дискеты. Дискета обычная, системная. На дискете должны присутствовать следующие файлы: WD.SYS, WDX.SAV.

  3. Запускаем WDX.SAV, отвечаем на вопросы.

Здесь например параметры винчестера определены автоматически, выбрано создание 4-х разделов, указаны их размеры в блоках:

В результате мы получили образ винчестера с правильно заполненным первым блоком.

  1. Выполняем SET WD SYSGEN и перезагрузку с той же дискеты.

  2. Запустить WDR.SAV -- это резидент работы с винчестером.

  3. Грузим драйвер WD -- LOAD WD.

  4. Формируем директорию INIT WD0: Можно глянуть на нее до и после разметки командой DIR WD0:

  1. Копируем все файлы с дискеты (что б не заморачиваться): COPY/SYS MZ0: WD0:

  2. Копируем загрузчик: COPY/BOOT:WD WD0:RT11SJ WD0:

  3. Перегружаемся и стартуем с винчестера (пункт меню "Кассета ПЗУ").

Ссылки

Clone this wiki locally