Доброе время суток всем! У меня наболел один вопрос. При входе в защищенный режим из реального режима для доступа к к области памяти свыше мегабайта необходимо как известно открыть A20 линию. КАК ЭТО СДЕЛАТЬ??? В смысле, я видел много статей, исходников и т.п. Я уже насчитал 4 способа: - через 92h порт (так пишет Зубков) - два способа через 64h порт (исходники pmode) - какой то PC98 через какой то еще порт все доступные мне источники (techhelp и т.п., правда старые - 95 года) по этому поводу ничего не могут ответить вразумительно (92h порт описан, по поводу 64h про а20 ни слова) Объясните мне пожалуйста в чем разница. И еще, хотелось бы найти справочник по портам, поновее чем мой Существуют ли такие в природе?
Попробуй сразу оба источника для A20M# разрешить, например так: Code (Text): mov al, 0D1h out 64h, al mov al, 0DFh out 60h, al in al, 92h and al, not 2 out 92h, al [added] Чето я подумал, что у тебя что-то не получается. Если тебя просто разница интересует, то дело вот в чем: способ, работающий с контроллером клавиатуры -- старый и совместимый. Способ открытия с помощью порта 92h -- т.н. Fast. Он быстрее работает (должен по крайней мере), чем KBC-метод. [/added]
Ну в большинстве виденных мною исходниках всяких dos extender'ов как раз и применено несколько способов. Кстати на открытие с помощью 64h порта там обычно дается несколько попыток (то есть посылается всякая шняка в этот порт в цикле, непонятно опять же почему). Хотелось бы поподробнее узнать про все это дело. Я не видел НИ ОДНОЙ доки на эту тему. Почему тогда пытаются использовать несколько способов если вроде бы как самый лучший на сегодняшний день считается 92h тоже непонятно. Если дело в совместимости... у меня на стареньком 386м ноутбуке 92h тоже работает. Казалось бы - чего еще надо? Но в исходники cwsdpmi я увидел что в 2001 году появился еще один способ под названием PC98... Я немного запутался, и вообще казалось бы спереть исходник того же wdosx или cwsdpmi и не мучатся, но хочется ПОНЯТЬ. И вообще - неужели нет никакиъх новых справочник типа старых добрых tech help'ов?
После I/O операции частенько используется т.н. IODELAY, суть которого заключается в записи в порт 0EBh произвольного значения. Это, например, BIOS любит использовать. Для особо не быстрых девайсов IODELAY делается в цикле. А насчет понять... лучше всего скачать на свой чипсет datasheet'ы (если есть возможность) и изучить.
>лучше всего скачать на свой чипсет datasheet'ы (если >есть возможность) и изучить. ну мне свой то меньше всего интересен, мне нужна универсальность >IntList ещё кстати не потерял актуальность. это который ральф браун и иже с ними? так вот там по конкретной проблеме ничего нет да и порты все же описаны не все, и инфа многая устарела и все же, как я понял для сабжа лучше всего использовать 92h? Совместимость со всякими 386 и иже с ними (хотя если ниже то ни о каком pmode не может идти и речи) меня не волнует очень хотелось бы получить кусочек исходников из какого нибудь относительно свежего linux'a, где показана реализация в линухе сабжа. может кто нибудь кинуть в форум этот самый код? а то качать мегабайты исходников возможности нет и еще. есть более корректный способ проверки открылся ли этот ядрненый а20 или нет, кроме как обращятся ко всяким OFFF0, попадая реально в таблицу прерывааний
_hidden_ Насколько я понял М.Гука. Code (Text): mov al, 0D0h out 64h, al in al, 60h 0D0h-четение порта вывода 8042 0D1h-запись порта вывода 8042 бит 1 -вентиль линии адресса A20 бит 0 -системный сброс
из доступных источников, subj в частности описан в "BIOS companion" by Phil Croucher если кратко, то ищите в гугле A20 + 64h + 92h + f*cks f*cks на полном серьезе. особенно в сорцах юнихов: Tales of strange A20: ; ; http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=139774&repeatmerged=yes ; M919 motherboard w/ non-flashable BIOS dated 1996) ; Motherboard disables the keyboard controller, including ; A20 gate functionality. Code from Linux (SYSLINUX) works: ; port 92h method; don't change port 92h b1 unless you have to. ; ; http://www.win.tue.nl/~aeb/linux/kbd/A20.html ; Olivetti M4 with TRIDENT 9660 video integrated on the mainboard ; Fiddling with port 92h f*cks up the video. ; Changing port 92h b1 only when necessary may help. ; ; http://www.win.tue.nl/~aeb/linux/kbd/A20.html ; Sony PCG-Z600NE ; Spontaneous kernel (Linux) reboot after suspend/resume when ; A20 was enabled via port 92h but not via the keyboard controller. ; Apparently suspend/resume saves the A20 state of the keyboard ; controller, but not the port 92h state. ; ; http://www.win.tue.nl/~aeb/linux/kbd/A20.html ; Various SMSC super I/O chips will emulate the keyboard controller, ; but emulate port 92h only when that has been enabled. ; ; http://www.win.tue.nl/~aeb/linux/kbd/A20.html ; i386SL/i486SL and AMD Elan SC400 ; A20 control via I/O port 0EEh ; ; http://www.win.tue.nl/~aeb/linux/kbd/A20.html ; Toshiba laptop, Asus P55TP5XE boards (Triton I chipset), ; Fujitsu 555T, Compudyne Pentium 60 ; A20 gate via keyboard controller is very slow ; ; Other notes from ; http://www.win.tue.nl/~aeb/linux/kbd/A20.html ; - It may be necessary to do both the keyboard controller write ; and the port 92h write (and the 0EEh write) to disable A20. ; - The system may hang if you reset it while A20 is disabled. ; Reset vector is 0FFFFFFF0h, which becomes 0FFeFFFF0h if A20 ; is disabled. ; ; http://www.mail-archive.com/bug-grub%40gnu.org/msg05653.html ; Gigabyte motherboard GA-7VX-1 with AMI bios rev 7VX F7B ; USB support is turned on with legacy support (USB for keyboard/fdd) ; Any attempt to use the keyboard controller to enable A20 kills ; the keyboard. This board _must_ use the port 92h method. ; Unfortunately, INT 15h AX=2403h isn't available on this system. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;; P.S. вот и все разница между методами PS/2: http://www.win.tue.nl/~aeb/linux/kbd/A20.html (описание отличий AT и PS/2 способов переключения)