A20 gate

Тема в разделе "WASM.ASSEMBLER", создана пользователем _hidden_, 10 май 2005.

  1. _hidden_

    _hidden_ New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    30
    Адрес:
    Russia
    Доброе время суток всем!



    У меня наболел один вопрос.



    При входе в защищенный режим из реального режима для доступа к к области памяти свыше мегабайта необходимо как известно открыть A20 линию.



    КАК ЭТО СДЕЛАТЬ???



    В смысле, я видел много статей, исходников и т.п.



    Я уже насчитал 4 способа:



    - через 92h порт (так пишет Зубков)

    - два способа через 64h порт (исходники pmode)

    - какой то PC98 через какой то еще порт



    все доступные мне источники (techhelp и т.п., правда старые - 95 года) по этому поводу ничего не могут ответить вразумительно (92h порт описан, по поводу 64h про а20 ни слова)



    Объясните мне пожалуйста в чем разница.



    И еще, хотелось бы найти справочник по портам, поновее чем мой ;) Существуют ли такие в природе?
     
  2. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Попробуй сразу оба источника для A20M# разрешить, например так:


    Код (Text):
    1.     mov al, 0D1h
    2.     out 64h, al
    3.     mov al, 0DFh
    4.     out 60h, al
    5.     in  al, 92h
    6.     and al, not 2
    7.     out 92h, al




    [added] Чето я подумал, что у тебя что-то не получается. Если тебя просто разница интересует, то дело вот в чем: способ, работающий с контроллером клавиатуры -- старый и совместимый. Способ открытия с помощью порта 92h -- т.н. Fast. Он быстрее работает (должен по крайней мере), чем KBC-метод. [/added]
     
  3. _hidden_

    _hidden_ New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    30
    Адрес:
    Russia
    Ну в большинстве виденных мною исходниках всяких dos extender'ов как раз и применено несколько способов.



    Кстати на открытие с помощью 64h порта там обычно дается несколько попыток (то есть посылается всякая шняка в этот порт в цикле, непонятно опять же почему).



    Хотелось бы поподробнее узнать про все это дело. Я не видел НИ ОДНОЙ доки на эту тему. Почему тогда пытаются использовать несколько способов если вроде бы как самый лучший на сегодняшний день считается 92h тоже непонятно. Если дело в совместимости... у меня на стареньком 386м ноутбуке 92h тоже работает. Казалось бы - чего еще надо?

    Но в исходники cwsdpmi я увидел что в 2001 году появился еще один способ под названием PC98...



    Я немного запутался, и вообще казалось бы спереть исходник того же wdosx или cwsdpmi и не мучатся, но хочется ПОНЯТЬ.



    И вообще - неужели нет никакиъх новых справочник типа старых добрых tech help'ов?
     
  4. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759




    После I/O операции частенько используется т.н. IODELAY, суть которого заключается в записи в порт 0EBh произвольного значения. Это, например, BIOS любит использовать. Для особо не быстрых девайсов IODELAY делается в цикле.



    А насчет понять... лучше всего скачать на свой чипсет datasheet'ы (если есть возможность) и изучить.
     
  5. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    IntList ещё кстати не потерял актуальность.
     
  6. _hidden_

    _hidden_ New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    30
    Адрес:
    Russia
    >лучше всего скачать на свой чипсет datasheet'ы (если

    >есть возможность) и изучить.



    ну мне свой то меньше всего интересен, мне нужна универсальность ;)



    >IntList ещё кстати не потерял актуальность.

    это который ральф браун и иже с ними? так вот там по конкретной проблеме ничего нет :dntknw: да и порты все же описаны не все, и инфа многая устарела



    и все же, как я понял для сабжа лучше всего использовать 92h? Совместимость со всякими 386 и иже с ними (хотя если ниже то ни о каком pmode не может идти и речи) меня не волнует ;)



    очень хотелось бы получить кусочек исходников из какого нибудь относительно свежего linux'a, где показана реализация в линухе сабжа. может кто нибудь кинуть в форум этот самый код? а то качать мегабайты исходников возможности нет :dntknw:



    и еще. есть более корректный способ проверки открылся ли этот ядрненый а20 или нет, кроме как обращятся ко всяким OFFF0, попадая реально в таблицу прерывааний ;)
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    _hidden_

    Насколько я понял М.Гука.
    Код (Text):
    1.  
    2. mov al, 0D0h  
    3. out 64h, al
    4. in  al, 60h
    5.  


    0D0h-четение порта вывода 8042

    0D1h-запись порта вывода 8042

    бит 1 -вентиль линии адресса A20

    бит 0 -системный сброс
     
  8. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    из доступных источников, 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 способов переключения)