Нужно осуществить вывод символов и рисование линии в режиме 640*480 (256-цв). С помощью режима VGA такое осуществить невозможно. Соответственно, это нужно делать с помощью режима VESA. Но как? Я думал сделать рисование и вывод сначала в режиме VGA в любом разрешении, потом сохранить видеостраницу, на которой в данный момент находится линия и текст, потом задать новый режим (который мне нужен изначально) и восстановить сохраненную видеостраницу уже в режиме 640*480*256, хоть она была сохранена в другом разрешении. Такое вообще осуществимо? Если нет, то как иначе это можно сделать? :я ламо:
maldavan4ik 1) Вывод на экран в какой системе Win или DOS? 2) Пытаешься сдать зачет или пишешь для себя? 3) Что ты подразумеваешь под "режимом VGA"? 11h,12h и 13h режимы? Освой их для начала чтобы "осуществить вывод символов и рисование линии в режиме 640*480" этих режимов вполне хватает
1. Писание под DOS 2. Зачет 3. В режиме VGA при разрешении экрана 640*480 максимальное количество цветов равно 16. А судя по тексту задания нужно именно 256 цветов, не больше и не меньше. В принципе, я уже что-то набросал по этой проге. Вывод изображения и символа нормально происходит в режиме EGA в разрешении 640*350, потом происходит переключение в тот же режим EGA, но уже в разрешении 320*200. Но. Вывод линии осуществляется частично, а вместо адекватных латинских символов вылазит ужасная фигня в виде кракозябры( Щас попробую еще переделать. Если получится нормально, то буду переключать не на EGA-режим, а на VESA.
maldavan4ik Потренеруйся на 11h и 12h режимах прежде чем переходить на SVGA. Вот здесь я делал вывод 256-цветной картинки 640х480 в VESA под DOS - может быть пригодится А в аттаче пример рисования линий под любым углом
А вот я хотел вывести просто линию в режиме 1024 на 768. В этот режим я перешел, но вот по какому адресу выводить пиксселы, я так и непонял. Прочитал следующее, что при выборке видео режима я могу получить адресса окон А и В и еще адресс видеопамяти для защищенного режима. Отсюда вопрос: если этот адресс поместить в дескриптор и потом по нему выводить пикселы, правильно ли это??
спецификацию почитайте все популярно написано если влом читать найдите демо варианты того как это сделали за вас
maldavan4ik, Botanic найдите в Инете или в библиотеке Майкл Абраш "Таинства программирования графики" (Micheal Abrash "Zen of graphics programming")
Вот пример вывода с переключением окон видеопамяти - когда-то игрался с рисованием разных штуковин. Программы работают в режиме 1280х1024 (больше у меня нет с переключением окон. Процедура вывода точки автоматически определяет необходимость переключения текущего окна видеопамяти. После установки видеорежима производится выравнивание логической длины строк до кратности степени двойки - для ускорения расчёта координат. Вторая программа демонстрирует пример нечто вроде анимации и проблем связанных с переключением окон, слева выводится двоичная линейка для обределения координат. Это была лаба, делал товарищу давно. Рисование линий используя эти процедуры, сделать не сложно самому. При изменении видеорежима или разрядности цвета следует пересчитать логическую длину строк (число большее или равное физической длине строки в байтах и равное степени двойки). Соответственно нужно пересчитать и коэффициенты в процедуре вывода точки.
Здесь смотрел http://www.wasm.ru/forum/viewtopic.php?id=26241 Поиск - полезная вещь. Физ. адрес видеобуфера есть в свойствах конкретного видеорежима (спрашивается у VBE).
То, что физический адрес находится в свойствах это я знаю. Я лично делаю следующее Код (Text): mov eax,dword [es:28h] ; сохраняем адрес видеобуфера для PM mov word [descr_video_p+2h],ax shr eax,16 mov byte [descr_video_p+4h],al mov byte [descr_video_p+7h],ah Потом устанавливаю видеорежим Далее в защищенном режиме делаю следующее mov eax,video_pm mov es,ax xor ebx,ebx vp: add ebx,4 mov [es:ebx],dword 130 jmp vp в бесконечном цикле просто вывожу какое-нить число, чтобы увидеть результат))) Но результата нет