XFree-to-Xinside Autor: Marco Melgazzi, marco@techie.com v1.2, Maj 1997 Wersja polska: Bartosz Maruszewski B.Maruszewski@zsmeie.torun.pl 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/>. 1. Wprowadzenie. 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! 2. Czy potrzebuję tego? 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. 3. No to start. 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. 4. Ustawianie. 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 wyjat...
Porozmawiajmy.TV