Page 1 of 1
Ограничение размеров отображаемой части экрана
Posted: Sat Apr 28, 2012 9:09 pm
by Mario
Есть такая проблема: нетбук RoverBook U800 имеет не совсем стандартное железо для режима Vesa. Встроенная Flat panel имеет физические размеры 800*480. В то время как ближайший доступный режим это 800*600. Но отображается он 1:1, причем нижняя часть экрана, хоть и существует в видеопамяти, но ее не видно.
Все остальные режимы отображаются либо растяжкой, либо комбинацией растяжки с обрезкой. Нормально пользоваться отображением при этом сложно.
Раньше я пользовался простеньким хаком:
Spoiler:
Code: Select all
movzx eax,word [BOOT_VAR+0x900C] ; Y max
;start fix for U800L
cmp eax,600
jne @f
mov eax,480
@@:
;end fix for U800L
dec eax
mov [Screen_Max_Y],eax
О чем уже сообщал тут
viewtopic.php?f=25&t=785&start=34
Но переделывать ядро каждый раз несколько неудобно и непрактично.
По этой причине я думаю добавить функцию, которая будет устанавливать ограничение высоты (что требуется мне) и ширины (что может потребоваться кому то еще, а вдруг). В autorun.dat будет добавлена программа, которая по умолчанию не будет делать ничего, а если прописать загрузочные параметры, вызовет эту новую функцию с запрошенными параметрами. К примеру:
Вот собственно вся идея.
Если у кого есть замечания, дополнения, возражения - излагайте.
Re: Ограничение размеров отображаемой части экрана
Posted: Sat Apr 28, 2012 9:17 pm
by SoUrcerer
А когда внешний монитор подключен, как это всё работает?
Шindoшs, я так понимаю, определяет разрешение по тому, что выдает матрица, так?
Re: Ограничение размеров отображаемой части экрана
Posted: Sat Apr 28, 2012 9:47 pm
by Mario
У Шиндовс специальный драйвер, без него она плющит. В драйвере 2 варианта - либо плющить, либо проматывать режим 800*600. Ну и разумеется виртуально созданный режим 800*480 тоже присутствует.
Внешний монитор может иметь те разрешения которые он поддерживает, с поправкой на те что есть в списке режимов Vesa. Если режим не совместимый с Flat panel, то она отключается, а изображение на мониторе остается, однако это требует манипуляций с настройками BIOS.
Если же подразумевались последствия функции на внешнем мониторе, то он будет отображать режим 800*600, но на нижние 80 линий не будет выводиться изображение после вызова функции. Я это уже описывал очень подробно в теме, ссылку на которую я дал в первом посте. Впрочем никто ведь не заставляет использовать функцию и программу - с настройками по умолчанию она будет делать НИЧЕГО.
Re: Ограничение размеров отображаемой части экрана
Posted: Sat Apr 28, 2012 9:56 pm
by Mario
Кстати даже особо делать ничего не надо - в ядре уже есть весь нужный функционал (в kernel.asm процедура set_screen), но используется он только драйверами. Остается добавить новый системный вызов и все.
Re: Ограничение размеров отображаемой части экрана
Posted: Tue May 01, 2012 1:09 am
by Mario
SVN r.2654 - установить пределы отрисовки.
Описание читать в документационной части исходников ядра.
Программа будет несколько позднее.
Re: Ограничение размеров отображаемой части экрана
Posted: Tue May 01, 2012 8:57 pm
by Mario
SVN r.2656 - приложение CROPFLAT для установки пределов отрисовки.
Пример запуска с параметрами:
Я решил сократить синтаксис, по сравнению с первоначально предложенным.
Re: Ограничение размеров отображаемой части экрана
Posted: Tue May 01, 2012 9:16 pm
by Mario
SVN r.2657 - CROPFLAT добавлен в ночные сборки и AUTORUN.DAT, в заремленном состоянии. Т.е. по факту он не загружается при старте и если возникнет потребность можно отредактировать AUTORUN.DAT в своей скачанной ночной сборке, с правильными параметрами.
Re: Ограничение размеров отображаемой части экрана
Posted: Tue May 01, 2012 9:51 pm
by Mario
Для тех кто вдруг все еще не понял, объясняю наглядно что сделано.
Снимки делались с экрана RoverBook U800, так что качество не фонтан.
Режим 640*480 - не сильно напрягаясь можно заметить, что изображение растянуто.
Spoiler:
-
640_480.JPG (70.19 KiB)
Viewed 8313 times
Режим 800*600 - не сильно напрягаясь можно заметить, что изображение уходит за пределы экрана.
Spoiler:
-
800_600.JPG (57.21 KiB)
Viewed 8313 times
Теперь запуск системы с добавленной в AUTORUN.DAT программой CROPFLAT и нужными параметрами. В синем загрузочном экране, как и в предыдущем случае, выбран режим 800*600.
Spoiler:
-
800_480.JPG (64.61 KiB)
Viewed 8313 times
Если вы пользуетесь стандартными дисплеями, или эмуляторами (Qemu, Boch, VirtualBox, VMware и т.д.), или у вас работает какой либо драйвер видеокарты, сделанный для Колибри и позволяющий выбирать видеорежимы - вам эта программа не нужна.