![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
В режиме 640 на 480 видеопамять состоит из 4 цветовых слоёв. Которые в оперативной памяти расположены... по одному и тому же адресу! Для доступа к тому или иному слою надо записать какое-то значение в порты. Но тогда получается, что физическое расположение видеопамяти - это вовсе не $A000: $0000, ведь иначе один слой затирал бы информацию о другом. Можно ли обратиться к видеопамяти ещё более непосредственно, минуя механизм обращения по известному адрему? Или это на уровне железа так сделано, и по другому никак? Ведь помню, когда с портами баловался - экран покрывался цветными пятнами, причём разрешение экрана было довольно высокое.
-------------------- |
![]() ![]() |
andriano |
![]()
Сообщение
#2
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Гость,
Вроде программирование VGA достаточно подробно описано Фроловыми по ссылке, которую привел Оззя. Если же говорить об эффективных способах использования 16-цветных режимах (которые по определению неэффективны), то можно вделить 2 момента: - единственный действительно эффективный режим, позвояющий быстро залить экран одним цветом, т.к. запись возможна одновременно во все цветовые плоскости - при записи одного бйта заполняется до 4 байт видеопамяти. - режим, в котором записываемый байт поворачивается перпендикулярно цветовым плоскостям. При этом пискель (4 бита) пишется за одно обращение к видеопамяти, а номер пикселя из 8 расположенных по одному адресу выбирается регистром маски. Такой способ попиксельной графики в 2.5-3 раза быстрее стандартного. По поводу изучения VGA и быстрого устаревания этой инфомации - полностью согласен. По поводу регистра GS. Дело в том, что в реальном и защищенном режимах по-разному трактуется содержимое сегментного регистра. Если в защищенном - это селектор, т.е. просто адрес в таблице, то в реальном - это физический адрес, сдвинутый на 4 разряда. Поэтому GS с правильно установленным селектором в защищенном режиме при переходе в реальный НЕ БУДЕТ указывать на видеопамять. Единственная польза, которую можно извлечь из такой операции - преодоление ограничения на размер сегмента (и, соответственно,Ю смещения) в 65536 байт. Т.е. По этому сегменту, если установить его в 0, можно только смещением адресовать 4 Гб адресного пространства, используя префиксы $66 и $67. Ну а получив с помощью VESA физический адрес линейного видеобуфера, можно писать в него, испольуя 4-гбайтный сегмент. Т.е. теоретически из приложения реального режима можно использовать линейный видеобуфер, но техника чуть отличается от описанной. |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 0:16 |