Доброго времени суток всем! Интересует вопрос: есть ли у кого рабочие исходы подобной операции. А то как ни пытался - ничего не пашет. В качестве источника канал DMA - 0, в качестве приемника канал DMA - 1, соответственно настраиваются адреса, страницы и количество байт транзакции и "нажимаем кнопочку PLAY". Но, к сожалению, ничего не происходит. Поиски по инету дали не рабочие исходы на си (см. прикрепленный файлик). В принципе, язык не важен, понять бы как заставить работать ? Вопросы типа: а нафига все это надо, этож медленно... тут неуместны. С уважением, Александр.
Такое проходило только в старых компах (80286 и иже с ними). Позднее возможность передачи память-память из контроллеров была изъята.
Т.е. на современном железе, которое вроде как должно работать в режиме совместимости этого не сделать вообСЧе ? А если использовать PCI DMA ? то там, как я полагаю все становится чипсето зависимым ?
PCI DMA используется для взаимодействия PCI устройства с контроллером памяти через механизм Bus Mastering т. е, к примеру, сетевой контроллер получает пакет и записывает его по указанному физическому адресу вам же, насколько я понял, нужен DMA в рамках одного контроллера памяти т. е копирование данных без участия CPU
Exception13 Не сделать. И современное железо не является на 100% совместимым с тем, что использовалось в PC/AT. Например, нынешние контроллеры DMA, "вшитые" в южный мост, не поддерживают передачу "память - память" (на что были способны реальные контроллеры 8237), а контроллеры прерываний не имеют половины режимов, которыми располагал 8259. Совместимость поддерживается только в тех режимах, которые реально использовались "официальным" софтом. Неверно. Всё выполняет проц. Хотя бы потому, что адреса в этой инструкции -- виртуальные, и их ещё надо преобразовать сначала в линейные, а затем -- в физические. И чтоб исключения возникали при любых ошибках (в частности, при страничных промахах).