Возможно ли использовать обработчики прерываний Real Moda в Protected Mode
Заранее спасибо.
Mail [EMAIL]ksicom@rambler.ru[/EMAIL]
Тоже пишу свою ОС (Pr0tectedM0de).
Тоже проблемы с SVGA (aka VESA).
Как например винда программит VESA
например как меняет режимы переключает
банки видео, и т.д.
А про обработчики прерываний RM в PM думаю
так - стандартный обработчик прерываний сидит
в BIOS, и пашет только в RM (я так думаю),
конечно можно высчитать его адрес и заполнить
дескриптор в IDT так как надо, ну и что из
этого если стандартный обработчик шпарит только в RM ? Как например в PM исполнится инструкция mov ax, es[di]?
Best regardz from Acid JAM
mailto [EMAIL]jamk@mail.ru[/EMAIL]
Моно оно конечно моно - токе придёться в PM конкретно разобраться, что касается шлюзов, ловушек и прочее... А вообще, чтоб нормально с прерываниями работать в PM надо бы idtr (lidt [addr]) настроить нужными адресами обработчиков. Есть однако, средство не париться со всем этим - не реальный режим - хотя для ОС (в весовой категории Windows or Unix) не очень подходит.
Щлюзы, ловушки и т.д. - это уже на финальной стадии подключения процедуры обработчика. Но ее нужно сначала написать!!! Для всевозможных дисковод, клавиатур, COM, LPT, PS/2, USB все просто. Там существуют закрепленные за ними порты. А вот с VESA по другому: каждая фирма прошивает BIOS видеокарты по своему. Стандарта на порты, как это было с VGA, нет. И ко всему прочему тела этих процедур написаны для Real Mode. Поэтому основная задача - выделить номера портов из процедур Real Moda. Хотя в настройках Winda я где-то видел что-то типа "чтение таблицы IRQ для защищенного режима из BIOS". Если кто-то знает как он это делает напишите пожалуйста.
А Вы ничего об UNREAL MODE не слышали? - Это когда из защищённого обратно в реальный - получается весьма интересная штука... Кароче посмотрите инфу по этому поводу - может быть пойдёт...
Цитата:
On 2001-11-29 1200, Anonymous wrote
А Вы ничего об UNREAL MODE не слышали? - Это когда из защищённого обратно в реальный - получается весьма интересная штука... Кароче посмотрите инфу по этому поводу - может быть пойдёт...
UNREAL MODE - это вход в PM изменнение размеров сегментов до 4Г и возврат в реальный режим без перегрузки сегментных регистров. След. в реальном режиме возможно использовать большие сегменты (больше 64К). Сам не пробовал, но слышал. Первый о такой возможности упомянул Р.Коллинз.
UNREAL MODE это конечно здорово, но размер 4Gb после перехода могут иметь только сегменты данных, а CODESEGи так и остаются 64KBайтными. И никакой тебе многозадачности и прочей ерунды, над которой интересно поломать голову.
или через специальный интерфейс защищенного режима предоставляемый одной из подфункций VBE 2.0. В последнем случае возвращается структура линейных адресов VESA-вских функций, которые можно вызывать из PROTECTED MODE.Переключение банков памяти советую похоронить т.к. лучше использовать LFB (Linear Frame Bufer).
Muromec ...
email [EMAIL]htmme@yandex.ru[/EMAIL]
Цитата:
On 2001-11-08 0641, AcidJAM wrote
Похожая проблема !!
Тоже пишу свою ОС (Pr0tectedM0de).
Тоже проблемы с SVGA (aka VESA).
Как например винда программит VESA
например как меняет режимы переключает
банки видео, и т.д.
А про обработчики прерываний RM в PM думаю
так - стандартный обработчик прерываний сидит
в BIOS, и пашет только в RM (я так думаю),
конечно можно высчитать его адрес и заполнить
дескриптор в IDT так как надо, ну и что из
этого если стандартный обработчик шпарит только в RM ? Как например в PM исполнится инструкция mov ax, es[di]?
Best regardz from Acid JAM
mailto [EMAIL]jamk@mail.ru[/EMAIL]
Так, во первых винда VESA не пользуется, там за графику отвечает DirectX (точнее directDraw), который пишет данные прямо в память устройств (поэтому он быстрее чем LFB в VESA).
Во вторых вызвать прерывание реального режима из ProtMode можно через V86 (режим виртуального 86 процессора). Кто нибудь тут ваще про V86 слыхал? А то тут долго писать...
А про прерывания... Почему-то мне кажется, что работать не будет, даже если настроить систему прерываний в защищенном режиме. Они по-любому где-нибудь да и обращаются по адрессам типа сегм:смещ, что не прокатит в РМ. А вот в v86 должно работать. Тока ето такая лабуда, я пробовал - забил....
Насчет того, как в PM запускать обработчик RM. Винда(98) это делает сто раз, например - вызывает ЛЮБОЙ довесок-резидент на int 13h, зацепившийся из autoexec.bat. Или тот же русификатор из autoexec.bat. Конкретно вроде вызывается сервис какого-то там vxd. Также соответсвующие сервисы есть у DPMI(хоть из dos, хоть под вин) - они тоже способны вызвать обработчик RM. Делается это вроде через переключение в режим V86, на соотвественно описанную задачу(TASK). Подробнее можно прочесть у Финогенова - у него даже есть пример простого PM-менеджера, вызывающего из себя int 10h. Или протрассировать любой вызов прерывания из дос-окошка под виндами.
Цитата:
В защищенном режиме прерывания реального режима работать не будут. Например при выполнении инструкции mov ds,ax в обработчике прерывания либо будет загружен неправильный селектор либо вообще произойдет исключение общей защиты по причине недопустимого селектора сегмента. Я считаю, что обработчик прерывания должен переводить процессор из защищенного режима в реальный, помещать в стек адрес возврата на "свою" процедуру и командой jmp прыгать на процедуру BIOS-овского обработчика. При воврате из прерывания на "свою" процедуру эта процедура переводит процессор обратно в защищенный режим.