Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу 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]
ДМА - это копирование данных изнутри контроллера в находящиеся на шине снаружи контроллера ячейки ОЗУ без участия процессора. При этом процессор блокируется, а на шине выполняется специальный цикл передачи данных изнутри контроллера в ОЗУ ( или наоборот ).
[q]
Вопрос в другом, изначально нужно как то загрузиться с диска.
[/q]
Здесь всё просто - загрузчик записан в нулевом блоке системного диска, а в области регистров контроллера нужно иметь небольшой код из нескольких команд, который читает 0-й блок загружаемого привода по адресу 0 и передаёт управление на адрес 0. Сам же этот начальный загрузчик надо запускать вручную из пульта по команде xxxxxx G, где хххххх - адрес кода начального загрузчика в области регистров контроллера.

Если контроллер использует ДМА - можно сделать как в MY - иметь специальную команду "прочитать загрузчик", по которой контроллер сам помещает данные из нулевого блока диска по адресу 0. Тогда надо сначала записать в регистр данных номер загружаемого привода, потом записать в регистр команд код команды "прочитать загрузчик", а потом просто нажать "G" и управление будет передано на адрес 0, где уже находится прочитанный с привода загрузчик.
andyTh
Гость

Ссылка

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

Т.е. программа минимум:

Контроллер должен принимать следующие команды от драйвера:

1. Установить номер привода для последующей операции.
2. Установить номер блока для последующей операции.
3. Установить счётчик слов для последующей операции.
4. Выполнить операцию "ЧТЕНИЕ".
5. Выполнить операцию "ЗАПИСЬ".
6. Выполнить операцию "СООБЩИТЬ РАЗМЕР НОСИТЕЛЯ" ( в блоках ).
Сейчас на форуме
_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]
Если чтение/запись кластера занимает больше времени, чем тайм-аут шины, то надо добавить в контроллер регистр статуса, рапортующий о готовности очередного кластера.
<<Назад  Вперед>> Страницы: 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