Let's dip into the Micro's colouring box
AS promised last month, we'll be covering colours this time,
and seeing how easy they are to use.
In fact, before I give you the theory, try running Program I,
and see what happens:
10 REM *** PROGRAM I ***
20 MODE 5
30 COLOUR 1
40 PRINT'' "Colour 1"
50 COLOUR 2
60 PRINT'' "Colour 2"
70 COLOUR 3
80 PRINT'' "Colour 3"
It writes in three different colours! The way you get the micro
to change the colour of its writing (we should really say text)
is to use the COLOUR command.
COLOUR 1 causes it to print text in colour 1 from then on. In
Mode 5 colour 1 is red.
COLOUR 2 causes text to be printed in colour 2. As you can see,
in Mode 5 this is yellow.
COLOUR 3 obviously gives white.
So, in Mode 5 COLOUR 1 gives red text, COLOUR 2 gives yellow
text, and COLOUR 3 gives white text. Actually, you can fiddle
with this, but more of that later.
When you think about it, there are four colours on the screen
- the red, yellow and white writing in the foreground plus a black
background.
You can actually choose to write in black if you want to by
using COLOUR 0, but you won't notice it against the black background.
If you don't believe me try adding these lines to Program I:
90 COLOUR 0
100 PRINT '' "Colour 0"
Now Mode 5 is a four colour mode, as is Mode 1. Can you remember
the difference from last month? If not, try altering line 20 of
Program I to:
20 MODE 1
and then run the program.
That's right, Mode 5 gives you 20 characters per line and Mode
1 gives you forty. The colour numbers still refer to the same
colours, though.
What happens if we alter it to a two colour mode? Change line
20 to:
20 MODE 0
You should only see "Colour 1" and "Colour 3"
displayed, both in white. "Colour 2" has disappeared.
This is because in this mode you have only two colours to play
with, black and white.
As before, COLOUR 0 gives black. COLOUR 1 then has to be white.
When it reaches COLOUR 2, the micro has run out of fresh colours
so it goes back to black - hence the disappearance of "Colour
2".
The next colour is then white so Colour 3 appears as white.
I think you can guess what COLOUR 4 and COLOUR 5 produce!
Now try Program II. At first glance this should produce the
same results as Program I, this time using a loop. However, all
is not as it seems, since it's in Mode 2, a 16 colour mode. Try
running it and see.
10 REM *** PROGRAM II ***
20 MODE 2
30 FOR loop%=0 TO 3
40 COLOUR loop%
50 PRINT' "Colour ";loop%
60 NEXT loop%
COLOUR 1 still gives red, but COLOUR 2 now gives green, and
COLOUR 3 yellow.
An important point coming up. These colour numbers do not mean
fixed colours. As we've just seen, 2 is not always yellow, 3 not
always white, and so on. The meaning of the colour numbers varies
according to mode.
To sum up, the meaning of the colour numbers depends on the
"logic" of the situation. So they are officially called
logical colour numbers.
So, in the correct jargon, COLOUR 2 causes foreground text to
be written in logical colour 2. As we have seen, in Mode 5 this
is yellow, in Mode 2 it is green and in Mode 0 it is black.
The point is that logical colour numbers can be interpreted
as different actual colours on the screen depending, for instance,
on the mode.
To see all 16 colours in Mode 2, alter line 30 to:
30 FOR loop%=0 TO 15
and run it. Notice that it's 0 to 15 - this does in fact give
16 different colours!
The logical colours from 0 to 7 should be fairly obvious, but
what's going on with all those flashing colours from 8 to 15?
Well, logical colour 8 flashes between black and white, logical
colour 9 between red and cyan, and so on. If you can't make out
all the pairs yourself. Figure I summarises them.
It may seem odd that there are two pairs flashing between black
and white. This is because colour 8 flashes black then white,
while colour 15 flashes white then black.
None too clear, is it? Program III should help.
10 REM *** PROGRAM III ***
20 MODE 2
30 COLOUR 8
40 PRINT TAB(0,12)"Colour 8"
45 COLOUR 15
50 PRINT TAB(0,13)"Colour 15'
This shows that while they flash between the same two colours,
they are not in step. When colour 8 is showing white, colour 15
is showing black and vice versa. The same logic applies for the
other flashing pairs.
One irritating point about Program III is the fact that it leaves
text in colour 15 - everything you type in flashes! Most annoying!
You can stop this by entering:
COLOUR 1
after which the rest of the text will appear in red.
So far the logical colour numbers we've been using have changed
the colour of the foreground text. Let's try altering the background
colour.
Change mode with:
MODE 5
Then enter:
COLOUR 129
and then type in some random letters.
Hey presto, you still get white letters, but each individual
letter is on a red background.
What happens is that if you want a red background to your numbers
you simply add 128 to the logical colour number for red (1) and
use the sum in the colour statement. Hence the use of COLOUR 129.
So, to put the letters on a yellow background you would use
128 plus 2, the logical colour for yellow. That is, COLOUR 130.
However, white letters on a yellow background look awful, so
let's change the foreground text colour to red at the same time.
Entering:
COLOUR 130 COLOUR 1
should have the desired effect.
Actually we could have achieved this by entering the one line:
COLOUR 130:COLOUR1
The colon separating the two statements allows us to put them
on the same line. It's the Basic equivalent of putting a full
stop between sentences.
Try:
COLOUR 2: COLOUR 129
Can you work out how this gives you yellow foreground text on
a red background?
Now, when we changed background colours, only the background
of subsequent text characters has been altered.
At the moment the background colour is red. Try:
CLS
The whole screen is cleared to the background colour, so from
now on your characters appear in a yellow foreground on a red
background.
To prove that Colour 0 really does give a black foreground text
- I'm sure you still doubt me - try:
COLOUR 0
and type away. All should be revealed!
10 REM *** PROGRAM IV ***
20 MODE 2
30 FOR loop%=0 TO 15
40 COLOUR loop%+128
50 CLS
60 PRINT TAB(0,15)"Background Colour";loop%+128
70 pause$=GET$
80 NEXT loop%
90 COLOUR 128
100 CLS
Program IV illustrates the background colours available. Each
time through the loop (lines 30-80), the background colour is
increased and line 40 chooses a new background colour (loop%+l28)
as loop% increases each time through the loop, and line 50 clears
the screen to this colour.
Line 60 prints out the new colour number for all the world to
see, while line 70 introduces a pause, by waiting for a key to
be pushed. The loop then takes you onto the next background colour.
Lines 90 and 100 are to ensure that you aren't left with an
annoying flashing background when you drop out of the bottom of
the loop.
10 REM *** PROGRAM V ***
20 MODE 2
30 FOR loop%=0 TO 15
40 background%=loop%+128
50 COLOUR background%:CLS
60 PRINT TAB(0,15)"Background Colour";background%
70 pause$=GET$
80 NEXT loop%
90 COLOUR 128:CLS
Program V does exactly the same as Program IV, and if you look
carefully you'll see that it's equivalent - I've just used a variable
(background%) instead of loop%+128 (it's calculated in line 40).
I've also put the CLS on the same lines as the Colour statements
(lines 50 50 and 90), separating them with colons.
Well, that's all for this month. I told you it was easy! More
on colour next month.
|
FLASHING COLOURS
|
|
Colour pair
|
Logical colour number
|
|
Black-White
|
8
|
|
Red-Cyan
|
9
|
|
Green-Magenta
|
10
|
|
Yellow-Blue
|
11
|
|
Blue-Yellow
|
12
|
|
Magenta-Green
|
13
|
|
Cyan-Red
|
14
|
|
White-Black
|
15
|
Figure I: The logical colours' flashing pairs
MIKE BIBBY