Драйвер SCSI generic, drivers/scsi/sg.c Конечно, там не "память-память", а "память-устройство", но большой разницы нет. LDD3, глава 15 - там теория объясняется.
А что за девайс такой, что делает "память-память" через DMA?
Дв общем идёт именно что-то типа memcpy, так как мне надо именно выполнить пересылку из одной области ОЗУ в другую с целью демонстрации - пересылка память-память возможна.
Просто у нас с преподом это щас излюбленная тема. В DOS под ASM я пробовал - все режимы DMA работают, а вот память-память - нет, гадский BCR инициилизируется, но счёт не идёт - т.е. дальше инициализации регистров режима дело не заходит.
А вот на С и под линукс ещё не пробовал. Очччень хочу.
Пропустив мимо ушей дуба, привожу текст задания к лабам по DMA:
4)Реализовать сохранение экрана и его восстановление с использованием ПДП (текстовый режим).
Не критично конечно, но если такое задание есть, значит есть люди, удачно его выполнившие на персналке. Или я опять чего не так понял :).
What's up people? |-(|
1) а почему вы думаете что ПДП в данном контексте - это именно DMA? может препод надеется, что вы будете копировать как послушные мальчики с 0xb800:0000 в какой нибудь буфер (т.е предполагается прямой доступ к видеопамяти - в отличие от пользования функциями BIOS например, а отнюдь не DMA)
под Linux из user space к видеобуферу вас за километр не подпустят (если не считать грязных хакофф с /dev/mem)
2) документация по ISA открыта и ищется в google. не думаю что инициализация DMA - обмена в программе на C отлична от таковой в программе на любом другом языке (допускающем использование ассемблерных вставок естественно)
Увы, но задание тематическое. Именно DMA.
В общем есть у меня архивчик, с разных сайтов накачано, в том числе и исходники на С - всё это DMA обмен усторойство-память и наоборот :).
А вот о режиме память-память только упоминания. Одна вода. Юзаю как гугл, так и яндекс. даташит контроллера тоже читал. Попробую поискать ещё, а то пока глухо.
Насчёт юзерспайса не беда - ну допустим я напишу модуль ядра. Только для демонстрации, и всё.
> Пропустив мимо ушей дуба, привожу текст задания к лабам по DMA:
"либо он полный дуб, либо OP его не так понял" - так вот, OP его не так понял.
> 4)Реализовать сохранение экрана и его восстановление с использованием ПДП (текстовый режим).
Если я правильно помню годы юности, видеопамять располагается на устройстве (видеокарте), так что речь идет об обмене "память-устройство", а не "память-память". Так что (по кр. мере теоретически) через DMA с ней меняться можно. Посмотри спецификации VGA - может, что-нибудь найдешь.
О! а это идея. Но блин в доке на архитектуру IBM нечиго не сказано о поддерже видеоадаптером режима DMA. Вроде по устройством расспределение идёт так - регенерация памяти, FDC, HDC, cascade. Но всё равно - я подробнее на эту тему посмотрю. Спасибки.
> Но блин в доке на архитектуру IBM нечиго не сказано о поддерже видеоадаптером режима DMA
На тогдашней архитектуре контроллеры DMA были выделенными, btw. Так что видеоадаптер и не должен был его поддерживать. Искать в этой доке нужно примеры использования DMA c видеопамятью.
А вообще-то всё должно быть просто - задаешь DMA-контроллеру адреса и размер, и он пересылает данные. Почитай внимательнее доку по древнеписишным DMA-контроллерам, проверь адреса.
Хм, интересная тема.... память-память? DMA? хм, и что, получилось? Чтото в принципе плохо это себе представляю, что это за шаманство "DMA память-память". Особенно если подумать что такое ПДП (прямой доступ к памяти)и как оно работает, то возникают вопросы: - прямой доступ _кого_ к памяти, какого устройства? - памяти самой к себе? а какие тут в принципе проблемы могли возникнуть чтобы задействовать это в контроллере ПДП? - и подсистема памяти должна сама поддерживать работу в режиме ПДП? Прерывание там выставлять или регистры специальные для опроса - чтоб факт окончания пересылки отловить?