XFree86 Video Timings HOWTO Eric S. Raymond v3.6 June 1999 번역: 김현종 이 글에서는 비디오카드/모니터에 적합한 XFree86 의 모드라인(mode line)을 설정하는 방법을 설명합니다. 최근의 XFree86 배포본에는 가장 표준적인 조합을 설정해주는 좋 은 기능들이 포함되어 있습니다; 이 문서는 주로 고성능 모니터나 희귀한 하드웨어를 쓰기위해 수동으로 모드라인(mode line)을 설정해야하는 분들께 유용할 것입니다. 또 한, kvideogen 을 써서 모드라인을 생성하거나 표준모드가 자신의 모니터에 딱 들어맞 지 않아서 xvidtune 으로 표준모드를 미세하게 수정해야 할 필요가 있을때에도 도움이 될 것입니다. 목차 1. 권리의 포기 2. 소개 3. 자동계산을 위한 도구들 4. 비디오 디스플레이의 동작원리 5. 디스플레이와 비디오 카드에 대한 기초지식 5.1 모니터의 동기주파수(sync frequencies) 5.2 모니터의 비디오 대역폭(video band width) 5.3 비디오 카드의 도트클럭(dot clock) 5.4 이 값들은 무엇을 컨트롤하는가? 6. 기본적인 스펙(specification)을 해석하기 6.1 대역폭(bandwidth)에 대해 6.2 동기주파수(sync frequency)와 화면재생율(refresh rate) 7. 시스템 설정시의 타협 8. 필요한 메모리의 양 9. 프레임 크기(frame size)를 계산하기 10. 마술, 그리고 동기펄스(sync pulse) 10.1 수평 동기(Horizontal sync) 10.2 수직 동기(Vertical sync) 11. 종합 12. 모니터의 오버(overdring your moditor) 13. 비월주사(interaced mode)방식 14. 질문과 답변 15. 이미지에 관련된 문제해결 15.1 이미지가 좌우로 치우칠 때 15.2 이미지가 상하로 치우칠 때 15.3 이미지가 상하좌우로 너무 클 때 15.4 이미지가 좌우로 넓거나 좁을 때 15.5 이미지가 상하로 길거나 짧을 때 16. 모니터의 성능을 그려보기. 17. 도와주신 분들 1. 권리의 포기 이 문서 내용의 실행여부와 그 결과는 전적으로 당신 책임입니다. 제조사의 스펙을 넘 어서서 모니터를 구동시킬 경우 모니터 및 당신 자신에게 피해를 일으킬 수도 있습니 다. 자세한 주의사항은 "모니터의 오버" 부분을 읽어보십시요. 모니터의 오버로 인해 당신 내지 당신 모니터에 발생할 수 있는 피해는 전적으로 당신 자신의 책임입니다. 이 HOWTO 문서의 최신 버전은 리눅스 문서 프로젝트(Linux Documentation Project) 웹 페이지 에서 찾으실 수 있습니다. 감상이나 비평, 개선에 대한 제안등은 esr@snark.thyrsus.com 으로 보내주십시요. 청 컨대 당신의 특수한 모니터 문제를 해결해달라는 email 은 보내지 말아주십시요. 그런 질문은 당신을 실망시킬 뿐이고 저로서도 시간낭비일 뿐입니다. 이 주제에 대해 제가 아는 모든 것은 이 문서에 다 들어있습니다. 2. 소개 XFree86 서버를 써서 비디오 시스템을 잘만 세팅하면 하드웨어 능력을 최대로 끌어낼 수 있습니다. 이 문서는 비디오카드와 모니터에 최적화된 타이밍 수치를 계산하는 법 을 설명합니다. 우선, 비디오 시스템을 작동시키는 방법을 설명하고, 그 다음 그 기본세팅에서부터 입 맛에 딱 맞는 최적화된 세팅이 될때까지 실험해 나가는 방법을 설명합니다. 어떤 모드가 거의 제대로 동작을 하긴 하는데 약간의 문제가 있는 경우라면(특히, 표 준 VESA 모드에서 안정적인 화면이 나오긴 하는데 화면이 상하좌우로 치우쳤다든지 너 무 크거나 작은 경우), 바로 "이미지에 관련된 문제해결" 절로 건너뛰시기 바랍니다. 그 절에서는 타이밍 수치를 미세조정(tweak)하여 특정한 효과를 얻는 방법을 설명합니 다. X 서버를 설치해서 처음 동작시켰을 때 첫 화면이 엉망이라고 해서 모드 튜닝방법을 몽땅 공부할 필요는 없습니다; 대부분의 표준 모드라인 값들은 괜찮은 값들로서 그 디 폴트 값들 중 한개가 당신 하드웨어와 궁합이 잘 맞지 않을 뿐인 경우가 많습니다. 튜 닝방법을 몽땅 공부하는 대신 CTRL-ALT-(키패드 키의)+ 키를 써서 당신이 설치한 모든 모드들을 시험해 보십시요. 만일 그 중 어떤 모드들이 잘 동작한다면 이제 다른 모드 들은 모두 주석처리 해두고 640x480 모드만 남겨 잘 동작하는지 확인하세요. 잘 동작 하면 이제 800x600 이나 1024x768 과 같은 당신 모니터가 처리가능한 주파수의 모드들 을 하나하나 체크해 나가십시요. 3. 자동계산을 위한 도구들 XFree86 3.2 부터는 XF86Setup 프로그램이 같이 제공됩니다. 이 프로그램을 쓰면 사용 자가 대화식으로 쉽게 모니터 모드를 설정할 수 있으므로 손수 비디오 타이밍 숫자를 계산하느라 골머리를 썩일 필요가 없습니다. 따라서 사실상 대부분의 경우에 있어 기 본 모니터 모드를 당신이 직접 계산할 필요는 없는 것입니다. 하지만 불행하게도 XF86 Setup 에는 몇가지 한계가 있습니다; 이 프로그램은 1280x1024 까지의 표준 비디오 모 드만을 알고있을 뿐입니다. 만일 1600x1200 이상의 초고성능 모니터를 가지고 있다면 그때는 모니터의 기본모드를 손수 계산해야만 합니다. KVideoGen 이라는 KDE 의 툴은 모니터와 카드의 기본수치들로부터 모드라인을 계산해줍니다. 필자는 시험삼아 KVideoGen 을 써 서 모드라인들을 구해봤습니다만 아직 성공하지는 못했습니다. 이 툴의 수평 수직 '리 프레쉬 레이트' 파라메터들은 아래에서 설명할 동기 주파수 HSF 및 VSF 와 동일한 것 들입니다. '수평 동기 펄스' 숫자는 마이크로세컨드 단위의 동기펄스 폭 HSP 를 말하 는 것 같습니다(KVideoGen 은 'front porch' HGT1 과 'back porch' HGT2 값을 고정값 으로 가정합니다). 만일 '수직 동기 펄스' 수치를 모른다면 디폴트 값을 쓰는 것이 안 전할 것입니다. 최근 버전의 XFree86 에서는 xvidtune 이라는 툴을 써서 상당히 편리하게 모니터 모드 를 테스트내지 튜닝할수 있습니다. 이 프로그램의 첫 화면에는 잘못 사용했을 때의 결 과에 대해 무시무시한 경고가 뜹니다만 이 문서를 충분히 숙독해서 xvidtune의 박스안 의 숫자들이 의미하는 바를 확실히 알게된다면 xvidtune 프로그램을 효과적으로 자신 있게 사용할 수 있을 것입니다. xvidtune 을 사용하면 X 설정 화일을 수정하거나 심지어는 X 서버를 재시작하지 않고 서도 바로 새로운 모드를 시험해볼 수 있습니다(자세한 것은 XFree86.man 을 보십시 요). 또, 이와 다른 방법으로서, XFree86 에서는 Xconfig 화일에 정의된 각각의 모드 간을 핫키로 전환할 수도 있습니다. 이 기능을 써서 화면이 먹통이 된 상황을 빠져나 오세요! 새로운 모드를 테스트할 때는 그 모드에 따로 이름을 붙여서 핫키 리스트 끝 에 추가시키십시요. 이미 잘 동작하는 모드를 디폴트로 놓아둔 후, 테스트 모드가 실 패할 경우 핫키를 써서 디폴드 모드로 돌아오시면 됩니다. 이 문서의 끝부분에서는 'modeplot' 스크립트가 적혀있습니다. 이를 이용하면 사용가 능한 모드의 그래프를 그려볼 수 있습니다. 이 스크립트가 직접 모드라인을 생성해 주 지는 않습니다만 모드라인에 관한 원리를 이해하는데 도움이 될 것입니다. 4. 비디오 디스플레이의 동작원리 Xconfig 화일의 각 필드에 어떤 수치를 써넣어야 하는지 알고싶다면 먼저 디스플레이 의 동작원리를 이해해야만 합니다. 이 수치들은 XFree86 서버가 가장 저수준에서 디스 플레이를 컨트롤할 때 사용됩니다. 디스플레이는 점(dot)을 나열하여 화면을 만듭니다. 점(dot)들은 왼쪽에서 오른쪽으로 배열됨으로써 선을 형성합니다. 선들은 위에서부터 아래로 배열됨으로써 화면을 형성 합니다. 디스플레이내의 전자빔이 도트에 부딪치는 순간 도트는 빛을 방출합니다. 빔 은 일정한 패턴으로 화면을 주사하면서 각 도트들을 같은 시간만큼씩 때리게 됩니다. 빔의 패턴은 스크린의 왼쪽 꼭대기부터 시작해서 직선으로 오른쪽으로 이동하고 스크 린의 오른쪽 끝에 도달하면 잠시 멈춘 후 한줄 아래 왼쪽으로 돌아갑니다. 이제 새로 운 줄이 다시 왼쪽에서 오른쪽으로 주사됩니다. 이 과정이 화면 맨 밑의 오른쪽 끝에 도달할때까지 반복되며, 최하단 오른쪽 끝에 도달하면 빔은 다시 왼쪽 최상단으로 돌 아갑니다. 이러한 패턴이 계속 되풀이되는 것입니다. 이러한 방식의 한가지 변용이 있는데 이는 인터레이싱 방식이라는 것입니다; 인터레이 싱 방식에서는 반 프레임 동안 한줄씩 건너뛰며 라인이 주사되고 다음 반 프레임 동안 나머지 빈줄들이 한 라인씩 채워져 나갑니다. 화면의 왼쪽 최상단부터 시작하는 것을 프레임의 시작이라고 합니다. 한 프레임은 빔 이 오른쪽 최하단에 도달했다가 다시 원래의 처음 위치로 돌아왔을때 끝납니다. 즉, 한 프레임은 화면의 상단에서 하단까지 빠짐없이 주사된 모든 라인들로 구성되는 것입 니다. 만일 전자빔이 프레임을 만드는 동안 줄곧 켜져있다면 화면상의 모든 도트들이 빛을 낼 것입니다. 이렇게 된다면 화면 가장자리의 검은 테두리부분도 없을 것입니다. 그렇 게 될 경우 끝부분의 화면은 뒤틀려보이게 됩니다. 디스플레이의 가장자리 부분에서는 빔을 컨트롤하는 것이 상당히 어려운 일이기 때문입니다. 이러한 왜곡을 줄이기 위해 서 화면의 끝부분의 도트들은 빔이 비추인다하더라도 발광하지 않게 해놓았습니다. 화 면 끝의 검은 부분이 바로 그것입니다. 이런 이유로 디스플레이의 가시화면에는 제한 이 있는 것입니다. 이해하셔야할 또다른 중요한 점은 빔이 가시화면의 끝부분에 도착했다면 그다음 어떻 게 되는가 하는 것입니다. 가시화면의 오른쪽 끝부분까지 비춘후 빔은 다시 한줄아래 왼쪽끝으로 돌아오게 되는데 이때 약간의 시간이 필요합니다. 마찬가지로 화면의 하단 까지 비춘후 빔은 다시 왼쪽 상단으로 돌아오게 되는데 이때 약간의 시간이 필요합니 다. 비디오 어댑터 카드는 전자빔을 발생시키라는 신호(signal)를 디스플레이 장치에 보내 고 디스플레이 장치는 이를 받아 화상을 만듭니다. 수평동기신호 펄스를 보내면 빔이 오른쪽 끝에서 한줄아래 왼쪽 처음으로 돌아오게 됩니다. 수평동기펄스는 각줄의 끝에 서마다 한개씩 발생합니다. 또, 수직동기신호를 보내면 빔이 왼쪽 최상단으로 돌아오 게 됩니다. 수직동기신호는 각 프레임의 끝부분에서 발생합니다. 디스플레이의 전자빔의 위치가 안정적으로 확보되기 위해서는 수평, 수직동기신호의 앞뒤로 짧으나마 약간의 시간이 필요합니다. 빔이 안정되지 못하면 화면이 불안정해 집니다. 다음 절에서는 이런 기초적인 사항들에 대한 정의, 공식, 예제등을 다루겠습니다. 5. 디스플레이와 어댑터에 대한 기본적인 것들 Xconfig 의 각 항목을 해킹하기 전에 다음의 기본적인 사항들을 알고 있어야만 합니 다. - 사용하는 모니터의 수평, 수직 동기주파수 옵션 - 모니터의 대역폭(bandwidth) - 비디오 어댑터의 구동 클럭 주파수, 즉 도트 클럭 5.1 모니터의 동기주파수 수평 동기 주파수는 모니터가 일초에 수평 스캔라인을 몇번이나 주사할수 있는가를 뜻 합니다; 이 수치야 말로 모니터에 있어 가장 중요한 수치입니다. 수직 동기 주파수는 일초에 빔이 수직으로 몇번이나 횡단할수 있는가입니다. 동기주파수는 보통 모니터 설명서의 제원부분에 나와있습니다. 수평 동기 주파수는 주 로 KHz, 수직 동기주파수는 주로 Hz 단위(초당 사이클)로 표기합니다. 수직주파수는 보통 50-150 Hz 이내이고 수평주파수는 보통 31-135 KHz 이내입니다. 멀티싱크 모니터의 경우 이 동기주파수들은 고정된 수치가 아닌 어떤 범위로 표시됩니 다. 반면 일부 모니터들, 특히 저가형 모니터들에서는 이 주파수들은 몇개의 고정된 값들을 가질 뿐입니다. 이 값들 역시 설정을 바꾸는 것이 가능하긴 합니다만 모니터 자체의 한계로 인해 그 선택의 범위는 멀티싱크 모니터에 비해 크게 줄어드니다. 가장 좋은 해상도를 얻으려면 가장 높은 주파수쌍을 선택하세요 --- 주의할 점은 주파수가 고정된 모니터에서 원래의 스펙보다 높은 스피드로 모니터 클럭을 구동시킬 경우 모 니터가 쉽게 손상될 수 있다는 점입니다. 이 지침서의 초기버전에서는 상당히 용감하게 멀티싱크 모니터를 오버시켰었습니다. 더 나은 성능을 얻기 위해 정격 수직 동기주파수의 최대값보다도 더 높은 값으로 모니 터를 구동시켰던 것입니다. 이에 대해 보다 조심할 필요가 있음을 지적받았습니다. 이 에 관해서는 "모니터의 오버"에서 다루겠습니다. 5.2 모니터의 비디오 대역폭 모니터의 비디오 대역폭은 모니터 설명서의 제원 부분에 나와있습니다. 만약 안나와 있다면 모니터의 정격 최고 해상도 부분을 보세요. 주먹구구식 방법입니다만 다음은 해상도를 대략적인 대역폭으로 환산한 것입니다(동시에 이는 사용가능한 도트클럭의 대략적인 상한값이기도 합니다). 640x480 25 MHz 800x600 36 MHz 1024x768 65 MHz 1024x768 interlaced 45 MHz 1280x 1024 110 MHz 1600x1200 185 MHz 이 수치들은 무슨 마술이 아닙니다. XFree86 의 표준모드 데이터 베이스에 적혀있는 각 해상도별 가장 낮은 도트클럭일 뿐입니다.(단, 마지막 줄은 필자가 삽입한 것입니 다). 모니터의 실제 대역폭은 아마도 위의 최소값보다는 더 큰 값일 것입니다. 따라서 위의 값보다 몇 MHz 더 높은 도트클럭을 사용한다해서 그리 겁먹을 필요는 없습니다. 또한 대역폭은 65 MHz 이하의 영역에서는 도트클럭과 큰 문제를 일으키지 않습니다. 대부분의 고해상도 모니터의 경우, SVGA 카드는 모니터의 비디오 대역폭의 한계값에 턱없이 못미치는 범위에서 사용되기 때문입니다. 예를 들어보지요. 모니터 비디오 대역폭 ----------------------------------------------------------- NEC 4D 75 MHz Nano 907a 50 MHz Nano 9080i 60 MHz Mitsubishi HL6615 110 MHz Mitsubishi Diamond Scan 100 MHz IDEK MF-5117 65 MHz IOCOMM Thinksync-17 CM-7126 136 MHz HP D1188A 100 MHz Philips SC-17AS 110 Mhz Swan SW617 85 MHz Viewsonic 21PS 185 MHz PanaSync/Pro P21 220 MHz 설사 저급 모니터라 할지라도 대부분의 경우 표준해상도에서는 심각한 대역폭 부족을 일으키지는 않습니다. NEC Multsync II 모니터는 좋은 예입니다 --- 이 모니터는 스펙 상으로도 심지어 800x600 화면을 지원하지 못합니다. 겨우 800x560 밖에 지원하지 못 합니다. 이와같은 저해상도에서는 높은 도트클럭이 전혀 필요없고 또 대역폭도 더이상 필요없는 것입니다. 아마도 당신이 선택할수 있는 것은 32Mhz 나 36 Mhz 정도일텐데 둘다 모니터의 정격 비디오 대역폭인 30 Mhz 에서 크게 벗어난 값은 아닙니다. 이 두개의 주파수에서 어쩌면 화질이 기대한만큼 선명하지 않을 수도 있습니다만 분명 히 참고 쓸만한 정도는 될 것입니다. 물론 NEC Multisync II 가 36 MHz 보다 높은 비 디오 대역폭을 지원했더라면 더 좋았을 것입니다. 하지만 이미지의 왜곡을 일으킬 정 도로 화질이 나쁜 것이 아니라면 텍스트 작업등의 일반적인 용도로 쓰는데는 별 문제 가 없을 것입니다(만일 화질이 그 정도로 나쁘다면 당신의 눈이 제일 먼저 알려주겠지 요). 5.3 카드의 도트클럭 보통, 비디오 카드 메뉴얼의 제원부분에는 비디오 카드의 도트클럭(일초에 화면에 출 력할수 있는 픽셀의 수)의 최대값이 나와있습니다. 당신이 이 수치를 모른다면 X 서버가 찾아낼수 있습니다. 최근 버전의 X 서버들은 모 두 --probeonly 옵션을 지원해서 X 를 재가동하거나 비디오 모드를 바꾸지 않고도 정 보를 출력해 줍니다. 만일 -probeonly 가 없다해도 실망할 필요는 없습니다. 최악의 경우 X 서버로 인해 모 니터가 먹통이 된다고 하더라도 X 서버는 클럭 및 그외 다른 정보들을 표준 에러로 출 력할 수 있습니다. 이를 화일로 리디렉션 해두면 모니터가 먹통이 되어 재부팅을 할수 밖에 없더라도 알아낸 정보는 화일에 그대로 저장되게 됩니다. probe 결과나 statup 메시지는 다음과 비슷한 모양입니다. XFree86 의 경우 : Xconfig: /usr/X11R6/lib/X11/Xconfig (**) stands for supplied, (--) stands for probed/default values (**) Mouse: type: MouseMan, device: /dev/ttyS1, baudrate: 9600 Warning: The directory "/usr/andrew/X11fonts" does not exist. Entry deleted from font path. (**) FontPath set to "/usr/lib/X11/fonts/misc/,/usr/lib/X11/fonts/75dpi/" (--) S3: card type: 386/486 localbus (--) S3: chipset: 924 --- Chipset -- this is the exact chip type; an early mask of the 86C911 (--) S3: chipset driver: s3_generic (--) S3: videoram: 1024k ----- Size of on-board frame-buffer RAM (**) S3: clocks: 25.00 28.00 40.00 3.00 50.00 77.00 36.00 45.00 (**) S3: clocks: 0.00 0.00 79.00 31.00 94.00 65.00 75.00 71.00 ------------------------------------------------------ Possible driving frequencies in MHz (--) S3: Maximum allowed dot-clock: 110MHz ------ Bandwidth (**) S3: Mode "1024x768": mode clock = 79.000, clock used = 79.000 (--) S3: Virtual resolution set to 1024x768 (--) S3: Using a banksize of 64k, line width of 1024 (--) S3: Pixmap cache: (--) S3: Using 2 128-pixel 4 64-pixel and 8 32-pixel slots (--) S3: Using 8 pages of 768x255 for font caching SGCS 나 X/inside X 의 경우 : WGA: 86C911 (mem: 1024k clocks: 25 28 40 3 50 77 36 45 0 0 79 31 94 65 75 71) --- ------ ----- -------------------------------------------- | | | Possible driving frequencies in MHz | | +-- Size of on-board frame-buffer RAM | +-- Chip type +-- Server type 주의: 가능하면 머신에 다른 부하가 없는 상태에서 실행하세요. 왜냐하면 X 는 일종의 응용프로그램이기 때문에 X 의 타이밍 루프가 디스크 작업등과 동시에 이루어지거나 한다면 위의 수치들 자체가 부정확해질 수 있기 때문입니다. 수 회에 걸쳐 실행해 본 후 수치들이 안정된 값을 갖는지를 확인하십시요; 만약 값이 계속 들쭉날쭉하다면 안 정된 값을 가질 때까지 다른 프로세스들은 죽여버리세요. 마우스 데몬 프로세스를 가 지고 있다면 이를 죽여놓으세요. 마우스 데몬은 특히나 당신을 헤메게 만들기 쉽습니 다(리눅스 사용자의 경우는 gpm, SVr4 사용자들은 mousemgr 입니다). 클럭측정이 부정확해지는 것을 피하려면 위에서 측정한 수치를 당신의 Xconfig 화일의 Clocks 속성 부분에 써주어야 합니다 --- 이는 타이밍 루프를 억제시키고 X 가 정확한 클럭값을 사용하게 만듭니다. 위의 예에서 나온 데이터를 사용하면 다음과 같습니다. wga Clocks 25 28 40 3 50 77 36 45 0 0 79 31 94 65 75 71 아주 다양한 부하를 받는 시스템의 경우 알수없는 이유로 X 가 뜨지 않는 경우가 간혹 있는데 이렇게 클럭수치를 적어주면 이를 방지할 수도 있습니다. 간혹 시스템 부하로 인해서 X 가 잘못된 타이밍을 인식한 다음, 설정 데이터베이스에서 그에 해당하는 도 트클럭을 찾지 못거나 잘못된 도트클럭을 찾는 수가 있기 때문입니다. 5.4 이 값들은 무엇을 컨트롤 하는가? 비디오 카드의 도트클럭과 모니터의 동기주파수 대역은 사용가능한 궁극적인 해상도를 결정짓습니다. 하지만 이는 드라이버가 하드웨어의 잠재능력을 얼마나 끌어낼수 있는 지에 달려 있습니다. 고성능 하드웨어가 구비되었다 하더라도 그에 상응하는 좋은 디 바이스 드라이버가 없다면 돈낭비에 불과합니다. 반면 융통성 좋은 디바이스 드라이버 를 쓰면 상대적으로 떨어지는 성능의 하드웨어라도 그 성능을 조금이라도 더 향상시킬 수 있습니다. 이것이 XFree86 의 디자인 철학입니다. 여러분이 사용할 도트클럭을 모니터의 비디오 대역폭에 매칭시켜야 합니다. 이 부분에 서 상당한 선택의 여지가 있습니다. -- 어떤 모니터들은 정격 대역폭보다 30 % 이상 오버해서 구동시킬 수도 있습니다. 그 위험성 여부는 모니터의 표준 수직 동기 주파수 를 얼마만큼 오버시킬수 있는가에 달려 있습니다. 이에 대해 뒤에서 보다 자세히 논해 봅시다. 대역폭에 대해 알게되면 보다 현명한 설정을 할 수 있습니다. 이는 디스플레이의 화 질, 특히 선명도에 영향을 줄수 있는 것입니다. 6. 기본적인 스펙을 해석하기 이 절에서는 위에 언급된 스펙(specification)의 의미 및 그외 알아야 할 것들을 설명 합니다. 먼저 몇가지 정의를 설명하며 괄호속에는 앞으로 계산에 사용할 약어를 썼습 니다. 수평 동기 주파수(horizontal sync frequency, HSF) : 초당 수평 스캔(위에서 설명했습니다) 수직 동기 주파수(vertical sync frequency, VSF) : 초당 수직 스캔(위에서 설명했습니다). 화면갱신율의 상한값이 되므로 중요합니다. 도트클럭(dot clock, DCF) : 더욱 엄밀히 말하면 "구동 클럭 주파수(driving clock frequency)"입니다. 비디오 카드상의 크리스탈이나 VCO 가 방출할수 있는 초당 최대 도트수를 말합니다. 비디오 대역폭(video bandwidth, VB) : 모니터에 입력했을 때 화면이 생성될 수 있는 주파수값의 최대치입니다. 비디오 카 드가 온오프 패턴을 교차시키는 경우(역주: 인터레이스드 모드)에는 그 동작 주파수는 DCF 의 절반값이 되므로, 대역폭의 하한값 역시 이론상 DCF/2 부터 시작됩니다. 하지 만 정교한 화면 디스플레이를 위해서는 대역폭 값을 DCF 값의 최고치보다 많이 낮춰 쓰는 것은 바람직하지 않으며 되도록 대역폭 값을 높이 잡아 쓰는 것이 좋습니다. 프레임 길이 (frame length, HFL, VFL) : 수평 프레임 길이(HFL)는 모니터의 전자총이 수평줄 한개를 스캔하는데 필요한 도 트클럭 틱(tick)의 수를 말합니다. 여기에는 좌우측 경계에서의 비발광부분까지 포함 됩니다. 수직 프레임길이(VFL)은 전체 화면에서의 스캔라인의 수를 말하는데 역시 상 하단 경계부의 비발광 부분까지 포함된 것입니다. 화면 재생율(screen refresh rate, RR) : 화면이 초당 몇번이나 되풀이되어 그려지는지를 뜻합니다. 다른 말로 프레임 레이 트(frame rate)라 불리우기도 합니다. 주파수가 높을수록 플리커(깜박임)가 줄어들기 때문에 이 값이 높을수록 좋습니다. 60 Hz 정도면 좋습니다. VESA 표준인 72 Hz 정도 면 더 좋습니다. 계산법은 다음과 같습니다. RR = DCF / (HFL * VFL) 주의할 것은 분모 부분의 두수의 곱은 모니터의 가시해상도와는 다른 것으로서 보통 그보다 큰값이 됩니다. 이에 대한 자세한 것은 아래에서 다루겠습니다. 인터레이스드 모드에서 표기되는 화면 재생률(예를 들면 87Hz interaced)은 실제로는 반프레임에 대한 재생률입니다. 전체 화면은 마치 보통의 디스플레이때와 비슷하게 보 입니다만 각각의 라인은 같은 주파수의 넌인터레이스드 모드 때의 절반의 빈도로 갱신 되는 것입니다. 계산의 편의를 위해 인터레이스된 화면은 풀프레임(refresh)레이트로 환산하여 계산하 겠습니다. 즉, 87 Hz interlaced 는 43.5 Hz 입니다. 인터레이스드 모드의 화질은 동 일한 풀프레임 레이트에서의 난인터레이스드 모드의 화질보다 좋습니다만, 동일한 반 프레임률에서의 난인터레이스드 모드의 화질보다는 분명히 떨어집니다(역주: 87 Hz in teraced 는 43.5 Hz non-interaced 보다는 화질이 좋고 87 Hz non-interaced 보다는 화질이 나쁘다는 말입니다). 6.1 대역폭에 대해 모니터 제조업체들은 대역폭이 높다고 선전하기를 좋아하는데 그 이유는 대역폭이 화 면의 intensity 와 컬러변화의 선명도를 좌우하기 때문입니다. 높은 대역폭은 보다 세 밀한 표현을 가능하게 합니다. 모니터는 전자적인 신호(signal)을 사용하여 화면을 생성합니다. 그러한 시그널은 디 지타이즈된 형태에서 아날로그 신호로 변환되면서 웨이브 형태가 되어 모니터에 입력 됩니다. 이 신호는 각각의 일정주파수의 신호들이 중첩되어 하나의 형태를 이룬 것입 니다. 각각의 신호 대부분은 MHz 단위의 일정 주파수를 가집니다. 예를 들면 20 MHz, 40 MHz, 70 MHz 들의 신호가 하나로 결합된 것입니다. 모니터의 비디오 대역폭이란 사 실상 모니터가 왜곡없이 처리할수 있는 가장 높은 주파수의 아날로그 신호인 것입니 다. 비디오 대역폭은 우리가 사용가능한 가장 높은 도트클럭을 결정하는데 있어 상당히 중 요한 역할을 합니다. 6.2 동기주파수와 리프레쉬율 화면상의 각각의 수평스캔라인은 한 프레임 길이 중에서 단지 가시적인 부분에 해당될 뿐입니다. 한순간을 딱 끊어서 본다고 치면 스크린상에는 사실상 한점만이 발광하고 있을 뿐입니다. 다만 그것이 충분한 빠른 리프레쉬 율을 가지기 때문에 당신 눈의 잔 상효과로 인해 자신이 이미지 전체를 보고 있다고 "느끼는" 것입니다. 다음 그림이 도 움이 되겠군요. _______________________ | | |->->->->->->->->->->-> | | )| |<-----<-----<-----<--- | | | | | | | | | |_______________________| 수평동기주파수란 모니터의 전자빔이 위의 그림처럼 좌우로 1초에 몇번이나 수평횡단하는가 입니다. _______________________ | ^ | | ^ | | | | v | | ^ | | | | | | | ^ | | | | v | | ^ | | |_______|_v_____________| 수직동기주파수란 모니터의 전자빔이 위의 그림처럼 상하로 1초에 몇번이나 수직횡단하는가 입니다. 실제의 래스터스캔은 매우 조밀한 지그재그 패턴이 됩니다. 빔은 좌우로 움직이며 또 상하로도 이동합니다. 이제 우리는 도트 클럭과 프레임 길이가 리프레쉬 레이트와 어떤 관련이 있는지 알수 있습니다. 정의에 의하면 1 Hz 는 초당 한 사이클을 의미합니다. 수평 프레임길이를 H FL 이라 하고 수직프레임 길이를 VFL 이라 하면 전체 화면은 (HFL * VFL) 틱을 가지는 것입니다. 정의에 의해 비디오 카드는 초당 DCF 만큼의 틱을 모니터로 입력하므로 모 니터의 전자빔은 화면의 왼쪽에서 오른쪽으로 주사하고 화면 하단까지 갔다가 다시 꼭 대기로 돌아오는 동작들을 1 초에 DCF / (HFL * VFL) 만큼씩 반복하는 것입니다. 이것 이 바로 화면의 리프레쉬 레이트입니다. 왜냐하면 리프레쉬 레이트란 스크린이 초당 몇회나 갱신되는가를 말하는 것이기 때문입니다. 이 개념을 잘 이해해야 플리커(화면깜박임)를 최대한 줄인 해상도를 설정할 수 있습니 다. 말보다는 그림을 그려 설명해 보겠습니다. RR VB | min HSF max HSF | | | R1 R2 | | max VSF -+----|------------/----------/---|------+----- max VSF | |:::::::::::/::::::::::/:::::\ | | \::::::::::/::::::::::/:::::::\ | | |::::::::/::::::::::/:::::::::| | | |:::::::/::::::::::/::::::::::\ | | \::::::/::::::::::/::::::::::::\ | | \::::/::::::::::/::::::::::::::| | | |::/::::::::::/:::::::::::::::| | | \/::::::::::/:::::::::::::::::\| | /\:::::::::/:::::::::::::::::::| | / \:::::::/::::::::::::::::::::|\ | / |:::::/:::::::::::::::::::::| | | / \::::/::::::::::::::::::::::| \ min VSF -+----/-------\--/-----------------------|--\--- min VSF | / \/ | \ +--/----------/\------------------------+----\- DCF R1 R2 \ | \ min HSF | max HSF VB 이것은 일반적인 모니터 모드 다이어그램입니다. X 축은 클럭레이트(DCF)를, Y 축은 리프레쉬율(RR)을 나타냅니다. 다이어그램의 채워진 영역은 모니터의 능력을 나타냅니 다: 영역내의 모든 점들은 특정 해상도의 비디오 모드임를 뜻하고 있습니다. `R1'과 `R2'로 이름붙인 선은 특정 해상도(예를들면 640x480)를 나타냅니다: 이들은 하나의 해상도가 도트클럭과 리프레쉬율의 다양한 조합으로 어떻게 구현되는지를 도시 하고 있습니다. R2 라인은 R1 라인때보다 높은 해상도를 뜻합니다. 위아래 영역을 둘러싼 수평라인들은 단순히 경계선일 뿐이며 수직동기주파수의 한계값 을 뜻하고 있습니다. 비디오 대역폭은 클럭레이트의 상한값이므로 모니터의 능력을 나 타낸 영역의 오른쪽 끝 수직라인으로 표헌되었습니다. "모니터의 성능을 그려보기" 절에서는 각각의 모니터를 대상으로 이런 다이어그램을 그려주는 프로그램(X 상에서 그려보면 더욱 좋습니다)을 소개하고 한가지 더 재미있는 것을 설명합니다: 수평 동기 주파수의 한계값으로부터 경계값을 유도하는 방법입니다. 7. 시스템 설정시의 타협 위에서 유도한 식을 다른 관점에서 해석해 볼수도 있습니다. DCF = RR * HFL * VFL 즉, 도트클럭이 고정된 것입니다. 초당 도트수를 가지고 리플레쉬 레이트와 수평 수직 해상도를 결정할 수 있습니다. 둘 중 한가지 값이 증가하면 다른 값들은 감소하게 되 는 관계입니다. 하지만 주목해야 할 것은 리프레쉬 레이트는 절대로 모니터의 최대 수직 동기주파수 보다 클 수 없다는 것입니다. 따라서 어떤 모니터든 특정 도트클럭이 주어지면 프레임 길이의 곱의 최소값이 존재하게 되며 이 값을 더이상 낮추는 것은 불가능한 것입니다. 세팅할 때는 다음 사항을 기억하십시요: RR은 너무 낮게 잡으면 이에 따른 스크린 플 리커로 인해 얼굴을 찡그리게 될것입니다. 틀림없이 당신은 60 Hz 미만의 리프레쉬 레이트를 쓰고 싶지는 않을 것입니다. 형광등 의 플리커레이트도 60 Hz 입니다; 형광등의 플리커정도에 민감한 분이라면 VESA 의 인 체공학적 표준인 72 Hz 로 쓸 필요가 있습니다. 비록 인간의 눈이라는 것이 적응성이 있고 사람에 따라 내성이 다르긴 해도 플리커는 눈에 심한 피로를 줍니다. 만일 당신이 모니터를 90 % 의 시야각으로 검은 바탕색과 이에 잘 대비되는 색상을 사용하면서 낮거나 중간정도의 intensity 로 본다면 45 Hz 같은 낮은 주파수에서도 눈이 편안할 수도 있습니다. 다음과 같이 시험해 보면 됩니다; 순수한 백색 배경색의 Xterm 을 띄우고 foreground 를 검은색으로 설정합니다. -bg white, -fg black 옵션 말입니다. 그리고 창을 최대한 확대하여 가시화면 전체를 채웁니다. 이제 모니터의 intensity 를 최대값의 3/4 로 두 고 모니터를 외면합니다. 모니터를 옆눈으로 흘겨 봅니다(보다 민감한 말초시신경을 사용하자는 것입니다). 플리커를 느끼지 못하거나 견딜만 하다면 그 리프레쉬 레이트 가 당신에게 알맞은 것입니다. 불편하다면 보다 높은 리프레쉬 레이트로 설정하세요. 그냥 언뜻 볼때는 좋아보인다 하더라도 있는듯 없는듯한 플리커가 눈에 피로를 가중시 켜 종내에는 두통을 일으키는 수도 있습니다. 인터레이스드 모드에서의 플리커의 정도는 현재의 수직주파수나 화면상에 표현된 내용 등에 많은 영향을 받습니다. 일단 실험해 보세요. 그래도 85Hz 하프 프레임레이트보다 낮게 잡아 쓰고싶지는 않을겁니다. 자 이제 사용가능한 최소한의 리프레쉬 레이트를 잡았다고 가정합시다. HFL 과 VFL 을 택하는데 있어 다소간의 재량의 여지가 있습니다. 8. 필요한 메모리의 양. 프레임 버퍼 램이 얼마만큼인가에 따라 컬러 혹은 흑백 디스플레이에서의 해상도가 제 한됩니다. 대부분의 경우, 그레이 음영을 가지지 않는 흑백 디스플레이의 경우에는 메 모리 양은 큰 문제가 되지 않습니다. 256 컬러의 디스플레이에서는 도트 하나를 표현하는 데에는 한 바이트의 비디오 메모 리가 필요합니다. 256 컬러의 디스플레이에 있어 한 바이트는 그 도트 한개의 적, 녹, 청의 배합비에 관한 정보를 담습니다. 필요한 메모리의 총량을 구하기 위해서는 라인 당 가시도트의 수와 가시라인의 수를 곱하면 됩니다. 1024x768 해상도의 디스플레이에 서는 1024 x 768 = 786432 가 화면상의 가시도트의 갯수입니다. 또, 한 도트당 한 바 이트가 필요하므로 786432 바이트 만큼의 메모리가 비디오 카드에 필요한 것입니다. 따라서, 일반적으로 올림해서 (HR * VR)/1024 Kbyte 의 비디오 램이 필요한 것입니다 (이 예제에서는 정확히 768K가 됩니다). 필요한 정확한 양보다 더 많은 양의 메모리를 가지고 있다면 그 여분만큼은 가상 스크린 panning 에 쓸수 있습니다. 하지만 비디오 카드에 512k 만 있다면 1024x768 해샹도를 쓸수 없습니다. 설사 좋은 모니터를 가지고 있다고 하더라도 충분한 비디오 램이 없다면 모니터의 잠재능력을 다 이용하지 못하는 것입니다. 반면, SVGA 카드가 1 M 를 가지고 있어도 모니터가 기껏해 야 800X600 밖에 지원하지 못한다면 마찬가지로 고해상도는 불가능한 것입니다(가능한 방법이 있기는 합니다. "비월주사(interaced mode)방식" 편을 보세요). 필요한 만큼의 메모리보다 더 많은 양을 가지고 있다고 해서 걱정할 필요는 없습니다; XFree86 은 그 여분의 메모리를 사용하여 가상화면을 스크롤할 수 있습니다(Xconfig 화일 문서의 가상화면에 대한 파라메터 부분을 보세요). 또한, 512k byte의 메모리를 가진 카드라도 실제로는 512,000 byte 만 가진 것은 아니라는 점에 주의하십시요. 512 x 1024= 524288 byte 를 가진 것입니다. 만일 S3 카드를 가지고 있고 X/inside 를 쓴다면, 16 컬러(픽셀당 4bit)를 쓸 경우 Xc onfig 에서 depth 4 로 설정해서 카드가 다룰수 있는 해상도의 2배의 해상도를 쓸 수 있습니다. 예를 들어 S3 카드들은 보통 1024x768x256을 사용합니다. 이를 depth 4 를 써서 1280x1024x16 로 사용할 수 있는 것입니다. 9. 프레임 크기의 계산 경고: 이 방법은 멀티싱크 모니터를 위한 것입니다. 이 방법을 주파수가 고정된 모니 터에 적용해도 잘 돌아가긴 합니다만 이에 대한 어떠한 보장도 하지 않습니다! 사용가능한 가장 높은 HSF 로 DCF 를 나누어 수평 프레임 길이를 얻는 것부터 시작합 니다. 예를 들어 65 MHz 도트클럭의 sigma legend SVGA 를 가지고 있고 모니터는 수평 스캔 주파수 55KHz 라 합시다. 이때 (DCF/HSF) 의 값은 1181 입니다(65MHz = 65000kHz : 65 000/55=1181). 이제 첫번째 마술을 부려봅시다. 이 수치를 8 의 정수배중 가장 가까운 숫자로 반올림 해야 합니다. 이는 SVGA 와 S3 카드에 사용되는 VGA 하드웨어 컨트롤러에 관련된 문제 입니다; 컨트롤러는 왼쪽으로 3 bit 쉬프트된 8 bit 레지스터 하나를 사용하므로 결국 11 bit 입니다. ATI 8514/A 같은 일부 카드들은 굳이 8 의 배수일 필요는 없습니다만 필자는 잘 모르며 이러한 반올림을 해준다고 해서 문제가 되는 것은 아닙니다. 따라서 사용가능한 수평 프레임길이를 1176 으로 잡아줍시다. 이 수치(DCF/HSF 의 값을 가까운 8의 배수로 반올림한 값)는 사용가능한 HFL 값 중 최 소값입니다. 동기펄스를 세팅해서 HSF 값을 낮추면 HFL 을 더 길게 만들수도 있습니다 (HFL 이 커지면 스크린의 수평도트수가 더 많아지게 됩니다). 하지만 이 댓가로 플리 커가 더 증가하게 됩니다. 경험적으로 볼때, 수평프레임의 길이의 80 % 가 수평해상도, 즉 수평 스캔라인의 가시 부분으로 사용될 수 있습니다(역주: 그러니까 수평 프레임길이가 모두 화면에 비추이 는 것이 아니고 수평프레임 길이의 일부만이 수평해상도로 쓰이는 것입니다). 간단히 말하자면 수평스캔라인에는 경계부분과 스윕백 타임이 포함되는 것입니다(스윕백 타임 이란 빔이 오른쪽 끝에 도달한 다음 다시 왼쪽 끝으로 돌아오는데 걸리는 시간을 말합 니다). 이 예에서는 944 틱입니다. 이제 일반적인 4:3 스크린비(aspect ratio)를 얻기 위해서는 수직 해상도를 방금 계산 한 수평해상도의 3/4 값으로 설정해야 합니다. 이 예제에서는 708 틱이 됩니다. 여기 에 1.05 를 곱하면 VFL 값 743 틱을 얻습니다(역주: 왜 꼭 1.05 인지는 잘 모르겠군 요). 4:3 이라는 비율이 무슨 마법의 수는 아닙니다: 화면을 최대한 이용하기 위해 이와 다 른 비율을 사용하겠다고 해서 말리는 사람은 없습니다. 프레임 높이와 프레임 길이를 말할 때는 편의상 대각선비를 씁니다. 대각선 길이에 0.8 을 곱하면 넓이를 얻고 0.6 을 곱하면 높이를 얻습니다. 이제, HFL = 1176 이고 VFL= 743 입니다. 65 MHz 를 두수의 곱으로 나누면 74.4 Hz 라 는 눈에 아주 좋은 리프레쉬율을 얻습니다. 훌륭하지요! 이는 VESA 표준보다도 좋은 값입니다! 당신은 944x708 을 쓰게 되고 이는 보통 많이들 쓰는 800X600 보다도 좋은 값입니다. 전혀 문제될 것이 없습니다. 더 나아가 리프레쉬 레이트를 76Hz 까지 향상시킬수도 있습니다. 대개의 모니터들은 정격 수평 동기주파수보다 2 khz 가량 높은 값에서도 잘 동작하며, 또한 VFL 을 다소 (즉, 위의 예에서는 944 의 75% 보다 낮은 값) 낮추어도 잘 동작하기 때문입니다. 하 지만 이런 "오버"를 하시기 전에 가능하다면 모니터의 전자총이 수직으로 76 Hz 까지 동기(sync)할수 있는지 확인하시기 바랍니다(한 예로 많이들 쓰는 NEC 4D 의 경우는 불가능합니다. 이 모니터는 오직 75 Hz 의 VSF 만이 가능합니다. 이에 대한 자세한 사 항은 "모니터의 오버" 부분을 보세요). 지금까지의 내용은 간단한 산술과 래스터 디스플레이의 기초적인 사항뿐이었습니다. 마술은 어디에도 없었습니다! 10. 마술, 그리고 동기 펄스 좋습니다. 이제 당신이 선택한 도트클럭에 대한 HFL/VFL 수치를 계산했고 가능한 리프 레쉬율을 알아내었으며, 이 해상도를 쓸수 있을만한 비디오램을 가지고 있는지도 확인 했습니다. 이제 정말 마술을 부려 봅시다 --- 언제 어디에 동기펄스를 위치시켜야 하 는지를 알아야 합니다. 동기펄스는 사실상 모니터의 수평, 수직 스캔 주파수를 컨트롤합니다. 설명서에 나오 는 HSF, VSF 값은 대표값으로서 동기주파수의 대략적인 최고값입니다. 비디오 카드에 서 출력되는 동기펄스는 실제로 얼마나 빨리 빔을 주사해야 하는지를 모니터에 지시합 니다. 아까의 두개의 그림을 기억하시나요? 한 프레임을 래스터스캐닝하는데 드는 시간중 단 지 일부만이 가시화면(즉, 화면해상도)을 만드는데 사용됩니다. 10.1 수평 동기 앞서의 정의에 의해 수평스캔라인이 주사되는 데는 HFL 만큼의 틱이 필요합니다. 가시 화면을 생성하는 틱을 따로 HR(horizontal screen resolution) 이라 합시다. 이제 정 의에 의해 HR < HFL 임이 분명합니다. 정확한 이해를 위해 아래와 같이 같은 출발점에 서 시작되는 그림을 그려보았습니다. |___ __ __ __ __ __ __ __ __ __ __ __ __ |_ _ _ _ _ _ _ _ _ _ _ _ | |_______________________|_______________|_____ 0 ^ ^ unit: ticks | ^ ^ | HR | | HFL | |<----->| | |<->| HSP |<->| HGT1 HGT2 이제 우리는 HSP 길이 만큼의 동기펄스를 위 그림처럼 배치해야 합니다. 즉, 화면을 생성하는 데이터의 클럭 틱의 끝부분과 전체 프레임의 클럭 틱의 끝 사이의 어딘가에 HSP 길이의 동기 펄스를 배치해야 하는 것입니다. 왜냐구요? 이렇게 해야만 화면이 왼쪽이나 오른쪽으로 치우치지 않고 모니터의 가시화면 영역내의 제 위치에 제대로 자 리잡히게 되는 것입니다. 이제, 동기펄스의 앞뒤로 약 30 틱의 "완충시간(guard time)"을 잡아줍시다. 이는 HG T1 과 HGT 2 로 표기합니다. 일반적인 설정에서는 HGT1 와 HGT2 는 같지 않습니다만 지금은 시험단계이니 임시로 일단 같은 값으로 해두고 실험을 시작합시다(즉, 동기펄 스를 중앙에 위치시킨 것입니다) 동기펄스를 잘못 위치시키면 이미지가 한쪽으로 치우쳐 버립니다. 한쪽 경계부분은 지 나치게 넓고 반대쪽에서는 이미지가 스크린 끝에서 중첩되어버려서 백색으로 빛나는 경계부인 소위 "ghost image"를 만들어 버립니다. 수직 동기 주파수를 잘못 위치시키 면 마치 V-hold 가 잘못 맞춰진 TV 처럼 화상이 말려 올라가 버립니다(사실상 TV 와 동일한 현상입니다) 운이 좋다면 당신 모니터의 동기펄스의 폭이 제원부분에 나와있을 겁니다. 나와있지 않다면 이제부터 진짜 마술을 부려 봅시다... 이 부분에서는 시행착오를 감수해야 합니다. 하지만 대부분의 경우, 싱크펄스로 길이 당 약 3.5-4.0 usec (microsecond) 정도를 가정하면 안전합니다. 정확히 하기위해서 HSP 를 3.8 usec 가정합시다(실험용으로 그리 나쁜 값은 아닙니다) . 이제 위에서의 65 MHz 의 클럭 타이밍을 사용하면 HSP 가 247 (= 65 * 10^6 * 3.8 * 1 0^-6) 클럭 틱이 되는 것을 알수 있습니다(M = 10^6, micro = 10^-6 입니다). 일부 제조업체에서는 수평 프레임 파라메터들을 도트 길이 대신 타이밍으로 표기합니 다. 따라서 다음과 같은 용어들이 사용될 수도 있습니다. active time (HAT) : HR 에 해당하는 용어지만 밀리세컨드(milliseconds)단위입니다. HAT * DCF = HR. blanking time (HBT) : (HFL - HR) 에 해당하는 용어로서 밀리세컨드 단위입니다. (HBT * DCF) = (HFL - HR). front porch (HFP) : HGT1 과 같습니다. sync time : HSP 와 같습니다. back porch (HBP) : HGT2 와 같습니다. 10.2 수직 동기 위의 그림으로 돌아가 봅시다. 어떻게 해야 247 클럭 틱을 윗그림처럼 위치시킬수 있 을까요? 우리의 예에서는 HR 은 944 이고 HFL 은 1176 입니다 두 수의 차이는 1176 - 944 = 23 2 < 247 입니다! 분명 어딘가 수정이 필요하군요. 어디를 어떻게 고쳐야 할까요? 첫번째 할일은 1176을 1184 까지 높이고 944 를 936 으로 낮추는 것입니다. 이제 1184 - 936 = 248 이 되었습니다. 흠, 가까와 졌군요. 그 다음, HSP 를 계산하는데 있어 3.8 대신 3.5 를 사용합니다; 그러면 6.5 * 3.5 = 2 27 을 얻습니다. 훨씬 나아졌군요. 하지만 248은 227 보다 그리 높은 수치는 아닙니 다. 보통 약 30 클럭 내외의 틱이 SP 의 시작점과 HR 사이에 필요하고, 또 같은 만큼 이 SP 의 끝과 HFL 사이에 필요합니다. 그리고 이 값들은 반드시 8 의 정수배여야 합 니다! 막혀버린 걸까요? 아닙니다. 해봅시다. 936 % 8 = 0, (936 + 32) % 8 = 0. 하지만 936 + 32 = 968, 968 + 227 = 1195, 1195 + 32 = 1227. 흠, 이 값은 그리 나쁘지는 않군요. 하지만 이 값은 8 의 정수배가 아니므로 이것을 1232 로 반올림 해버립시다. 하지만 이제 우리는 잠재적인 위험을 안게 되었습니다. 동기 펄스는 더이상 h 와 H 사 이의 정중앙에 정확히 위치하지 않게 되었습니다. 다행히도 계산기를 두드려보면 1232 - 32 = 1200 이고 이것 역시 8 의 배수입니다. (1232 - 32) - 968 = 232 는 3.57 usec 길이의 싱크펄스를 사용했다고 가정했을 때의 수치에 대응합니다. 3.57 역시 괜찮은 값이구요. 게다가 936/1232 = 0.76, 즉 76% 입니다. 80% 에서 그리 먼 값이 아니므로 이 값도 괜 찮습니다. 더우기 현재의 수평 프레임 길이를 사용하면, 기본적으로 모니터로 하여금 52.7 Khz (= 65 MHz / 1232) 의 동기펄스를 발생시키도록 하는 것입니다. 이 값 역시 모니터의 능력범위 내의 값입니다. 아무런 문제가 없습니다. 위에서 언급했던 경험칙을 사용하면, 936 * 75% = 702, 이 값이 우리의 새로운 수직 해상도 입니다. 702 * 1.05 = 737, 우리의 새로운 수직 프레임 길이입니다. 스크린 리플레쉬율은 65 MHz / (737 * 1232) = 71.6 Hz. 이것 역시 아주 좋은 값입니 다. 수직동기 펄스의 그림을 그려보면 다음과 같습니다. |___ __ __ __ __ __ __ __ __ __ __ __ __ |_ _ _ _ _ _ _ _ _ _ _ _ | |_______________________|_______________|_____ 0 VR VFL unit: ticks ^ ^ ^ | | | |<->|<----->| VGT VSP 우리는 수직 디스플레이 데이터의 틱이 끝나자 마자 수직펄스를 시작했습니다. VGT 는 수직 완충시간이라는 것으로서 동기펄스에 필요합니다. 대부분의 모니터들은 VGT 를 0 으로 잡더라도(즉 완충시간이 없어도) 안정적이므로 우리의 예에서는 그렇게 설정했습 니다. 몇몇 모니터들은 완충시간으로 2-3 틱을 필요로 하는 수도 있으며 보통 2-3 틱 더해준다고 해서 문제가 되지는 않습니다. 예제로 돌아 갑시다. 프레임 길이의 정의에 의해 수직 틱 하나는 수평 프레임 하나가 완전히 주사되는데 걸린 시간입니다. 따라서 우리의 예에서 이 값은 1232 / 65 MHz = 18.95 us 입니다. 경험적으로 보면 수직 동기 펄스는 50 - 300 us 범위 이내에 있어야 합니다. 예를들어 150 us 라 해봅시다. 이 값은 약 8 수직 클럭틱이 됩니다 (150 us / 18.95 us = 8) 일부 제조업체들은 수직 타이밍 파라메터들을 도트길이 대신 타이밍으로 표기합니다. 다음과 같은 용어들이 사용될 수도 있습니다. active time (VAT) : VR 에 해당하는 용어지만 밀리세컨드 단위입니다. VAT * VSF = VR. blanking time (VBT) : (VFL -VR) 에 해당하는 용어지만 밀리세컨드 단위입니다. VBT * VSF = (VFL - VR). front porch (VFP) : VGT 와 같습니다. sync time : VSP 와 같습니다. back porch (VBP) : 수직 동기 펄스다음의 두번째 완충시간과 같습니다. 보통 0 입니다. 11. 종합 Xconfig 화일내에는 비디오 모드에 관한 수치들이 나열되어 있습니다. 각 라인은 하나 의 모드를 나타냅니다. 한 라인은 이름 섹션, 클럭주파수 섹션, 수평 섹션, 수직 섹션 으로 구성됩니다. 이름 섹션은 그 비디오 모드의 이름 필드 하나로 되어 있습니다. 뒤이어 나오는 수치 들이 만드는 비디오 모드의 이름이 되는 것입니다. 이 이름은 Xconfig 화일의 그래픽 드라이버 설정 부분의 "Modes" 줄에서 사용되게 됩니다. 만일 바로 앞줄의 이름이 현 재 줄의 이름과 동일하다면 현재 줄의 이름 필드를 생략해도 좋습니다. 도트 클럭 섹션은 그 비디오 모드 라인의 도트 클럭(우리가 DCF 라 부른 것) 필드 하 나로 되어있습니다. 이 숫자는 연이어 나오는 섹션의 숫자들을 생성하는데 쓰이는 도 트클럭입니다. 수평 섹션은 4개의 필드로 구성되며 디스플레이의 수평 라인이 어떻게 생성되어야 하 는지를 정합니다. 이 섹션의 첫번째 필드는 화면을 구성하는데 필요한 수평 도트의 수 (우리가 HR 이라 부른 것)를 나타냅니다. 두번째 필드(SH1)는 몇번째 도트에서 수평 동기 펄스가 시작되는지를 나타냅니다. 세번째 필드(SH2)는 몇번째 도트에서 수평 동 기 펄스가 끝나야 하는지를 나타냅니다. 4번쩨 필드는 수평 프레임 길이(HFL) 전체를 나타냅니다. 수직 섹션 역시 4개의 필드로 구성됩니다. 첫번째 필드는 화면을 구성하는데 필요한 수평라인의 수(VR)를 나타냅니다. 두번째 필드(SV1)는 몇번째 라인에서 수직 동기펄스 가 시작되는지를 나타냅니다. 세번째 필드(SV2)는 몇번째 라인에서 수직 동기펄스가 끝나는지를 나타냅니다. 네번쩨 필드는 수직 프레임 길이 전체(VFL)를 나타냅니다. 예 : #Modename clock horizontal timing vertical timing "752x564" 40 752 784 944 1088 564 567 569 611 44.5 752 792 976 1240 564 567 570 600 (주의 : X11R5 에서는 소수점 표기된 도트클럭은 허용되지 않습니다) 위에서 방금 언급한(라인당 화면을 만드는 도트의 수, 화면의 도트와 동기펄스의 시작 을 구분짓는 도트넘버, 펄스의 지속시간을 의미하는 도트넘버, 동기펄스가 끝난 후의 도트의 수) 수치들이 Xconfig 파일 속에 써넣어져서 도트들을 생성해냅니다. 수평 도 트들의 숫자는 반드시 8 로 나누어 떨어져야 합니다. 수평 숫자들의 예 : 800 864 1024 1088 윗줄의 예에는 가시영역의 도트수(800), 동기펄스가 몇번째 도트에서 시작되는지(864) , 동기 펄스가 몇번째 도트에서 끝나는지(1024), 수평 라인이 몇번째 도트에서 끝나는 지(1088)가 적혀있습니다. 수평 숫자들(800, 864, 1024, 1088)이 모두 8 로 나누어진다는 점에 다시한번 주의하 십시요! 수직 숫자들은 8 로 나뉘어질 필요는 없습니다. 화면의 첫 줄부터 마지막 줄까지의 라인의 수가 프레임을 구성합니다. 한 프레임에 대 한 타이밍 신호은 라인단위입니다. 다수개의 라인이 이미지를 그려내는 것입니다. 화 면에 마지막 라인이 디스플레이된 후, 몇 라인 정도의 딜레이가 있고, 다음으로 수직 동기 펄스가 몇 라인정도 지속되고, 그다음 약간의 딜레이가 있은 후, 최후로 프레임 의 마지막 라인들이 생성됩니다. 다음 예와 같은 방법으로 수치들이 나열됩니다. 수직 숫자들의 예 : 600 603 609 630 이 예에서는 가시화면에 600 개의 라인이 있고 그다음 수직 동기 펄스가 603 째 라인 에서 시작해서 609 번째 라인에서 끝나며 총 630 개의 라인이 있음을 나타내고 있습니 다. 수직 숫자들은 8 로 나뉘어질 필요가 없음에 유의하십시요! 이제 우리의 예로 돌아갑시다. 위의 내용대로 우리가 얻어낸 결과를 다음과 같은 형식 으로 Xconfig 에 적어넣어야 합니다. DCF HR SH1 SH2 HFL VR SV1 SV2 VFL SH1 은 수평 동기 펄스의 시작틱이고 SH2 는 수평동기 펄스가 끝나는 틱입니다; 이와 유사하게 SV1 은 수직 동기 펄스의 시작틱이고 SV2 는 수직 동기 펄스가 끝나는 틱입 니다. 위와 같은 형식으로 써넣어야 합니다. 우리가 부려봤던 마술과 동기펄스를 기억해 봅 시다. SH1 은 수평 동기 펄스의 리딩 엣지(leading edge)에서 시작됩니다. 따라서 SH1 = HR + HGT1 입니다. SH2 는 트레일링 엣지(trailing edge)입니다. 따라서 SH2 = SH1 + HSP 입니다. 이와 유사하게 SV1 = VR + VGT 이고(단, VGT 는 보통 0 입니다) SV2 = SV1 + VSP 입니다. #name clock horizontal timing vertical timing flag 936x702 65 936 968 1200 1232 702 702 710 737 특별한 flag 는 필요없습니다. 이것은 넌인터레이스드 모드니까요. 이제 정말 끝난 것 입니다. 12. 모니터의 오버 만일 모니터가 고정 주파수 타입이라면 절대로 모니터의 스캔레이트를 초과하려는 시 도를 하지 마십시요. 하드웨어에서 연기가 나는 수가 있습니다! 멀티싱크 모니터를 오 버할 때는 다음과 같은 미묘한 잠재적인 문제들에 주의하십시요. 픽셀 클럭을 모니터의 대역폭의 최대값보다도 높이는 것은 오히려 덜 위험합니다(주의 : 이론적으로 볼 때, 픽셀 클럭이 모니터 대역폭의 두배에 달할 때가 물체를 구별가능 한 한계치가 됩니다. 이것은 나이키스트 정리(Nyquist's Theorem)의 직접적인 결과입 니다. 픽셀을 구동신호의 샘플들이 공간적으로 분포된 것으로 생각해 보면 이유를 알 수 있을 것입니다). 정격 최대 동기 주파수를 초과하는 것은 문제가 될 수 있습니다. 몇몇 최신형 모니터 들은 위험한 스캔 레이트가 되면 자동으로 모니터를 셧다운 시키는 보호회로를 내장하 기도 합니다만 이를 너무 믿지는 마십시요. 특히 구형 멀티싱크 모니터들에서는(예를 들면 Multisync II) 수평 트랜스포머가 한개만 들어있습니다. 이런 모니터에서는 오버 시에 보호가 잘 되지 않습니다. 비록 모니터가 분명히 고전압 정류회로를 가지고 있다 해도(고정 주파수 모니터에는 이 회로가 없습니다) 이것이 반드시 모든 가능한 주파수 범위를 커버해주는 것은 아닙니다. 특히나 싸구려 모델에서는요. 이 경우 회로를 피로 하게 만들고 또한 스크린에 도포된 인(phosphor)이 빨리 닳게되며 규격보다도 더 많은 전자파(X 레이 포함)가 모니터에서 방출됩니다. 대역폭이 중요한 또한가지 이유는 모니터의 입력 임피던스가 오직 그 대역폭 범위에 맞추어서 설계된 것이기 때문에 더 높은 주파수를 사용하면 반사파가 발생할수 있으며 이로인해 자잘한 화면의 간섭또는 전자파 방해가 일어날 수 있습니다. 하지만 정작 이보다 문제가 될만한 부분은 비디오 출력 드라이버의 slew rate(비디오 시그널의 경사도)입니다. 보통 이는 실제의 픽셀 주파수와는 무관하지만(물론 보드 제 조사가 그러한 문제에 충분히 신경을 썼다는 전제지만 말입니다) 보드의 픽셀 주파수 의 최대값 부근에서는 문제가 될수 있습니다. 따라서 오버시에는 주의하시기 바랍니다... 13. 인터레이스드 모드 (이 절은 주로 Davie Kastrup 씨가 보내주신 내 용에 의거했습니다) 일정한 도트클럭하에서, 인터레이스드 화면은 모니터의 수직부 회로가 충분히 안정적 으로 받쳐준다면 넌인터레이스드 화면에 비해 그다지 플리커가 심하지 않을 수도 있 습니다. 역사적으로 볼때 인터레이스드 모드가 먼저 발명되었습니다. 인터레이스드 모드는 같은 수직 스캔 주파수(VSF, 이 값은 주로 광고에 많이 등장합니 다)에서의 넌인테레이스드 모드보다도 뒤떨어진 성능을 보이기 때문에 악명이 높습니 다만 분명 같은 수평 스캔 레이트에서는 더 나은 화질을 보여줍니다. 따라서 보통 당 신의 모니터/비디오카드의 한계치는 인터레이스드 모드가 됩니다. 동일한 리프레쉬 레이트(혹은 하프 프레임 레이트, 즉 VSF)하에서 인터레이스드 화면 은 넌인터레이스드 화면에 비해 플리커가 더 심합니다. 90 Hz 인터레이스드 화면은 90 Hz 의 넌인터레이스드 화면보다 나쁩니다. 하지만 겨우 절반의 비디오 대역폭과 절반 의 수평 스캔 레이트만 있으면 됩니다. 만일 이것을 같은 도트클럭과 같은 스캔 레이 트의 넌 인터레이스드 모드와 비교해보면 인터레이스드 화면이 훨씬 좋다는 말입니다. 45 Hz 넌인터레이스드 화면은 견디기 힘들지요. 필자는 90 Hz 인터레이스드 모드로 10 24x768 해상도에서 수년간 Multisync 3D 모니터를 사용해 왔고 매우 만족하고 있습니 다. 제 생각에 당신이 같은 정도의 만족감을 느끼려면 적어도 70 Hz 의 넌인터레이스 드 디스플레이를 사용하셔야 할 겁니다. 몇가지 점에 주의하셔야 합니다. 인터레이스드 모드는 오직 고해상도에서만 사용하세 요. 그래야 교차적으로 발광하는 라인들이 서로 근접하게 됩니다. 어쩌면 당신은 동기 펄스의 폭과 위치를 조정해서 가장 안정적인 라인위치를 얻으려 하실지도 모르겠군요. 필자는 그러한 도트패턴을 메뉴방식으로 설정해 주는 응용프로그램을 하나 가지고 있 습니다(XCept 라는 프로그램입니다. 필자가 알기로는 다른 프로그램은 없는 것으로 압 니다). 필자는 XCept 프로그램을 써서 800x600 으로 바꿨습니다. 왜냐하면 다른 해상 도에서는 정말 눈이 아프기 때문이지요. 같은 이유로 최소한 100 dpi 폰트 이상을 사용하세요. 다른 폰트에서는 수평 빔이 최 소한 라인 두개 두께로 두꺼워 보입니다(고해상도에서는 어쨌거나 다른 선택의 여지가 없습니다). 그리고 당연한 이야기지만 하드웨어가 비슷한 리프레쉬 레이트에서 넌인터레이스드 모 드를 지원한다면야 인터레이스드 모드를 사용하지 마십시요. 하지만 당신이 모니터나 그래픽 카드의 능력의 최고치를 사용하는 해상도를 찾았는데, 플리커가 불만이라던가 아웃워시(outwashed, 대역폭을 초과한 것)된 디스플레이가 나 온다면 인터레이스드 모드를 써서 그 해상도를 쓸 수 있을 것입니다. 물론 모니터의 V SF 가 이미 충분히 그 한계치에 가깝다면야 이 방법은 소용없겠지만요. 인터레이스드 모드를 디자인하는 것은 쉽습니다. 넌인터레이스드 모드와 똑같이 해주 고 단지 두가지만 더 고려하면 됩니다. 수직 라인의 총 갯수(모드라인의 마지막 숫자) 를 홀수로 해주어야 하고, "interlaced" 라는 플레그를 설정할 경우 모니터의 실제 수직 프레임 레이트는 2배가 된다는 점입니다. 만일 당신이 설정한 모드가 "interlac e" 플래그를 논외로 했을때 45 Hz 모드로 설정한 것이라면 모니터는 90 Hz 의 프레임 레이트를 지원해 주어야만 합니다. 한 예로서 필자의 1024x768 인터레이스드 모드라인을 제시합니다. 필자의 Multisync 3 D 모니터는 수직 주파수 90 Hz 까지, 수평 주파수 38 KHz 까지를 지원합니다. ModeLine "1024x768" 45 1024 1048 1208 1248 768 768 776 807 Interlace 이 모드에서는 수평과 수직으로 거의 한계치에 가까이 설정되었습니다. 같은 모드를 " interlaced" 플래그 없이 설정한다해도 거의 모니터의 수평 성능의 한계값이 될 정도 입니다만(정확히 말하면 수직 스캔 레이트의 하한보다 약간 더 낮습니다), 넌인터레이 스드 모드의 경우였다면 참을수 없을 정도로 플리커가 심한 화면이 됩니다. 기본적인 디자인 규칙은 다음과 같습니다: 만일 모니터의 수직 성능의 절반값 미만으 로 모드를 디자인했다면, 총 수직 라인의 수를 홀수로 한 후 "interlaced" 플래그를 덧붙입니다. 대부분의 경우 화질이 큰폭으로 향상될 것입니다. 만일 어떤 넌인터레이스드 모드가 모니터 최대값의 약 30 % 내지 그 이하의 스캔레이 트인데 인터레이스드 모드를 써서 모니터의 스펙의 최대치를 끌어낼 요량이라면, 직접 손으로 인터레이스드 모드를 디자인해서 훨씬 좋은 결과를 얻어낼 수도 있습니다. 하 지만 보장은 못합니다. 14. 질문과 답변 Q. 당신이 제시한 예는 표준 스크린 크기가 아닌데 그렇게 써도 되는 건가요? A. 왜 안됩니까? 왜 꼭 640x480, 800x600, 1024x768 등으로만 써야할 이유는 어디에도 없습니다. XFree86 서버는 하드웨어를 설정하는데 있어 많은 자유를 줍니다. 보통 괜 찮은 설정에 이르기까지 2-3 번의 시도가 필요합니다. 중요한 것은 높은 리프레쉬 레 이트로 괜찮은 크기의 가시화면을 얻는것이지 눈물이 나오는 플리커를 댓가로 고해상 도를 보자는 것은 아닙니다. Q. 65MHz 도트클럭에 55 KHz HSF 가 주어졌다면 오직 한가지 해상도만이 나오게 되는 것인가요? A. 절대로 그렇지 않습니다! 위의 일반적인 절차를 따라서 몇번 시행착오를 거치면 정 말 만족할만한 세팅을 찾을수 있습니다. 이렇게 실험해 보는 것은 매우 재미있는 작업 일 수 있습니다. 대부분의 세팅은 고약한 비디오 화면을 보여주기도 할테지만 실상 최 근의 멀티싱크 모니터는 그리 쉽게 파손되지 않습니다. 하지만 그 모드에서 오래 사용 하기 전에 먼저 모니터가 당신 모드의 프레임 레이트를 지원할수 있는지 충분히 확인 하시기 바랍니다. 고정 주파수 모니터의 경우에는 주의하세요! 이런 류의 해킹은 고정 주파수 모니터에 서는 상당히 빨리 손상을 일으킬수 있습니다. 고정 주파수 모니터를 두고 실험할 때는 언제나 타당한 리프레쉬 레이트인지를 확인하세요. Q. 당신은 단지 두개의 표준 해상도를 언급했습니다. Xconfig 에서는 사용가능한 많은 표준 해상도가 있는데 굳이 타이밍을 놓고 고민해야할 이유가 있는지 말씀해 주십시 요. A. 필요가 분명히 있지요! 예를 들어 현재의 Xconfig 에 나열되어 있는 "표준" 640x4 80 해상도를 봅시다. 이것은 25 MHz 의 구동 주파수와 800, 525 의 프레임 길이, 리프 레쉬 레이트 59.5 Hz 로 설정되어 있습니다. 그리 나쁘지는 않습니다. 하지만 보통 많 은 SVGA 카드들은 구동 주파수로 28 MHz 가 가능합니다. 만일 우리가 앞에서 논한 절 차에 따라서 설정하여 640x480 를 쓴다면 프레임 길이 812(버림해서 808로 잡아야함) , 505 를 얻을수 있습니다. 이제 리프레쉬 레이트는 68 Hz 로 증가했고 이것은 표준보 다도 상당히 향상된 것입니다. Q. 지금까지 논한 것을 정리해 주시겠습니까? A. 아주 간략히 말해보지요. 1. 어떤 고정된 구동 주파수하에서는, 최고 해상도를 올리는 것은 리프레쉬레이트를 낮추는 것을 감수해야만 하고 따라서 플리커가 더 심해지게 된다. 2. 고해상도를 원하고 모니터가 이를 지원해 준다면 이에 알맞은 도트클럭, 즉 DCF 를 갖는 SVGA 카드를 사용하라. 높을수록 더 좋은 것이다! 15. 이미지에 관련된 문제해결 좋습니다. 이제 당신은 X 설정을 위한 수치들을 얻었습니다. 그 수치들을 Xconfig 에 적고 테스트 모드의 레이블을 붙입니다. X 를 시작하고 핫키를 써서 그 새로운 모드로 들어갑니다. 그런데 이때 이미지가 똑바르지 않다면 어떻게 해야 할까요? 이 절에서는 일반적인 비디오 이미지의 왜곡의 예와 그에 대한 교정법을 설명합니다. (이러한 자잘한 왜곡을 수정하는 데는 xvidtune 이 정말 좋습니다) 동기 펄스 타이밍을 변화시키면 이미지가 이동합니다. 프레임 길이를 변화시키면 이미 지가 확대/축소됩니다(동기 펄스를 상대적으로 같은 위치에 유지시켜야만 합니다. 그 렇지 않으면 이미지가 확대/축소와 동시에 이동하게 됩니다). 다음은 몇가지 특정한 해결책입니다. 수평과 수직 위치는 서로 독립적입니다. 즉, 이미지를 수평으로 움직이는 것은 수직위 치에 아무런 영향을 주지 않으며 그 반대도 마찬가지입니다. 하지만 확대/축소의 경우 는 그렇지 않습니다. 수평크기를 바꾸어 주면서 수직크기를 바꾸어 주지 않는다면 전 체적인 수정이 제한받을 수 있으며 반대 경우도 마찬가지입니다. 특히, 만일 이미지가 수평, 수직 양방향으로 너무 크다면 이를 교정하기 위해서는 틀림없이 더 높은 도트클 럭을 사용해야만 합니다. 이는 사용가능한 해상도를 높이는 것이므로 거의 문제가 되 지 않습니다! 15.1 이미지가 좌우로 치우칠 때 이를 교정하려면 수평 동기 펄스를 이동시킵니다. 즉, 수평 타이밍 섹션부분의 중간의 두 숫자가 수평 동기 펄스의 리딩엣지와 트레일링 엣지(역주: 리딩엣지는 펄스가 0 에 서 1로 올라가는 부분을 말하면 트레일링 엣지는 1상태에서 0으로 내려가는 부분을 말 함)를 규정하고 있으므로 이것을 8 의 배수만큼씩 증감시킵니다. 만일 이미지가 왼쪽으로 치우쳤다면(즉, 오른쪽 경계가 너무 커서 이미지를 오른쪽으 로 이동시키려 할때) 그 숫자를 감소시킵니다. 만일 이미지가 오른쪽으로 치우쳤다면 (즉, 왼쪽 경계가 너무 커서 이미지를 왼쪽으로 이동시키려 할때) 동기 펄스를 증가시 킵니다. 15.2 이미지가 상하로 치우칠 때 이를 교정하려면 수직 동기 펄스를 이동시킵니다. 즉, 수직 타이밍 섹션 부분의 중간 의 두 숫자가 수직 동기 펄스의 리딩엣지와 트레일링 엣지를 규정하고 있으므로 이것 을 증감시킵니다. 만약 이미지가 위로 치우쳤다면 (즉, 아랫쪽 경계부가 너무 커서 이미지를 아래로 이 동시키고 싶다면) 두 숫자를 낮춥니다. 만약 이미지가 아래로 치우쳤다면(즉, 윗쪽 경 계가 너무 커서 위쪽으로 이동시키려 한다면) 두 숫자를 증가시킵니다. 15.3 이미지가 상하좌우로 너무 큰 경우 카드의 클럭 스피드를 더 높은 것을 택합니다. 클럭 파일에 모드가 여러개 있다면 아 마도 당신이 실수로 낮은 스피드의 모드를 선택한 것일 겁니다. 15.4 이미지가 좌우로 넓은(좁은) 경우 이를 교정하려면 수평 프레임 길이를 증가(감소)시킵니다. 즉, 첫번째 타이밍 섹션의 4번째 숫자를 변화시킵니다. 이미지가 움직이는 것을 방지하려면 동기 펄스(즉, 두번 째와 세번째 숫자)까지도 움직여서 상대적으로 동일한 위치를 유지하도록 그 절반만큼 움직입니다. 15. 5 이미지가 상하로 길(짧을) 경우 이를 교정하려면 수직 프레임 길이를 증가(감소)시킵니다. 즉, 두번째 타이밍 섹션의 4 번째 숫자를 변화시킵니다. 이미지가 움직이는것을 방지하려면 동기 펄스(두번째와 세번째 숫자)를 움직여서 상대적으로 동일한 위치를 유지하도록 그 절반만큼 움직입니 다. 이와 같은 테크닉들을 구사해도 왜곡이 없어지지 않는다면 틀림없이 무언가 근본적으 로 잘못되었다는 증거입니다. 가령 게산을 잘못했거나 모니터가 받쳐줄수 있는 도트클 럭보다 더 빠른 클럭을 사용했거나 등등입니다. 마지막으로, 프레임 길이를 증가시키 면 리프레쉬레이트가 감소하고 반대로 프레임길이가 감소하면 리프레쉬 레이트가 증가 하는 관계임을 잊지 마십시요. 경우에 따라서는 모니터의 볼륨을 조절하여 자잘한 왜곡을 교정할 수도 있습니다. 이 방법의 단점은 그래픽모드의 문제를 해결하려고 공장에서 맞춰진 중앙값보다 과도하게 볼륨을 조절해 놓으면 텍스트모드로 전환했을시 화면이 치우쳐 버릴수 있다는 점입니 다. 모드라인을 올바로 설정하는 것이 더 나은 방법입니다. 16. 모니터의 성능을 그려보기 모니터 모드 다이어그램을 그려보려면 우선 gnuplot 패키지(Unix 류 운영체제 용의 프 리웨어 플로팅 언어)와 modeplot 이라는 쉘/gnuplot 스크립트를 이용해 모니터의 특성 치를 명령어 라인에서 입력하여 그려야 합니다. 다음은 modeplot 프로그램입니다. #!/bin/sh # # modeplot -- generate X mode plot of available monitor modes # # Do `modeplot -?' to see the control options. # # Monitor description. Bandwidth in MHz, horizontal frequencies in kHz # and vertical frequencies in Hz. TITLE="Viewsonic 21PS" BANDWIDTH=185 MINHSF=31 MAXHSF=85 MINVSF=50 MAXVSF=160 ASPECT="4/3" vesa=72.5 # VESA-recommended minimum refresh rate while [ "$1" != "" ] do case $1 in -t) TITLE="$2"; shift;; -b) BANDWIDTH="$2"; shift;; -h) MINHSF="$2" MAXHSF="$3"; shift; shift;; -v) MINVSF="$2" MAXVSF="$3"; shift; shift;; -a) ASPECT="$2"; shift;; -g) GNUOPTS="$2"; shift;; -?) cat <" name of monitor defaults to "Viewsonic 21PS" -b bandwidth in MHz defaults to 185 -h min & max HSF (kHz) defaults to 31 85 -v min & max VSF (Hz) defaults to 50 160 -a aspect ratio defaults to 4/3 -g "" pass options to gnuplot The -b, -h and -v options are required, -a, -t, -g optional. You can use -g to pass a device type to gnuplot so that (for example) modeplot's output can be redirected to a printer. See gnuplot(1) for details. The modeplot tool was created by Eric S. Raymond based on analysis and scratch code by Martin Lottermoser This is modeplot $Revision: 1.9 $ EOF exit;; esac shift done gnuplot $GNUOPTS < 씨입니다. Eric S. Raymond 씨가 다시 재구성했으며 쉽게 이해할 수 있 도록 Chin Fang 씨의 원본을 상당부분 다시 썼습니다. 그 과정에서 Bob Crosson 씨의 또다른 하우투 문서의 대부분을 덧붙이게 되어습니다. 인터레이스드 모드에 대한 것은 주로 David Kastrup < dak@pool.informatik.rwth-aach en.de> 씨에 의존했습니다. Martin Lottermoser 씨는 gnuplot 을 써서 모드 다 이어그램을 그리는 아이디어를 제공했고 modeplot 에 필요한 수학적인 분석을 하였습 니다. 배포된 modeplot은 Martin 씨가 특정 케이스에 대해 사용했던 원래의 gnuplot 코드를 E.S.Raymond 씨가 일반화시켜서 다시 디자인한 것입니다.