Вопрос для знатоков в низкоуровневом программировании: Стоит такая задача: на ассемблере организовать запись/чтение информации из HDD (FAT32, из файла большого размера - порядка сотен Мб) в память (для организации доступа ко всему объему физической памяти используется так называемый Unreal Mode) и обратно с произвольным доступом (т.е. чтоб кусками можно было переписывать файл, предпочтительно с максимальной скоростью считывания с диска - такое достигается, если сектора всего файла располагаются один за другим, т.е., файл не фрагментирован, т.е. найти на диске свободную область нужного размера, а затем писать в нее файл) в режиме UDMA с прямым доступом к секторам диска без использования VM, PM. Только в RM. Можно пример под DOS. Всякие extenders, DPMI, VCPI, использовать Windows не предлагать. Файл порядка сотен Мб с двоичными данными пусть располагается в корневом разделе диска. Предполагается, что для этой программы доступен только сервис BIOS, ну и DOS (если поможет). В книге Кулакова "Прогрммирование на аппаратном уровне" есть только "Программа, выполняющая считывание загрузочного сектора Maser-диска канала 1 в режиме DMA". Т.е., только одного сектора. Это простой пример. Поиск по инету через поисковики ничего стоящего не дал. Если у кого-то есть более подробная информация, описывающая данную проблему, или ссылки на инет, буду рад помощи. Откровенно могу сказать, что раньше программированием портов HDD не занимался. Поэтому, возможно, разобраться в неработающем коде не смогу. Может у кого будут готовые сырцы или ссылки - буду рад.
А на режим/экстендеры там как-то пофигу -- busmaster'у передается физ. адрес. Инфа по программированию ATA-устройств здесь: www.t13.org (Project Drafts) Отправная точка -- команда READ DMA.
Да. Это конечно хорошо, что у меня теперь есть даташит на 339 листов. Но там нет никаких примеров программирования режима UDMA. Описания регистров и т.д. Команду Write и Read DMA нашел, но не думал, что за одно обращение можно прочитать/записать только 256 секторов. Может кто-то может указать ссылки на программы/примеры программирования? А то я никогда не занимался программированием ATA-устройств, боюсь не разберусь и "напортачу".
Я забыл, там же нигде басмастер не описывается. Вот ещё важная дока: Programming Interface for Bus Master IDE Controller Ссылку не помню, имя файла -- idems100.pdf Базу регистров басмастера кстати можно переносить, средствами чипсета. Пример есть в статьях, http://wasm.ru/article.php?article=atazen02
Спасибо за ссылки. Как говорится, а слона то я и не увидел. Ведь инфа, которая нужна, представлена в статьях на этом сайте, правда не в нужном объеме, а я бегло глянул, и не обратил внимание. В качестве начальной информации может пригодиться Программирование ATA устройств
В том то и дело, что мне не нужно Win32 API, хочу обойтись без Windows и др. ОС защищенного режима и их API. А на t13.org примеров маловато будет.
Этот пример по чтению 1 сектора в режиме UDMA, к сожалению, слишком простой, работа с FAT в режиме UDMA вообще непонятна (сначала найти сектор, потом его считать, ведь контроллер сам не находит следующий сектор файла?).