VESA-режим

Тема в разделе "WASM.BEGINNERS", создана пользователем maldavan4ik, 17 июн 2008.

  1. maldavan4ik

    maldavan4ik New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2008
    Сообщения:
    4
    Нужно осуществить вывод символов и рисование линии в режиме 640*480 (256-цв). С помощью режима VGA такое осуществить невозможно. Соответственно, это нужно делать с помощью режима VESA. Но как? Я думал сделать рисование и вывод сначала в режиме VGA в любом разрешении, потом сохранить видеостраницу, на которой в данный момент находится линия и текст, потом задать новый режим (который мне нужен изначально) и восстановить сохраненную видеостраницу уже в режиме 640*480*256, хоть она была сохранена в другом разрешении. Такое вообще осуществимо? Если нет, то как иначе это можно сделать? :я ламо:
     
  2. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    maldavan4ik
    1) Вывод на экран в какой системе Win или DOS?
    2) Пытаешься сдать зачет или пишешь для себя?
    3) Что ты подразумеваешь под "режимом VGA"? 11h,12h и 13h режимы? Освой их для начала чтобы "осуществить вывод символов и рисование линии в режиме 640*480" этих режимов вполне хватает;)
     
  3. maldavan4ik

    maldavan4ik New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2008
    Сообщения:
    4
    1. Писание под DOS
    2. Зачет
    3. В режиме VGA при разрешении экрана 640*480 максимальное количество цветов равно 16.
    А судя по тексту задания нужно именно 256 цветов, не больше и не меньше.

    В принципе, я уже что-то набросал по этой проге. Вывод изображения и символа нормально происходит в режиме EGA в разрешении 640*350, потом происходит переключение в тот же режим EGA, но уже в разрешении 320*200. Но. Вывод линии осуществляется частично, а вместо адекватных латинских символов вылазит ужасная фигня в виде кракозябры(
    Щас попробую еще переделать. Если получится нормально, то буду переключать не на EGA-режим, а на VESA.
     
  4. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    maldavan4ik
    Потренеруйся на 11h и 12h режимах прежде чем переходить на SVGA. Вот здесь я делал вывод 256-цветной картинки 640х480 в VESA под DOS - может быть пригодится
    А в аттаче пример рисования линий под любым углом
     
  5. Botanic

    Botanic New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    4
    А вот я хотел вывести просто линию в режиме 1024 на 768. В этот режим я перешел, но вот по какому адресу выводить пиксселы, я так и непонял. Прочитал следующее, что при выборке видео режима я могу получить адресса окон А и В и еще адресс видеопамяти для защищенного режима.
    Отсюда вопрос: если этот адресс поместить в дескриптор и потом по нему выводить пикселы, правильно ли это??
     
  6. reversecode

    reversecode Guest

    Публикаций:
    0
    спецификацию почитайте
    все популярно написано
    если влом читать
    найдите демо варианты того как это сделали за вас
     
  7. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    maldavan4ik, Botanic найдите в Инете или в библиотеке Майкл Абраш "Таинства программирования графики" (Micheal Abrash "Zen of graphics programming")
     
  8. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Вот пример вывода с переключением окон видеопамяти - когда-то игрался с рисованием разных штуковин. Программы работают в режиме 1280х1024 (больше у меня нет:) с переключением окон.
    Процедура вывода точки автоматически определяет необходимость переключения текущего окна видеопамяти. После установки видеорежима производится выравнивание логической длины строк до кратности степени двойки - для ускорения расчёта координат.
    Вторая программа демонстрирует пример нечто вроде анимации и проблем связанных с переключением окон, слева выводится двоичная линейка для обределения координат. Это была лаба, делал товарищу давно.
    Рисование линий используя эти процедуры, сделать не сложно самому. При изменении видеорежима или разрядности цвета следует пересчитать логическую длину строк (число большее или равное физической длине строки в байтах и равное степени двойки). Соответственно нужно пересчитать и коэффициенты в процедуре вывода точки.
     
  9. Botanic

    Botanic New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    4
    То что вы выложили, работает в реальном режиме, а я хотел бы вывести линию в защищенном режим))
     
  10. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Здесь смотрел http://www.wasm.ru/forum/viewtopic.php?id=26241
    Поиск - полезная вещь.
    Физ. адрес видеобуфера есть в свойствах конкретного видеорежима (спрашивается у VBE).
     
  11. Botanic

    Botanic New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    4
    То, что физический адрес находится в свойствах это я знаю. Я лично делаю следующее
    Код (Text):
    1. mov eax,dword [es:28h]    ; сохраняем адрес видеобуфера для PM
    2.  
    3. mov word [descr_video_p+2h],ax
    4. shr eax,16
    5. mov byte [descr_video_p+4h],al
    6. mov byte [descr_video_p+7h],ah
    7.  
    8. Потом устанавливаю видеорежим
    9.  
    10. Далее в защищенном режиме делаю следующее
    11.  
    12. mov eax,video_pm
    13. mov es,ax
    14.  
    15.     xor ebx,ebx
    16.   vp:
    17.     add ebx,4
    18.     mov [es:ebx],dword 130
    19.     jmp vp
    в бесконечном цикле просто вывожу какое-нить число, чтобы увидеть результат)))
    Но результата нет
     
  12. reversecode

    reversecode Guest

    Публикаций:
    0
    ботаник читай спецификацию
    и делай как написано
    а не как тебе думаеться