Программирование в DPMI

Тема в разделе "WASM.ZEN", создана пользователем VanyaVane4ka, 8 мар 2007.

  1. VanyaVane4ka

    VanyaVane4ka New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    4
    Кто-нить знающий подскажите. Пишу программу на асме в учебных целях, которая должна выводить на экран
    в графическом режиме 1024х768х15бит через LFB.
    Прога стартует под виндой как обычное ДОС-приложение. Через прерывания узнает параметры видеоадаптера
    (32-битный физический адрес LFB, объем видеопамяти и т.д.). Затем с помощью DPMI переходит в защищенный режим.
    Строит дескрипторы 32-битных сегментов кода и данных и загружает их. Но дескриптор, описывающий видеопамять
    никак не хочет строиться. (В смысле он строится, но при обращении к видеопамяти вылезает необрабытываемое
    исключение). В DPMI есть функция отображения физического адреса в линейный. Так вот: она никак не хочет
    отображать физический адрес LFB в линейный. Я всяко уже пробовал. А без отображения тоже ничего не работает: при попытке
    записи в видеопамять вылезает:"необрабатываемое исключение х=0Dh". В общем проблема такого плана:
    как использовать LFB под Виндой в ДОС-программе на асме с DPMI (в смысле как построить дескриптор, описывающий LFB).
    Желательно киньте кусок реально работающего кода на асме и объясните что к чему.
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Когда то давно под чистым ДОС дотягивался до LFB просто из нулевого сегмента без перехода в защищённый режим и насколько помню (хотя мог и что-то забыть) удавалось обойтись одними префиксами размера, даже без махинаций с теневыми дескрипторами сегментов :) Есно под Виндой это не катит.
    Но раз у тебя есть рабочий 32-битный сегмент данных, то что мешает адресовать видеопамять из него? Он же перекрывает все 4Гига.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    база 0000B800 насколько я помню, лимит - 0000FFFF.
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Great
    Не, он про это спрашивает :)
     
  5. VanyaVane4ka

    VanyaVane4ka New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    4
    Спасибо за совет. Сегодня попробую. Если не получится, то снова буду спрашивать)))
     
  6. VanyaVane4ka

    VanyaVane4ka New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    4
    Я пробовал создать 4 Гб сегмент данных и адресоваться из него к LFB, но ничего не получается. Вылазит необрабатываемое исключение. Что делять? Для справки: у меня WinXP
     
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
  8. VanyaVane4ka

    VanyaVane4ka New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    4
    А под чистой WInXP никак нельзя работать с LFB?
     
  9. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Это #GP. Я с этим тоже сталкивался. Моё решение в аттаче.
     
  10. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Вообще, b800 - это сегментный адрес в реальном режиме окна видеопамяти. Для дескриптора база должна быть в 16 раз больше, т.е. b8000
     
  11. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Вот пример работы с LFB с использованием резидента из поста #9.
     
  12. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Автору темы следует найти Allegro library, версию для DJGPP. Эта библиотека поставляется в исходниках и предназначена именно для работы в PM (а DJGPP, собственно, только для PM и компилит). Там есть работа и с LFB, и в режимах с переключением страниц.