17. Tracciare le Capacità del Monitor

Per tracciare un diagramma della modalità del monitor, vi serve il pacchetto gnuplot (un linguaggio di disegno freeware per sistemi operativi UNIX-compatibili) e il tool modeplot, uno script di shell/gnuplot per tracciare il diagramma delle caratteristiche del vostro monitor, digitate come opzioni a linea di comando.

Ecco una copia di modeplot:


#!/bin/sh
#
# modeplot -- genera un grafico X mode delle modalità disponibili con il
#             proprio monitor
#
# Digitare `modeplot -?' per vedere le opzioni di controllo.
#

# Descrizione del monitor. Larghezza di banda in MHz, frequenze orizzontali
# in kHz e frequenze verticali in Hz.
TITLE="Viewsonic 21PS"
BANDWIDTH=185
MINHSF=31
MAXHSF=85
MINVSF=50
MAXVSF=160
ASPECT="4/3"
vesa=72.5	# minima frequenza di refresh raccomandata da VESA

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 <<EOF
modeplot control switches:

-t "<description>"	nome del monitor           default: "Viewsonic21PS"
-b <nn>           	largh.di banda in MHz      default: 185
-h <min> <max>  	min & max HSF (kHz)        default: 31 85
-v <min> <max>  	min & max VSF (Hz)         default: 50 160
-a <aspect ratio>		rapporto visivo            default: 4/3
-g "<options>"   		opzioni passate a gnuplot

Le opzioni -b, -h e -v sono obbligatorie, -a, -t, -g opzionali. Potete usare
-g per passare un tipo di device a gnuplot così che (per esempio) l'output di
modeplot può essere rediretto ad una stampante. Vedi gnuplot(1) per
dettagli.

Il tool modeplot è stato creato da Eric S. Raymond <esr@thyrsus.com>
basato su analisi e codice di Martin Lottermoser Martin Lottermoser
<Martin.Lottermoser@mch.sni.de>

This is modeplot $Revision: 1.25 $
EOF
		exit;;
	esac
	shift
done

gnuplot $GNUOPTS <<EOF
set title "$TITLE Mode Plot"

# Numeri magici. Sfortunatamente, il grafico è abbastanza sensibile a
# modifiche, e potrebbe fallire nel rappresentare la realtà di alcuni
# monitor. Dobbiamo correggere questi valori per ottenere una
# approssimazione del diagramma dei modi. Questi sono ricavati analizzando
# molti valori nel database ModeDB.
F1 = 1.30	# moltiplicatore per convertire la risoluzione orizzontale
                # in larghezza di quadro
F2 = 1.05	# moltiplicatore per convertire la risoluzione verticale
                # in altezza di quadro

# Definizione delle funzioni (moltiplicando per 1.0 si forza
# l'aritmetica a numeri reali)
ac = (1.0*$ASPECT)*F1/F2
refresh(hsync, dcf) = ac * (hsync**2)/(1.0*dcf)
dotclock(hsync, rr) = ac * (hsync**2)/(1.0*rr)
resolution(hv, dcf) = dcf * (10**6)/(hv * F1 * F2)

# Mette delle etichette sugli assi
set xlabel 'DCF (MHz)'
set ylabel 'RR (Hz)' 6	# Put it right over the Y axis

