Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вывод в видеопамять.real mode

12K
11 января 2010 года
ASoftware
87 / / 16.04.2009
У меня сразу несколько вопросов:
1) Всем известно что видеопамять находиться по адресу 0xA000. Почему тогда для вывода простой точки на экран нельзя сделать так:

 
Код:
mov di,0xA000
mov al,64
stosb

?
Это касается режима 13h. У него буфер как раз 64000 байт.
Пробовал, ничего не получилось.Смотрел несколько примеров, но ни одного рабочего не попалось. В них используется сегментные регистры, - зачем они нужны?
Эсли можно и кому не влом, может покажете минимизированный пример вывода точки в 13h ? (именно прямой вывод в видеопамять)

2) Как программировать видеокарту в защищенном режиме? Через порты? Много раз слышал что типа для каждой карты надо свой драйвер...Но почему тогда BIOS какую бы карту не вставил он все равно тебе что то выведет на экран и без драйверов?
Или это все делается с помощью прерываний?
399
11 января 2010 года
KIV
432 / / 20.01.2009
В real mode регистры 16-разрядные, этого не достаточно чтобы адресовать 1 МБ памяти который доступен в real mode. Чтобы обойти эту проблему без увеличения размера регистров (для сохранения обратной совместимости) были введены сегментные регистры памяти и адрес стал вычислятся по формуле:
сегмент * 16 + смещение, где сегмент - один из сегментных регистров, а смещение базовый или индексный регистр (или их комбинация или непосредственное значение). Физический адрес видео буфера - 0xA0000. Поэтому в сегментный регистр нужно поместить 0xA000 и писать по адресу сегментный_регистр:0 для записи по адресу 0xA0000 (или сегментный регистр:1 для адреса 0xA0001). Всего 4 сегментных регистров (у процессоров не поддерживающих защищенный режим): cs, ds, es, ss. CS и SS менять без необходимости не следует, а DS или ES пожалуйста. Вот ваш исправленный пример:
 
Код:
mov ax, 0xA000
mov es, ax
mov al, 64
xor di, di ; mov di, 0
stosb
12K
11 января 2010 года
ASoftware
87 / / 16.04.2009
Спасибо за подробное объяснение!
+1 !

А кто нибудь знает как на счет второго вопроса? ..
399
11 января 2010 года
KIV
432 / / 20.01.2009
У видео-карты есть свой BIOS, который совмещается с BIOS материнской платы. Таким образом ты покупая новую видео-карту меняешь и код BIOS управляющий ей. Да, для каждой видео-карты нужен свой драйвер. Или через прерывания BIOS (таким образом ты будешь обращатся к BIOS-драйверу видео-карты). Можно поискать насчет совместимости с VGA. Может и есть (наверняка есть) какие то регистры имеющиеся у всех видео карт. Есть 32-битные функции BIOS указатели на которые можно получить с помошью специальной функции в реальном режиме. Функции управления видео-картой насколько я помню там тоже есть (смотри про VESA). Также можно вызывать 16-битные функции BIOS из виртуального режима.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог