Avanti Indietro Indice

15. Tracciare le Capacità del Monitor

Per tracciare un diagramma della modalità del monitor, vi serve il pacchetto gnuplot (un linguaggio 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
#
# Dare `modeplot -?' per vedere le opzioni di controllo.
#
# ($Id: video-modes.sgml,v 1.5 1998/02/21 02:23:11 esr Exp $)

# 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: "Viewsonic 21PS"
-b <nn>              larghezza 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>    aspect ratio               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 un'analisi e codice di Martin Lottermoser
<Martin.Lottermoser@mch.sni.de>  

Questo è modeplot $Revision: 1.5 $
EOF
                exit;;
        esac
        shift
done

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

# Numeri magici.  Sfortunatamente, il grafico è abbastanza sensibile a
# modifiche in questi, 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 un sacco di 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 (moltiplicazione per 1.0 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 etichette negli assi
set xlabel 'DCF (MHz)'
set ylabel 'RR (Hz)' 6  # Put it right over the Y axis

# Generera 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 modeplot e il pacchetto gnuplot funzionanti, vi servono le seguenti caratteristiche del monitor:

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

  1. Tutte le risoluzioni hanno una singola frequenza fissa di aspetto AR = HR/VR. Risoluzioni standard hanno AR = 4/3 o AR = 5/4. I programmi modeplot assumono 4/3 di default, ma si può non tenerne conto.
  2. Per le modalità considerate, lunghezze e larghezze di quadro sono multipli fissi di risoluzioni orizzontali e verticali, rispettivamente:
            HFL = F1 * HR
            VFL = F2 * VR
    

Come linea guida, prendete F1 = 1.30 e 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

Con HSF, F1, F2 e AR fissi, questa è un iperbole nel nostro diagramma. Disegnando due curve tali 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. Fate 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 dovrebbe dare un miglior feeling per quanto possibile e per quanti compromessi si debbano fare.


Avanti Indietro Indice