Выход и PM

Тема в разделе "WASM.OS.DEVEL", создана пользователем NoName, 21 ноя 2007.

  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    При выходе из защищенного режима возникают проблемы.
    В случае 0-го кольца все нормально. Если я захожу в tss(3 уровень), то потом уже нормально в дос почему то не выйти. Все выходит но клава перестает реагировать, хотя я её не трогаю.
    Подскажите пж-та как решить эту проблему. Выхожу через шлюз вызова в 16-ти разрядный сегмент кода как обычно, а потом в реальный режим.
     
  2. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    После выхода из PM привилегии остаются теми же, поэтому обработчику IRQ1 запрещено обращаться к портам, -> должно быть зависание из-за невозможности обработать #GP, из-за отсутствия его обработчика.
    Попробуй сначала установить IOPL=3,хотя я думаю, что может не прокатить.
     
  3. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    У меня в tss как раз iopl = 3. Если выходить из tss (PL = 3) через шлюз вызова в кольцо 0, тоже криво получается. 16-ти разрядный сегмент защищенного режима в который я пытаюсь по разному выйти имеет PL = 0.
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Таблица векторов прерываний для 16 бит настроена? IDTR на нее ссылается?
     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    да, состояние процессора полностью идентично тому которое было перед входом кроме eip. Проверяю в bochs. Даже clts вызываю.
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Раз состояние процессора идентично, то, вероятно, проблема в памяти. IMHO для отладки самое простое -- повесить свой обработчик прерывания от клавиатуры (я так понимаю, проблема только в это сейчас) чтобы выяснить, приходит ли прерывание, или нет. Правда, если речь идет про Bochs, то можно просто попросить ее показывать прерывания, командой show int, кажется.
     
  7. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Чтобы гарантированно исключить побочные эффекты при переходе в PM и обратно можно
    возвращаться в реалмоде через INIT# .Методика простая - выставляем наш проц в APIC_BASE_MSR как AP. Выполняем mov al,0FEh out 64h,al. Тут же посылаем сами себе SIPI#
    с нужным вектором. В рез-те имеем почти полный сброс проца, ну кроме некоторых внутренних структур, и оказываемся в реалмоде. Если кейборда так же глючит - проблема в обработчике IRQ1, иначе думаем дальше :)
     
  8. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    NoName
    попробуй после возврата в реальный режим сделать IN AL,60H