Все гораздо проще можно сделать, какие подсчеты тактов?! вот в соседней ветке я выкладывал наработки по SD. 7 простых корпусов мс, скорость ~10КБ/с, а то и больше, файлов больших нет, оценить сложно :).
Вид для печати
Все гораздо проще можно сделать, какие подсчеты тактов?! вот в соседней ветке я выкладывал наработки по SD. 7 простых корпусов мс, скорость ~10КБ/с, а то и больше, файлов больших нет, оценить сложно :).
Вопрос подключения SD-карты интересный, но вернёмся к IDE... Прикинул, как будет работать контроллер, если смотреть по используемым стандартным контроллером портам, то на ВВ55 будет примерно так:
Настройку ВВ55 (т.е. запись в РУС), а также, в некоторых случаях, конфигурацию IDE (запись в порт C) можно вынести за циклы, но в любом случае кода будет явно больше, чем со стандартным контроллером...Код:Порт Описание
стд. ВВ55
▀▀▀▀ ▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
50h порт A | Регистр данных 16-бит: 50-мл.,58-ст.байт.
58h порт B | Чтение(запись) данных в(из) буфер сектора контроллера
+ перед операцией однократно:
порт РУС+ >> порты A и B на чтение(запись), порт С на запись
порт С + >> 01010000b -- перед чтением
порт С + >> 10110000b -- перед записью
+ >> читаем/пишем в порты
порт С + >> 10010000b -- после записи
-------------------------------------------------------------------------------
51h порт A | Запись: Write Precompensation register. Turn on write precompensation.
+ перед операцией однократно:
порт РУС+ >> порты A и С на запись, порт B на чтение
порт С + >> 10110001b -- перед записью
+ >> пишем в порт A
порт С + >> 10010001b -- после записи
51h порт A | Чтение: Регистр ошибок. Содержит признаки последней ошибки.
+ перед операцией однократно:
порт РУС+ >> порты A и B на чтение, порт С на запись
порт С + >> 01010001b -- перед чтением
+ >> читаем из порта A
-------------------------------------------------------------------------------
52H порт A | Счетчик числа секторов для операции чтения/записи
+ перед операцией однократно:
порт РУС+ >> порт A на запись, порт B на чтение, порт С на запись
порт С + >> 10110010b -- перед записью
+ >> пишем в порт A
порт С + >> 10010010b -- после записи
-------------------------------------------------------------------------------
53H порт A | Текущий/начальный номер логического сектора для чтения/записи
+ перед операцией однократно:
порт РУС+ >> порт A на запись, порт B на чтение, порт С на запись
порт С + >> 10110011b -- перед записью
+ >> пишем в порт A
порт С + >> 10010011b -- после записи
-------------------------------------------------------------------------------
54H порт A | Цилиндр, старшие (биты 0-1 - это биты 8-9 10-битового номера цилиндра)
+ перед операцией однократно:
порт РУС+ >> порт A на запись, порт B на чтение, порт С на запись
порт С + >> 10110100b -- перед записью
+ >> пишем в порт A
порт С + >> 10010100b -- после записи
-------------------------------------------------------------------------------
55H порт A | Цилиндр, младшие (биты 0-7 10-битового номера цилиндра)
+ перед операцией однократно:
порт РУС+ >> порт A на запись, порт B на чтение, порт С на запись
порт С + >> 10110101b -- перед записью
+ >> пишем в порт A
порт С + >> 10010101b -- после записи
-------------------------------------------------------------------------------
56H порт A | Биты определяют устройство и головку для операции чтения/записи
+ перед операцией однократно:
порт РУС+ >> порт A на запись, порт B на чтение, порт С на запись
порт С + >> 10110110b -- перед записью
+ >> пишем в порт A
порт С + >> 10010110b -- после записи
-------------------------------------------------------------------------------
57H порт A | Запись: регистр команды (См. Tech Ref о подробностях)
+ перед операцией однократно:
порт РУС+ >> порт A на запись, порт B на чтение, порт С на запись
порт С + >> 10110111b -- перед записью
+ >> пишем в порт A
порт С + >> 10010111b -- после записи
57H порт A | Чтение: регистр статуса
+ перед операцией однократно:
порт РУС+ >> порты A и B на чтение, порт С на запись
порт С + >> 01010111b -- перед чтением
+ >> читаем из порта A
-------------------------------------------------------------------------------
5fH порт C | Системный сброс (лучше не пользоваться, сходство с 57Н без обнуления
микросхем жесткого диска).
+ перед операцией однократно:
порт РУС+ >> порты A и В на чтение, порт С на запись
порт С + >> xxx0xxxxb
Подключение диска к ВВ55 такое же, как и на исходной схеме с одним исключением:
- Порт A -- D0-D7 на IDE
- Порт В -- D8-D16 на IDE
- Выводы порта С0-C2 -- A0-A2 на IDE
- Вывод порта С4 -- /RESET на IDE
- Вывод порта С5 -- /CS1FX на IDE
- Вывод порта С6 -- /DIOW на IDE
- Вывод порта С7 -- /DIOR на IDE
Если я правильно понял, в стандартной схеме сброс будет выполняться при любой записи в порты 5Ch-5Fh, на ВВ55 для пришлось задействовать для сброса IDE вывод C4.
Всё хорошо, вот только при программировании порта С на вывод все пины этого порта устанавливаются в ноль, а следовательно получишь и RESET, и недопустимое сочетание DIOW DIOR.
В общем, почитал я "гросбух" и склоняюсь к выводу, что использовать "режим 2" на ВВ55 не получится, потому что простыми средствами там синхронизацию с IDE не сделаешь... Да и в схеме для ПК8000/MSX использовался только "режим 0", судя по подключению управляющих сигналов.
И ещё, про:Это не страшно, т.к. чтение и запись, по стандарту IDE, выполняются по положительному фронту на этих выводах, так что их совместное зануление, думаю, не будет критичным для диска. С другой стороны, смену настроек через РУС нужно будет свести к минимуму.
Потом, нашёл ещё одну интересную разработку: IDE2LPT - адаптер IDE-винчестера для подключения к параллельному порту PC -- Л.Слободчиков, журнал Радиохобби, №2 1999 г., с.55
По виду, там схема имеет не только много общего со стандартной Векторовской схемой IDE-контроллера, но и подключается к LPT-порту, во многом схожему с портом ПУ. На основе этих разработок, думаю, можно будет сделать супер-простую схему подключения IDE-дисков в порт ПУ, на одних проводах.
Анализируя ошибки при тестировании собранного мной контроллера HDD, дизассемблировал TESTHDD3 Фролова, и заодно немного его улучшил. Вот получившиеся исходники: Вложение 69751
С моими исправлениями назвал TESTHDD4: Вложение 69752 (в архиве исходники и откомпилированная версия)
Изменения по отношению к третьей версии:
1. Заменил все обращения к порту 5Fh на 57h, кроме первого, при этом оказалось, что линию "reset" можно не размыкать, диск и с ней работает нормально. Собственно, в документации к контроллеру и было сказано, что порт 5Fh лучше не использовать часто, и, возможно, также нужно будет пропатчить ДОСы...
2. При "поверхностном" тестировании портов с моим диском выдаётся ошибка "не работает порт IN 57 или индексный маркер HDD". Разбор исходного алгоритма показал, что там считывается байт из порта и анализируется изменение его второго бита, если оно не произошло за 65536 х 16 циклов, то и выдаётся эта ошибка. В найденном описании из инета сказано, что это "индекс, трактуется особо каждым производителем", поэтому я не исключаю, что на моей модели диска он просто не меняется. В этом тесте я значительно переработал алгоритм проверки и добавил вывод значения порта, по которому можно судить о его работе: если с порта 57 читается значение 50h или 51h, то скорее всего проблема в индексном маркере.
3. При тестировании чтения/записи сектора выдавалась малопонятная ошибка "мало данных", дополнил её выводом числа считанных/записанных байт. Кроме того поправил подпрограмму сравнения считанных данных, теперь она проверяет не больше, чем было считано и выводит номер байта, на котором возникла первая ошибка. Собственно, это тоже связано с моделью диска: в тесте изначально читается сектор 512 байт и дополнительно ещё 16 байт (контрольные суммы?), мой же диск отдаёт только 8 дополнительных байт. Не думаю, что эти дополнительные данные как-то влияют на работу программ, но вывод этих ошибок в тесте я оставил.
4. Ну и напоследок, убрал неиспользуемые части, исправил найденные ошибки, добавил новые... :)
Доброго времени дорогие друзья ! Хотел бы поделиться своими наработками в области сопряжения контролера HDD с CF картой, подробно.
В ходе выполнения работ выяснил опытным путем, что не со всеми CF картами контроллер ведет себя правильно. Самый лучший вариант на данный момент это CF Kingston 256 mb. Китайские малой емкости - которые есть на али - не одну не получил в рабочем состоянии, лучше искать на авито. Еще, не рекомендую Transcend, не знаю все или нет, у меня были два экземпляра по 128 мб, оба искажали большие контрастные файлы при записи на диск, сдвигали произвольный кусок файла на 2 байта,. В обшем, приводили в негодность. Эти же карточки резко реагировали на тип и положение шлейфа IDE, на сложенном и скрученном шлейфе могла вообще не читать ничего, или искажать сильно при записи, вообще не писать, на развернутом - гораздо получше. На Kingston - вообще проблемы нет, работает на любом шлейфе в сложенном и развернутом виде, пишет без искажений.
Для предотвращения заворота и удобного пользования диском при помощи программы ASC.COM - обрезал диск до 41 дискеты (32мб), путем инициации его INITHDD2 - c параметрами 124C16H32S
кол-во цилиндров - 20H 32B
кол-во головок - 10H 16B
кол-во клайстеров - 7СH 124B
Так работает идеально, без завоторов, 41B 29H дискет, в целом больше и не нужно...
Программа ASC.COM - с зеленым интерфейсом прекрасно переносит перемонтирование диска - не вываливается, как многие другие, спасибо автору, жаль что он не известен.
Кстати, хотелось бы сразу поинтересоваться, у кого есть рабочие исходники ASC ? Или кто знает как можно поменять цвет интерфейса, где он прописан в коде программы, по какому адресу, зеленый - очень яркий.
Хочу так же поделиться образом диска - вот тут по ссылке можно скачать, там же описание - что на каком диске, и программа HDDRawCopy1.10Portable для записи образа на CF и последующего считывания.
Считывается вся CF, так как она у меня 256 mb - обрезаю ее в hex редакторе, для экономии места.
Скачать можно тут: https://yadi.sk/d/wrH30lL4UGK_3Q
И есть еще один нюанс, на aliexpress доступно несколько типов CF to IDE плат. Так вот, они не все работают с картами Transcend (по крайней мере теми, которые у меня были). Те которые подключаются без шлейфа, у которых разъем "мама" - не работают, шлейф для этих карт очень критичен, должен быть. Так же на сильно коротком шлейфе тоже не работают. Но с картами Kingston проблемы нет, все читается и пишется на любой плате CF to IDE.
https://sun9-13.userapi.com/c857620/...B3GBuX4FCg.jpg
Поменял на яндекс диске файл описания, добавил некоторые важные элементы описания...
Еще один важный момент вспомнил,без него не заработает, не помню, писал в предидущих сообщениях или нет, если повторюсь, простите.
На разьеме IDE (в моем случае, разьем на плате combodevise) вывод 37 (выбор контроллера) с выводом 40 (общий) спаял перемычкой и вывод 1 (reset) убрал, обрезал - все пошло. До этого жесткий диск не видился контроллером, или видился, но производил одни ошибки..
https://sun9-19.userapi.com/c857720/...JNIJBt5b_4.jpg
Обновил образ CF на файлсервере, это наверное окончательная версия, тут уже вроде как все поисправлял что хотел, покрякал кое что, наделал ASC гармоничных расцветок, ну и там кое что из софта понаходил еще, в общем, кому интересно качайте.... https://yadi.sk/d/wrH30lL4UGK_3Q
И еще кое что, на мой взгляд интересное. Попробовал как носитель CF карту на 32 мб от CANON - отлично работает, пишется и читается прекрасно, на векторе. На PC она в 3 раза медленнее чем Kingston И Transcend, и вместо 5 мб\сек еле набирает 1,9мб\сек. В целом это ничего, скорость работы с вектором не меняется из за этого, там максималка... Но есть одно но.... Kingston И Transcend, если зажать F2+F3 до включения компа, и включить - успевают инициализироваться и загрузка происходит с HDD. А в случае с CANON инициализация не проходит до опроса готовности HDD и старт переводится на касету. по этому, лучше ничего не трогать, тогда загрузка начинается с дискеты, и тогда можно нажать ввод+блк +F2+F3 и загрузка пойдет с HDD. То есть, CANON не успевает показать свою готовность до опроса контроллером HDD.
CF CANON 32 мб имеет другие параметры,
кол-во цилиндров - 20H - 32B
кол-во головок - 4H - 4B
кол-во клайстеров - 1EAH - 490B
но в целом, на нее можно так же залить дамп с файлсервера https://yadi.sk/d/wrH30lL4UGK_3Q только предварительно поправить в дампе с 80 адреса 5 байт, вместо 20 10 7C 00 29 вписать 20 04 EA 01 28 или попросту запустить с FDD - программу INITHDD.COM и дать программе инициализировать диск уже после записи дампа, все данные останутся целыми, поменяются только 5 байт образа с 80 адреса.
Кстати, да, возможно это имеет смысл. В оригинальной векторовской схеме контроллера сигнал CS1FX# отключается после DIOR#/DIOW# с задержкой до 10-14нс (которую обеспечивает микросхема КР1533ЛИ1), какую задержку делает комбодевайс не знаю, но возможно этой задержки мало для нормальной фиксации данных CF-картой с переходником на IDE. Думаю, этот глюк можно решить в прошивке комбодевайса, просто увеличив там задержку отключения CS1FX# до 20 или более нс.
ASC.COM мой, правда он был с синим интерфейсом. Исходники тут: http://sensi.org/scalar/ware/794/
- - - Добавлено - - -
Доброго времени! Пытался ваши исходники скомпилить, и в TASM и в Pretty Assembler, в итоге получается только синий фон и красный прямоугольник выделения файла, без букв и прочего Я нашел в коде 3 ошибки, но результата это никакого не дало, код так же компилится в синий экран с красным прямоугольником с лева, меняющим своре положение по нажатию "таб" на правое... Программа запускает файлы, запрашивает подтверждение при попытке выхода, выход работает. Но на экране синий фон и прямоугольники выделения имен файлов, букв и псевдографики нет.. Что это может быть? Где то еще есть ошибки в коде. И когда компилится, файл получается на 1 кб меньше чем тот ASC что я использовал. Ваш код очень помог мне найти в машинном коде ASC место где цвета находятся, и еще некоторые другие интересные места, код местами очень похож на код ваших исходников, но лишь местами. В итоге, я из 3х найденных мной версий ASC нашел самый лучший (основным критерием явилось то, что программа не вылетает в MicroDOS c HDD при вводе команды 9, монтирования дискеты из HDD к определенной метке) и уже в коде наменял цветов, и кое чего еще. В целом, цель достигнута. Пытался собрать исходники из ваших, и дизассемблированных текстов лучшей версии ASC - но код таки местами сильно отличается, да и времени сейчас не очень много на это, по этому, остановился пока на исправлении того что мне мешало непосредственно в коде программы. А ваш код ASC адаптирован под версию MDOS c HDD? И почему он не отображает текст и псевдографику? Он компилился у вас в рабочюю программу?
Проверил, ваша версия программы, которая по ссылке доступна скомпилированная, она вываливается, когда дискету монтируешь командой, например "9 А:2"... Тем не менее, если по исходникам можете помочь, может у вас осталась копия рабочих исходников, поделитесь пожалуйста. Те которые по ссылке не работают как надо.