OSDev

для всех
Текущее время: 14 окт 2024, 20:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: 27 окт 2010, 15:43 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Всем доброго дня!

Пока меня не интересует графический режим работы видеоадаптера. Для записи символов напрямую в видеопамять в защищённом режиме (P-Mode) работы процессора, можно ли воспользоваться диапазоном адресов, начиная с адреса 0x0000B800?

Собственно меня интересует, как без BIOS прерываний я могу выводить текстовую информацию на экране монитора. Как установить разрешение, как установить номер активной странички и прочее.

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2010, 17:16 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Опа, вот это новость. Пролистал сейчас книгу "Программирование аппаратных средств в Windows", а именно про программирование видеоконтроллера:

Изображение

Это что, серьёзно? Возгорание? Это для всех мониторов или для определённого типа? У меня с электронной-лучевой трубкой.

Я тут подумал, это что-же получается, что испытывая какую-то новую операционную систему (которых сейчас полным полно), я рискую оборудованием?

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2010, 18:54 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Стал я сомневаться что можно так просто засунуть данные в 0x0000B800 и получить тут же текст на экране. У меня этот диапазон данных определился как свободно используемый для операционной системы, обозначающий оперативную память (ОЗУ), а не видеопамять.

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2010, 19:50 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Ты что вообще не в теме? Такое ощущение, что тебя выдернули из VS и дали тех. задание освоить необъятные просторы осдева. "Стандартная" для цветных текстовых режимов память отображается по адресам 0xB8000. Но это исторические заморочки. На самом деле сейчас нужно ориентироваться на VGA-совместимость, а значит можно программировать контроллер на отображение видеопамяти, также начиная с адреса 0xA0000 и 0xB0000. Я к примеру использую первый вариант. Отображение на экране вообще может быть запрограммировано, начиная с любой позиции знакоместа в памяти, и даже из двух разных мест. Смещение 16-разрядное, поэтому может быть охвачен весь стандартный 128-килобайтный диапазон адресов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2010, 20:45 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Тогда я не понимаю. Я с помощью функции 0xE820 прерывания 0x15 определяю участки, принадлежащие к оперативной памяти (ОЗУ). И у меня получается что адрес 0x0000B800 принадлежит к ОЗУ, а не к видеопамяти. Я чего-то не понимаю?

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2010, 21:22 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1426
Где полный вывод определялки карты памяти? Причём в шестнадцатеричном виде -- читать десятичный никому не интересно, когда речь идёт об адресах.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2010, 22:28 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Для эмуляции я использую 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) это будет память ОЗУ. То есть придётся вывод на экран обрабатывать через порты.

В общем, я запутался. Подскажите мне истину во всём этом. Я ведь ОЗУ же определял, причём тут видеопамять.

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2010, 22:39 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1426
Видеопамять графического режима лежит с адреса 0A8000, а текстового -- с 000B8000, а отнюдь не с B800. Это сегмент в реальном режиме обычно равен B800, но он же сдвигается влево на 4 бита при вычислении физического адреса.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2010, 22:42 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
SII писал(а):
Видеопамять графического режима лежит с адреса 0A8000, а текстового -- с 000B8000, а отнюдь не с B800. Это сегмент в реальном режиме обычно равен B800, но он же сдвигается влево на 4 бита при вычислении физического адреса.

Спасибо большое! Я про это не знал.

Значит видеопамять для графического режима начинается по адресу 0x000A8000, а где заканчивается? Видеопамять для текстового режима начинается по адресу 0x000B8000, а где заканчивается?

А переключение режимов и прочее, осуществляется через запись значений в регистры, спроецированные в память или через порты?

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2010, 22:52 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Ну ё... Посты читай внимательнее.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB