Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > by-pkgid > b6e4d7870e783b97e508d7ed6be56321 > files > 38

SVGATextMode-1.10-5mdk.i586.rpm


Some general notes on monitor timings ("Monitor primer for the faint of heart")
-------------------------------------

This story is about beams, split second control stuff, black (and white)
magic, and Start-Trek-like techie mumbo jumbo. It is however NOT a science
fiction story...


All that fiddling with so-called "timings" might look a little dazzling to
you at first. That is because it IS weird. But even weird things can become
easy, once you understand them. Some more information might help you get
started. The following explanation is FAR from complete, and probably
oversimplified, but is might get some people going, and that's what it is
intended for.

1. introduction: a monitor

All picture-tube based monitors (=the heavy kind ;-) use the same principle:
a beam of light (or three for colour screens) scans the entire screen region
from left to right, and with every horizontal line, it moves a little bit
from top to bottom. It illuminates the screen on those places where the
driver (the graphic card in our case) tells it to. It does this so fast that
the eye cannot actually "see" the beam passing by. They eye is fooled by the
speed of the beam into believing that it sees a stable image on the screen.

Why do we need "timings"?

That beam of light has to "know" how fast it has to go from left to right,
and how many times it has to do that before starting at the top again. It
has to know when to move, and where to move to. So if you want it to move
repeatedly from left to right, you'll have to tell it when it must return to
the left again, to start another pass from left to right, just below the
line it has just drawn (because in that time, it will have moved a little
bit downwards, under control of the VERTICAL timing signals).

The same beam also has to know when to show a spot of light with a certain
intensity, and when to shut up because it will soon travel quickly back to
the left again, and you don't want to see THAT. What intensity it will have,
is defined by the data in the memory on your graphic card. HOW that's done,
is not your concern (at least not for THIS program).

In order to know WHEN it has to start on the left edge again, you need a
SYNCHRONIZATION signal ("sync" for short). When the horizontal sync shows
up, the beam has to move back to the left edge, so it can draw a new line.
Ideally, the beam would return to the left in no time, so it can start
drawing a new line right away. Alas, as with most things in nature, the
faster you want to move something, the more energy you'll have to put in.

And you don't want to pay a MegaWatt power-bill just because your monitor is
VERY fast at returning its beam to a new starting position, do you?

You will have to allow some time for the beam to hurry back to the left.
Some appropriately call it "flyback" time. That is why you need "BLANKING"
time. During that time, you cannot use the beam to show useful information.
It must be allowed to "fly" back to the left, without you seeing it. i.e.:
it must be "blanked away" during that time. The better the monitor,the
faster the beam can be moved back.


2. The timing specification

And all those things are what you define in that 8-number string in the
TextConfig file (or the XF86Config file for X-windows). Look at this example
for our 100x37 text mode:

  "100x37"  50.00   800 848 880 1032    600 600 606 630   -hsync -vsync font 8x16
                    -----------------------------------
                 
This section will deal with the underlined part in more detail than in the
section explaining the entire line (somewhere before this one).

But first: the pixel clock. That is the second number in the entire
description line (50.00). 50 MHz = 50 MegaHertz = 50 million clock pulses
per second. A new pixel (dot) will be pulled out of the memory on your
graphics card, and sent to the monitor beam every clock cycle. Your video
card will essentially get a new dot and send it to the monitor 50 Million
times per second.

There are 2 groups of timings, with almost exactly the same meaning: the
first group of 4 is for the horizontal movement of the beam (left to right,
the "horizontal timing parameters"), while the second group of 4 controls
the vertical movement of the beam (top to bottom, the "vertical timing
parameters").

The first group of numbers (horizontal parameters) are in units of pixel
clocks: the clock in this case is 50 MHz, which means that each clock pulse
lasts 20 billionths of a second (1 / 50 million).

The second group of numbers (vertical parameters) are in units of HORIZONTAL
sync signals: this means that for each vertical counter increment, the
HORIZONTAL counter will count an entire cycle from 1 to 1032 (in this case)
clocks of 50 MHz. You'll need this knowledge to determine H- and
V-frequencies.

But what do all the numbers mean ?

Let's look at the horizontal timings: 800 848 880 1032

The first number (800) tells the VGA chip (and the monitor) how many "active"
pixels there are in each line. Those are the pixels you will be able to use,
those will contain the graphics or text on the screen. 

The last of the four numbers says when the ENTIRE video line is finished,
including syncs and blanking. In this case, the entire video line, including
the time for the beam to travel back to the left, must be finished in 1032
pixel clock periods. The time BETWEEN 800 and 1032 will be used by the
monitor to hide the fact that he is busy sweeping the beam back.

The second number (848) tells the monitor WHEN it must START sweeping back
the beam (= the start of the horizontal sync pulse). The third number (880)
merely states the end of that sync pulse. Monitors need a certain time to be
able to detect the presence of a sync pulse. Normally a minimum of around
1/2 micro-second (=25 clock pulses at 50 MHz) but that depends heavily on
the monitor. That is why there are TWO numbers for the sync. The difference
between the middle two numbers determines how long the sync pulse will be
active, so the monitor can detect it. A small summary:

   800  =  number of pixel clocks for active (=visible) part of the line.
   848  =  start of horizontal sync pulse
   880  =  end of horizontal sync pulse
   1032 =  end of entire line. This is when the NEXT line will begin.
   
At this point, we will be able to determine the horizontal frequency of the
signal going to the monitor. Since there are 50 Million clock pulses per
second, and since the entire line, including flyback, needs 1032 of those
clock pulses, there will be 50,000,000 / 1032 = 48449 lines drawn per
second. Bingo! We got the "horizontal refresh period" or the "horizontal
frequency" of the signal going to the monitor: 48.449 kHz (kilo-Hertz = 1000
Hz).

Of course, your monitor must be able to handle that. Can it sweep that beam
almost 50000 times per second from side to side and back? Some can, some
cannot. The more expensive your monitor is, the faster it will probably be
able to do that (price is not the only criterion, of course...).

It is time to dive into your monitor manual and see what it can handle. Look
up the "Technical Specifications" section, and look for something like
"scanning frequency", or "vertical range" and "horizontal range" or
whatever. Any numbers ending in "kHz" will probably relate to the horizontal
range of the monitor. All VGA monitors can handle 30 kHz and up. Where "up"
ends, depends on the monitor. Cheap SVGA monitors stop at 36 kHz, some at 39
kHz, some at 48 kHz, some at 56 kHz, and some go on to 64 kHz. REALLY
expensive things (I know at least ONE company who has them ;-) can even take
upto 128 kHz. If you're into 29 inch 128 kHz monitors, and you have some
bucks to spare, I can get you one...

If the 48 kHz is in the range of your monitor, then you'll be able to use
that. Otherwise, lower the pixel clock until you come up with something it
CAN handle.

BUT. There is also the vertical part of the story. It is almost identical to
the horizontal part, except that this time we use the result of the
horizontal calculations to determine vertical parameters. 

Since the configuration line states a total of 630 lines, including the
VERTICAL flyback and sync time, we will get a VERTICAL frequency of 48449 /
630 = 76 Hertz. The VGA card (and the monitor) will draw a new screen 76
times per second. The vertical "refresh" is 76 Hz. This is SO fast, that
normal people will NOT see any flickering at all. Save those eyes!

If your monitor couldn't handle a horizontal frequency of 48 kHz, and you
lowered the pixel clock to 40 Mhz, so it would only be 38.759 kHz, the
vertical frequency would ALSO drop, because it depends on the horizontal
one: 38759 / 630 = 61. Now we have 61 Hz instead of 76. Still acceptable to
most of us (but not as good...).


3. blanking : what's that for?

"Blanking", or the unused area of the signal sent to the monitor, is used to
allow the monitor beam to return to the left (horizontal blanking) or back
to the top (vertical blanking).

If you would attempt to lose the blanking time completely (you could...),
you would still get some sort of an image. BUT...

Any monitor NEEDS some blanking. It uses it to determine what it will show
as "black" ("black-level clamping", in the techie mumbo-jumbo). The reason
for that lies in the fact that the monitor cannot determine what voltage of
the incoming video signal is meant to mean "black". The generally agreed
remedy for this is to put some "black" data close to the sync signal, so the
monitor can sense this, and use that as a reference for the rest of the
video signal.

If you would decide to put real video in there, the monitor will say at the
end of each line: "hey, the black level I sense here has changed to
<anything that you are trying to display in that place>". And it will change
it's interpretation of "black" to that new value. Anything BELOW that level
will be made even blacker, and anything above that will be made whiter. If
the blanking area was, say 70% white instead of black (0% white), then
anything below 70% white would be shown "blacker than black", while anything
above it would be shown 70% less white than intended. So full (100%) white
would then show up as 30% white... And that's not what you intended. 

That is the reason for those black stripes on the screen (or even a
completely black screen, worst case) if you define a blanking area that is
too small.

There's still another reason for blanking. The hideous "flyback" mentionned
earlier is not instantaneous, and the transition from a nice and slow linear
move from left to right into a fast sweep back is not all that nice and
sharp. Once the sync pulse is detected at the end of the screen, the beam
starts to slow down, stops, and then moves faster and faster to the left.
Once there, it slows down, and then starts moving to the right again. And
after a certain while, it moves from left to right again in that very
stable, linear movement, so that every pixel has the same width, and every
line the same distance from the adjacent lines. The same goes for the
vertical movement of the beam.

WHERE your monitor actually samples the "black" value, depends on the brand.
All you know is that it's somewhere near the sync. 

If you define too little blanking, but still enough for that "black-level
detection" to work all right, you will actually "see" (that is: you'll see
the result of it) the beam slowing down and speeding up, because now it is
not blanked away enough. The effect on the picture on screen will be that it
is "compressed" on the edges.


4. sync: being in control

The sync pulses' first and most important use is to tell the monitor beam
when to start "flying back", be it horizontally or vertically. That should
be clear by now.

Another thing to note is that the sync "reference" is the FIRST edge of the
sync (in most cases). The second one is just there (I am repeating myself
here) to allow the monitor to "see" it. It will be the relative position of
that FIRST edge that will determine the image position, and the amount of
blanking before and after the sync. 

If the horizontal timing is defined as "800 848 880 1032", then the blank
area BEFORE the sync (= at the right edge of the screen) will be 848-800
pixels, and the blanking DURING and AFTER the flyback is 1032-848 pixels.
How much blank pixels there are on the LEFT of the screen depends on how
fast your monitor can sweep back. If your monitor would need 2 microseconds
(= 100 clock pulses at 50 MHz) for flyback, then there are 132-848-100 black
pixels on the LEFT side of the picture. The only catch is that you don't
know how much time YOUR monitor needs for flyback... So some experimentation
will be needed. 

Due to blanking, syncs have a more subtle influence on the picture. The
relative position of the sync pulse in the blanked area of both horizontal
and vertical timing parameters determines the position of the image on your
monitor.

Any monitor always restarts drawing a new line (or a new picture) at exactly
the same leftmost position. That should be independent of all other timings.
After it has detected the sync signal, it needs a certain amount of
"flyback" time, and then it starts at the same position on the left (for a
horizontal sync) or at the top (vertical sync).

If you defined much "blank" space at the END of the line (=before the sync),
and little blanking AFTER the sync, then the image will be positionned
closer to the left, because after re-starting from that fixed position on
the left, the picture data starts relatively "soon". If you leave too little
room after the sync, the beam will still be busy "flying back" when the
picture data is already restarting to show up. You'll see a "folding" effect
on the left of the screen.

An example of this would be to define the following horizontal timings:

	"800 1000 1032 1032"
	
As you can see, the LENGTH of the horizontal sync is still 32 pixels, but it
has moved to the extreme right in the timing definition. Try it out! Now
there is lots of blank space BEFORE the sync (=at the right of the screen,
before the beam is instructed to move back to the left by the "start sync"
number), and no space at all AFTER the sync. Probably not enough time for
the beam to travel back. You will wittness the famous folding effect! come
and see!

The other extreme ("800 800 832 1032") will NOT always result in the same
effect. Now you instruct the beam to start travelling back IMMEDIATELY after
it has ended showing "active" video data. There will be virtually NO blank
data at the rightmost edge of the screen, and MUCH of it at the left edge
(=after the beam travelled back).

BUT since the beam cannot possibly know it will have to travel back so soon,
until it is actually told to do so, there will be NO folding effect. It will
only start to travell back at the start of the sync, and by then the blank
area has JUST started...

Theoretically, yes. In practice, sometimes not. You might WANT to show data
on the rightmost edge of your screen, but it could very well be that your
monitor cannot reach out that far to the right. The beam might "bump into
the right edge" way before the sync comes around to tell it to go back... So
you WILL sometimes wittness something much like the folding effect, but then
due to limitations in the monitor, not due to your akward timings specs.

Again: all this also applies to VERTICAL timings. In fact, you'll see a lot
of vertical timing specs where the vertical sync comes right after the end
of the active video data.

And that's all folks...