OSDev http://osdev.su/ |
|
Программирование видеоадаптера в защищённом режиме http://osdev.su/viewtopic.php?f=7&t=348 |
Страница 1 из 4 |
Автор: | s3dworld [ 27 окт 2010, 15:43 ] |
Заголовок сообщения: | Программирование видеоадаптера в защищённом режиме |
Всем доброго дня! Пока меня не интересует графический режим работы видеоадаптера. Для записи символов напрямую в видеопамять в защищённом режиме (P-Mode) работы процессора, можно ли воспользоваться диапазоном адресов, начиная с адреса 0x0000B800? Собственно меня интересует, как без BIOS прерываний я могу выводить текстовую информацию на экране монитора. Как установить разрешение, как установить номер активной странички и прочее. |
Автор: | s3dworld [ 27 окт 2010, 17:16 ] |
Заголовок сообщения: | Re: Программирование видеоадаптера в защищённом режиме |
Опа, вот это новость. Пролистал сейчас книгу "Программирование аппаратных средств в Windows", а именно про программирование видеоконтроллера: Это что, серьёзно? Возгорание? Это для всех мониторов или для определённого типа? У меня с электронной-лучевой трубкой. Я тут подумал, это что-же получается, что испытывая какую-то новую операционную систему (которых сейчас полным полно), я рискую оборудованием? |
Автор: | s3dworld [ 27 окт 2010, 18:54 ] |
Заголовок сообщения: | Re: Программирование видеоадаптера в защищённом режиме |
Стал я сомневаться что можно так просто засунуть данные в 0x0000B800 и получить тут же текст на экране. У меня этот диапазон данных определился как свободно используемый для операционной системы, обозначающий оперативную память (ОЗУ), а не видеопамять. |
Автор: | phantom-84 [ 27 окт 2010, 19:50 ] |
Заголовок сообщения: | Re: Программирование видеоадаптера в защищённом режиме |
Ты что вообще не в теме? Такое ощущение, что тебя выдернули из VS и дали тех. задание освоить необъятные просторы осдева. "Стандартная" для цветных текстовых режимов память отображается по адресам 0xB8000. Но это исторические заморочки. На самом деле сейчас нужно ориентироваться на VGA-совместимость, а значит можно программировать контроллер на отображение видеопамяти, также начиная с адреса 0xA0000 и 0xB0000. Я к примеру использую первый вариант. Отображение на экране вообще может быть запрограммировано, начиная с любой позиции знакоместа в памяти, и даже из двух разных мест. Смещение 16-разрядное, поэтому может быть охвачен весь стандартный 128-килобайтный диапазон адресов. |
Автор: | s3dworld [ 27 окт 2010, 20:45 ] |
Заголовок сообщения: | Re: Программирование видеоадаптера в защищённом режиме |
Тогда я не понимаю. Я с помощью функции 0xE820 прерывания 0x15 определяю участки, принадлежащие к оперативной памяти (ОЗУ). И у меня получается что адрес 0x0000B800 принадлежит к ОЗУ, а не к видеопамяти. Я чего-то не понимаю? |
Автор: | SII [ 27 окт 2010, 21:22 ] |
Заголовок сообщения: | Re: Программирование видеоадаптера в защищённом режиме |
Где полный вывод определялки карты памяти? Причём в шестнадцатеричном виде -- читать десятичный никому не интересно, когда речь идёт об адресах. |
Автор: | s3dworld [ 27 окт 2010, 22:28 ] |
Заголовок сообщения: | Re: Программирование видеоадаптера в защищённом режиме |
Для эмуляции я использую Bochs. Настройки памяти там у меня стоят следующие: То есть я использую 32 МБ памяти ОЗУ. Не знаю для чего там другие 32 МБ. Вызываю функцию девять раз. Картина следующая: Если перевести всё в адреса, то получаются такие вот участки: 1. 0x00000000 - 0x0009EFFF. Можно использовать в ОС. Размер 651264 байта (636 КБ). 2. 0x0009F000 - 0x0009FFFF. Нельзя использовать в ОС. Размер 4096 байт (4 КБ). 3. 0x000E8000 - 0x000FFFFF. Нельзя использовать в ОС. Размер 98304 байта (96 КБ). 4. 0x00100000 - 0x01FEFFFF. Можно использовать в ОС. Размер 32440320 байт (31680 КБ). 5. 0x01FF0000 - 0x01FFFFFF. Нельзя использовать в ОС. Размер 65536 байт (64 КБ). 6. 0xFFFC0000 - 0xFFFFFFFF. Нельзя использовать в ОС. Размер 262144 байта (256 КБ). Доступная память составляет 33091584 байта (651264 байта + 32440320 байт), то есть 32316 КБ (что практически является 31.5 МБ). Не доступная память составляет 430080 байт (4096 байт + 98304 байта + 65536 байт + 262144 байта), то есть 420 КБ. То есть всего у нас 33521664 байта (33091584 байта + 430080 байт), то есть 32736 КБ (практически 31.9 МБ). Хорошо, большая часть мне доступна для использования. А вот адрес видеоадаптера 0x0000B800 лежит в пределах от 0x00000000 до 0x0009EFFF. Так что же это получается? Это ведь ОЗУ, а не видеопамять, спроецированная на адресную память. Или я чего-то не понимаю? Может в реальном режиме (R-Mode) адрес 0x0000B800 и будет началом видеобуфера, а в защищённом режиме (P-Mode) это будет память ОЗУ. То есть придётся вывод на экран обрабатывать через порты. В общем, я запутался. Подскажите мне истину во всём этом. Я ведь ОЗУ же определял, причём тут видеопамять. |
Автор: | SII [ 27 окт 2010, 22:39 ] |
Заголовок сообщения: | Re: Программирование видеоадаптера в защищённом режиме |
Видеопамять графического режима лежит с адреса 0A8000, а текстового -- с 000B8000, а отнюдь не с B800. Это сегмент в реальном режиме обычно равен B800, но он же сдвигается влево на 4 бита при вычислении физического адреса. |
Автор: | s3dworld [ 27 окт 2010, 22:42 ] |
Заголовок сообщения: | Re: Программирование видеоадаптера в защищённом режиме |
SII писал(а): Видеопамять графического режима лежит с адреса 0A8000, а текстового -- с 000B8000, а отнюдь не с B800. Это сегмент в реальном режиме обычно равен B800, но он же сдвигается влево на 4 бита при вычислении физического адреса. Спасибо большое! Я про это не знал. Значит видеопамять для графического режима начинается по адресу 0x000A8000, а где заканчивается? Видеопамять для текстового режима начинается по адресу 0x000B8000, а где заканчивается? А переключение режимов и прочее, осуществляется через запись значений в регистры, спроецированные в память или через порты? |
Автор: | phantom-84 [ 27 окт 2010, 22:52 ] |
Заголовок сообщения: | Re: Программирование видеоадаптера в защищённом режиме |
Ну ё... Посты читай внимательнее. |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |