Добрый день. У меня возникла проблема с чтением дискеты используя порты ввода-вывода. Вот код: Код (Text): org 0x7c00 use16 start: mov dx,1f6h ;Drive and head port ;Drive 0, head 0 mov ax,0x0a00 out dx,al mov dx,1f2h ;Sector count port mov al,1 ;Read one sector out dx,al mov dx,1f3h ;Sector number port mov al,1 ;Read sector one out dx,al mov dx,1f4h ;Cylinder low port mov al,0 ;Cylinder 0 out dx,al mov dx,1f5h ;Cylinder high port mov al,0 ;The rest of the cylinder 0 out dx,al mov dx,1f7h ;Command port mov al,20h ;Read with retry. out dx,al still_going: in al,dx test al,8 ;This means the sector buffer requires ;servicing. jz still_going ;Don't continue until the sector buffer ;is ready. mov cx,512/2 ;One sector /2 mov di,buffer mov dx,1f0h ;Data port - data comes in and out of here. rep insw jmp buffer rb 512-($-start)-2 db 0x55,0xAA buffer: По идее он должен прочитать первый сектор(загрузочный) и записать его по адресу buffer. Пробема в том что код Код (Text): still_going: in al,dx test al,8 ;This means the sector buffer requires ;servicing. jz still_going ;Don't continue until the sector buffer ;is ready. как-то непонятно работает. Если al <>8 круги цикла продолжают наматыватся... Я проверял борщем, используя образ, поэтому проблема явно не в том, что дискета недоступна... проблема где-то в коде. Помогите, плиз, если кому не тежело . Сори за ламерский вопрос...
3n3m1 чтением дискеты используя порты ввода-вывода Ты ни чего не путаешь? Afaik диапазон портов с 0x01F0 по 0x01F7 принадлежит контроллеру первого жесткого диска. Если al <>8 круги цикла продолжают наматыватся Imho - пока бит 7 не установлен "круги цикла продолжают наматыватся". Afaik единица в 7-ом бите означает, что диск выполняет команду, а ноль - диск "свободен". т.е. применительно к hdd надо писать jNz still_going.
3n3m1 Я не интересовался дискетами года с 1993. Единственная информация доступная тогда - это Роберт Журден (оригинального имени не знаю) "Справочник программиста на персональном компьютере фирмы IBM". Пример чтения с дискеты с использованием портов и ПДП содержится в "Глава 5. Дисковые накопители. - Раздел 4. Чтение и запись файла. - Программирование контроллера HГМД 765 и микросхемы прямого доступа к памяти 8237". Я не проверял, работоспособен ли этот пример на современном железе (весной 93 первый раз попробовал 486SX25). Если не найдешь в сети, отпишись здесь, как-нибудь прицеплю (архив этого раздела ~9кб).
Я наврал в #2 про _седьмой_ бит (перепутал с 0x80). В Код (Text): still_going: in al,dx test al,8 ;This means the sector buffer requires ;servicing. jz still_going ;Don't continue until the sector buffer ;is ready. все правильно. Этот цикл ждет когда _третий_ бит будет установлен, т.е. контроллер подготовил данные и их можно забирать.
2 q_q: Спасибо большое за направление к Роберту Журдену . Тема! Вчера нарыл - седня прочитал. Кучю всего еще нагуглил. В общем могу я уже читать с дискеты !