Protected Mode!

Тема в разделе "WASM.BEGINNERS", создана пользователем fireman, 31 окт 2008.

  1. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    Помогите ссылкой или советом!
    Только начал изучать ПМ и наткнулся на ряд вопросов.
    Скажем с IRQ0 в Реальном режиме это таймер, а в ПМ по селектору 0 это события от процессора
    как тогда в случае IRQ1 и т.д.
    Т.е. я конечно заходил на wiki.osdev.ru и здесь читал где есть замечания о том, что прийдется перепрагромировать контроллер прерываний, но нигде не видел исходных кодов или хотя-бя примеров.
    Еще вопрос в тему переходя в ПМ открывая линию А20, я также имею в памяти адреса процедур прерываний в первом Кб? И перепрограммирование контроллера связанно лишь с тем, что изменяется тип адресации?
    И когда в примерах идет смещение прерываний IRQ0-IRQ7 скажем на 50h это спасет меня в ПМ или надо делать, что то другое?
    Конкретно интересует события от клавиатуры IRQ1 и IRQ14-IRQ15 (винчестеры)!
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    fireman
    cмотри на этом сайте
     
  3. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    fireman
    Не следует смешивать номера линий запросов прерываний IRQ и номера векторов прерываний процессора (которые задаются в командах INT и которые являются номерами в таблице векторов прерываний). IRQ -- это, так сказать, провод, идущий от некоего внешнего устройства (контроллера дисков, таймера, клавиатуры и т.д.) к контроллеру прерываний. Контроллер же преобразует номер линии IRQ в номер вектора прерывания. Соответствие между этими номерами устанавливается программно путём программирования контроллера прерываний.
     
  4. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    Как это делается?
     
  5. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    WSD - покажи ссылку куда смотреть! Я весь сайт скачал и не нашел программирование контроллера прерываний!
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Контроллер прерываний с режимом работы процессора вообще никак не связан, поэтому, в принципе, можно его не перепрограммировать, однако тогда придётся исполнять пляски с бубнами, чтобы отличить прерывания, приходящие от внешних устройств через этот самый контроллер, от прерываний, вызванных какими-либо событиями в самом процессоре (ведь Интел зарезервировала первые 32 вектора для нужд процессора, а ИБМ, делая свой ПК, положила на это большой и длинный, использовав изрядную часть векторов как для внешних устройств, так и для вызовов сервисов BIOS). Ну а располагаться таблица векторов прерываний будет там, где прописано в регистре IDTR, который необходимо загружать правильным значением в процессе перевода процессора в защищённый режим. Пример всех этих действий (кроме перепрограммирования контроллера) имеется в интеловском мануале.
     
  7. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    А программирование обычного контроллера прерываний (PIC) описано в целой куче источников. Например, "Программирование на аппаратном уровне" Кулакова. Лично я, когда надо посмотреть что-то, пользуюсь документацией на чипсеты (причём не обязательно на тот чипсет, что используется в моей матери: PIC -- наследие проклятого прошлого, поэтому в любом чипсете он реализован в общем-то одинаково).
     
  8. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    fireman
    цикл статей по протект моде и статья Great поPM или ещё там гдето
     
  9. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    >SII

    Т.е. IDTR - адрес и размер таблицы дескрипторов, а там как и в Реальном по 4 байта дескрипторы т.е. 0х <адрес процедуры обработчика> прерывания. И IRQ0 - это 0-й дескриптор?
     
  10. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    wsd - нашел спасибо :)
    Все есть!
     
  11. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    fireman
    Дескрипторы совсем другие (хотя бы потому, что сегментацию в 32-разрядном защищённом режиме никто не отменял, и адрес обработчика имеет в этом случае длину 6 байт).

    А IRQ0 -- это провод, а не дескриптор. И провод этот идёт не в процессор, а в контроллер прерываний. И на какой дескриптор прерывание по линии IRQ0 будет отображено, зависит от того, как запрограммирован контроллер прерываний.
     
  12. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    по дефолту irq0 - это int 8, но так как первые 0x20 прерываний в PMODE используются/зарезервированы под исключения, то надо программировать контроллер на новые векторвы.
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Полно где вот к примеру на том же http://wiki.osdev.ru/index.php/PIC#ICW2
     
  14. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Или тут, с небольшими доработками:
    http://wiki.xskernel.org/doku.php/hardware/isa/pic