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 будет добавлена программа, которая по умолчанию не будет делать ничего, а если прописать загрузочные параметры, вызовет эту новую функцию с запрошенными параметрами. К примеру:

Code: Select all

CROPFLAT XSIZE=800 YSIZE=400
Вот собственно вся идея.

Если у кого есть замечания, дополнения, возражения - излагайте.

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 для установки пределов отрисовки.
Пример запуска с параметрами:

Code: Select all

CROPFLAT XS800 YS480
Я решил сократить синтаксис, по сравнению с первоначально предложенным.

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
640_480.JPG (70.19 KiB)
Viewed 8263 times
Режим 800*600 - не сильно напрягаясь можно заметить, что изображение уходит за пределы экрана.
Spoiler:
800_600.JPG
800_600.JPG (57.21 KiB)
Viewed 8263 times
Теперь запуск системы с добавленной в AUTORUN.DAT программой CROPFLAT и нужными параметрами. В синем загрузочном экране, как и в предыдущем случае, выбран режим 800*600.
Spoiler:
800_480.JPG
800_480.JPG (64.61 KiB)
Viewed 8263 times
Если вы пользуетесь стандартными дисплеями, или эмуляторами (Qemu, Boch, VirtualBox, VMware и т.д.), или у вас работает какой либо драйвер видеокарты, сделанный для Колибри и позволяющий выбирать видеорежимы - вам эта программа не нужна.