OSDev http://osdev.su/ |
|
Как реализовать прокрутку vesa framebuffer`a? http://osdev.su/viewtopic.php?f=6&t=1134 |
Страница 2 из 2 |
Автор: | thunderstruck [ 09 янв 2016, 22:26 ] |
Заголовок сообщения: | Re: Как реализовать прокрутку vesa framebuffer`a? |
pavia писал(а): надо включить для видепамяти режим кэша Write Combining (WC) А можно ссылку на пример реализации? |
Автор: | pavia [ 09 янв 2016, 23:07 ] |
Заголовок сообщения: | Re: Как реализовать прокрутку vesa framebuffer`a? |
К примеру можно из колибриОС взять. http://websvn.kolibrios.org/filedetails ... 0&peg=5360 http://websvn.kolibrios.org/revision.ph ... 1&rev=5360 |
Автор: | dixie [ 10 янв 2016, 22:10 ] |
Заголовок сообщения: | Re: Как реализовать прокрутку vesa framebuffer`a? |
Для таких вещей надо делать shadow буфер... Т.е. копировать всё выводимое и на экран и туда, где должна получаться точная копия экрана. И при скроллировании или любом чтении с экрана использовать эту копию. Поскольку копия в обычной памяти и на ней WB тип кэша - то работает она на порядок быстрее. Что не отменяет, конечно, необходимости ставить Write Combine на видео - это ускоряет запись туда, тоже на порядки. |
Автор: | Himik [ 17 мар 2016, 23:46 ] |
Заголовок сообщения: | Re: Как реализовать прокрутку vesa framebuffer`a? |
Регистры MTRR можно не мучить, достаточно настройки MSR PAT Код: #define MSR_IA32_CR_PAT 0x277 #define asm_rdmsr(ecx, eax, edx) asm volatile("rdmsr" : "=a" (eax), "=d" (edx) : "c" (ecx)) #define asm_wrmsr(ecx, eax, edx) asm volatile("wrmsr" : : "c" (ecx), "a" (eax), "d" (edx)) //Установить тип кэширования "write-combining" для ускорения видеопамяти. //Для этого устанавливаем регистр MSR PAT, элемент 1 (биты 8,9,10) значение 1 //При использовании видеопамяти, виртуальная страница должна иметь атрибуты PAT=0, PCD=0, PWT=1. unsigned int eax, ecx, edx; if(CPUFeatures & 0x10000) //Проверка поддержки PAT в процессоре { ecx = MSR_IA32_CR_PAT; asm_rdmsr(ecx, eax, edx); ((UCHAR*)&eax)[1] = 1; //"write-combining" asm_wrmsr(ecx, eax, edx); } Если в Си не спец, то ((UCHAR*)&eax)[1] буквально означает регистр AH. |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |