Работа с видеокартой через порты (без прерываний)

Тема в разделе "WASM.ASSEMBLER", создана пользователем Programer, 11 июл 2008.

  1. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    Доброго времени суток.
    Стараюсь узнать побольше про ассемблер, но вот проблема, в сети почти ничего нету по данной теме (вернее даже вообще ничего из того, что я хотел бы понять)... Помогите пожалуйста, дело в том, что хочу научиться работать с видеокартой напрямую (без прерываний), но не знаю какой порт за что отвечает (мне хотя бы понять как переключиться в режим 1024*768*16bit (лучше бы конечно на 32 бита) и куда пересылать информацию для отображения на экране ) . Подскажите сайты, где можно было бы это прочитать? Буду очень благодарен.

    P.S. дело в том, что в защищённом режиме первые 30 (или сколько там точно не помню) прерываний стают исключениями, и потому мне очень сложно понять, как работать тогда с прерываниями БИОСа. Потому решил сначала освоить то что мне легче понимается, а уже по-ходу буду осваивать и остальное. :)
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Programer
    Поиском воспользуйся.
    Каждая видео карты прогромируется посвойму. Вовторых производители скрывают документацию на свои видео карты.
    Так что дизассемблируем драйверы и изучаем. Можно порыться в исходниках других ОС, но найдешь переключение видео режимов.

    Все карты являются VGA/EGA совместными вот для них описание портов есть. Но там 640*400 на 256 цветов.

    Лучши воспользоваться прерываниями БИОСа.
    Для этого переключаемся в реальный или виртуальный режимы.
     
  3. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    ок... спасибо...
    Скачал книгу Кулакова, там вроде что-то есть :) Если не найду ничего, то видимо и правда лучше переключаться в какой либо другой режим и юзать прерывания :)
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Лучшее решение установить видео режим до переключения в защищенный режим и использовать его. Ну а если хочется большего то я незнаю чего тебе еще посоветовать. А так я у себя реализовал VM режим для вызова прерываний БИОСА и теперь могу переключять видео режимы.
     
  5. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    А как это в винде все работает?
     
  6. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Vilco
    Известно как... через драйвер от производителя.
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    У майкрософт все козыри. Она диктует свои правила. Она разабатывает стандарты. Причем проблема в том что ее внутренние стандарты становятся общественными.
    Производители оборудования вынуждины сотрудничать с Майкрософт. Есть стандарт DirectX. Драйвера видеокарт тестно завязаны на него.
     
  8. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    а что Video Bios уже отменили?

    Programer -хочешь без прерываний, тогда отладчик в руки, трассируем int10h выдираем нужные участки кода из Rom-имеджа (что по адресу C0000). В перерывах между reset-ами :)

    зы: например, прямым доступом к 3D4h порту таким макаром у меня решилась трабла из за отсутствия доступа к LFB видяхи (Geforce2-4) под NTVDM.

    ззы:
    аппаратнозависимо и примерно както-так
    Код (Text):
    1. outw (0x3D4, 0x571F); //разрешить переключение областей памяти экрана:
    2. outw (0x3D4, 0xNN1D); //NN номера 64kб области экрана (используеться в Put/GetPix)
     
  9. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    пробовал протрасировать прерывания 10h, так вот дело в том, что в какой-то момент мне начинает выдавать непонятные символы (то есть не все, но некоторые из них уже не те, которые должны быть), соответственно трасировку далее продолжать нельзя (ведь всёравно ничего не пойму уже). До этого оно уже успевает дважды переслать значение 10h в порт 3CE. Нормально ли это (то есть это происходит из-за смены таблиц кодировок или типа того)? И как этого можно избежать?
    Спасибо
     
  10. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    слей ром видухи в файл и скорми иде. там даж ниче не пытаются припрятать, по крайней мере ати.
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Давным давно это делали! Без документации все равно толку мало. Исходники Линукса и др. в этом плане значительно больше помогут!
     
  12. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    не совсем понял что значит "скорми иде". ))) Обьясните пожалуйста.

    P.S. А насчёт линукса это хорошая идея... спасибо, я попробую :)
     
  13. Ra_

    Ra_ New Member

    Публикаций:
    0
    Регистрация:
    4 мар 2007
    Сообщения:
    289
    "скорми иде"- воспользоваться программным продуктом под названием IDA.
    IDA - интерактивный дизассемблер. LOL
     
  14. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    )) теперь понятно )) спасибо. (Просто я в ассемблере вообще новичёк, потому не знаком с терминологией :) )
     
  15. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    Я тут так подумал )) а кто мешает мне запомнить вектор данного прерывания и вызывать его потом из защищённого режима вручную (пускай биос за меня думает как ему режимы сменить, а мне тогда не прийдётся с реальным/защищённым режимами играться). Вот только тогда такой вопрос: подскажите пожалуйста где можна найти номера режимов, и адреса памяти, которые соответствуют разным режимам...
    Заранее благодарен.
     
  16. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    так делать нельзя :) А BIOS32 имеется в наличии не всегда
     
  17. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Мешают тебе разработчики BIOS :)
    Весь код обработчика рассчитан на 16-битный RealMode.
    Во-первых в сегментные регистры обработчик заносит сегментные адреса, а в PM нужны селекторы - это уже #GPF.
    Во-вторых если у тедя 32-битный PM то код вообще неправильно будет выполняться т.к. он 16-битный.
    Вместо xor ax,ax будет xor eax,eax - но это самый безобидный пример.
    Для вызова BIOS надо V86 использовать.
    А работать через порты не выгодно.
    Даже на GeForce разных версий принципы работы меняются (не значительно, но меняются), а если взять во внимание все видеокарты которые уже выпускаются и будут выпускаться - ты просто не сможеш для каждой написать драйвер.
     
  18. Programer

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    Ок... понятно, значит реалмод обязателен для смены режима.... Ладно, это не большая жертва... ))
    Подскажите пожалуйста тогда есть ли в БИОСе поддержка чего-то красивее чем VGA режим (хотя бы SVGA), а то я в нэте никак не могу найти этого... То есть нашёл описание десятого прерывания, но там описано как перейти в режимы 320*200 и 640*480 (проде так) и не более (не говоря уже что меня не устраивает 256цветная система )) )
    Буду очень благодарен за ответы.
     
  19. Pavia

    Pavia Well-Known Member

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

    Programer New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    19
    Pavia
    хм... с английским жалко не очень дружу... Но смотрю там есть о чём почитать )) Спасибо :)