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!
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.
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.
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).
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.
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 "" }'
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.
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:
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