Topic : The VGA Training Program
Author : Grant Smith
Page : << Previous 9  Next >>
Go to page :

have ever seen a demo, you have probably seen some form of scrolling.
Our SILKYDEMO has quite a nice example of scrolling. What it is is a long
row of text moving across your screen, usually from right to left, eg :

H     : Step 1
He     : Step 2
Hel     : Step 3
Hell     : Step 4
Hello     : Step 5
Hello      : Step 6

etc. etc. See the program attatched for an example of scrolling.

What do we scroll?

Usually, letters. Most groups put greetings and information in their
'scrollies', as they are termed. You can also scroll and entire screen
using the scrolling technique. Scrolling your text is a hell of a lot
less boring then just having it appear on your screen. Unfortunately,
'scrollies' have been used so many times in demos they are wearing a
bit thin, so usually they are accompanied by a cool picture or some nice
routine happening at the same time (In our SILKYDEMO we had a moving
checkerboard and colour bars going at the same time).

How do we scroll from side to side?

The theory behind scrolling is quite easy. Let us imagine that we are
scrolling a 16x16 font grabbed by TEXTER (;-)) across the top of the
screen (ie. 320 pixels) As we know, the VGA screen starts at zero at the
top left hand part of the screen, then counts up to the right to 319, then
goes back to the left hand side one pixel down at 320. (See Tut 1) This means
that a 16*320 scroller takes up the space 0 to 5119 on the screen. In ascii
this looks like this :

(0)   .                                    .  (319)
(320) .                                    .  (639)
"             "           "
(4800) .                                    .   (5119)

Simple enough. Now what we do is we put down the first Y-line of the first
character onto the very right hand side of the screen , like so :

[Pascal]

For loop1:=1 to 16 do
Putpixel (319,loop1-1,font['A',1,loop1],vga);

[C++]

for (loop1=0; loop1<16; loop1++)
Putpixel (319,loop1,Font['A'][0][loop1],vga);

This will draw some stuff on the very right hand side. Your screen should now
look like this :

(0)   .                                   X.  (319)
(320) .                                   X.  (639)
"             "           "
(4800) .                                   X.   (5119)

Next, we move each line one to the left, ie :

[Pascal]

For loop1:=0 to 15 do
Move   (mem[VGA:loop1*320+1], mem[VGA:loop1*320], 320);

[C++]

for (loop1=0; loop1<16; loop1++)
memcpy (vga+(loop1*320)     , vga+(1+(loop1*320)),320);

This scrolls the screen from right to left, which is the easiest to read.
To scroll the screen from left to right, swap the +1 onto the other side
of the command. Also, to increase the size of the portion scrolled, increase
the 15 to however many lines from the top you wish to scroll-1.

After this move, your screen will look like this :

(0)   .                                  X .  (319)
(320) .                                  X .  (639)
"             "           "
(4800) .                                  X .   (5119)
^
Note this space

What you then do

Page : << Previous 9  Next >>