Работа с дискетой в защищенном режиме
Нашёл вот такую информацию:
page1
page2
page3
page4
Проблема в том, что информация несколько устарела - там адрес в памяти задаётся 20битным числом, тоесть считать что-либо с дискеты можно только в первый мегабайт памяти:
Цитата:
Остальные два регистра содержат адрес буфера в памяти, с кото-
рым будет происходить обмен данными. Этот адрес задается как
20-битное число...
Трогать первый мегабайт очень не хочется. Можно ли как-нибудь работать с дискетой без его использования?
Лично я использую для работы с флоппиком ISA DMA, т.е. ту самую 20-битную адресацию. Можешь использовать PIO, т.е. читать/писать данные побайтово вообще без использования аппаратных буферов. Кстати почему не хочется трогать первый мегабайт? Он сейчас для этих целей в основном и используется.
Цитата: Phantom-84
Кстати почему не хочется трогать первый мегабайт? Он сейчас для этих целей в основном и используется.
причина 1) Я этот мегабайт уже почти весь использую.
причина 2) Прочитанные данные должны оказаться в области данных задачи, инициировавшей чтение. Их всё равно придётся перемещать из первого мегабайта. Было бы хорошо вместо это сразу считывать в нужное место.
Впрочем я, наверное, обойдусь и 20битной адресацией - я думал, что возможно как-нибудь образом в DMA использовать 32битную, но если нельзя, то ничего страшного.
Вообще-то DMA контролер использует 24-битную адресацию. А если не хочется трогать первые 16мб, то можно попробовать через использование страничной адресации(изменяя cr3 в начале процедуры и возращая его обратно в конце), хотя я не уверен, что это сработает
Флоппик заведен на канал 2, который является 8-битным, а для 8-битных каналов принято использовать только младшие 4 бита страничного регистра. Кроме того, для работы на уровне физических адресов в моей программе можно использовать только память ниже отметки 1 Мб. Память выше этой отметки содержится в общесистемном пуле так, что физический адрес очередной выделенной страницы является произвольным.