Где можно найти документацию по подключению HDD к Вектору и какие из ос приспособлены для HDD? Вроде всё посмотрел а про НDD ничего не нашёл.
Вид для печати
Где можно найти документацию по подключению HDD к Вектору и какие из ос приспособлены для HDD? Вроде всё посмотрел а про НDD ничего не нашёл.
Тут где-то проскакивала информация по портам Вектора.
Фактически, это то-же самое, что и спецификация ATA/IDE.
Добавлено через 4 минутыЦитата:
Описание портов контроллера жесткого диска
50H Регистр данных. Чтение(запись) данных в(из) буфер сектора контроллера
51H Запись: Write Precompensation register. Turn on write precompensation.
Чтение: Регистр ошибок. Содержит признаки последней ошибки.
╓7┬6┬5┬4┬3┬2┬1┬0╖
║ │ │0│ │0│ │ │ ║
╙╥┴╥┴─┴╥┴─┴╥┴╥┴╥╜ бит
║ ║ ║ ║ ║ ╚═ 0: адресный маркер данных не найден
║ ║ ║ ║ ╚═══ 1: ошибка на дорожке 0
║ ║ ║ ╚═════ 2: команда отвергнута
║ ║ ╚═════════ 4: ID сектора не найден
║ ╚═════════════ 6: ошибка ECC: некорректируемая ошибка данных
╚═══════════════ 7: плохой блок
52H Счетчик числа секторов для операции чтения/записи
53H Текущий/начальный номер логического сектора для чтения/записи
54H Цилиндр, старшие (биты 0-1 - это биты 8-9 10-битового номера цилиндра)
55H Цилиндр, младшие (биты 0-7 10-битового номера цилиндра)
56H Биты определяют устройство и головку для операции чтения/записи
57H Запись: регистр команды (См. Tech Ref о подробностях)
1xH = сброс на цилиндр 0 (x = step rate)
7xH = искать до цилиндра (x = step rate)
2xH = сектор чтения (x = retry and ECC-read)
3xH = сектор записи (x = retry and ECC-read)
50H = форматировать дорожку
4xH = чтение для верификации (x = retry)
90H = диагностика
91H = уст.параметры (число головок, секторов) для выбр.устр.
Чтение: регистр статуса
╓7┬6┬5┬4┬3┬2┬1┬0╖
║ │ │ │ │ │ │ │ ║
╙╥┴╥┴╥┴╥┴╥┴╥┴╥┴╥╜ бит
║ ║ ║ ║ ║ ║ ║ ╚═ 0: 1=предыдущая команда закончилась с ошибкой
║ ║ ║ ║ ║ ║ ╚═══ 1: уст. в 1 при обнаружении индексного отверстия
║ ║ ║ ║ ║ ╚═════ 2: данные исправлены. Была ошибка, но ECC исправил.
║ ║ ║ ║ ╚═══════ 3: запрос данных. Буфер ждет данных (занято)
║ ║ ║ ╚═════════ 4: поиск завершен
║ ║ ╚═══════════ 5: сбой записи
║ ╚═════════════ 6: устройство готово к операции (если бит 4=1)
╚═══════════════ 7: занято. 1=работает команда (другие биты неверны)
58H Регистр данных. Чтение(запись) данных в(из) буфер сектора контроллера
5fH Системный сброс (лучше не пользоваться, сходство с 57Н без обнуления
микросхем жесткого диска).
В этой же теме есть и ДОС http://zx.pk.ru/showpost.php?p=158871&postcount=127
По поводу HDD на Векторе, мне интересно как аппаратно реализованы порты 50Н и 58Н регистры данных, и как в них заносить информацию? Насколько я знаю что шина данных у НDD шестнадцатиразрядная ,а при записи и чтении в Hdd нужно приводить считывание или запись блоками по 512байт, на Векторе т.к. он восмиразрядный : например считать один блок, надо последовательно считывать байты из порта 50Н, и так 256 раз. Таким образом получается считывается младший байт слова данных.Вопрос - а можно не использовать старшую часть слова данных вообще т.е. не задействовать порт 58Н.
Получается что 50Н это порт обрачается прямо к HDD, а 58Н это какая то микросхемка,(регистр защёлка) наверно? Я правильно понял?
Тут я давал схему http://zx.pk.ru/showpost.php?p=157618&postcount=17
Добавил в Базис: http://sensi.org/~svo/scalar/ware/537/
есть у когонить разводки под ЛУТ для контроллера HDD?
собрал на макетке, провода до пола висят, не красиво
по переподключал кучу винтов:
+Seagate 203МБ
WD Caviar 21000 1083МБ
+Seagate ST31277A 1280МБ
Quantum 2100МБ
WD Caviar24300 4311МБ
+Hitachi DK239A-65 6400МБ(ноутбук)
Maxtor 8ГБ
+Toshiba 10ГБ (ноутбук)
+Seagate ST340016A 40ГБ
IBM MH17951 40ГБ
подключал и 80-ки и 120-ки, из всех заработали только те которые я + отметил, все винты рабочие кроме Toshiba 10ГБ (ноутбук)-у него сектора сыпятся, и собсна вопрос, отчего зависит читабельность винтов на этом и подобных контроллерах?
зы:контроллер по схемотехнике почти аналогичен NemoIde
Jons, а как ты проверял? Заменил в векторе начальный загрузчик, заливал на винт образ HDD и пробовал грузить на вектор?
Написал свою программку, читающую порты контроллера HDD?
это так набросок, только для чтения определенного сектора.
ORG 100
IN 56
ANI F0
OUT 56
CALL TEST
MVI A,01
OUT 52
CALL TEST
MVI A,01
OUT 53
CALL TEST
MVI A,0
OUT 54
CALL TEST
MVI A,0
OUT 55
CALL TEST
MVI A,20
OUT 57
CALL TEST
LXI H,1000
MVI B,0
CHTEN IN 50
MOV M,A
INX H
IN 58
MOV M,A
INX H
DCR B
JNZ CHTEN
RET
TEST IN 57
ANI 80
JNZ TEST
RET
почемуто немогу вложить файл в пост, требуется авторизация
зы: при чтении из порта 57h на нечитаемых винтах, выдает FFh, и при заходе в TEST комп подвисает, всё это делаю в Мониторе-отладчике.
ззы:мне видится две причины, разные серии микросхем, используемые мной в контроллере или не все линии ide-интерфейса используются
Может в цикле TEST добавить счетчик и, если слишком долго в нем сидим, то выйти из цикла и прочитать регистр ошибок? Вобще-то регистр ошибок в любом случае неплохо читать, хотя бы чтобы убедиться, что на "нормальных" винтах в нем нормальные значения.
Еще можно для очень старых винтов попробовать альтернативный код команды 21h (хотя это вряд ли хоть как-то скажется).
---------- Post added at 20:02 ---------- Previous post was at 19:49 ----------
Еще можно попробовать более "жестко" задать значение для старшего регистра цилиндра. Например после IN 56h добавить ORI 0A0h (или 0E0h для LBA). Бит выбора устройства тоже можно попробовать задать принудительно.
опрос регистра ошибок у меня реализован в более полной версии процедур, я не про это, дело в том что на этом контроллере нечитаются(т.е. необнаруживаются) больше половины винтов, как сделать так чтобы они все читались? или это не возможно изза особенностей схемы контроллера?
Если проблема в аппаратной части, то я пас.
Рискну продолжить тему.
Собрал я себе контроллер.
Есть три проблемы:
1) программы testhdd, testhdd2 при "поверхностном тесте портов" ругаются что "не работает порт IN 57h или индекс HDD". Дальше работают с HDD без проблем. Программа testhdd так не ругается. Это нормально?
2) с CF через ide переходник testhdd* при контрольной записи/проверки сектора ругаются ошибкой "мало данных". Хотя ни с верификацией секторов, ни с работой в mdos проблем нет.
3) Загрузчик "boots" v3.0 by TIMSoft почему-то грузит систему с hdd с адреса 0 (не пропускает первый квадратик). И она не работает. Пробовал пинудительно указывать sysgen'у адрес 100 - не помогает.
Что посоветуете?
---------- Post added at 20:02 ---------- Previous post was at 19:41 ----------
TIMSoft'у на заметку:
hdd_boot.bin 2Кб с картотеки (ты, видимо, с него брал процедуру загрузки с HDD) также криво грузит систему с FDD (не пропускает квадратик ;-)
при детальном изучении и исследовании винчестеров выяснил что Вектор на данном контроллере в принципе не сможет работать с винтами у которых RPM больше 4500, при значениях выше надо играться с линией IORDY (может я и не прав :) ), что касается CF то надо обратить внимание на её скоростные характеристики (может в этом проблема?) по третьему пункту, если ничего не помогает можно добавить в начале 256 нулей, записать такой файлик и попробовать загрузиться с ним
Jons, Автор загрузчика работает над проблемой.
Про RPM - у меня не работают именно тесты, работа с файлами - без проблем.
Похоже Вы неправы. Мой Hitachi 2.5" 100Gb выражал классовую неприязнь к несвоевременной подаче сигнала -CS (37 нога IDE). После того как я ему принудительно дал туда "0" - работает.
Пока тестирую. Если у себя тоже протестируете - буду признателен.
---------- Post added at 14:26 ---------- Previous post was at 14:12 ----------
Да, еще можно ресет (1я нога IDE Отключить для теста)
---------- Post added at 14:26 ---------- Previous post was at 14:26 ----------
Да, еще можно ресет (1я нога IDE Отключить для теста)
В общем, коллеги, всё достаточно печально:
тесты testhdd никуда не годятся.
Во-первых они проверяют приход индекса, чего уже давно на железе либо не бывает, либо не поймать на векторе.
Во-вторых, ограничение по цилиндрам до 2000h (8192), не говоря уже о том что кол-во цилиндров они определяют перебором цилиндров с командой seek (70h), которая уже тоже не всеми винтами поддерживается.
В-третьих, при контрольном чтении записи получаем ошибку мало данных, хотя файлы пишет/читает в системе нормально.
Утилита delete у меня вызывает непонимание: на CF работает, на HDD Видно что отрабатывает, а потом зависает, при этом она делает всё через системные вызовы, так что внутрь ей не особо заглянешь.
Да и самое главное, похоже никому это не интересно, а мне без моральной поддержки время тратить скучно и жалко :-(
CS0 и CS1 насколько я понимаю это выбор контроллера и линии накоторых сидит нужный винт, я же говорил про линию IORDY, на Векторе к сожалению не могу запустить эти тесты, они работают только с МикроДОС, а у меня ЭД нету, я тестил своими тестами(можно сказать почти ручками :) ) в Мониторе отладчике, у Вашего 100ГБ винта какой показатель RPM? у меня только на 6ГБ и 10ГБ, у них у обоих RPM 4300, и они оба прекрасно работают на Векторе, ещё 2 Seagate по 1200МБ RPM4500, тоже прекрасно работают
У меня тоже все прекрасно работает (5400 RPM), кроме утилиты delete.
Она после зачистки диска виснет при работе с HDD. При работе c CF через переходник на IDE проблем с delete нет.
Понять что не нравится delete я не могу, так как там вся программа - пара-тройка вызовов 32h функции BDOS, которой отдается ссылка на буфер, где первый байт - команда. Что это за функция, какие ей команды отдавать можно - тайна великая есть.
В RDS, вроде бы, такой функции BDOS вообще нет.
Казалось бы ну его этот delete нафиг, но поймал багофичу: после E *.* получил NO FILES, но после записи около 10 маленьких файлов сказали что больше места нет (причем похоже в директории). После delete стало всё нормально.
Тесты testhdd вообще кривые. Кстати, вроде была версия MDOS без ЭД? Или мне приснилось?
С линией IOR Вы ничего путного не сделаете, хотя в БК&УКНЦ её подтормаживают контером. Тут я тоже так пробовал - результат нулевой, хотя это как раз понятно - в Векторе ЧТВВ и ЗПВВ по заднему фронту идут. У меня винт тоже давал сплошные FF, пока я с CS не справился.
У меня тоже все прекрасно работает (5400 RPM), кроме утилиты delete.
Она после зачистки диска виснет при работе с HDD. При работе c CF через переходник на IDE проблем с delete нет.
Понять что не нравится delete я не могу, так как там вся программа - пара-тройка вызовов 32h функции BDOS, которой отдается ссылка на буфер, где первый байт - команда. Что это за функция, какие ей команды отдавать можно - тайна великая есть.
В RDS, вроде бы, такой функции BDOS вообще нет.
Казалось бы ну его этот delete нафиг, но поймал багофичу: после E *.* получил NO FILES, но после записи около 10 маленьких файлов сказали что больше места нет (причем похоже в директории). После delete стало всё нормально.
Тесты testhdd вообще кривые. Кстати, вроде была версия MDOS без ЭД? Или мне приснилось?
С линией IOR Вы ничего путного не сделаете, хотя в БК&УКНЦ её подтормаживают контером. Тут я тоже так пробовал - результат нулевой, хотя это как раз понятно - в Векторе ЧТВВ и ЗПВВ по заднему фронту идут. У меня винт тоже давал сплошные FF, пока я с CS не справился.
А у Вас есть хоть одна программа под Вектор, которая понимает ДВА hdd ?
Там, что характерно, и контроллер IDE не умеет с двумя работать....
testhdd, testhdd2, testhdd3 от системы используют только вывод текста.Цитата:
не приснилось :) но эта ОС не поддерживает винты, или это не обязательно?
Поддержка HDD в системе им не нужна.
Jons, Где определялись?!?!?! В Векторе?
Чем определяли?
Вы по схеме посмотрите, там СS заведен на АП6, то есть читать Вектор умеет только с одного IDE устройства. Есть схема контроллера с разведенными CS и CS1, но только софта-то нету.......
чего то я туплю, cs0 и cs1 это выбор магистрали, т.е. выбор контроллера если их 2, на Векторе он один, а то к какому устройству, на шлейфе, будет обращаться контроллер определяется битом 4 порта 56H
зы: при изучении винтов я пользовался двумя книгами и гуглем,
Программирование дисковых подсистем Автор: Владимир Кулаков
Интерфейсы устройств хранения. Гук
Jons, Ой, так Вы про сферического коня в вакууме.... ;-)
А я про Вектор и его понимание IDE.
Так Вектор умеет (если мы говорим о самой распространенной схеме контролера) только с одним HDD работать. Поэтому -CS0 вроде как можно смело землить.
Нет, насколько я понял, это выбор одного из чипов интерфейса внутри контроллера. К какому контроллеру обращаться, определяется диапазоном портов: первый контроллер 50h-5Fh, второй контроллер X0h-XFh, где X - выбирается по желанию человека с паяльником.
А вот это абсолютно верно. Я в эмуляторе так и сделал.
Хотя, правильнее было бы сказать: к какой паре контроллеров. Контроллер-то имеется на каждом винте, но в зависимости от перемычки master/slave он работает чуть-чуть по разному - реагирует только на команды с определённым значением бита 4 порта 56h (в нашем случае).
---------- Post added at 13:27 ---------- Previous post was at 13:23 ----------
Пока, скорее всего, никакой :) Не было стандарта на второй контроллер.
При наличии образа винчестера. В конфиге указан путь к файлу "Vector06c\vector.hdd". При желании можно добавить и второй контроллер на свободные порты :)
b2m, Спасибо!
То есть получается что в новейших разработках железа ;-)
сигналом -CS можно пренебречь, так как второй контроллер вряд ли кому-то вообще понадобится.
Тем более что второй контроллер, скорее всего, имеет смысл сажать на отдельный шлейф со своим CS.
А вот почему у меня тесты не работают как надо и DELETE не работает с HDD - непонятно :-(
Ещё раз - второй контроллер тут ни при чём. Сигнал -CS (или как он ещё выше назывался cs0) выбирает основной набор регистров контроллера, а сигнал -CS1 - расширенный. Однако расширенный набор регистров контроллера на Векторе не используется, поэтому на схеме -CS1 посажен на лог. 1. Насколько правильно сажать -CS на лог. 0 - я не знаю.
b2m, Речь шла о том, чтобы для тестов подать на CS0 нолик. Думаю что для тестов это если и не правильно, то вполне допустимо. ;-)
У меня в схеме на CS0 нолик подан не постоянно, а с адресного дешифатора.
То есть по оригинальной схеме при совпадении нужной комбинации на AA0-AA7 и наличии одного из ЧТВВ или ЗПВВ выдаем CS0. Но это получается для современных винтов поздно. Поэтому я выдаю CS0 сразу при совпадении нужной комбинации на AA0-AA7 (ЧТВВ и ЗПВВ приходят сильно позже адресов). Естественно, бывают ложные срабатывания, когда идёт обращение к похожим адресам ОЗУ, но зато работает.
Хотя тесты не пашут, что меня продолжает бспокоить. :-(
Так, теперь я понял почему контрольное чтение сектора выдает "мало данных".
Так и должно быть
---------- Post added at 18:28 ---------- Previous post was at 17:52 ----------
В общем получается что так всё и должно быть c тестами, только с подсчётом кол-ва цилиндров осталось разобраться.
Можно переходить к работе в пикаде.
Собрал контроллер HDD, подключил CF на 256МБ (оставшуюся от старого фотоаппарата)...
Как загрузчики грузят систему с HDD в упор понять не могу...
Смотрел процедуры загрузки из двух загрузчиков...
Вроде ничего сложного, но как они операционку в память грузят не понимаю...
Протестировал подпрограммки из загрузчиков SIDом, какие-то данные с карты читаются, но дальше тупик... Судя по коду, адрес куда загружать берётся прямо из считанных данных... странно это...
Инициализация HDD выдала ошибку.
Сравнил считываемые из первого сектора данные с образом HDD, чётные байты совпадают, не чётные отличаются... :(
Вот интересно как можно понять запись глючит или чтение...
Наверное придётся анализатор шины подключать...
Тоже бьюсь с контроллером HDD последнее время - вопросов больше чем ответов.
Кучу винтов переробовал, проги testhdd частично отрабатывают, inithdd выдают ошибку. Удалось на CF 2Gb залить образ на 8 Мб под Windows98. Загрузчик by Timoha на 2 кб с винта грузит, но с 0-го адреса, а не 100-го и система не стартует.