OSDev

для всех
Текущее время: 29 апр 2024, 10:13

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Графический режим
СообщениеДобавлено: 25 май 2011, 16:34 

Зарегистрирован: 02 янв 2011, 12:05
Сообщения: 7
Не знает ли кто-нибудь , как уже будучи в протектед режиме (multiboot-подобный загрузчик) включить граф. режим ? (svga)
Подкиньте хотя бы доков на эту тему (или хотя бы на тему перехода из протектед режима в реальный, если это возможно)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический режим
СообщениеДобавлено: 25 май 2011, 19:16 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Всё, касающееся переходов между режимами процессора, описано тыщу раз в тыще руководств и статей. В частности, абсолютно все необходимое имеется в интеловском и АМДшном мануалах. Ну а если самому искать и вникать лениво, то мы тут уже бессильны...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический режим
СообщениеДобавлено: 25 май 2011, 19:33 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Если используется multiboot-подобный загрузчик, то можно попробовать включить графический режим самим загрузчиком, задав соответствующие параметры. Сам не пробовал.

Есть несложный способ перехода в реал, путём сброса процессора. Предварительно в ячейку 0x467 надо записать адрес старта кода реального режима (в ячейке смещение и сегмент по 16 бит). Ещё надо обнулить базу IDT.
Потом в CMOS записывается код режима перезагрузки, а в контроллер клавиатуры сигнал сброса.
//Set RM
//Set restart pointer
*(long*)0x467 = <сегмент> * 0x10000 + <смещение>;
//Set IDT base to 0
_asm xor eax,eax
_asm mov dword ptr [pIDT+2],eax //База IDT
_asm lidt fword ptr [pIDT]

outp(0x70, 0x8F); //CMOS - restart attrib and disable NMI
outp(0x71, 5);

_asm push 0
_asm popfd
_asm clts
outp(0x64, 0xFE); //Сброс
_asm hlt


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический режим
СообщениеДобавлено: 25 май 2011, 20:46 

Зарегистрирован: 19 май 2011, 14:54
Сообщения: 73
Переключение графического режима проще всего делать с помощью BIOS. Про переключение из protected mode в real mode с целью вызовов BIOS дискуссия была на этом сайте в viewtopic.php?f=6&t=416.

Непосредственно ссылка переход из protected в real mode: http://www.sudleyplace.com/pmtorm.html
В качестве справочника можно также использовать исходники GRUB/stage2/asm.S
В этом файле есть функции real_to_prot, prot_to_real. А также примеры использования их, в частности для обращения к int 0x10.

Кроме того, неплохой пример с графикой в защищенном можно посмотреть: http://www.wasm.ru/article.php?article=lfbdos


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический режим
СообщениеДобавлено: 26 май 2011, 14:05 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Diger, я понял суть твоего вопроса. Дам направление, куда копать. У тебя есть только следующие возможности:
1. Временное переключение из Protected Mode в Real Mode для вызова соответствующей функции BIOS. Это самый простой, но не самый хороший способ.
2. Virtual 86 в защищённом режиме и вызов в нём функций BIOS. Требует создания соответствующего обработчика исключений, дескриптора задачи и механизма коммуникации с процессом V86. Посложней будет, да и в 64-битном режиме V86 не поддерживается.
3. Напрямую работать с железом (регистрами) видеокарты. Т.е. писать (мини)драйвер видюшки.
4. Если VESA BIOS Extention (VBE) видюшки поддерживает защищённый режим, можно воспользоваться им.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Последний раз редактировалось Yoda 27 май 2011, 13:41, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический режим
СообщениеДобавлено: 27 май 2011, 10:38 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Извините, если не по теме, но...
Сама ОС будет работать в PM или RM?
Если в PM, то драйвер все равно нужен. Может, сначала загрузить его? А если в RM, то какой смысл в ГРАБ?

Кстати, в стандарте VBE3 есть понятие PM entry point. Можно использовать вместо прерывания 10. Правда, не у всех BIOS оно есть. Подробнее см. здесь: http://www.petesqbsite.com/sections/tutorials/tuts/vbe3.pdf на странице 29 в акробатном исчислении.

Еще графический режим хорошо описан у Пирогова В. Ю., но там надо копаться.

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический режим
СообщениеДобавлено: 30 май 2011, 10:28 

Зарегистрирован: 02 янв 2011, 12:05
Сообщения: 7
Цитата:
Это самый простой, но не самый хороший способ.


А чем этот способ плох ?

Впринцыпе можно сделать , чтобы переходить в RM нужно было только для установления видео-режима , а рисовать уже в PM через видео память...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Графический режим
СообщениеДобавлено: 20 июл 2011, 23:58 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
diger писал(а):
А чем этот способ плох ?

Этот способ плох тем, что ОС полностью теряет контроль над машиной. Пока работает BIOS в реальном режиме, ни один драйвер ОС не сможет обработать никакого прерывания.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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