# Genera il diagramma
set grid
set label "VB" at $BANDWIDTH+1, ($MAXVSF + $MINVSF) / 2 left
set arrow from $BANDWIDTH, $MINVSF to $BANDWIDTH, $MAXVSF nohead
set label "max VSF" at 1, $MAXVSF-1.5
set arrow from 0, $MAXVSF to $BANDWIDTH, $MAXVSF nohead
set label "min VSF" at 1, $MINVSF-1.5
set arrow from 0, $MINVSF to $BANDWIDTH, $MINVSF nohead
set label "min HSF" at dotclock($MINHSF, $MAXVSF+17), $MAXVSF + 17 right
set label "max HSF" at dotclock($MAXHSF, $MAXVSF+17), $MAXVSF + 17 right
set label "VESA $vesa" at 1, $vesa-1.5
set arrow from 0, $vesa to $BANDWIDTH, $vesa nohead # style -1
plot [dcf=0:1.1*$BANDWIDTH] [$MINVSF-10:$MAXVSF+20] \
  refresh($MINHSF, dcf) notitle with lines 1, \
  refresh($MAXHSF, dcf) notitle with lines 1, \
  resolution(640*480,   dcf) title "640x480  " with points 2, \
  resolution(800*600,   dcf) title "800x600  " with points 3, \
  resolution(1024*768,  dcf) title "1024x768 " with points 4, \
  resolution(1280*1024, dcf) title "1280x1024" with points 5, \
  resolution(1600*1280, dcf) title "1600x1200" with points 6

pause 9999
EOF

Una volta che avete a posto modeplot e il package gnuplot, vi servono le seguenti caratteristiche del monitor:

Il programma plot deve fare delle semplificazioni che non sono necessariamente corrette. Questo è il motivo per cui il diagramma che ne risulta ne è solo una rozza descrizione. Queste semplificazioni sono:

Come linea guida, prendete F1 = 1.30 and F2 = 1.05 (vedi Calcolare le grandezze di quadro).

Ora prendete una particolare frequenza di sincronismo, HSF. Dato l'assunto prima presentato, ogni valore di clock DCF già determina la frequenza di refresh RR, per esempio per ogni valore di HSF c'è una funzione RR (DCF). Questo può essere derivato come segue.

La frequenza di refresh è uguale al clock diviso per il prodotto della grandezza del quadro:


	RR = DCF / (HFL * VFL)		(*)

D'altra parte, la larghezza di quadro è uguale al clock diviso per la frequenza di sincronismo orizzontale:


	HFL = DCF / HSF			(**)

VFL può essere ridotto a HFL secondo i due assunti precedenti:


	VFL = F2 * VR
	    = F2 * (HR / AR)
	    = (F2/F1) * HFL / AR	(***)

Inserendo (**) e (***) in (*) otteniamo:


	RR = DCF / ((F2/F1) * HFL**2 / AR)
	   = (F1/F2) * AR * DCF * (HSF/DCF)**2
	   = (F1/F2) * AR * HSF**2 / DCF

Per un HSF fisso, F1, F2 e AR, questa è un iperbole nel nostro diagramma. Disegnando due tali curve per le frequenze di sincronismo orizzontale minime e massime noi otteniamo i bordi rimanenti dell'area permessa.

Le righe dritte che attraversano l'area possibile rappresentano risoluzioni particolari. Questo è basato su (*) e il secondo assunto:


	RR = DCF / (HFL * VFL) = DCF / (F1 * HR * F2 * VR)

Disegnando tali linee per tutte le risoluzioni che ci interessano, si possono immediatamente leggere le possibili relazioni fra risoluzione, frequenza di clock e frequenza di refresh delle quali il monitor è capace. Notate che queste linee non dipendono dalle proprietà del monitor, ma dipendono dal secondo assunto.

Il tool modeplot vi offre un modo facile per farlo. Digitate modeplot -? per vedere le sue opzioni di controllo. Una chiamata tipica è questa:


	modeplot -t "Swan SW617" -b 85 -v 50 90 -h 31 58

L'opzione -b specifica la larghezza di banda video; -v e -h settano le gamme di frequenza di sincronismo orizzontale e verticale.

Quando leggete l'output di modeplot, tenete sempre a mente che vi dà solo una descrizione approssimativa. Per esempio, non tiene conto dei limiti di un HFL risultante da una minima ampiezza richiesta dell'impulso di sincronismo, e può essere solo accurato quanto lo sono gli assunti. Non c'è niente di meglio quindi di un calcolo dettagliato (compresa un po' di magia nera) come viene presentato in Mettere Tutto Assieme. Comunque, vi dovreste sentire più a vostro agio per quanto possibile e per quanti compromessi si debbano fare.