XiGraphics, однако в этом тексте я буду использовать название старой версии этого продукта, на которую буду опираться в процессе описания).
результате родилась эта статья, которая и попала в конференцию.
Дискуссия о преобразовании форматов сразу прекратилась, и я получил одно (1) письмо с благодарностью, поэтому решил преобразовать эту статью в мини-HOWTO, которое вы читаете.
приведенные в этом документе, может быть и не совсем точны, но все еще актуальны.
Этот документ опирается на достаточно старую версию Xinside, и может случиться так, что часть приведенной здесь информации не совсем точна: позднее вы узнаете, что благодаря выходу в свет XFree версии 3.2, я не купил этот коммерческий сервер. Если вы это сделали и заметите некоторые неточности в моем документе - дайте мне знать.
В любом случае, я обязан напомнить, что изменение времен задержки видеосигнала для монитора может привести к печальным последствиям, и я за это не несу никакой ответственности. Если у вас все сработает - прекрасно; если ваш компьютер взорвется - я за это не отвечаю.
Как вы наверно уже поняли, английский - не мой родной язык, поэтому если вы обнаружите ошибки там и тут, простите меня и я прошу вас не наводнять мой почтовый ящик письмами с претензиями по этому поводу. Заранее спасибо!
Я абсолютно не понимаю политики Xinside, заключающейся в полном отсутствии возможности настройки видеорежимов (типа xvidtune) и/или импортирования существующих настроек XFree (и подобных ей коммерческих систем). Я потратил около трех часов, чтобы их соединить (подсказка: Я сравнивал в обоих форматах строки, относящиеся к видеорежиму VESA 1024x768@70Hz (а я ведь почти инженер-электронщик;-)) в то время как программисту Xinside понадобилось бы, наверно, несколько минут, чтобы написать нечто подобное...
Я не загружал XInside версии 1.3 и позже - я искренне надеюсь, что в новых версиях они устранили это недоразумение. Конечно, если они это сделали, то данный текст можно считать бесполезным, но вы все-таки можете прочитать его, чтобы понять, как все работает...
режим и объясню, как преобразовал его для XInside.
Строка Xfree86 выглядит примерно так:
Modeline "blahblah" DOTCLK A B C D a b c d
формата в другой эта теория вам абсолютно не нужна...
Моя строка видеорежима в /usr/lib/X11/XF86Config выглядит так:
Modeline "1168x876" 105 1168 1256 1544 1640 876 877 891 900
| | | | | | | | |
DOT_CLK A B C D a b c d
В Xinside, вам надо добавить секцию в файл Xtimings, который находится в etc/ (с этого момента я предполагаю, что вы находитесь в каталоге Xaccel, предположим /usr/X11/lib/X11/AcceleratedX)
! Где-то в файле. Поместите здесь необходимое название режима
[PREADJUSTED_TIMING]
PreadjustedTimingName = "1168x876 @ 72Hz";
!
! Эти четыре значения очевидны
!
HorPixel = 1168; // точек
VerPixel = 876; // строк
PixelWidthRatio = 4;
PixelHeightRatio = 3;
!
! hsync: DOT_CLK / D * 1000 [кГц]
!
! hsync = 105 / 1640 * 1000 = 64.024 кГц
!
! vsync: ( 1 / (( D / DOT_CLK ) * d) ) * 1,000,000 [Гц]
!
! vsync: ( 1 / (( 1640 / 105 ) * 900) ) * 1,000,000
! ( 1 / 14057.1428571 ) * 1,000,000 = 71.138 Гц
!
HorFrequency = 64.180; // кГц
VerFrequency = 71.138; // Гц
! Очевидное значение
ScanType = NONINTERLACED;
!
! Здесь проставьте значения соответственно параметрам +/-hsync и +/-vsync из настроек XFree86
!
HorSyncPolarity = POSITIVE;
VerSyncPolarity = POSITIVE;
! Не изменяйте
CharacterWidth = 8; // pixels
! Здесь укажите значение DOT_CLK
PixelClock = 105.000; // MHz
!
!
! интервалы горизонтальной развертки: [мкс]
!
HorTotalTime = D / DOT_CLK = 15.619;
HorAddrTime = A / DOT_CLK = 11.124;
HorBlankStart = A / DOT_CLK = 11.124;
HorBlankTime = HorTotalTime - HorBlankStart = 4.495;
HorSyncStart = B / DOT_CLK = 11.962;
HorSyncTime = C / DOT_CLK - HorSyncStart = 2.743;
!
! интервалы вертикальной развертки: [мс]
!
VerTotalTime = ( HorTotalTime * d ) / 1000 = 14.057;
VerAddrTime = ( HorTotalTime * a ) / 1000 = 13.682;
VerBlankStart = ( HorTotalTime * a ) / 1000 = 13.682;
VerBlankTime = VerTotalTime - VerBlankStart = 0.375;
VerSyncStart = ( HorTotalTime * b ) / 1000 = 13.698;
VerSyncTime = ( HorTotalTime * ( c - b ) ) / 1000
= 0.219
! И все!
Этот вновь созданный видеорежим необходимо поместить в соответствующее место в файлах, которые я перечислю ниже.
В приведенных ниже выдержках файлов знак -> указывает на то, что надо добавить. НЕ добавляйте этот знак в свои файлы!
Строка для монитора (у меня это файл monitors/mfreq/mfreq64.vda)
[ESTABLISHED_TIMINGS]
"640x480 @ 60Hz",
"640x480 @ 72Hz",
"640x480 @ 75Hz",
"800x600 @ 56Hz",
"800x600 @ 60Hz",
"800x600 @ 72Hz",
"800x600 @ 75Hz",
"1024x768 Interlaced",
"1024x768 @ 60Hz",
"1024x768 @ 70Hz",
"1024x768 @ 75Hz",
"1152x900 Interlaced",
"1152x900 @ 60Hz",
"1152x900 @ 67Hz",
-> "1168x876 @ 72Hz",
"1280x1024 Interlaced",
"1280x1024 @ 60Hz",
"1600x1200 Interlaced";
Файл конфигурации видеокарты (у меня это boards/s3/764-2.xqa , Мне очень интересно, почему в их в файле есть почти все карты Hercules, кроме МОЕЙ: Terminator 64/Dram )
[VISUAL]
BitsPerPixel = 8;
MemoryModel = Packed;
ColorModel = Indexed;
BitsRGB = 6;
NumberOfColors = 256;
[RESOLUTIONS]
640x480,
800x600,
1024x768,
-> 1168x876,
1152x900,
1280x1024
[DESKTOPS]
640x480,
800x600,
1024x768,
1152x900,
-> 1168x876,
1280x1024,
1600x1200
Если частота вывода точек достаточно мала (так НЕ было в моем случае), то вы можете поместить эти строки и в секции 16-битных и 32-битных видеорежимов.
Файл /etc/Xaccel.ini будет выглядет примерно так
--------------------------------------------------------------
Board = "s3/764-2.xqa";
Monitor = "mfreq/mfreq64.vda";
Depth = 8;
-> Desktop = 1168x876;
[RESOLUTIONS]
-> 1168x876,
1024x768;
Настоящий раздел определения видеорежима в файле etc/Xtimings
--------------------------------------------------------------
[PREADJUSTED_TIMING]
PreadjustedTimingName = "1168x876 @ 72Hz";
VerFrequency = 71.138; // Hz
ScanType = NONINTERLACED;
HorSyncPolarity = POSITIVE;
VerSyncPolarity = POSITIVE;
CharacterWidth = 8; // pixels
PixelClock = 105.000; // MHz
HorTotalTime = 15.619; // (usec) = 205 chars
HorAddrTime = 11.124; // (usec) = 146 chars
HorBlankStart = 11.124; // (usec) = 146 chars
HorBlankTime = 4.495; // (usec) = 59 chars
HorSyncStart = 11.962; // (usec) = 157 chars
HorSyncTime = 2.743; // (usec) = 36 chars
VerTotalTime = 14.057; // (msec) = 900 lines
VerAddrTime = 13.682; // (msec) = 876 lines
VerBlankStart = 13.682; // (msec) = 876 lines
VerBlankTime = 0.375; // (msec) = 24 lines
VerSyncStart = 13.698; // (msec) = 877 lines
VerSyncTime = 0.219; // (msec) = 14 lines
Вы можете проверить качество преобразования формата следующим образом: запустите в сервере XInside программу vgaset: вы увидите строку, похожую на формат XFree, и, если все нормально, должны получить строку, почти аналогичную исходной (я так и не смог добиться равенства изначально совпадавших b и c, лучший вариант оказался следующим: c=b+1 ).
И все! Я надеюсь, вам помогут эти советы. Я не думаю, что в ближайшем будущем куплю сервер XiGraphics - XFree86 версии 3.2 избавился от проблем с текстом, которые возникали на моей скромной видеокарте Trio 64 ;)
Однако, по-видимому, сервер XiGraphics поддерживает значительно больший спектр чипсетов и видеокарт, и, может так случиться, что у вас просто не будет другого выбора. Если так случится, и вы купите сервер XiGraphics, я буду очень рад узнать, пригодилась ли эта информация, или это все очень сложно, или вообще что-нибудь.
Этот небольшой скрипт делает практически все за вас. Будьте очень осторожны со строками ScanType и Polarity: скрипт их не исправляет, и если вы поленитесь исправить их вручную, то шанс взорвать монитор немного увеличивается.
Заметьте также, что я не знаю, имеет ли значение в XInside флаг 'Doublescan': если вы будете пытаться конвертировать удвоенный режим с низким разрешением - будьте ОСТОРОЖНЫ - вы можете легко сломать свой монитор, если частота развертки удвоится (у меня 400x300@72Hz стал 400x300@144Hz!).
#!/bin/sh
##########################################################################
# XF2XInside
#
# Этот скрипт преобразует строки определения видеорежимов XF86Config в
# формат XInside, необходимый для файла etc/Xtiming.
#
# Этот скрипт набросан в спешке, поэтому здесь нет жесткого контроля
# ошибок в значениях (не говоря уже о дружественности интерфейса).
#
# Если вы запустите его без параметров, то он напишет вам, что надо делать.
#
# ( Июль 1996, hcz@tazlwurm.bb.bawue.de)
#
# Кстати: новые видеорежимы, созданные при помощи этого HOWTO работают,
# но не появляются в меню Xsetup. Кто-нибудь знает причину?
#
##########################################################################
#----------------------------------------------- Итак:
# Измените эту строку, если ваш файл с видеорежимами находится в другом месте:
XF=/usr/X11/lib/X11/XF86Config
if [ $# -ne 1 ] ; then
echo "использование: ${0##*/} <mode>"
echo "пример: ${0##*/} 1024x764"
echo -e "Конвертирование строки видеорежима из $XF в формат Xinside"
exit 1
fi
egrep -i "^[\t ]*modeline.+\"$1\"" /usr/X11/lib/X11/XF86Config |
gawk '
NF < 11 { print "! неверная строка Modeline:\n! " $0 "\n!"; next }
{
print "//", $0 ":"
name = $2
DOT_CLK = $3;
A = $4;
B = $5;
C = $6;
D = $7;
a = $8;
b = $9;
c = $10;
d = $11;
VerFrequency = 1000000 / ((D / DOT_CLK) * d)
print "[PREADJUSTED_TIMING]"
printf " PreadjustedTimingName = \"%dx%d @ %.0dHz\";\n", A, a, VerFrequency
print " HorPixel\t\t= " A ";"
print " VerPixel\t\t= " a ";"
print " PixelWidthRatio\t= 4;\n PixelHeightRatio\t= 3;"
print " HorFrequency\t\t= " DOT_CLK / D * 1000 ";\t// kHz"
print " VerFrequency\t\t= " VerFrequency ";\t// Hz"
print " ScanType\t\t= NONINTERLACED;\t\t// *CHECK*"
print " HorSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
print " VerSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
print " CharacterWidth\t= 8;"
print " PixelClock\t\t= " DOT_CLK ";"
HorTotalTime = D / DOT_CLK
print " HorTotalTime\t\t= " HorTotalTime ";"
print " HorAddrTime \t\t= " A / DOT_CLK ";"
print " HorBlankStart\t\t= " A / DOT_CLK ";"
print " HorBlankTime\t\t= " D / DOT_CLK - A / DOT_CLK ";"
print " HorSyncStart\t\t= " B / DOT_CLK ";"
print " HorSyncTime\t\t= " C / DOT_CLK - B / DOT_CLK ";"
VerTotalTime = ( HorTotalTime * d ) / 1000
print " VerTotalTime\t\t= " VerTotalTime ";"
print " VerAddrTime\t\t= " ( HorTotalTime * a ) / 1000 ";"
VerBlankStart = ( HorTotalTime * a ) / 1000
print " VerBlankStart\t\t= " VerBlankStart ";"
print " VerBlankTime\t\t= " VerTotalTime - VerBlankStart ";"
print " VerSyncStart\t\t= " ( HorTotalTime * b ) / 1000 ";"
print " VerSyncTime\t\t= " ( HorTotalTime * ( c - b ) ) / 1000
print ""
}'
Heike Claudia Zimmerer hcz@tazlwurm.bb.bawue.de за то, что указала мне на пару неточностей и послала мне скрипт, автоматизирующий почти все.
Bartosz Maruszewski B.Maruszewski@zsmeie.torun.pl за то, что перевел этот мини-HOWTO на польский, и указал мне на небольшую опечатку.
USA.
Торговые марки являются собственностью их владельцев. Нет никакой гарантии на точность и/или полноценность информации, данной в этом документе.
Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.
ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.
обратитесь к координатору проекта Linux HOWTO по электронной почте: <linux-howto@metalab.unc.edu> или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу <linux-howto@asplinux.ru>
| Главная |