Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Другие архитектуры »   Использование НМД2 в ДВК
RSS

Использование НМД2 в ДВК

<<Назад  Вперед>> Страницы: 1 2 3 4 5 ... 11 12 13 14 15 * 16 17
Печать
 
_Patron_
Member


Откуда: Москва
Всего сообщений: 146
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
19 дек. 2012
AndyTh написал:
[q]
А если ячейки памяти будут находиться внутри контроллера, то это уже не ДМА?
[/q]
Если контроллер эмулирует всю доступную процессору память - проблем нет. Но если на шине есть внешняя ( по отношению к контроллеру ) память - передавать туда данные контроллер должен по ДМА.
_Patron_
Member


Откуда: Москва
Всего сообщений: 146
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
19 дек. 2012
AndyTh написал:
[q]
Какая разница где будет расположена память, с которой работать драйверу.
[/q]
Просто, если контроллер работает по ДМА и блокирует процессор - уже при выполнении процессором следующей команды драйвера после активации контроллера - прочитанные данные уже находятся в ОЗУ по тому адресу, который операционка сообщила драйверу, а драйвер сообщил контроллеру. Если же контроллер только "выставляет" данные в своём буфере, но сам не переправляет их в буфер пользователя в ОЗУ по тому адресу, который операционка сообщила драйверу - копировать туда данные из буфера контроллера должен сам драйвер ( после подачи в контроллер команды чтения ).

В текущем варианте драйвер HD сам ничего не копирует - только сообщает в контроллер адрес буфера пользователя в ОЗУ.
andyTh
Гость

Ссылка

Воооот! Достаточно драйверу разместить буфер в самом контроллере, и процессору ничего делать не нужно. Данные "волшебным" образом будут меняться сами. Это очень хорошо иллюстрируется двумя видеоконтроллерами.
Это 580ВГ75 и ЕМНИП 1809ВГ6. Первая перебиралки адресов не имеет и без аппаратного ДМА контроллера не работает. Не, сделать то можно, но...
Второй чип счётчик адресов имеет и прекрасно работает на системах без ДМА контроллера. Более того, видел в сети проект, где процессор и видеоконтроллер питались от одного тактового генератора, но инвертированными относительно друг друга клоками.
Остальные сигналы управления тоже были подогнаны по времени. В результате проц и видеоконтроллер обращались к памяти по очереди не замечая друг друга.

Но это пока на том этапе, на котором я остановился, не так важно.
Мне бы "стандартную" раскладку адресов командных и управляющих регистров для начала найти.
В общем буду потихоньку курить паспорт от RQDX, до просветления :) мож толк и выйдет.
Сейчас на форуме
_Patron_
Member


Откуда: Москва
Всего сообщений: 146
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
19 дек. 2012
AndyTh написал:
[q]
Достаточно драйверу разместить буфер в самом контроллере, и процессору ничего делать не нужно. Данные "волшебным" образом будут меняться сами.
[/q]
Драйвер к буферу пользователя не имеет никакого отношения. Пользователь, желающий прочитать произвольное количество слов с диска ( вплоть до 32К слов за одну операцию чтения ) передаёт операционке номер начального блока, адрес СВОЕГО буфера и счётчик слов, операционка передаёт их в драйвер, а драйвер выполняет столько запросов чтения, сколько нужно для получения от контроллера всех запрошенных пользователем слов и аккуратно укладывает результаты всех этих запросов в буфер пользователя.

Некоторые контроллеры считывают за один раз не больше 64 слов, некоторые - не больше 256 слов, псевдо-контроллер HD передаёт любое количество слов, но благодаря наличию драйверов - пользователь может по единому алгоритму получить в СВОЙ буфер любое количество слов от любого контроллера.

Если контроллер поддерживает ДМА - он сам копирует данные из своего буфера в буфер пользователя, а если нет - это делает драйвер.
andyTh
Гость

Ссылка

_Patron_ написал:
[q]
Если контроллер поддерживает ДМА - он сам копирует данные из своего буфера в буфер пользователя, а если нет - это делает драйвер.
[/q]
Это понятно. Просто я сейчас физически не смогу этого сделать. Аппаратно у меня ДМА не разведен и честное ДМА я не сделаю в пределах этой макетки. Но сделать прозрачным в доступе процессору сегмент адресов на своей плате я могу. Для процессора это будет просто кусок памяти не на основной плате, но доступный точно так же как и основное ОЗУ. Эдакий аналог двухпортовой памяти.
Сейчас на форуме
_Patron_
Member


Откуда: Москва
Всего сообщений: 146
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
19 дек. 2012
AndyTh написал:
[q]
сделать прозрачным в доступе процессору сегмент адресов на своей плате я могу
[/q]
Поскольку драйвер HD готов запросить и получить за один раз до 32К слов данных, то единственный адекватный способ передать их все драйверу за одну операцию чтения диска - выдавать их по одному через регистр данных, сменяя на следующее после каждого шинного цикла чтения при операции чтения и цикла записи при операции записи.

Если не различать тип цикла при доступе к регистру данных, то на некоторых процессорах могут появиться проблемы с командой CLR, которая выдаёт сначала цикл чтения, а потом цикл записи.
andyTh
Гость

Ссылка

Ну, считать за одно обращение к диску больше чем кластер, я по идее не смогу. В смысле используя готовые библиотеки.
А это те же 512 байт, бОльшие кластера вряд ли имеет смысл делать. Но, я тоже думаю имеет смысл сделать для начала просто регистр.
Тогда я у себя делаю так:

Базовый адрес ххх. Положить суда или часы в BCD или доп. порт. или служебную инфу
ххх+2 регистр номера привода (запись/чтение)
ххх+4 регистр ёмкости привода в блоках (чтение)
ххх+6 регистр номера блока (запись)
ххх+8 регистр счётчика слов (запись/чтение)
ххх+10 регистр команд (запись/чтение)
ххх+12 регистр данных (запись/чтение)
Опять же таки, где то же есть эта раскладка по адресам для "контроллера общего применения" Под что то же писан загрузчик встроенный в МС1201.03.
Сейчас на форуме
_Patron_
Member


Откуда: Москва
Всего сообщений: 146
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
19 дек. 2012
AndyTh написал:
[q]
Ну, считать за одно обращение к диску больше чем кластер, я по идее не смогу.
[/q]
Если чтение/запись кластера занимает больше времени, чем тайм-аут шины, то надо добавить в контроллер регистр статуса, рапортующий о готовности очередного кластера.
andyTh
Гость

Ссылка

Поскольку и в регистре номера накопителя и в регистре команд будет занято по одному байту, второй байт можно выделить под статус. Хотя и целое слово довыделить не проблема.
Сейчас на форуме
borisfox
Advanced Member


Откуда: Хабаровск
Всего сообщений: 946
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 июля 2008
Сделайте совместимым по регистрам с КЖД, по крайней мере с загрузчиком и драйвером проблем не будет...
<<Назад  Вперед>> Страницы: 1 2 3 4 5 ... 11 12 13 14 15 * 16 17
Печать
Полигон-2 »   Другие архитектуры »   Использование НМД2 в ДВК
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS