XFree-to-Xinside
Autor: Marco Melgazzi, marco@techie.com
v1.2, Maj 1997
WWeerrssjjaa ppoollsskkaa:: BBaarrttoosszz MMaarruusszzeewwsskkii
BB..MMaarruusszzeewwsskkii@@zzssmmeeiiee..ttoorruunn..ppll
v1.0, 13 Września 1997
Jak zamienić format opisu trybów video XFree86 na XInside/XiGraphics.
Dokument ten został napisany w standardzie ISO-8859-2. Jego oryginalna
wersja znajduje się pod adresem ftp.icm.edu.pl
.
11.. WWpprroowwaaddzzeenniiee..
Wiosną 1996 widziałem wiele listów w grupie comp.os.linux.x z
pytaniami o to jak przenieść tryby video z XFree86 do jednego z jego
komercyjnych odpowiedników: XInside (teraz nazwanym XiGraphics, jednak
w tym dokumencie używam starszej nazwy ponieważ będę się odwoływał
głównie do tamtej wersji).
Zanim powstała nowa wersja tego programu grzebałem trochę w tej
starszej i ciągle mam tę przerobioną wersję gdzieś na moim dysku:
ponieważ lubię rozwiązywać problemy postanowiłem spróbować i po kilku
godzinach grzebania i obliczania powstał w miarę sensowny artykuł,
który natychmiast wysłałem.
Dyskusje na temat zamiany nagle zniknęły a ja otrzymałem 1 (jeden)
list z podziękowaniami za artykuł, więc ponieważ może ktoś
potrzebowałby tych informacji w przyszłości postanowiłem przekształcić
ten artykuł w mini-HOWTO.
Pozwól mi jednak najpierw coś powiedzieć: NIE pracuję dla XInside i
miałem dostęp tylko do wersji 1.2 dla Linux-a. Wiem, że w dzisiejszych
czasach (Maj 97) AccelX osiągnął już wersję 3.1, ale myślę, że zawarte
tutaj informacje, jeśli nie dosłownie, to i tak się przydadzą.
Ponieważ to HOWTO zostało napisane z pomocą dość starej wersji
XInside, może się tak stać, że część zawartych tutaj informacji będzie
niepełna: jak później przeczytasz, dzięki narodzinom XFree 3.2, nie
kupiłem tego komercyjnego serwera. Tak więc jeśli zauważysz jakieś
niepoprawne informacje w tym dokumencie proszę wyślij mi list.
Jednak zauważ, że manipulowanie częstotliwościami monitora może być
cokolwiek niebezpieczne i dlatego nie daję absolutnie żadnych
gwarancji. Jeśli będzie u ciebie działać, to dobrze, jeśli wysadzisz
swój komputer, to nie wiń mnie za to.
Jak może zauważyłeś po moim nazwisku moim narodowym językiem nie jest
angielski, więc przypuszczalnie zanjdziesz jakieś błędy tu i tam.
Przepraszam za nie z góry i proszę nie zawalajcie mojej skrzynki
listowej wiadomościami związanymi z tymi błędami. Dzięki!
22.. CCzzyy ppoottrrzzeebbuujjęę tteeggoo??
Sądze, że taktyka Xinside polegająca na nie dołączaniu narzędzia (jak
xvidtune) do obróbki trybów video czy do przeniesienia tych z XFree do
wersji rozwojowej (i o ile wiem komercyjnej) jest niezrozumałe.
Spędziłem nad tym jakieś 3 godziny (wskazówka: porównałem pozycję
dotyczącą VESy 1024x768@70Hz w tych dwóch formatach (i jestem już
prawie elektronikiem ;-)) podczas gdy programista Xinside mógłby
napisać artykuł porównawczy...
Nie ściągałem żadnej wersji rozwojowej od 1.3 i naprawdę mam nadzieję,
że to naprawili. Jeśli tak, to ten dokument jest już bezużyeczny, ale
jeśli go przeczytasz, to dowiesz się trochę więcej o tym jak to
działa.
33.. NNoo ttoo ssttaarrtt..
Załóżmy, że masz jakiś tryb w XFree86 i chcesz z niego zrobić wersję
dla Xinside z tymi samymi warunkami: postępuj zgodnie z opisanymi
poniżej krokami, a powinno ci się udać. Użyjemy moich domyślnych
trybów video jako przykładów z życia wziętych i wyjaśnię co musisz
zrobić, żeby je zamienić.
Pozycja w XFree86 wygląda tak:
Modeline "blahblah" DOTCLK A B C D a b c d
Każdy z numerów A-D i 1-4 ma swoje znaczenie: jeśli chcesz, możesz ich
poszukać w "The Hitchhiker's Guide to X386/XFree86 Video Timing"
(/usr/lib/X11/doc/VideoModes.doc), ale nie musisz znać teorii, żeby je
zamienić...
Moje tryby w /usr/lib/X11/XF86Config to:
Modeline "1168x876" 105 1168 1256 1544 1640 876 877 891 900
| | | | | | | | |
DOT_CLK A B C D a b c d
W Xinside, musisz dodać pozycję w pliku Xtimings, który powinien się
znajdować w etc/ (od teraz zakładam, że jesteś w głównym katalogu
Xaccel, którym powinien być /usr/X11/lib/X11/AcceleratedX).
! Gdzieś w tym pliku, umieść nazwy które chcesz
[PREADJUSTED_TIMING]
PreadjustedTimingName = "1168x876 @ 72Hz";
!
! Te cztery są oczywiste
!
HorPixel = 1168; // pixels
VerPixel = 876; // lines
PixelWidthRatio = 4;
PixelHeightRatio = 3;
!
! hsync: DOT_CLK / D * 1000 [KHz]
!
! hsync = 105 / 1640 * 1000 = 64.024 KHz
!
! vsync: ( 1 / (( D / DOT_CLK ) * d) ) * 1,000,000 [Hz]
!
! vsync: ( 1 / (( 1640 / 105 ) * 900) ) * 1,000,000
! ( 1 / 14057.1428571 ) * 1,000,000 = 71.138 Hz
!
HorFrequency = 64.180; // kHz
VerFrequency = 71.138; // Hz
! Oczywiste
ScanType = NONINTERLACED;
!
! Umieść tutaj opcje +/-hsync +/-vsync z XFree86
!
HorSyncPolarity = POSITIVE;
VerSyncPolarity = POSITIVE;
! Nie powinno się zmieniać
CharacterWidth = 8; // pixels
! Tutaj jest DOT_CLK
PixelClock = 105.000; // MHz
!
!
! Sekcja częstotliwości poziomych: [usec]
!
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;
!
! Sekcja częstotliwości pionowych: [msec]
!
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
! Koniec!
Teraz tak nowo stworzone tryby musisz umieścić w plikach pokazanych
poniżej w odpowiednich miejscach.
44.. UUssttaawwiiaanniiee..
W wyjątkach pokazanych poniżej znak -> pokazuje co było zmieniane: nie
wpisuj go do pliku!
Pozycja Monitor (moja to 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";
Plik informacyjny na temat karty (mój to boards/s3/764-2.xqa,
Zastanawiam się czemu mają prawie wszystkie karty Hercules, a mojej
nie: 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
Jeśli częstotliwości zegara (dot clock) jest odpowiednio niski (NIE w
tym przypadku dla mojej karty) możesz nawet tę pozycję umieścić w
sekcji 16bpp i 32bpp.
Plik /etc/Xaccel.ini będzie wyglądał tak:
--------------------------------------------------------------
Board = "s3/764-2.xqa";
Monitor = "mfreq/mfreq64.vda";
Depth = 8;
-> Desktop = 1168x876;
[RESOLUTIONS]
-> 1168x876,
1024x768;
Właściwa pozycja odnośnie trybów w etc/Xtimings
--------------------------------------------------------------
[PREADJUSTED_TIMING]
PreadjustedTimingName = "1168x876 @ 72Hz";
HorPixel = 1168; // pixels
VerPixel = 876; // lines
PixelWidthRatio = 4;
PixelHeightRatio = 3;
HorFrequency = 64.024; // kHz
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
Możesz sprawdzić czy wszystko sie udało uruchamiając program vgaset
bez parametrów podczas gdy uruchomiony jest serwer Xinside: na ekranie
będzie pokazana linia na podobieństwo XFree86 i, jeśli wszytko jest
dobrze, linia ta będzie taka sama jak ta, od której zacząłeś (za
wyjatkiem jeśli b i c są takie same, nie byłem w stanie powtórzyć tej
sytuacji w Xinside: najlepszym przypadkiem było c=b+1).
55.. KKoonniieecc......
To wszystko! Mam nadzieję, że przyda ci się to. Nie sądzę, żebym kupił
serwer XiGraphics w bliższej przyszłości z jednego prostego powodu:
wersja 3.2 XFree86 rozwiązała wszystkie problemy związane z prędkością
tekstu, jakie miałem na swojej skromnej karcie Trio 64 ;)
Jednak wygląda na to, że serwer XiGraphics obsługuje o wiele szerszy
zestaw chip-ów i kart graficznych niż XFree, więc może się zdarzyć, że
komercyjna alternatywa będzie jedyną dla ciebie. Jeśli tak jest i
kupiłeś serwer XiGrpahics, z chęcia usłyszałbym czy zaprezentowane tu
informacje przydały ci się czy były zbyt skomplikowane, czy cokolwiek.
66.. AAuuttoommaattyyzzaaccjjaa pprroocceessuu..
Ten mały skrypt automatyzuje cała pracę. Bądź bardzo ostrożny z
ScanType i z dwoma liniami Polarity: skrypt ich nie ustawia i jeśli
jesteś zbyt leniwy, żeby je poprawić, to szansa na spalenie twojego
monitora wzrasta znacznie.
Zauważ, że nie wiem czy parametr "Doublescan" ma jakieś znaczenie w
XInside: jeśli spróbujesz zamienić jakiś tryb o małej rozdzielczości
BĄDŹ OSTROŻNY, łatwo możesz załatwić swój monitor ponieważ
częstotliwość odświeżania, jaką uzyskasz jest podwojona (a naprawdę
moje 400x300@72Hz stało się 400x300@144Hz !).
#!/bin/sh
##########################################################################
# XF2XInside
#
# Skrypt ten zamienia opisy trybów z formatu XF86Config na format XInside
# tak jak tego wymaga plik etc/Xtimings.
#
# To jest tylko taki hacker-ski skrypt więc nie spodziewaj się zbyt
# zaawansowanego sprawdzania błędów (nie mówiąc już o przyjazności dla
# użytkownika).
#
# Jeśli wywołasz go bez argumentów powinien ci on powiedzieć co zrobić.
#
# ( Lipec 1996, hcz@tazlwurm.bb.bawue.de)
#
# Przy okazji: Nowe tryby stworzone tak jak to opisuje to HOWTO działają,
# ale nie pokazują się w menu Xsetup-u. Ktoś wie dlaczego?
#
##########################################################################
#----------------------------------------------- No to lecimy:
# Zmień to jeśli twój plik konfiguracyjny jest gdzieś indziej
XF=/usr/X11/lib/X11/XF86Config
if [ $# -ne 1 ] ; then
echo "usage: ${0##*/} "
echo " example: ${0##*/} 1024x764"
echo -e " function: converts $XF modeline entry into\n Xinside Format (stdout)"
exit 1
fi
egrep -i "^[\t ]*modeline.+\"$1\"" /usr/X11/lib/X11/XF86Config |
gawk '
NF < 11 { print "! invalid 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 ""
}'
77.. PPooddzziięękkoowwaanniiaa..
ˇ Heike Claudia Zimmerer hcz@tazlwurm.bb.bawue.de za pokazanie pewnej
nieścisłości i za przysłanie mi skryptu do automatyzacji.
88.. PPrraawwaa aauuttoorrsskkiiee//lleeggaallnnoośśćć..
Prawa autorskie należą do Š Marco Melgazzi (marco@techie.com) -
dokument ten jest rozpowszechniany na podstawie GPL (Gnu Public
License). Aby otrzymać kopię GPL, napisz do Free Software Foundation,
Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Znaki towarowe należą do ich właścicieli. Nie ma żadnych gwarancji co
do dokładności czy przydatności informacji zawartych w tym dokumencie.
88..11.. OOdd ttłłuummaacczzaa..
Tłumaczenie to jest chronione prawami autorskimi Š Bartosza
Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na
prawach takich samych jak dokument oryginalny.
Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne,
składniowe, techniczne (tych może trochę być, bo co do nazewnictwa w
sprawach monitorów i kart graficznych jestem ignorantem) to pisz do
mnie:
B.Maruszewski@zsmeie.torun.pl
Oficjalną stroną tłumaczeń HOWTO jest http://www.jtz.org.pl/
Aktualne wersje przetłumaczonych dokumentów znajdują się na tejże
stronie. Dostępne są także poprzez anonimowe ftp pod adresem
ftp.ippt.gov.pl w katalogu /pub/Linux/JTZ/.
Przetłumaczone przeze mnie dokumenty znajdują się także na mojej
stronie WWW. Są
tam też odwołania do Polskiej Strony Tłumaczeniowej.
Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę
dyskusyjną jtz@ippt.gov.pl. Jeśli chcesz sie na nią zapisać, to wyślij
list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl