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 <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/docs/HOWTO/mini/>. 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##*/} <mode>" 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. <http://www.zsmeie.torun.pl/~bart/tlumaczenie.html> 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