pdf - TRS-80 Color Computer Archive

pdf - TRS-80 Color Computer Archive
COLOR COMPUTER GRAPHICS
by
William Barden, Jr.
Radio Shack
A Division of Tandy Corp .
761 02
Ft. Worth, Texas
Color Computer Graphics:
©
1982 Tandy Corporation, Fort Worth, Texas 76102
U.S.A. All Rights Reserved.
Reproduction or use of any portion of this manual without the express written per­
mission of Tandy Corporation is prohibited. While reasonable efforts have been
taken in the preparation of this manual to insure its accuracy, Tandy CO!poration
assumes no liability resulting from any errors or omissions in this manual or from
the use of the information obtained herein.
TRS-80 Color Computer System Software:
©
1982 Tandy Co1poration and
Microsoft. All Rights Reserved.
The system software in the Color Computer microcomputer is retained in a read­
only memory (ROM) format. All portions of this system software, whether in the
R O M format or other source code form, and the R OM circuitry are copyrighted and
are the proprietary and trade secret information of Tandy Corporation and
M i crosoft . Use, reproduction, or publication of any portion of this material without
the prior written authorization of Tandy Corporation is strictly prohibited .
Design and Production by Ellen Klempner.
Editorial Supervision by Tom McMillan.
I l lustrations by Jack Wittry.
Typeset b y LeWay Composing Service.
10
9
8
7
6
5
4
3
Foreword
We've known Wil liam Barden , Jr. for several months now . A bunch of
the guys and I were watching the Dodgers on the color television in my
coffee shop, the B YTE TO EAT, when suddenly in walked a guy
carrying what appeared to be a gray box with keys on it. He said , "You
guys aren't watching this, are you?" and switched off the TY,
disconnected its antenna, and hooked up the gray box . The next thing we
knew, "OK" appeared on the screen in place of the ninth inning .
Wel l , to make a long story short, every day since then, Barden has
come in and connected his gray box to our large television . For hours on
end , he ' l l sit there watching really weird patterns that appear on the
screen - circles , boxes, tiny little figures that jump up and down .
We' re really glad he was able to finish the book, despite what he
says in the Preface . Now , maybe next season we can watch the Dodgers
again.
Max and the Guys
v
Preface
Want to use your Color Computer to draw a "pie chart " ? How about
constructing a chessboard with all chess pieces represented in four
colors? Interested in doing a precise plot of a mathematical function?
How about animating figures in your Space War game?
The Color Computer can easily do all of these things with its built-in
graphics capability . The Color Computer has hardware to provide up to
eight colors on your display, and it can plot 49 , 1 52 points on the screen !
Hardware is nothing without software, and the Color Computer has
plenty of that contained in read-only memory (ROM). Much of the Color
B ASIC and Extended Color BASIC is devoted to making use of the
powerful graphics capabilities of the hardware . Commands are available
to draw circles, rectangles, arcs, angled lines, to rotate figures, to scale
figures up and down , and many, many more .
In this book w e ' ll show you how to use the Color BASIC and
Extended Color BASIC commands to do all kinds of graphics. We'll also
describe some graphics capabilities that are hidden in the Color
Computer.
Color Computer Graphics consists of two sections: a tutorial section
in the first eight chapters and a collection of graphics techniques in the
last half of the book.
The first section, " Using Color Computer Graphics Modes and
Commands , " discusses the built-in graphics modes and all of the
graphics commands available in both Color BASIC and Extended Color
BASIC .
Chapter I describes the memory mapping of the Color Computer, or
how the display memory and the memory available for user programs is
divided up among random-access memory (RAM). The chapter also
discusses the graphics modes that allow you to display text data and what
the Color Computer calls semigraphics modes, graphics that occupy text
character positions.
Chapter 2 discusses the remaining graphics modes of the Color
Computer. These are the modes that allow you to plot up to 256 by 1 92
points on the display in as many as four colors . Graphics pages, or RAM
areas set aside to hold graphics display data, are also discussed .
For those of you that have only Color BASIC , Chapter 3 describes
how to use the Color BASIC commands .
VI
Chapters 4 through 8 describe all of the commands for Extended
Color BASIC in detai l , with many examples.
The second section of this book, "Programming Techniques for
Color Computer Graphics , " is a collection of graphics techniques and
applications for both Color BASIC and Extended Color BASIC. There
are dozens of separate descriptions, each one discussing a separate
technique.
Some of the techniques described are moving dots, PAINTing, bar
graphs , drawing shades of grey , hidden lines , filled-in circles, animation ,
and many more !
This section duplicates some of the material found in the first section
of the book but is meant more as a quick reference to a desired graphic
effect . The description of the technique, the sequence to follow with the
proper BASIC format, a practical example, and notes on the technique
are provided for each technique.
The graphics capabilities of the Color Computer are excellent. It's
really just a matter of learning them then getting some practice in
application. Color Computer Graphics should help you to do both . Now
you can see your computer dreams in technicolor!
To Max and the guys at the BYTE TO EAT, none of whom gave a shred
of encouragement on this book.
To Steve Mussatti .
VII
Table of Contents
SECTION I:
USING COLOR COMPUTER GRAPHICS MODES
AND COMMANDS
1:
2:
3:
4:
5:
6:
7:
8:
Color Computer Memory Mapping and Semigraphics
1
Modes
True Graphics Modes
31
Color BASIC Graphics Capabilities
Extended Color BASIC: Initialization
53
73
Extended Color BASIC: PSET, PRESET, PPOINT, and
85
PLOTTING
Extended Color BASIC: Drawing Lines, Rectangles, Filled
Rectangles, Circles, and Arcs with LINE and CIRCLE
Extended Color BASIC: Using the DRAW Command
99
119
Extended Color BASIC: Using the PAINT and GET/PUT
Commands
139
SECTION II:
PROGRAMMING TECHNIQ UES FOR COLOR COMPUTER
157
GRAPHICS
APPENDICES
Appendix I:
Appendix II:
Decimal/Binary Conversion Table
205
Color BASIC Commands and Actions
209
Appendix III:
Extended Color BASIC Graphics Commands and
Appendix IV:
Color Computer Graphics Modes
Actions
Index
235
211
215
COLOR COMPUTER GRAPHICS
SECTION I
Using Color Computer Graphics
Modes and Commands
Color Computer Memory Mapping and Semigraphics Modes
CHAPTER 1
Color Computer Memory Mapping and
Semigraphics Modes
To get a clear picture of Color Computer graphics, we must discuss two
topics: the memory mapping of the Color Computer and the graphics
modes that are available. These concepts are essential to a complete
understanding of Color Computer graphics. If some of this material
seems difficult, don 't hesitate to read ahead in other chapters and come
back to the first two chapters later. The chapters get easier as they go on!
Memory mapping refers to the way the memory space in the Color
Computer is divided - what portion is read-only memory (ROM) , what
portion is random-access memory (RAM), and what portion is dedicated
to other functions . The memory mapping is tied into the way the Color
Computer was engineered and designed.
The graphics modes are also built into the hardware of the Color
Computer. A special graphics generator chip controls the memory
modes. It 's not necessary to understand how the graphics generator chip
functions, so we won't be giving you a course in computer design . ( For
those who are interested in computer design , read the sequel to this book,
The Color Computer Meets the Mad Computer Scientist . )
M EMORY MAPPING
The 6809 microprocessor in the Color Computer can normally use
up to 65 ,536 bytes of memory. That address space is divided up by the
system designer into ROM , RAM , and input-output as shown in Figure
1.1.
1
2
ADDRESS
DECIMAL
HEX
65,535
65,280
65,279
FFFF
FFOO
FEFF
49,152
cooo
3 2 , 768
8000
16,3 8 4
4000
INPUT/OUTPUT
ADDRESSES
CARTRI
DGE ROMMEMORY)
( R EAD-ONLY
ROMCOLOR
(READ-ONLY
BASICMEMORY)
ROMEXTENDED
BASIC COLOR
OR RAM
(UNUSED
RMEMORY)
ANDOM-ACCESS
6 5 , 53 6
BYTES
RAM(MEMORY)
RANDOM-ACCESS
0
0000
Figure 1 . 1 :
Color Computer address space.
Bits, Bytes, and Memory
Each of the 65 ,536 bytes of memory is made up of eight bits, as
shown in Figure 1 . 2 . B it is a contraction of binary digit . A binary digit
can hold an on or off condition, represented by a I or 0.
Each byte of memory can hold binary values of 00000000 through
1 1 1 1 1 1 1 1 , which represent decimal values of 0 through 255 . You won 't
have to become proficient in manipulating binary data to do Color
Computer graphics , but you should understand the relationship of bits ,
bytes , and memory. We ' ve included Appendix I to help in converting
decimal and binary values .
Color Computer Memory Mapping and Semigraphics Modes
7
6
5
4
3
3
0
DECI MBIALNARY=
1 0 1 1 1 010
186
8 BI TS= I BYTE
Figure 1 . 2 :
B i t s in memory.
ROM Memory
ROM is used to hold the BASIC interpreter program. The BASIC
interpreter is put into ROM because the contents of ROM are never
destroyed when power is turned off on the system. Since BASIC
programs are most often run in the Color Computer, it's a logical choice
for the firmware .
Another portion of the memory space is used to hold cartridge
ROM . Cartridge ROM is similar to the BASIC interpreter ROM , except
that it holds precanned applications programs such as games ,
programmed instructions, or business packages.
RAM Memory
RAM is used for holding user BASIC programs and user
machine-language programs, for storage of variables used by the BASIC
interpreter, and for video memory. RAM is volatile and its contents are
completely destroyed whenever power is turned off, so RAM must be
reloaded with programs or data by reading in cassette or disk files.
Input-Output Addresses
Certain portions of the 65 ,535 bytes of addressing space are
dedicated to input-output addresses . These addresses look like memory
locations. They are decoded by the Color Computer hardware as a means
to communicate with Color Computer ports such as serial (RS-232)
input-output, joysticks, and sound generation .
VIDEO M EMORY
Contrary to reports , video memory is not total recall of every plot of
"I Love Lucy." Video memory is the portion of normal RAM used for
screen display .
The area from memory location 1 024 up is devoted to video
4
memory . The minimum size of this area for a single screen's worth of
data is 5 1 2 bytes; the maximum size of this area is 6, 1 44 bytes .
Naturally, the more video memory required , the less area that will be
available for user programs .
RESOLUTION
The minimum video memory area occurs when a low-resolution
display mode is used . In a low-resolution mode, the display is made up
of a small number of blocks of data. The lowest resolution mode displays
64 blocks horizontally by 32 blocks vertically, for a total of 32 x 64 or
2048 blocks. These 2048 blocks can each be represented by two bits .
Since four groups of two bits can be squeezed into each byte, the total
number of video memory bytes required is 2048/4 , or 5 1 2 bytes .
The maximum video memory area occurs when a high-resolution
display mode is used. In a high-resolution mode , the display is made up
of many smaller blocks of data. The highest resolution mode displays 256
blocks horizontally by 1 92 blocks vertically for a total of 49, 1 52 blocks .
These 49, 1 52 blocks can each be represented by one bit . Since we can
squeeze eight bits into one byte, the total number of video memory bytes
required is 49, 1 52/8 or 6 1 44 bytes .
How different grades of resolution affect a display is shown in
Figure 1 . 3 , which illustrates the same scene for coarse to fine resolution.
LEAST
RESOLUTION
Color Computer Memory Mapping and Semigraphics Modes
5
MID
RESOLUTION
G REATEST
RESOLUTION
Figure 1.3:
Resolut ion in graphics.
TRADEOFFS IN RESOLUTION
When should low resolution be used and when should high
resolution be used? In general , low resolution requires less memory while
high resolution requires greater memory. Since video memory shares the
same RAM space as BASIC and other programs , the more resolution
required, the less RAM memory that is available for B ASIC programs .
Another thing to consider is the amount of color required.
Generall y , the lower the resolution, the greater the number of colors
6
permitted . This is because there is only so much RAM memory to go
around . We can ' t specify 49 , 1 52 blocks of display and permit eight
colors for each block . To do so would require 1 6 , 384 bytes of RAM !
Another factor is speed. It takes eight times as long to process
1 6 , 3 84 blocks of display data as it does to process 2,048 blocks of
display data! If you are displaying animation on the video, it might be
better to use lower resolution and get more frames per second.
There are tradeoffs in considering the resolution to use. We ' l l
explain more of these i n detail a s w e go through the book .
Blocks vs. Pixels
We've been referring to blocks of data on the display . The common
term for such a block is a picture element, shortened to pixel. l n the rest
of this book we'll use the term pixel in place of block, but there ' s nothing
mysterious or esoteric about it. The number of pixels in a display may be
anywhere from 2048 (64 horizontal by 32 vertical) to 49 , 1 5 2 (256
horizontal by 1 92 vertical ) .
G RAPHICS MODE
We're now ready to tackle the various graphics modes that are
available on the Color Computer. There are 1 6 of these modes, ranging
from display of alphanumeric characters to high-resolution graphics
displays of 256 by 1 92 pixels. Why so many modes? The chief reason is
that the Color Computer uses a special-purpose semiconductor integrated
circuit called the video display generator, or VDG . This chip is a
general-purpose display device, and we get all of these modes for free!
Some of them are more useful than others . We 'll describe all of them and
allow your experience to determine which will be the most useful.
There are three basic display modes: alphanumeric, alpha
semigraphic, and graphic . Alphanumeric mode allows display of text
characters . The character set is defined by an internal character generator
in the VDG chip which produces 5-by-7 dot-matrix characters as shown
in Table 1 . 1 .
@
A
B
c
D
E
It> blank
#
$
%
Color Computer Memory Mapping and Semigraphics Modes
F
G
H
I
J
K
L
M
N
0
p
Q
R
s
T
u
v
w
x
y
z
[
\
]
t
Table I.I:
&
+
0
1
2
3
4
5
6
7
8
9
<
>
?
Character Set of VDG
The alpha semigraphic mode is a low-resolution mode that is related
to the alphanumeric mode. The graphic mode is a full graphic mode that
generally permits higher resolution.
All of the modes can be selected under program control . Most of
them can be selected very easily under Extended Color BASIC . We'll
start with the simplest mode and work upwards , showing you the BASIC
commands which set the mode, the appearance of the mode , and the
video memory affected.
ALPHAN U M ERIC MODE (INVERTED)
This is the normal mode of the Color Computer system which is set
on power on or reset, or upon return to the BASIC interpreter after
execution of a BASIC program .
This mode is shown in Figure 1.4. The border is always black.
There are 32 characters per line and 1 6 lines per screen, making for a
total of 512 character positions .
7
8
VIDEO DISPLAY
MEMORY (RAM)
ONE BYTE
"T"
1025
"H"
1026
"E "
1027
" R"
1024
1
I
'"
1056
'
ulu
105 7
"I"
1058
"N"
1059
"E"
1060
"2"
1061
l
r
1533
:;
"A"
1534
"s"
1535
" T"
Figure 1.4:
Alphanumeric mode screen format.
Each character position is made up of 8 by 1 2 pixels. Since a
character generated by the VDG character generator is 5 by 7 pixels,
there is a buffer area of 2 pixels on top, 3 pixels on the bottom, 2 pixels
on the right, and l pixel on the left, as shown in Figure 1 . 5 .
BUFFER AREA
,---...,
BUFFER AREA
,----..
}
BUFFER AREA
CHAR ACTER="X"
Figure 1 .5:
Character position pixels.
Color Computer Memory Mapping and Semigraphics Modes
9
The character in each character position is defined by one byte in the
video display memory. There is a one-for-one relationship between a
video display memory byte and a character position on the screen, as
shown in Figure 1 . 4 . The code in each video display memory byte is the
code shown in Table 1 . 2 . The code is a modification of the American
Standard Code for Information Interchange (ASCII), which is a standard
computer code for alphabetic, numeric, and special characters .
Character
@
A
8
c
0
E
F
G
H
I
J
K
L
M
N
0
p
Q
R
s
T
u
v
w
x
y
z
[
\
]
t
Table 1 .2:
Decimal
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Hex
Character
40
41
42
43
44
45
46
47
48
49
4A
48
4C
40
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
58
5C
50
5E
5F
Character Codes in Color Computer .
lfJ
#
$
%
&
+
I
0
1
2
3
4
5
6
7
8
9
<
>
?
Decimal
96
97
98
99
1 00
1 01
1 02
1 03
1 04
1 05
1 06
1 07
1 08
1 09
110
111
112
113
114
115
116
117
118
119
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
Hex
60
61
62
63
64
65
66
67
68
69
6A
68
6C
60
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
78
7C
70
7E
7F
10
Figure 1 . 6 shows a typical display o f alphanumeric data o n the video
screen and the corresponding characters in video memory . Note that all
values in video memory are less than 1 2 8 . Values that are less than 1 2 8
have b i t 7 , the most significant bit, set t o a zero .
I'1024 0 l 0 l 0 l 0 0
H s I s L I N E (DISPLAY LINE 1
BINARY
1025
11027026
10281029
10301031
10321033
10341035
10371036
DECIMAL
CHARACTER
8472
7383
9673
8396
7673
7869
96113
TH
s
s
L
NE
000 lll 000 00l l0l 000 00l 0l
00 11 01 00 0l 00 00 0l
000 111 001 00l 001 00l 001 001
00 ll 00 00 1l 0l 01 01
000 lll 00l 00l 000 00l 000 011
BI7Ti 6 5 4 3 2 1 0
l
Figure 1.6:
Alphanumeric data display.
Whenever bit 7 of any byte in video display memory is set to zero,
the YDG will display an alphanumeric character in the corresponding
character position on the screen .
To see how this mode works, run the following Extended Color
B ASIC program to fill all of video display memory with an ''A ''
character. You'll see the screen fill up with the "A" character.
1 00
1 10
1 20
130
1 40
R E M F I L L SC R E E N W I T H "Au
F O R l.J M = 1 0 2 4
T O 1 0 2 4+5 1 1
P O K E I.J M 1 6 5
N D: T I.J M
GOTO 1 40
CHARACTERS
Color Computer Memory Mapping and Semigraphics Modes
11
The 65 here is the ASCII code for " A " . The 1 024 is the starting
address of video memory from Figure 1 . 1 . Normally you would not have
to know this starting address to do graphics work, but, on the other hand,
it won ' t hurt you either!
ALPHAN UMERIC MODE (NON-I NVERTED)
This alphanumeric mode is related to the alphanumeric mode
inverted. In the alphanumeric inverted mode, the character is black on
green. In the non-inverted alphanumeric mode, the character is green on
black. Table 1 . 3 shows the character codes for this mode. Note that there
are 64 fewer character codes than for the inverted mode, indicating that
bit 6 (binary weight of 64) is reset.
Character
@
A
B
c
D
E
F
G
H
I
J
K
L
M
N
0
p
Q
R
s
T
u
v
w
x
y
z
[
\
Decimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Hex
00
01
02
03
04
05
06
07
08
09
OA
OB
oc
OD
OE
OF
10
11
12
13
14
15
16
17
18
19
1A
18
1C
Character
l!J
#
$
%
&
+
I
0
1
2
3
4
5
6
7
8
9
<
Decimal
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Hex
20
21
22
23
24
25
26
27
28
29
2A
28
2C
20
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
38
3C
12
J
29
30
31
t
Table 1 .3:
1D
1E
1F
>
?
30
3E
3F
61
62
63
Non-Inverted Character Codes
The VDG automatically performs this reverse-field operation for any
character which has bit 6 reset, as shown in Figure 1 . 7. Those readers
with Extended Color BASIC can run the following program to show how
video memory bytes can be intermixed with both inverted and normal
characters .
1 0 0 R E M F I L L S C R E E N W I T H I N t.J E R T E D A N D N O N I N t.i C H A R A C T E R S
1 1 0 F O R t.J M = 1 0 2 4 T D 1 0 2 4 + 5 1 1 S T E P
1 2 0 P O K E \.JM ' 1
1 3 0 P O K E 1.J M + l 1 8 5
1 4 0 N E )< T I.J M
1 50 GOTO 1 50
,..,.:..
NON-INVERTED
('REVERSE FI E LD') )
m
[Al
I N VERTED)
Figure I. 7:
BI T
B I T RESET
BI T
7 6 54 3 2 1 0
l o l1 l o l o l o l o l o l1I
"-- BI T 6 SET
7 6 543 2 1 0
l o l o l o l ol o l o l o l1I
\___ 6
Reverse field display.
The B ASIC interpreter (Color or Extended Color) normally enters a
non-inverted character code in the proper video memory location. If the
(SHIFT) and (ID keys are held down simultaneously, then the BASIC
interpreter switches from the current mode, inverted or non-inverted, to
the other mode. Try entering some simple text on the screen and use the
(SHIFT) and (ID key to see this effect. Figure 1 . 8 shows the result in
memory.
Color Computer Memory Mapping and Semigraphics Modes
L I
DI S PLAY LI N E
BI N ARY
1024
0
1
0
0
1
1
0
0
1025
0
1
0
0
1
0
0
1
1026
0
0
0
0
1
1
1
0
1027
0
1
0
0
0
1
0
1
1028
0
1
1
0
0
0
0
0
1 029
0
0
1
1
0
0
0
1
Figure 1.8:
13
1
DECI M AL CHARACTER
L
NE (NON-INVERTED)
(NON-I N VERTED)
76
73
14
69
96
49
1
Inverted and non-inverted displays.
SEMIGRAPHICS MODES
There are four semigraphics modes in the Color Computer. I'd like
to tel l you that the semigraphics modes were named after that English
computer scientist, Alfred E. Semigraphics . However, this confusing
term really comes from the fact that all semigraphics modes use the same
character position as the alphanumerics mode , a block of 8 by 12 pixels.
It is possible to intermix text and graphics in some of the
semigraphics modes , unlike the true graphics modes.
Depending upon the mode , the semigraphics modes divide the block
up into 4, 6, 8, 12, or 24 elements as shown in Figure l . 9 . The
semigraphics modes are called semigraphic 4, semigraphic 6 ,
semigraphic 8 , semigraphic 12, and semigraphic 24 , each name reflecting
the number of elements. Each mode divides the block into 2 columns 4
pixels wide .
14
L
N
E
DISPLAY LINE
�
0
0
0
oo
0 0 0
0
00
O
o
0
0
0
0
12
6
PIXELS
PIXELS
SEMIGRAPHIC
(4 ELEMENTS)
6
PIXELS
4 PIXELS
( 6
6
SEMIGRAPHIC
4
ELEMENTS)
PIXELS
4 PIXELS
PIXELS
SEMIGRAPHIC
(8
ELEMENTS)
8
Pl XE LS
PIXELS
PIXELS
2
(12
SEMIGRAPHIC
2
2
12
2
ELEMENTS)
2
2
PIXELS
PIXELS
PIXELS
PIXELS
PIXELS
PIXELS
PIXEL
I 24
SEMIGRAPHIC
I
24
(J2 Tl MES)
ELEMENTS)
'---..----'
8 PIXELS
Figure 1 .9:
Semigraphics format.
j
I
Color Computer Memory Mapping and Semigraphics Modes
15
Semigraphic 4 Mode
This mode divides up a character position into 4 elements . Each
character position of the 32 character positions per each of the 1 6 lines is
represented by 1 byte in video memory . A total of 512 bytes are required
in video memory . The mapping for this scheme is shown in Figure I . I 0 .
Each element in the character position is either o n o r off. The color
for off elements is black. The color for on elements is one of the eight
standard colors in the YDG: green, yellow , blue, red , buff, cyan ,
magenta, or orange .
Each byte in video memory holds a number of fields , as shown in
Figure I. 1 1 . The first bit is a I , indicating the semigraphics mode. The
next field indicates the color; it holds binary values from 000 through
1 1 1 , or 0 through 7 . The next 4 bits represent the on/off state of each of
the four elements - a zero is off (black) while a one is on (color) .
r
N
(
A � C D DI SPLAY LI N E 1
L
1024
10251026
N
E
10271028
10291030
A� (SEMIG RAPHIC DATA)
10311032
cD
1033
1034
512 BYTES TOTAL
4
,....
Figure 1 . 10:
Semigraphic
+
-'-
4 mapping.
7I 1 lc62lc51 Jc40IL33JL221L1ijL0ol (SEMIGRAPHIC BYTE)
GREEN 000001
COLOR
YELLOW
FI ELD ELEMENT
ON/OFF
STATUS BLUERED 011010
BUFF
100101
CYAN
MAGENTA
ORANGE 110111
4
'-----...,----' '--....----'
Figure I.II:
Fields in semigraphic
4 mode.
16
Note that in this mode all four elements have the same color; there
cannot be four separate colors in each of the four elements.
This mode is the Color BASIC high-resolution mode of 64 pixels
horizontally by 32 pixels vertically. It is used in the SET,·RESET, and
POINT commands. In these commands, an X value of 0 through 63
specifies the horizontal position , while a Y value of 0 through 3 1
specifies the vertical position. The following BASIC code uses the SET
command to set the screen to this mode with alternating colors from 0
through 7 (green through orange) .
1 00
1 10
1 20
1 30
1 40
1 50
1 60
170
1 80
1 80
R E M S E M I G R A P H I CS 4 M O D E
C= l
FOR Y = 0 TD 3 1 STEP 2
F O R }( = 0 T D 6 3 S T E P 2
S E T ( ){ 1 Y 1 C )
S E T ( ){ + 1 1 Y 1 C l
S E T 0( 1 Y + l 1 Cl : S E T 0( + 1 1 Y + l 1 C l
C = C + l : I F C = 8 THEN C = l
N E >( T }-(
N E >( T y
GOTO 1 80
Color BASIC converts the C value in the SET command to a value
of 0 through 7 by subtracting one. It then stores this value in the color
field. The X and Y values from the set turn on one of the four elements in
the character position block. As the color value must be the same for all
four elements of the block, the program above uses the same color value
for all four elements . Typical values in video memory for a small number
of points are shown in Figure l . 1 2 .
I n addition to setting the most significant bit i n the video memory
byte associated with the character position, the BASIC interpreter sets the
VDG to the semigraphics mode . This is done prior to any display work.
The entire screen is either in the alphanumeric/semigraphic mode or in
the graphic mode . The location associated with setting the mode is
location 653 1 4 . The following code will set the semigraphic 4 mode .
1 00 A = PEEK C 653 1 4 l
1 1 0 P O K E 6 5 47 6 1 0
P O K E 6 5 472 1 0
: P O K E 6 5 3 1 4 1 C A A ND 7 )
P O K E 6 5 474 1 0 :
Note that if you are using BASIC, the BASIC interpreter will
automatically set the alphanumeric/semigraphic mode whenever a return
is made to the BASIC interpreter. You do not have to be concerned about
any POKEs to the locations above.
Color Computer Memory Mapping and Semigraphics Modes
_J _
1 I1
ONEGRAPHI
COLUMNSOFCS64
17
--1 I--
ONE CHARACTER POSI T I O N
123456
DIS PLAY LI N E 1
110250 24 7 61 500 400 03 02 01 00 CHARACTER POSITION 2
0 00 01 00 0
3
10271026
0
4
1028 1 00 00 0 1 01
56
1029
1030 /
BUFF
� ELEMENT
COLOR
ON/OFF
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
,l.-
,
Figure 1.12:
I
Semigraphic
4 data storage example .
Semigraphic 6 Mode
Semigraphic 6 and the remaining semigraphics modes (semigraphics
8 and semigraphics 1 2) are the forgotten semigraphic modes. (Years ago,
these modes were implemented in the VDG. Paperwork defining the
modes was shuffled and lost, however, and neither the Color BASIC
interpreter nor the Extended Color BASIC interpreter contain commands
to set the modes . ) If the modes are used, they must be set by POKEs to
address 653 1 4 and the addresses in the range 65472 through 65477 .
In addition , the video memory area must be set to the proper byte
configurations. This is not difficult in the semigraphic 6 mode, where one
byte is used for each character position. But it's somewhat more involved
in semigraphics 8 and semigraphics 1 2 modes. We'll discuss each of the
modes in detail , but remember that you may never want to use any
semigraphic mode other than semigraphic 4, and you may want to do that
automatically through the BASIC interpreter.
Semigraphic 6 mode divides up a character position into six
elements . Each of the 32 character positions per line in each of the 1 6
l ines is represented by one byte in video memory. A total of 5 1 2 bytes
are required in video memory. The mapping for this scheme is shown in
Figure 1 . 1 3 .
18
r
I
NE
1024
1025
11002627
1028
10291030
10311032
11003433
Figure 1 . 13:
A � C D DIS PLAY LINE I
L
NE
s
A (SEMIGRAPHIC 6 DATA)
D
�
c
,._
,-
512 BYTES TOTAL
Semigraphic 6 mapping.
This mode makes two sets of two colors available. The border color
is always black, as it is for all semigraphics modes. One set of colors that
can be chosen is green , yellow , blue, and red. A second set is buff, cyan,
magenta, and orange. As in the semigraphic 4 mode, all on elements
have the same color, while all off elements are black .
Each byte in video memory holds a number of fields , as shown in
Figure 1 . 1 4 . The first field is made up of two bits that determine the
color as shown in the figure . The next six bits determine the on/off state
of each of the six elements in the character position; a one is on while a
zero is off.
.....____., '--....-----'
ELEON/OFF
MTUENST
COLOR
FI
E
LD
ST
A
GREEN 0001
YELLOW
BLUERED 11I 0
Figure 1 . 14:
Fields in semigraphic 6 mode.
Color Computer Memory Mapping and Semigraphics Modes
19
The selection o f the color set i s made b y setting o r resetting bit 4 of
address 653 1 4 . A zero in bit 4 generates magenta or orange, depending
upon the color bit in the video memory byte . A one in bit 4 generates
blue or red, depending upon the color bit in the video memory byte .
To utilize this mode in BASIC, set or reset the 653 1 4 address bit,
change the 65472-65477 addresses, and then fill the 5 1 2 bytes of video
memory with the graphics you want displayed. The following program
uses an on color of blue and sets a checkerboard pattern on the video
display .
1 0 0 R E M S E M I G R A P H I C S 6 M OD E
1 1 0 A = P E E K ( 6 5 3 1 4 ) : P O K E 6 5 3 1 4 1 C A A ND
7 ) + 8+ 1 6 ' U S E 1 6 D R 0
1 2 0 P O K E 6 5 47 6 1 0 : P O K E 6 5 474 1 0
P O K E 6 5 47 2 1 0
1 3 0 F O R V M = 1 0 2 4 T D 1 0 2 4+ 5 1 1
1 4 0 I F I V M A ND 3 2 1 = 0 T H E N P O K E V M 1 l 6 6
ELSE POKE VM 1 1 53
1 5 0 N E> : T I.J M
1 60 GOTO 1 60
The appearance of the display is shown in Figure 1 . 1 5 .
BLACK
BORDER
------6 4 COLUMNS--------+
.- -.- -.- - - - - - - - - - - - - - - -i
••
( BELEMENT
LUE
BLACK
SPACE
BLUE
�
\__
�
!
j1j oi1! 0 ! 0 !1!1 l o l
51 31 0
Figure l . 15:
Semigraphic 6 example.
20
Semigraphics 8, 1 2, and 24 Memory Requirements
·
·
Two preceding semigraphic modes used 1 byte in memory for all
graphics elements and required 5 1 2 bytes of memory. The semigraphics
8, 1 2 , and 24 modes require 4, 6, and 1 2 bytes of memory respectively
for each set of graphics elements . This increases the video memory
requirements to 2048 , 3072, and 6 1 44 respectively.
There is 1 byte of memory for each of the rows in the graphic
character position for these three modes. The memory mapping of each
character position is somewhat involved. The byte for each row is
displaced 32 bytes from the last row rather than being adjacent in
memory. We'll give you examples in the discussions fol lowing.
Semigraphics 8 Modes
This mode divides the character position into 8 elements, each
element being 4 by 3 pixels , as shown in Figure 1 . 1 6 . Each character
position of 8 elements is represented by 4 bytes in video display memory,
making a total of 4 x 5 1 2 bytes, or 2048 bytes of video memory .
----- 64 GRAPHI C S -------­
COLUMNS PER LINE
-----3 2 CHARACTER -------­
POSITIONS PER LINE
LINE 1
64
GRAPHICS
ROWS PER
S C REEN
16
LINES
64 x 64
I
�·
1 ST ROW
2NO ROW
3RO ROW
4TH ROW
1024
1025
1026
1027
TOP ROW OF
L--
LINE l,
�
-- _;,__c P_2...J ®
CP3 ©
�------_
· , __c [email protected]
--
·
1055
TOP ROW OF LINE
1056
2ND ROW OF LINE
1057
CPI
• ,
l,
�
CP32
· CPI
@
�-----''-'CC.P..:[email protected]
2048 BYTES TOTAL
Figure 1 . 16:
ONE C HARACTER
POSITION
Semigraphic 8 mapping.
L
CP 1
CP2
CP3
rlNE
�INE
32 BYTES DIFFEREN C E
BETWEEN ROWS I N
THE SAME C HARACTER
POSITION
Color Computer Memory Mapping and Semigraphics Modes
21
The relationship between the video memory bytes and the elements
of the character position is shown in Figure 1 . 1 7 . There is a memory byte
for each row . Each byte of the 4 memory bytes has bit 7, the most
significant bit, set. The next 3 bits of each byte are the color for the row .
The remainder of the bytes hold the on/off state for each of the 8
elements , 2 elements being specified per byte.
ROW 21
4
ROW 1 BYTE
ROW 2 BYTE
3
L]L 5 � LL64 } ONECHARACTER
LL I LL 2o POSITION
3
X=DON'T
(0 OR I)CARE
ROW 4 BYTE I C 2 C 1 C o x x L 1 L o +96
COLOR
FI E LD ELEMENT
ON/OFF
STATUS
Figure
'---...--' �
1.17:
Semigraphic 8 format.
Eight colors can be specified for each row . It is possible to have
green in row 0, red in row 1 , orange in row 2, and buff in row 3 , for
example. As in the other semigraphics mode, the border is always black .
As we mentioned earlier, this mode is not implemented in either
Color B ASIC or Extended Color BASIC. It must be invoked by setting
up the proper data in memory and issuing a POKE to address 653 1 4 and
POKEs to addresses 65472-65477.
The program below shows how the mode is used . A POKE to 653 1 4
o f 0 and a POKE 6547 5 , 1 sets the mode. We ' ve chosen to store a
checkboard pattern of 64 elements by 64 elements . Each new on element
will be set to a different color. There will be off (black) elements
between each on element. The appearance and layout is shown in Figure
1 .18.
22
1 0 0 R E M S E M I G R A P H I CS 8 M O D E
11 0 A = P E E K ( 8 5 31 4 ) : P O K E 8 5 31 4 t <A A N D 7>
1 2 0 P O K E 8 5 47 8 1 0 : P O K E 8 5 47 5 1 1 : P O K E
8 5 47 2 1 0
130 C = 0 : D T =1 2 8 + 0 + 8 : N = B
140 F O R L N = 0 TO 8 3
150 F O R C P = 0 T D 8 2 STE P 2
180 P O K E 1024+LN*32+ C P / 2 1 D T
170 N E >( T C P
1 8 0 C = C +1 8 : I F C = 1 2 8 T H E N C = 0
180 N = N / 2 : IF N<1 THEN N=B
200 D T =128+C+N
210 N E ){ T L N
220 GOTO 220
BLACK BORDER
BLACK
SPACE
--- ---
ROWS64
I
I
I
+
GREEN
YELLOW
BLUE
REDBUFF
CYAN
MAGENTA
ORANGE
Figure
1.18:
11
11
11
11
00 00 01
00 11 01
11 00 01
1I 11 0I
COLOR
(REPEATS)
10
00
10
00
01 00 00
00 01 01
01 00 00
00 01 0I
BIT
(RONEPEATS)
� �-��-�
Semigraphic 8 example.
Color Computer Memory Mapping and Semigraphics Modes
23
The program above uses two loops . The outer loop (FOR LN = 0 TO
64) increments the row number LN from 0 through 63 . The inner loop
(FOR CP = O TO 3 1 ) increments the column number CP from 0 through
63 . A total of 64 x 32 or 2048 passes are made through the loops,
representing 2048 POKEs for the 2048 bytes of video memory.
For each byte of video memory , a POKE of DT is done. OT is the
byte for the current row and 2 columns. It is equal to 1 28 (most
significant bit is always a one) + C (the current color value) + N (the
current bit to be set) . The color value C changes by one for each new
row , cycling through 0 through 7. The bit value changes to produce the
checkerboard pattern .
Prior t o the POKEs , the semigraphics 8 mode i s set b y POKEs to
653 1 4 and 65472-65477.
Sem igraphics 12 Mode
This is the fourth semigraphics mode. It divides the character
position into 1 2 elements as shown in Figure I . 1 9 . Each element is 4 by
2 pixel s , as shown in the figure . Each character position of 12 elements is
represented by 6 bytes in video display memory, making a total of
6 x 5 1 2 bytes or 3072 bytes of video memory.
---64 GRAPHICS ------­
COLUMNS PER LINE
--- 32 CHARACTER
-----­
POSITIONS PER LINE
l
LINE l
96
G R APHICS
ROWS PER
f'"
ONE CHARACTER
POSITION
!ST ROW
2ND
3RD
4TH
5TH
6TH
1024
1025
1026
1027
TOP ROW OF LINE l, CPI
"-------'-· ' '' "--<
- ©
•
•
•
•
• I CP4
©
1055
TOP ROW OF LINE 1, CP32
1056
2ND ROW OF LINE l, CPl
1057
1058
�
·"'-,_
, , 2_, ®
'-------
L._____0;_
' c_ n
@
_, @
"------0'-' c_P-<
J @
L
3072 BYTES TOTAL
Figure 1 . 19:
Semigraphic 12 mapping.
�:1 :
c
(!!
2
c
�
J
cC1
LINE
LINE
��� �;� ��! �
32 BYTES DIFFER E N C E
w
R
E
R CTER
POSITION
24
As Figure l . 20 shows, there is a memory byte for each row, similar
to the mapping of semigraphics 8 mode. Each of the 6 bytes has bit 7, the
most significant bit set. The next 3 bits of each byte are the color for the
row . The remainder of the bytes hold the on/off state for each of the 1 2
elements , 2 elements being specified per byte.
l
ROW 2
34
6
'"�'"}
LL1g
LL 3
L1
LLe6 CHARAC
LL 42 ONEPOSI TIOTERN
Lo
COLOR
FI E LD ON/OFFELEMENTSTATUS
C 2 C 1 C o Lu L lO
C 2 C 1 C o Lg Le
C 2 c l co L 7 L 6
C 2 C l co
L3 L 2
C 2 C 1 Co
L 1 Lo
C2 C 1 Co
5
,------...
ROW l BYTE
ROW 2 BYTE
ROW 3 BYTE
ROW 4 BYTE
ROW BYTE
ROW 6 BYTE
Figure
5
1.20:
�
x
x
x
x
x
x
x
x
x
x
x
x
L5
L4
+o
+32
+64
+96 X=DON'T CARE
+ 128 (0 OR 1l
+160
Semigraphic 12 format.
Eight colors can be specified for each row . The border is always
black. Again, this mode is not implemented in either Color BASIC or
Extended Color BASIC but must be set up by storing the proper data in
memory and issuing 2 POKEs.
The program below shows how the mode is used. POKEs to 653 1 4
and 65472-65477 set the mode. We'll perform a similar program to the
one for semigraphics 8 and store a checkerboard pattern of 64 by 96
elements. Each new on element will be a different color. There will be
off elements between each element. The appearance and layout is shown
in Figure l. 2 1 .
Color Computer Memory Mapping and Semigraphics Modes
25
1 0 0 R E M S E M I G R A P H I CS 1 2
1 1 0 A = P E E K ( 6 5 3 1 4 ) : P O K E 6 5 3 1 l'.1 1 ( A A N D 7 )
1 2 0 P O K E 6 5 477 1 1 : P O K E 6 5 47 4 1 0 : P O K E
6 5 47 2 1 0
1 3 0 C = 0 : D T = 1 2 8+ 0 + 1 0
N= 10
1 40 FOR L N = 0 T O 95
1 50 FOR C P = 0 TD 32
1 6 0 P O K E 1 0 2 4+ L N * 3 2+ C P 1 D T
1 7 0 N E >( T C P
1 8 0 C = C+ 1 6 : I F C = 1 2 8 T H E N C = 0
1 9 0 I F N = 1 0 T H E N N = 5 E LS E N = 1 0
2 0 0 D T = 1 2 8+ C+ N
2 1 0 N E >< T L N
220 GOTO 220
BLACK BORDER
GREEN
YELLOW
BLUE
REDBUFF
CYAN
MAGENTA
ORANGE
GREEN
YELLOW
BLUE
RED
96ROWS1
I
I
I
i
Figure
1.21:
-
-
-
l
0
0
0
l
0
l
l
0
0
l
0
l
0
l
l
0
l
0
l
0
l
0
0
l
0
l
l
0
l
0
l
l
l
0
0
l
0
l
0
l
l
0
l
0
l
0
l
l
l
l
0
l
0
l
0
l
l
l
l
0
l
0
l
l
0
0
0
l
0
l
0
l
0
0
l
0
l
0
l
l
0
l
0
l
0
l
0
l
0
l
l
0
l
0
l
� �������
T
(RCOLOR
EPEATS) ( 2 BI(RTONEPEATS)
S IBIGNORED)
Semigraphic 1 2 example.
This program is very similar to the program for semigraphics 8 .
(What the heck, i t saves wasted energy i n being creative . . . ) I t operates
from rows 0 through 9 5 , however, reflecting the fact that there are 96
vertical row s . The color variable C and bit on value N change as before,
except that N is flipped back and forth between a 1 0 1 0 and 0 1 0 1
configuration. (Only 2 o f the on bits are used i n each 1 0 1 0 or 0 1 0 1
value . )
26
Semigraphics 24 Mode
This is the super semigraphics mode . It divides the character
position into 24 elements , each element being 2 by 1 pixels as shown in
Figure 1 . 22. Each character position of 24 elements is represented by 1 2
bytes i n video display memory , making a total of 1 2 x 5 1 2 bytes , or 6 1 44
bytes of video memory.
----- 64 G R A P H I C S -------­
C OL U M N S P E R L I N E
----- 3 2 C H A R AC T E R -------­
PO S I T I O N S P E R L I N E
L I NE l
2
192
GRA P H I C S
ROWS P E R
S CR E E N
64 x 1 9 2
16
L I N ES
3
4
ONE C HARACTER
POS I T I O N
1024
TOP ROW OF L I N E l, C P I
1 0 25
, CP2
1026
, CP3
1027
, CP4
1055
TOP R O W O F L I N E I , C P 3 2
1056
2 N D ROW OF LINE I, C P l
1057
, CP2
10 58
, CP3
6 1 44
Figure 1.22:
Semigraphic
24
B Y T ES TOTA L
mapping.
A
CPI
®
©
®
@
@
®
CP2
CP3
LINE 2
L
3 2 BYT E S D I F F E R E N C E
BE TWE E N R O W S I N
T H E SA M E C H A R A C T E R
P OS I T I O N
Color Computer Memory Mapping and Semigraphics Modes
27
Each row with 2 columns i s represented b y 1 memory byte a s in the
preceding two semigraphics modes, as shown in Figure 1 . 23. Each row
may be one of eight colors, as in the other modes . Again, the format for
each byte is virtually identical to the other modes, as shown in the figure .
The border is black as before . Again, this is a forgotten mode as far as
the B ASIC interpreters .
L2220
161814
1210 ONEPOSI TCHARACTER
86 I ON
42
0
ROW l2 L2321
435 191715
67 1311
89 97
1011 53
12
ROW 2 BYTE 11 CC2 cCl CC o L2123 2220 xx xx +O+ 32
ll cC22 cCll cCoo 1917 1618 xx xx ++9664
34
11 CC22 Ccll CCoo 1513 1214 xx xx ++ 160128
56
+ 192 NOTTHESECONTBYTESI GUOUSARE
11 CC22 CCl1 CCoo xx xx 119 108 +224
78
910 11 CC22 Cc l1 CCoo xx xx 57 64 ++ 288256
1112 1 CC22 ccll CCoo xx xx 31 02 ++ 320352
2lo
ELEMENT
X • DON' T CARE
OFF
FlCOLOR
ELD ONSTATUS
!
1
I
Figure l .23:
Semigraphic 24 format.
28
The program below is almost identical to the semigraphics 1 2 mode.
(Writers are lazy by nature. ) In this case, however, the number of rows
goes from 0 through 1 9 1 . As in the other examples, the mode is set by
POKEs to 65475 and 65472-65477 .
1 0 0 R E M S E M I G R A P H I CS 2 4
1 1 0 A = P E E K < 6 5 3 1 4 ) : P O K E 6 5 3 1 4 1 <A A N O 7 )
1 20 POKE 65477 , 1 : POKE 65475 , 1 : POKE
65472 1 0
1 30 C = 0 : DT = 1 28+0+ 1 0
1 40 FOR LN=0 T D 1 8 1
1 50 FOR C P = 0 T D 32
1 60 POK E 1 024+LN*32+C P 1 DT
1 7 0 N E )< T C P
1 80 C = C+ 1 6 : I F C = 1 28 THEN C = 0
1 8 0 I F N = 1 0 T H E N N = 5 E LSE N = 1 0
200 DT = 1 28+C+N
2 1 0 NEXT LN
220 GOTO 220
USING THE SEMIG RAPHICS MODES
The semigraphics 8, 1 2, and 24 modes are somewhat cumbersome
to use because there are no BASIC functions that implement them. As
we'll see in the next chapter, however, they do offer one advantage over
the true graphics modes - they provide eight colors with a maximum
resolution of 64 by 192, which is a fairly fine resolution. Keep them in
mind for possible use in BASIC or assembly-language programs if the
graphics modes do not provide enough colors for your application.
Let's emphasize again that the semigraphics 6, 8, 12, and 24 modes
are much harder to use than the graphics modes handled automatically in
the BASIC interpreters. You may not want to bother with POKEing into
the address locations. This information is presented for your amazement
and amusement only!
In the next chapter we'll look at the remaining graphics modes, the
true graphics modes. These are implemented in Extended BASIC and can
be used much more easily than the semigraphics modes covered in this
chapter.
Color Computer Memory Mapping and Semigraphics Modes
N OTES
29
True Graphics Modes
31
CHAPTER 2
True Graphics Modes
In this chapter we 'll look at the true graphics modes of the Color
Computer. Many of the modes are supported by the Extended Color
BASIC but can be used with Color BASIC if you have enough
random-access memory (RAM) for the video memory area and are
willing to set up the data in video memory in your own BASIC code .
There are 8 different graphics modes in the Color Computer, ranging
from a four-color 64 by 64 mode, which requires 1 024 bytes of video
memory, to a two-color 256 by 1 92 mode , which requires 6, 1 44 bytes of
video memory . Generally, the higher the resolution, the fewer colors and
the greater the amount of video memory required. The number of colors
is limited to either two or four, plus a border color. The available
graphics modes are shown in Figure 2 . 1 .
As you can see from the figure , Extended Color BASIC supports the
5 highest resolution modes. We'll discuss each of the modes in detail ,
showing you how to use them in Extended BASIC and in your own code.
B efore we get into the detailed discussion , however, let's look at some of
the characteristics of these modes .
32
MOOE
SCREEN
....f.-
64-- 1024
64 X 64 F 64 FOUR
COLORS BYTES
128- 1024BYTES
128X64T 64i TWOCOLORS
VIDEO
MEMOR Y
I
f
-f-
REQUIRED
-
-
1------1
-
-f-
l
2048
BYTES
1BYTES
536
�
2048
BYTES
�
3012BYTES
I
�
'-
I
I
I
I
I
)
2048
BYTES
2048
BYTES
6144
BYTES
-t-
12s- 6144
(128Xl
PMODE92F3) 19i2 COLORS
FOUR
BYTES
6144
256BYTES
256X192
T
192
(PMODE4) i TWOCOLORS
4
Figure
2.1:
Graphics modes.
::�:,
�
-f-
-t-
I
I
-f-
12s128 X 64 F 64i COLORS
FOUR
128(P128X96T
MODE 0) 96i COLORS
TWO
128(128P MODEX961F 96i FOUR
COLORS
128(128PMODEX 1922)T 19i2 COLORS
TWO
} 1536BYTES
I
)
True Graphics Modes
33
BORDER AND COLOR SET FOR GRAPHICS MODES
The border in the alphanumeric and semigraphics modes was always
black, no matter what colors were used on the image area of the screen.
In the graphics modes we have a choice of either a green or a buff color
for the border. By border, of course, we mean the space surrounding the
area in which we can actually store graphics characters or text (see Figure
2 . 2) . The choice of border is hardwired by the video display generator
(VDG) chip and can't be changed.
GREEN OR BUFF BORDER
GRAPHI C S OR TEXT
Figure
2.2:
Border area.
The color set in the graphics modes is also predefined, as shown in
Table 2 . 1 . The color sets in the four-color mode are green, yellow , blue,
and red with a green border, or buff, cyan, magenta, and orange , with a
buff border. Note that the border color for each set is always the first
color of the set . The color sets in the two-color mode are black and green
with a green border or black and buff with a buff-colored border. Here
the border is the last color of the set.
The color set , including border, is selected in Extended BASIC by
the SCREEN command, which has the format
S C R E E N type 1 color set
In the command above , type is 0 for text screen or 1 for graphics
screen , and color set is 0 or l for the two-color sets .
34
Two-Color
Four-Color
Color
HW BASIC
HW BASIC
Color
Color
Set o
*Green
Yellow
Blue
Red
0
1
2
3
1
2
3
4
Black
*Green
0
1
0
1
Color
Set 1
*Buff
Cyan
Magenta
Orange
0
1
2
3
5
6
7
8
Black
*Buff
0
1
0
1
HW
Table 2 . 1 :
=
hardware code
BASIC = BASIC code
*
=
border color
Graphics Modes Color Sets .
The SCREEN command selects the color set by outputting a color
set select (CSS) signal to the VDG . This signal is either a 0 or 1 ,
selecting one o f the two color sets available. There are never more than 2
color sets available in any VDG mode, be it alphanumeric, semigraphics ,
or graphics.
The type parameter switches from a text screen to graphics screen .
In fact, this simply involves setting the alphanumeric/semigraphic mode
or the graphics mode. The SCREEN command can be used to switch
color sets in the text screen mode, resulting in red on black or black on
green . In the graphics mode it switches colors in a similar fashion.
VIDEO MEMORY MAPPING IN THE GRAPHICS MODES
In the semigraphics modes of the last chapter, the video memory
mapping was somewhat less than straightforward . (This chapter was
simplified from an earlier version which put a Color Computer user in a
trauma ward in Des Moines . ) The memory mapping in the graphics mode
is much easier to understand , and while such an understanding is not
essential to successful use of this mode , it will enable you to solve
problems more easily and create more sophisticated applications .
In all of the graphics modes the data for display is in video memory
as a string of 1 - or 2-bit fields . The upper left element of the display is
represented by the first field, the next element to the right by the second
field , and so forth down to the field for the lower right element. Each
True Graphics Modes
35
TWO-COLOR
GRAPHI
DISPLAYCS
VIMEMORY
D EO
BYTE
LDS"
DEFI N8E"FI8 EELEMENTS
FOUR-COLOR
DIGRAPHI
SPLAYCS
VIMEMORY
D EO
BYTE
Figure
2.3:
LDS"
DEFIN4E"FI4 EELEMENTS
Fields in the graphics modes .
field is 1 bit for a two-color mode or 2 bits for a four-color mode, as
shown in Figure 2. 3 .
The total amount of video memory in bytes required is 1 x H x V/8
or 2 x V x H18 , where H is the number of horizontal elements and V is the
number of vertical elements . The product is divided by 8 to find the
number of 8-bit bytes required. As an example of this, suppose that we
have a graphics mode of 1 28 by 1 92 . In this mode we have only two
colors . The total number of bits is I x H x V = I x 1 28 x 1 92 = 24 ,576,
and the total number of bytes required is 24 ,576/8 = 3 ,072 .
Each memory byte represents 4 or 8 elements, depending upon
whether a four- or two-color mode is in force. For example, the upper
row of a 1 28 horizontal element mode with two colors is represented by
1 28/8 or 1 6 bytes. These bytes would occupy consecutive memory
locations starting at video memory location 1 536 and ending in video
memory location 307 1 .
As in the other video modes, video memory is a part of RAM and
continues upward, as shown in Figure 2 . 4 .
36
,
,,..
l EOO
7680
6144 1800
4608 1200
3072
1536 0 600
1024 0400
0 0000
ocoo
Figure 2.4:
GRAPHIFOURCSMOREPAGES
l
GRAPHICS PAGE 4
RAM
GRAPHICS PAGE 3
GRAPHICS PAGE 2
GRAPHICS PAGE
TEXT SCREEN
SYSTEM USAGE
1
Video memory in graphics.
PMODE COMMAND
The PMODE command in extended BASIC selects one of 5 higher
resolution graphics modes . The format of the PMODE command is
P M 0 0 E mode 1 start-page
The mode value in PMODE may be 0 through 4 . The mode values
correspond to the resolutions and colors shown in Table 2 . 2 . The
start-page selects a video memory page from 1 to 8 . We' ll discuss pages
a little later in this chapter, but for now assume that we're talking about
the first page, starting at video memory location 1 536.
As you can see from the table, there are three modes not supported
by the PMODE command. These three modes are the 64 x 64 F mode,
the 1 28 x 64 F mode, and the 1 28 x 64 T mode. The first number is
True Graphics Modes
P MODE
Resolution (H x V)
Bytes
Pages
0
1
2
3
4
1 28 x 96
1 28 x 96
1 28 x 1 92
1 28 x 1 92
256 x 1 92
1 536
3072
3072
61 44
61 44
1
2
2
3
4
37
Colors
Blk/Grn or Blk/Buff
GYBR or BCMO
Blk/Grn or Blk/Buff
GYBR or BCMO
Blk/Grn or Blk/Buff
GYBR is green, yellow, blue, red
BCMO is buff, cyan, magenta, orange
Table 2.2:
PM ODE Values vs. Resolution .
the horizontal resolution, the second is the vertical resolution, the "F" is
four-color, and the "T" is two-color. This is how we ' ll refer to these
modes in the following discussion . We ' ll use the PMODE designators for
the other five modes .
The 64
x
64 F Mode
This mode is not supported by BASIC . It is a four-color mode that
displays graphics in a 64 by 64 matrix. As this is a total of 8 1 92 bits , it
requires 1 024 bytes of video memory. The mapping for this mode is
shown in Figure 2 . 5 .
This mode can b e set b y POKEs, providing that the video memory is
properly set up. The following BASIC program shows how to utilize this
mode . The program draws alternating blue and red vertical stripes and
then switches to the alternate color set for magenta and orange stripes .
1 00
1 10
1 2 Q)
1 3 Q)
1 4 Q)
1 50
1 60
1 70
1 80
1 80
200
210
220
R E M 6 4 >: 6 4 F G R A P H I C S
P O K E 6 5 47 3 ' 1
P O K E 6 5 47 4 , Ql
P O K E 6 5 47 6 , Ql
A = < P E E K <6 5 3 1 4 ) A N D 7 ) + 1 2 8
POKE 653 1 4 ,A
F O R I.J M = 1 0 2 4 T D 1 0 2 4+ 1 6 * 3 1 + 1 5
P O K E t.J M , 1 87
N E >< T t.J M
F D R I = l T D 6 0 0 : N E >< T I
A = < P E E K < 6 5 3 1 4 l A N D 7 ) + 1 2 8+ 8
POKE 653 1 4 tA
GOTO 220
38
ROW 1
ROW 2
I
64
+
BYTE 1
ROW 6 4
C 1C o C 1Co C 1 C o C 1 C o
F I RS T 4 E L E M E N T S OF ROW 1
2
NEXT 4
3
NEXT 4
4
16
17
1024
�
�
C 1 C o C 1 C o C 1 C o C 1 Co
COLOR SET 0
* GREEN
YELLOW
BLUE
RED
L A S T 4 ELE M E N T S OF ROW
1
F I R S T 4 E L E M E N T S OF ROW 2
LAST 4 E L E M E N T S OF R OW 6 4
COLOR SE T 1
* BUFF
CYAN
M A G E N TA
ORANGE
* = BORDER COLOR
Figure 2.5:
6 4 X 6 4 F mode mapping.
The first 3 POKEs set the VDG to the 64 by 64 mode. The next
PEEK statement sets the graphics mode . The four statements must be
used exactly as they appear. The FOR . . . TO loop stores a value of 1 87
into the start of video memory through the halfway point. There are 1 6
bytes per row, and the last location to be stored is
1 024 + 1 6 x 3 1 + 1 5 .
After a short timing loop, a second POKE to 653 1 4 is done to
change the color set select.
The data value of 1 87 stored in each byte is 1 0 1 1 1 0 1 1 in binary.
There are 2 bits for each element, so this represents alternating 1 0s artd
l l s , or blues and reds (color set 0) .
The figure drawn is shown in Figure 2 . 6 . There will be "garbage "
in the bottom of the screen . A full screen in this mode is 1 024 bytes . As
only one half of the screen was written , extraneous characters are present
in the bottom half of the screen .
True Graphics Modes
39
G R E E N OR B U F F B O R D E R
BL U E / R E D OR
M A G E N TA /O R A N G E
STRIPES
GARBAGE
Figure 2.6:
The 1 28
64 x 64 F mode example.
x
64 T Mode
This is the second mode not supported b y BASIC . I t is a two-color
mode that displays graphics in a 1 28 by 64 matrix . It requires the same
amount of memory as the 64 x 64 F mode
1 024 bytes . The
horizontal resolution has been doubled at the expense of halving the
number of colors available. The mapping for this mode is shown in
Figure 2 . 7 .
-
This mode can again be set b y POKEs i n a manner very simi lar to
the 64 x 64 F mode . The following program is almost identical to the
64 x 64 F program except that it initializes the VDG to the 1 28 x 64 T
mode and stores a value of I 0 1 0 I 0 1 0 ( 1 70 decimal) . These represent
alternating black and green stripes in the first color set and alternating
black and buff in the second color set. Note that one of the colors used in
each case is the border color, so the edges merge into the border.
1 00
1 10
1 20
1 30
1 40
1 50
1 80
1 70
REM 1 2BX84T GRAPH I CS
POKE 85473 , 1
POKE 85474 t0
P O K E 85478 t 0
A = ( PEEK ( 853 1 4 l A N D 7 l + 1 28+ 1 8
POKE 853 1 4 , A
FOR VM= 1 024 T D 1 024+ 1 8•3 1 + 1 5
P O K E t,J M , 1 7 0
40
1 80
1 80
200
210
220
N D < T t.J M
FDR I = l TD 600
A = PEEK ( G53 1 4 ) +8
POKE G53 1 4 1 A
GOTO 220
:
NEXT
I
I n this mode, there i s also garbage i n the bottom half of the screen,
as only 5 1 2 bytes were written.
BYTE 2l
3
ROWROW 2l
+12a64
l
ROWj 64
FIRST 88 ELEMENTS OF ROW
NEXT
NEXT 8
LAST
FI R ST 88 ELEMENTS
ELEMENTS OFOF ROWROW 2
LAST 8 ELEMENTS OF ROW 64
BLACK 0l *BUFF
BLACK
*GREEN
*=BORDER COLOR
l
1716
1024
l
C
COLOR SE T 0
Figure 2.7:
The 1 28
COLOR SET
1
128 x 64 T mode mapping.
x
64 F Mode
This mode is the third mode not supported by BASIC . It is a
four-color mode that displays graphics in a 1 2 8 by 64 matrix . As the
number of colors has been doubled over the 1 28 x 64 T, twice as much
memory is required
2048 bytes . The mapping for this mode is shown
in Figure 2 . 8 .
This mode, again set b y POKEs, i s very similar to the previous two
modes. The following program is almost identical to the previous
programs except that it initializes the VDG to the 1 28 x 64 F mode and
-
+12s64!
2
BYTE l
ROW
ROW
True Graphics Modes
I2
j 64
ROW
C 1 C o C 1C o C 1 C o C 1C o
F I R ST
4
NEXT 4
ELEMENTS OF ROW
N E XT 4
3
32
L A ST
33
F I R ST
COLOR
SET 0
* GR E E N
Y E LL O W
BLUE
RED
41
0001
10
C1 Co
11
44
I
E LE M E N T S O F R O W I
EL EMENTS O F ROW
COLOR
SE T
2
1
* BU F F
CYAN
M AG E NTA
ORANGE
* = B O R D E R C O L OR
Figure 2.8:
1 28 x 64 F mode mapping.
stores a value of 1 0 1 1 1 0 1 1 ( 1 87 decimal ) . This value represents
alternating blue and red (color set 0) or magenta and orange (color set 1 )
stripes as in the 64 x 64 F program .
1 00
1 10
1 20
1 30
1 40
1 50
1 60
1 70
1 80
1 80
200
210
220
REM 1 2BX64F GRAPH I CS
POKE 65472 10
POKE 65475 1 1
POKE 65476 1 1
A = < PEEK < 653 1 4 l AND 7 l + 1 28+32
POKE 653 1 4 1 A
F O R VM= 1 024 TD 1 024+32•3 1 +3 1
P O K E t.J M 1 1 8 7
N E> ( T I.J M
FOR I = l TD 600
A = PEEK < 653 1 4 l +8
POKE 653 1 4 1 A
GOTO 220
42
Here, 2048 bytes are required, but only I 024 bytes (32 x 3 1 + 3 1 )
are stored, leaving garbage in the bottom half of the screen as before.
Graphics Modes in Extended Color BASIC
The next graphics modes are all supported in Extended Color
BASIC , much to the relief of the VDG chip designers . If you plan to use
the 64 x 64 F, the 1 28 x 64 T, or the 1 28 x 64 F, be sure to follow
the POKE sequences above in setting the proper modes. At the end of the
PMODE graphics we 'll investigate which addresses and bit
configurations set all modes so that you may utilize the forgotten modes
in your BASIC or assembly-language programming.
Also realize that in the examples above, the area used for graphics
started at RAM location 1 024 , the text screen. In the Extended Color
BASIC implementation of the following modes , the text screen is left
intact, and the graphics screens (pages) start at location 1 536.
PMODE 0
-
1 28
x
96 T
This mode is a two-color mode that displays graphics in a 1 28 by 96
matrix. The number of bits required is 1 28 by 96 by 1 (two colors) or
1 2 ,288, which is 1 536 bytes. The mapping for this mode is shown in
Figure 2 . 9 .
ROW 1
ROW
j
2
R O W 96
FIRST
BYTE 1
2
NEXT
3
NEXT
16
LAST
17
F IRST
1536
LAST
COLOR SET 0
BLACK
* GR E E N
C
0
1
PMODE 0 mapping.
E L E M E N T S OF R O W 1
E L E M E N T S OF ROW 1
ELEMENTS O F ROW 2
E L E M E N T S OF R O W 9 6
COLOR SET J
B L AC K
* BU F F
* = BO R D E R C O L O R
Figure 2.9:
888
88
8
True Graphics Modes
43
" PMODE O,start-page" sets this mode. After this command has
been executed in a BASIC program , all graphics will be referenced to a
1 28 by 96 matrix . Standard colors of black and green (green border) and
black and buff (buff border) are used and selected by the color set
parameter in the SCREEN command.
PMODE 1 - 1 28
x
96 F
This mode is a four-color mode that displays graphics in a 1 28 by 96
matrix. The number of bits required is 1 28 by 96 by 2 (four colors) or
24 ,576, which is 3072 bytes . The mapping for this mode is shown in
Figure 2. 1 0 .
ROWROW 12
+ 12a-!
ROWj
FIRST ELEMENTS OF ROW
BYTE 1 C 1Co C1Co C1Co C1Co NEXT
NEXT 4
3
LAST
4 ELEMENTS
OFOF ROWROW 12
FI
R
ST
ELEMENTS
3332 I
I
3072 C 1Co c1co C1Co C1Co LAST ELEMENTS OF ROW
*GREEN
0001 *BUFF
CYAN
YELLOW
10
BLUE
ORANGE
RED * =BORDER11 COLORMAGENTA
96
96
4
1
4
4
4
COLOR SET 0
Figure 2 . 10:
PMODE
I
C1 Co
COLOR
96
SET
1
mapping.
" PMODE 1 ,start-page" sets this mode . After this command has
been executed in a BASIC program , all graphics will be referenced to a
1 28 by 96 matri x . Standard colors of green , yellow , blue, and red (green
border) and buff, cyan, magenta, and orange (buff border) are used and
selected by the color set parameter in the SCREEN command .
44
PMODE 2 - 1 28
x
1 92 T
This is a two-color mode that displays graphics in a 1 28 by 1 92
matrix . The number of bits required is 1 28 by 1 92 by 1 (two colors) or
24 ,576, which is 3072 bytes. The mapping for this mode is shown in
Figure 2 . 1 1 .
2
ROW l
ROW
+12s 192
j 192
i
ROW
1'1' 1'1'1'1'1'1'1
1617 I 1 1 1 1 1 1 1 I
23
BYTE l
3072 tc Jc Jc jc j cj cjc Jcf
COLOR
C
SET 0
0
BLACK
* GREEN
F I R S T 8 ELEMENTS OF ROW
NEXT 8
1
NEXT 8
2
192
L A ST 8 E L E M E N TS OF R O W l
F I R S T 8 E L E M E N T S OF
ROW
L A S T 8 E L E M E N T S OF R OW
COL OR SET 1
l
BLACK
* BUFF
* : BO R D E R COLOR
Figure 2 . 1 1 :
PMODE 2 mapping.
" PMODE 2 ,start-page" sets this mode . After this command has
been executed in a BASIC program, all graphics will be referenced to a
1 2 8 by 1 92 matrix. Standard colors of black and green (green border) and
black and buff (buff border) are used and selected by the color set
parameter in the SCREEN command.
PMODE 3 - 1 28
x
1 92 F
This mode is a four-color mode that displays graphics in a 1 28 by
1 92 matrix. The number of bits required is 1 28 by 1 92 by 2 (four colors)
or 49 , 1 52 , which is 6 1 44 bytes. The mapping for this mode is shown in
Figure 2 . 1 2 .
True Graphics Modes
+
45
ROWROW 1
2
ROWj
BYTE C 1 Co CjCQ C1 Co C1Co NEXT
FIRST ELEMENTS OF ROW 1
NEXT
LAST
FIRST ELEMENTS
ELEMENTS OFOF ROWROW1
C1 Co C1Co C1Co C1Co LAST ELEMENTS OF ROW
*GREEN
0001 *BUFF
YELLOW
BLUE
MAGENTA
RED * =BORDER1110 COLORCYAN
ORANGE
1 2 8 -+
1 92
�
192
1
2
3
4
4
4
32
33
4
4
2
614 4
4
192
COLOR SET
Figure 2.12:
0
C1 Co
COLOR SET 1
PMODE 3 mapping.
" PMODE 3 ,start-page" sets this mode. After this command has
been executed in a BASIC program , all graphics will be referenced to a
1 28 by 1 92 matrix. Standard colors of green , yellow, blue , and red
(green border) and buff, cyan , magenta, and orange (buff border) are
used and selected by the color set parameter in the SCREEN command .
PMODE 4 - 256
x
1 92 T
This is the highest resolution mode, horizontally. (The semigraphics
24 mode has the same vertical resolution of 1 92 elements , but allows
only 64 elements horizontally . )
This mode i s a two-color mode that displays graphics i n a 256 by
1 92 matrix . The number of bits required is 256 by 1 92 by I (four colors)
or 49 1 52 , which is 6, 1 44 bytes . The mapping for this mode is shown in
Figure 2 . 1 3 .
" PMODE 4 ,start-page" sets this mode . After this command has
been executed in a BASIC program , all graphics will be referenced to a
256 by 1 92 matrix. Standard colors of black and green (green border) and
black and buff (buff border) are used and selected by the color set
parameter in the SCREEN command.
46
+256
192
l
BYTE
1
::
lTITITITl
]1I I I I I II
6144
12
ROW
192
F I R ST
8
N E XT
8
NEXT
8
E L E M E N T S OF R OW
1
L AS T 8
E L E M E NTS OF ROW
F I RST 8
E L E M E N TS OF ROW
12
8
E L E M E N T S OF R O W
LAST
COL O R S E T 0
BLACK
* GR E E N
Figure 2.13:
ROW
ROW
c
0
*
COLOR SE T 1
192
BLAC K
* BUFF
' B ORDER
C O LOR
PMODE 4 mapping.
USING THE PMODE GRAPHICS MODES
Because the five modes above are supported in Extended Color
BASIC by the PMODE command , and because its graphics capabilities
are excellent, you will probably want them utilized by the standard
Extended Color BASIC graphics commands. All of the modes, however,
are selectable by POKEs, providing that the video memory area has been
set up with the correct data for display.
The following BASIC program illustrates how POKEs can be used
to set up the resolutions for PMODES 0 through 4. A single line is drawn
across the center of the screen for each of the modes . The screen starts at
location 1 024 instead of the normal location 1 536 for graphics.
True Graphics Modes
1
1
1
1
1
00
10
20
30
40
1 50
1 60
1 70
1 80
1 90
200
210
220
230
240
250
260
270
47
REM P R O G R A M TD SET ALL P M O D E S
P C L E A R LI
I N PUT PM
I F P M < 0 O R P M > ll G O T O 1 2 0
I F ( PM = 0 OR P M = 2 l THEN BR= 1 6 ELSE
BR=32
I F P M > l T H E N M R = 9 6 E L S E M R = ll 8
D I = MR*BR
I F ( PM AND 1 l =0 THEN VA=0 ELSE V A = 255
P I = ( PM+3 l * 1 6+ 1 28
V D = P M + 3 : I F P M = ll T H E N V D = V D - 1
I F ( V D A N D ll l = ll T H E N P O K E & H F F C 5 1 1
E L S E P O K E & H F F C Ll 1 0
I F ( VD AND 2 l =2 THEN POKE &HFFC3 1 1
ELSE POKE &HFFC2 1 0
I F ( I.J D A N D 1 ) = 1 T H E N P O K E &: H F F C 1 , 1
ELSE POKE &HFFC0 1 0
A = ( PEEK ( &HFF22 l A N D 7 )
POKE &HFF22 1 P I +A
F O R V M = 1 0 2 ll T O 1 0 2 ll + M R * B R * 2 - 1
I F V A = 0 THEN P O K E VM 1 2 55 E L S E P O K E
1.J M 1 0
N E :< T 1.J M
2 8 0 F O R V M = 1 0 2 ll + D I
2 9 0 P 0 K E 1.J M , 1.J A
3 0 0 N E :< T I.J M
3 1 0 GOTO 3 1 0
TO
1 0 2 ll + D I + B R = 1
The first active statement clears 4 screen pages of 1 536 bytes each.
The next statement INPUTs a PM ODE value of 0 through 4. A check is
then made of the PM ODE value; if it is other than 0 through 4, the
INPUT statement is executed again.
Variable BR is the number of bytes per row. The number per row is
1 6 for a 1 28 horizontal two-color mode ( 128 X I / 1 6) and 32 for a 1 28
horizontal four-color mode ( 1 28 X 2/ 8) or a 256 horizontal two-color
mode (256 X I / 8).
If PM is greater than I, the number of the middle row (variable MR )
is 96; otherwise it is 48. The displacement in bytes from the start of the
video memory is in variable DI and is equal to BR X M R.
Even-numbered P M ODEs in PM will cause ( PM A N D I ) to be
equal to zero. Even-numbered PMODEs are two-color modes. The value
stored in all two-color modes will be 0, which creates black on a border
of green. The value of four-color modes will be 255 representing
1 1 1 1 1 1 1 1 for red codes per byte; the display here will be red on a green
48
border. The v alue to be stored is held in VA.
VD is the value to be sent to the VDG in address
&HFFC5-&HFFCO (65472-65476) . Pl is the value to be sent to address
&HFF22 (653 1 4 ) . The coding for these values is shown in Figure 2 . 1 4 .
PM
MOOE INPUT
PM
MOOE INPUT
BR
B Y TES/ROW
MR
MIOOL E ROW
01
MR OISPL
16
•8
768
32
'8
153 6
16
96
1 53 6
32
96
3072
32
96
3072
VA
VA L UE
Pl
fM00£i
0
176
I
0
I
I
255
192
I
I
0
0
208
I
I
0
22•
I
I
I
2'0
I
I
I
I
255
0
0
0
I
0
0
0
0
0
0
0
0
0
0
0
0
0
�
DE T E R M I N E S
MODE
VO
fMOOCI
8HFFCI, 1
8HFFCO , 0
S HF F C J ,
1
1
8 HF F C 2 , 0
8 HF F CS,
8 H F FC 4 , 0
Figure 2.14:
POK E i ng graphics mu<lcs example.
The VDG value is output in statements 200 through 220. The Pl
value is merged into address &HFF22 in statements 230 and 240 .
The first FOR VM = loop clears the video memory to be used to the
border color, green. The end of the video memory is given by
1024 + MR x BR X 2- 1 . The second FOR VM = loop outputs the value
to the middle row; the length of this row is BR.
VIDEO M EMORY PAGES
We saw from the last chapter and this chapter that the minimum
amount of video memory used is 5 1 2 bytes. This minimum allocation
occurs in the alphanumeric and some semigraphics modes. The maximum
video memory used in one display is 6 1 44 bytes . This occurs in the
high-resolution semigraphics and graphics modes .
Color BASIC allocates 5 1 2 bytes for video memory. This area is the
normal text screen. Extended Color BASIC automatically allocates 6 1 44
bytes above the text screen starting at location 1 536. Whenever you are
working in high-resolution graphics you must be certain that you have
0
0
0
0
0
True Graphics Modes
49
allocated enough memory. This is done in Extended Color BASIC by the
PCLEAR command, which has the format
PCLEAR
n
where n is the number of graphics pages to be reserved .
A graphics page is equal to 1 536 bytes, the number of bytes required
for the PMODE 0, the lowest resolution graphics mode. Up to 8 graphics
pages can be reserved , a total of 1 2 ,288 bytes . Note that a graphics page
is not related to a normal memory page for the 6809 microprocessor,
which is 256 bytes . The graphics page is somewhat arbitrarily set at the
PMODE 0 video memory requirement.
More than one display ' s worth of video memory is allocated because
the start of the display area may be changed from the normal location of
1 536 to any of the other 8 video pages . The normal method for doing this
is Extended BASIC ' s PMODE command , in which the start-page
parameter defines the starting point for the video display .
P M 0 0 E mode t start-page
Table 2 . 3 shows the starting addresses for the different values of
start-page in Extended Color BASIC . The ending address depends upon
the current PMODE setting, which may be as much as 6 1 44 bytes beyond
the start.
In fact, it' s possible to change the start of video memory to any
location of the 65 ,536 locations in RAM/ROM memory. You would
Start-Page
1
2
3
4
5
6
7
8
Table 2.3:
Start-Page Values .
Starting Location
(Hex.)
(Dec.)
1 536
3072
4608
6 1 44
7680
921 6
1 0,752
1 2,288
0600
ocoo
1 200
1 800
1 EOO
2400
2AOO
3000
50
normally not want to do this while working within the confines of
Extended Color BASIC , but you may want to do it in assembly-language
programs or advanced BASIC applications.
The method for doing this is to address the VDG by a series of
POKEs. Seven POKES are done to set 7 bits in the VDG . Seven bits
represents 0 through 1 28 (0000000 through 1 1 1 1 1 1 1 ) . Each i ncrement
represents an area of 5 1 2 bytes . For example, specifying 0 1 00000 for the
7 bits would set the start of video memory to 32 x 5 1 2 or 1 6 , 384. This
scheme is shown in Figure 2 . 1 5 .
Bl T
F F D3
FFD2
POKE
POKE
OR 0 S E T S B I T 6
OR 0 R ES E T S B I T 6
FFDl
F FD 0
POKE
POKE
OR 0 S E T S B I T 5
OR 0 R E S E T S B I T 5
F FC F
FFCE
POKE
POKE
OR 0 S E T S B I T 4
OR 0 R E S E T S B I T 4
F FCD
FFCC
POKE
P O KE
OR 0 S E T S B I T 3
OR 0 R E S E T S B I T 3
FFCB
FFCA
P O KE
POKE
OR 0 S E T S B I T 2
OR 0 R E S E T S B I T 2
FFC9
F FC B
P OKE
POKE
OR 0 SETS B I T l
OR 0 R E S E T S B I T l
F FC 7
F F C6
POKE
POKE
OR 0 SE T S B I T 0
OR 0 R E SETS B I T 0
x
x
x
x
6
5
4
3
0
0
0
0
0
0
0
0 * 51 2 • 0
0
0
0
0
0
0
l
1 * 512 • 51 2
0
0
0
0
0
0
0
0
0
0
0
2 * 512 • 1 024
3 * 5 1 2 • 1 536
I
x
0
S T A R T O F D I S P LAY
I
I
0
0
l
l
l
l
0
•
1 2 6 * 51 2 • 64. 512
1 2 7 * 5 1 2 ' 6 5,024
T H I S V A L U E * 5 1 2 ' ST A R T
O F D IS P LAY A R E A I N M E M ORY
F F D 3 ' 65 , 4 9 1
F F C C ' 65 , 484
D2 ' 65, 490
CB , 65, 483
D l ' 65, 4 8 9
CA ' 6 5, 4 8 2
DO , 65, 488
C 9 ' 65 , 4 8 1
C F ' 65,487
ca , 65, 4 a o
C E ' 65, 486
C 7 • 65, 4 7 9
CD , 65, 485
C 6 , 65, 4 7 8
Figure 2 . 1 5 :
Modifying the video memory start.
True Graphics Modes
51
T o set the 7-bit value, address the V D G locations shown in Figure
2 . 1 5 . Seven total locations must be addressed by a POKE XXXX, 1 or
POKE XXXX ,O. We ' ve used a POKE XXXX , 1 to set a bit, and a POKE
XXXX ,O to reset a bit so that it would be more apparent whether a set or
reset was being performed. To set the start of video memory at location
0, the start of RAM, execute
1 00 POKE
1 1 0 POKE
1 20 P O K E
1 30 POKE
140 GOTO
B: H F F D 2
B: H F F C E
B: H F F C A
B: H F F C G
140
10
10
10
10
P O K E B: H F F D 0 1 0
P O K E B: H F F C C 1 0
P O K E B: H F F C B 1 0
This example is shown in Figure 2 . 1 6 .
8HFFD2, 0
- o
BIT 6
POKE
5
POKE
4
POKE
8 HFFCE, 0 - o
3
POKE
S H F FC O, 0 - o
2
POKE
l
POKE
0
POKE
Figure 2 . 16:
S H FFDO, 0 - o
S H F FC A , 0
8 HFFC8, 0
-
o
0 0 0 0 0 0 0 , 0 * 51 2 • 0 , START OF
D I S P L AY
IN M E M O R Y
- o
8 H FF C 6 , 0 - o
Modifying video memory start example.
If you do this, you will see the working storage of the BASIC
interpreter. Because the values are a mix of alphanumerics and
semigraphics, you will see some characters and some graphics. If you set
this value and then run a BASIC program, you will see variables
changing dynamically during execution of the program .
THE MYSTIFYING G RAPHICS ORACLE
We' ve covered a lot of ground in these two chapters. To help
present a synopsis of everything we' ve learned, Appendix IV shows all
of the graphics modes , their video and memory formats, color sets,
B ASIC support, and POKE sequences . In the following chapters we ' ll be
exploring the B ASIC and Extended BASIC commands and occasionally
referring to the material presented in this chapter. Don ' t feel obligated to
memorize the information already presented, but use it as a guide when
you get confused in the following material .
c>
<!£1)_:
.
0
=
v�
0
.·.
Color BASIC Graphics Capabilities
53
CHAPTER 3
Color BASIC Graphics Capabilities
This chapter is for those users who have not upgraded to Extended Color
BASIC . The built-in graphics commands for Extended Color BASIC are
excellent - using them you can draw straight lines , circles, ellipses,
rectangles, and odd-shaped figures , not to mention painting areas with
colors and other graphics-oriented operations . Reproducing the same
capabilities for Color B ASIC would require an assembly-language
program of moderate size and complexity. A BASIC program driver
might conceivably add some of the features but would be very slow in
comparison to Extended Color BASIC.
Our best advice to a user seriously interested in color graphics is to
add Extended Color BASIC . (Let ' s see, 1 0 percent of every Extended
Color BASIC upgrade kit purchased is . . . ) In the meantime, we'll
describe the graphics available in the Color BASIC and show you how to
implement some color graphics capabilities .
COLOR BASIC COLOR CAPABILITY
There are 4 Color BASIC commands related to graphics: CLS , SET,
RESET, and POINT. CLS clears the screen to one of eight colors . SET
and RESET operate on a graphics point. The POINT command returns
the value of a graphics point.
The graphics mode used for all commands is the semigraphics 4
mode described in the first chapter. If you will be using these commands
and haven't read the first chapter, you may want to read the chapter now
54
and pay particular attention to this semigraphics mode. We 'll provide a
refresher course in the following, though.
The semigraphics 4 mode operates on a display of 64 horizontal
elements by 32 vertical elements, as shown in Figure 3 . 1 . The basic
screen is 256 pixels (picture elements) wide and 1 92 pixels high . This
means that every element in this mode is 4 pixels wide by 6 pixels high,
as shown in the figure. As every pixel is roughly square, we're
displaying an element that is a rectangle higher than it is wide.
------ 256
32
P I X E L S ------
192
I
VERT ICAL
PIXELS
ELEMENTS
---/- 6 4
Figure 3 . 1 :
H O R I Z O N TA L
E L E M E N T S ----
Color BASIC graphic screen format.
The semigraphics 4 mode uses 5 1 2 bytes o f video memory for each
display of 64 elements by 32 elements. The mapping for the display is
shown in Figure 3 . 2 . The normal location of video memory is in RAM
location 1 024 and continues through memory location 1 53 5 .
Each byte of memory controls four elements o n the screen , as shown
in Figure 3 . 2 . The four elements are subdivisions of an alphabetic
character position. If text is on the screen a single alphabetic character
will be displayed in the character position.
Color BASIC Graphics Capabilities
N
A
�
C
D
(
55
D I S P L AY L I N E I
L
1024
1025
1026
N
1 02 7
E
1028
1029
1030
A
1031
�
1032
1033
1034
+
.....
(SE M I G R A P H I C 4 DATA)
c
D
5 1 2 B Y T E S TOTAL
Figure 3.2:
Color BASIC graphic mapping.
A byte has 8 bits (binary digits) , each of which is a one or a zero.
An on condition is represented by a one , while an off condition is
represented by a zero.
If the first bit of any byte in video memory is a zero, the byte
represents an alphabetic character. The next bit of an alphabetic character
defines whether the character is inverted , i . e . , black on a green
background or red on an orange background. The remaining 6 bits of the
character are the code for the character. Codes for Color Computer
characters are shown in Tables l . 2 and l . 3 .
I f the first bit o f any byte in video memory is not a zero , but a one ,
the byte represents a graphics character. In this case , the format for the
byte is as shown in Figure 3 . 3 .
The next 3 bits after the first bit define the color. The bits may be
000 , 00 1 , 0 1 0, 0 1 1 , 100, 1 0 1 , 1 1 0 , or 1 1 1 , representing colors of green ,
yellow, blue, red , buff, cyan, magenta, or orange . This will be the color
of each of the 4 elements in the character position, providing each is
turned on . The background or border color for this mode is always black .
If an element is turned off, black will appear.
The next 4 bits define the on/off state of each of the 4 elements . A
one is on , while a zero is off. Note that the four elements must have the
same color, defined by the 3 color bits .
56
7 6 5 4 3 2 1 0
i 1 ic2lc 1 lc olL3 IL 2IL 1 !Loi {SEMIGRAPHIC 4 BYTE)
..._____,
COLOR
FIELD
GREEN 000
YELLOW 001
BLUE 010
RED 0 1 1
BUFF 100
CYAN 101
MAGENTA 1 1 0
ORANGE 1 1 1
Figure 3.3:
ELEMENT
ON/OFF
STATUS
Graphic character format .
CLS COMMAND
The format for the CLS (clear screen) command is
CLS
(cl
where c is a color code of 0 through 8, representing the colors shown in
Table 3 . 1 .
CLS (c)
(c)
0
1
2
3
4
5
6
7
8
Color
Black
*Green
Yellow
Blue
Red
Buff
Cyan
Magenta
Orange
*Default if (c) omitted
Table 3 . 1 :
CLS Colors .
Color BASIC Graphics Capabilities
57
The CLS command simply clears the 5 1 2 bytes of video memory to
the specified color by setting the 3 color bits (it subtracts one from the c
value) , and turning on the 4 on/off bits . The exception for this is a c
value of black, which simply turns off all on/off bits . To see how this
works , run the following program . It will display the value of all video
memory bits in the center of the screen, preceded by the video memory
location .
1 00 REM D I S PLAY CLS FUNCT I ON ACT I ON
1 1 0 I NPUT A
1 20 C LS ( A l
1 30 FOR I = 1 024 TO 1 024+5 1 1
1 40 PR I NT @ 256+ 1 0 , I ; PEEK ( I l ;
1 5 0 N E >( T I
A CLS value of 4 produces the display shown in Figure 3 . 4 , with
the indicated breakdown of the value .
VI D EO MEMORY LOCATI O N
Figure 3.4:
CLS example.
The color to which the screen has been cleared remains in force even
when a return is made to the Color BASIC interpreter. As more text is
entered, however, the screen is reset to the alphanumeric black on green
for the character positions. Pressing the (CLEAR) key or executing a C L S
without any argument will also reset the screen to a standard green
58
background. This background is not the semigraphics mode background
but rather the alphanumerics mode; each byte in video memory has a 96
code for a space rather than a 143 code for a green color with all
elements on.
The CLS takes approximately 1 / 1 00 second, making it very fast
indeed, much faster than any BASIC FOR . . . NEXT loop could be .
SET, RESET COMMANDS
The formats of the SET and RESET commands are
SET ( h 1v 1c)
RESET (h 1v)
The h is a value specifying the horizontal element number from 0
through 63 . The v is a value specifying the vertical element number from
0 through 3 1 . The c is a color code that is the same as the CLS
command .
The SET , of course, sets the element specified to the color specified;
the RESET resets the element to the background color, or black. This
produces some unexpected results . Look at Figure 3 . 5 . The screen is first
cleared to blue by a CLS(3). Next, the approximate center dot is set to
red by S ET(3 1 , 1 6 ,4) . What should the result be? A red dot in the center
of a blue screen? Wrong ! The CLS turns on all four of the elements. The
SET changes the color of one element. In doing so, it puts the red color
code in the video memory byte for 3 1 , 1 6 . However, this is also the video
memory byte for 30, 1 6; 30, 1 7 ; and 3 1 , 1 7 . Since these elements are on by
the action of the CLS , changing the color for the SET changes the color
for all four elements !
A following RESET turns off the 3 1 , 1 6 element by resetting the bit
for that element to 0. A black element results !
Because of this implementation, you must work with a color on a
black background if you are using SET/RESET and if you want the
maximum resolution of 64 by 32 elements. If you work with one color on
another color background, you will be working with a resolution of 32 by
1 6 elements . An alternative to this is working with a higher resolution
semigraphics mode; we'll discuss this option shortly.
Color BASIC Graphics Capabilities
I
I
I
BLUE
I
I
BLUE
I
I
I
I
I
BLUE
I1
I
I
I
BLUE
R O W 30, C O L U M N 16
BLUE
BLUE
BLUE
BLUE
R O W 3 0 , COLUM N
ROW 3 1 , C O L U M N 1 6
BLUE
B L UE
B LU E
B L UE
ROW 31, C O L U M N
I
I
B LUE
I
BLUE
I
I
I
I
BLUE
I
I
I
I
1
0
0
17
17
BLUE
I
I
I I I I I I1I I I
1
59
1
1
1
BYTE A F T E R C L S
�
(3 l
ALL 4
E L E M E NTS
ON
BLUE
-- B LU E _.
i
RED
BLUE
i
T H I S E LE ME N TT U R N E D ON
T H E S E E L E M E N T S WERE O N
I N I T I A L LY, NOW A R E RED
t
-:
BLUE
ED
!
- B L U E -+
I1I I I I I I I
0
Figure
3.5:
1
1
1
1
1
1
BYTE AFTER SET
(31,
16,
4)
SET/RESET example.
Speed of SET/RESET
The SET/RESET commands execute at about 4 . 2 milliseconds
(4 . 2/ 1 000 second) per point. It takes about 8 seconds to SET 2048 points ,
not counting the overhead of a loop.
POINT COMMAND
The format of the POINT command is
PO I NT
C h tv)
60
The h value is the horizontal element number of 0 through 63; the
is the vertical element number of 0 through 3 1 . The POINT command
tests the element specified . One of three conditions may be present:
v
• The character position may be in the text, or alphanumeric
mode. In this case, POINT returns a - 1 .
• The element may be set to a color. In this case, POINT returns
the color code of 1 through 8 .
• The element may be reset (black) . I n this case, POINT
returns a 0.
To see how this works, look at the following example.
1 00
1 10
1 20
1 30
1 40
1 50
1 60
1 70
1 80
REM SAMPLE USE OF P O I NT
CLS ( 1 l
P R I N T @ 2 5 6 1 " T E >( T " i
SET ( 0 t 1 8 1 3 l
RESET ( 1 1 1 8 l
A = PO I NT ( 0 1 1 6 )
B = P O I NT ( 0 1 1 8 l
C = P O I NT ( 1 t 1 8 l
PR I NT @ 320 1 A i B i C i
This first clears the screen to a green background . The " ( 1 ) " in the
CLS statement isn't strictly necessary , as this is the default color. Next , a
PRINT @ 256 of "TEXT" is done. This sets the 256th , 257th , 258th,
and 259th bytes of the video memory (locations 1 536 through 1 539) to
the alphanumeric characters "TEXT" . Next, a SET (0 , 1 8 ,3) is done to
SET the next element below the ' 'T ' ' to blue . This is followed by a
RESET of ( l , 1 8) . The situation in video memory is now as shown in
Figure 3 . 6.
The POINT command is then used to test (0,32), (0, 34), and ( 1 , 34) .
The element at (0,32) is the part of the alphanumeric character ' 'T' ' . The
entire byte for this text character is in the text format, and a - 1 is returned
as variable A . The element at (0,34) is the upper left element of the
character position below the "T" . It has been SET to 3 , or blue , and this
value is returned in variable B. The element at ( 1 ,34) is the upper right
element of the character position below the ' 'T' ' . It has been RESET to
black, and a 0 is returned as variable C .
I s the POINT command useful? Not very . (Oh , o h . I expect
thousands of letters here , informing me of a myriad of applications for
POINT . . . ) It is one of those BASIC commands included in the BASIC
lexicon which can occasionally be used but will probably never appear in
Color BASIC Graphics Capabilities
CHARACTER
POS I T I O N
0
1
2
3
61
4
COLUMN
LINE
ROW 1 4
I
till
�
15
16
8
17
18
9
19
.,
.
256
I
0
0
I
0
I
0
BLACK
BLUE
GREEN
T"
0
"
"E"
257
0
I
0
0
0
I
0
I
2 58
0
I
0
I
0
0
0
2 59
0
I
0
I
I
0
I
0
0
"
260
I
0
0
0
I
I
I
GREEN
2 88
I
0
I
0
I
0
1
1
B LU E / BL A C K
289
1
0
0
0
1
1
1
Figure 3 . 6 :
I
I1
I
"x"
T"
G RE E N
POINT example.
most BASIC programs. It could be used to test the on/off status of an
element prior to RESETting a point, example. This would avoid having
to store a table of values that have been SET and must be RESET before
new graphics are displayed .
The POINT command takes the same amount of time to execute as
the SET, about 4 . 2 milliseconds .
TYPICAL USES OF SET/RESET
Because of the low resolution, SET/RESET is useful for such things
as bar graphs using several colors, plots that use a black background, or
crude figures with possible animation .
The program below plots a bar graph of up to eight values, as shown
in Figure 3 . 7. The background of the graph is green, the axes of the
graph are blac k , and the bars on the graph are alternating colors .
62
1 00 REM BAR GRAPH PLOT
1 1 0 CLS
1 20 I = 0 : A ( 8 ) = - 1
1 3 0 P R I N T 11 I N P U T 8 t.J A L U E S F R O M 0 T D
E N D I N G W I T H - 1 11
1 40
1 50
1 60
1 70
1 80
1 80
200
210
220
230
240
250
260
270
280
280
300
310
320
330
340
350
360
370
380
380
400
410
420
430
I N PUT A < I >
I F A < I ) = - 1 GOTO 1 80
I = I + l : I F I = 8 GOTO 1 8 0
GOTO 1 40
CLS < 1 )
J = 1 00
F O R I = 6 4 T D 64+32* 1 0 S T E P 32
PR I NT @ I 1 J i
J=J-10
N E )< T I
PR I NT @ 422 '
1 2 3 4 5 6 7 8
F D R Y = 4 TD 2 5
II
1 00
II
RESET < 10 , y )
N D( T Y
F O R }( = 1 1 T D 4 5
R E S E T < }( 1 2 5 )
N D( T }(
C=2
F O R I =0 TD 8
B=A < I )
I F B = - 1 THEN GOTO 430
I F B < 0 THEN 5 = 0
I F 5 > 1 00 THEN 5 = 1 00
B = B / 5 : I F 5 = 0 GOTO 420
FOR Y = 24 TD 2 4 - B STEP - 2
SET < I *4+ 1 2 1Y 1C )
N E >( T Y
C = C + l : I F C = 8 THEN C = 2
N E >( T I
GOTO 430
This program can be divided into several parts, as shown i n Figure
3 . 8 . The statements from 1 00 through 1 70 input 8 values into a
nine-element array , A . The last element of this array always holds a - 1 as
a terminating value. Entering a - 1 at any time terminates the input. At
that point the A array may be filled with 0 to 8 values .
Color BASIC Graphics Capabilities
JOO
0
UJ
a:
90
80
LL
LL
::J
CD
70
60
50
3
40
30
z
<t
>u
UJ
::J
_J
CD
3
0
_J
_J
<t UJ UJ
f- <.'.) >z z
<t
a:
0
GREEN
BORDER
20
10
0
2
3
4
5
6
7
8
1 00 REM BAR GRAPH PLOT
1 1 0 CLS
1 20 ! = 0 : A 1 8 1 = - 1
1 3 0 P R I N T " I N P U T 8 <.• A L U E S F R O M
0 TD 1 00 END I NG W I T H - 1 "
1 a 0 I N PUT A I I I
1 5 0 I F A I I I = - t GOTO 1 80
1 60 I = I + 1 : I F ! = 8 GOTO 1 8 0
1 70 GOTO 1 a 0
1 80 CLS I t I
1 80 J = 1 0 0
2 0 0 F O R ! = G a T O G ll + 3 2 * 1 0 S T E P 3 2
2 1 0 PRINT @ I ,J I
220 J = J - 1 0
230 NEXT I
P R I NT
@
Ll 2 2
1 11
1 2 3 a 5 G 7 8"
250 FOR Y=a TO 2 5
260 RESET 1 1 0 , y I
270 NEXT y
2 8 0 F O R ) ( = t 1 TO a s
2 9 0 R E S E T ( )-{ 1 2 5 )
300 NEXT x
3 1 0 C=2
320 F O R ! = 0 TD 8
330 B=A I I I
3a0 I F B = - 1 THEN GOTO a30
350 I F 6 < 0 THEN B = 0
360 I F B > 1 0 0 THEN B = 1 00
370 B = B / 5 : I F B = 0 THEN GOTO az0
3 8 0 F O R Y = Z ll T O 2 a - B S T E P - 2
3 9 0 S E T < l * ll + 1 2 , y , C )
a00 NEXT y
a 1 0 C = C + l : I F C = 8 THEN C = 2
a z 0 N E >: T I
a30 GOTO a30
Figure 3.8:
AXES
Bar graph example.
Figure 3.7:
2a0
- B L AC K
Bar graph program structure.
Input
0-8
values
to
l
l
}
}
A( )
Display
""1 00,90 ...
1 0.0··
Print
X
coordinate
values
Plot
Y axis
Plot
X axis
Display
bars
63
64
The statements from 1 80 through 230 display the Y coordinate
values of ' ' 1 00 , 90 , . . . , I 0, O' ' . The X coordinate values are simply
PRINTed with the statement at 240.
The Y axis is plotted by statements 250 through 270. The CLS( l ) in
statement 1 80 cleared the screen by storing semigraphics characters .
RESETting the points will tum off the left-hand elements in each
character position, producing a black color. The X axis is plotted in
statements 280 through 300, also producing a black background.
Statements 3 1 0 through 420 display the values as bars on the graph.
The color codes for the SET are held in variable C . Colors from 2
through 8 will be displayed. ( 1 is green , and this will not show up . ) For
each of eight values , the value is obtained from the array (330), checked
for validity and changed to a limit value if necessary (340 through 360) ,
and then scaled .
Since there are 1 0 character positions or 20 vertical elements
involved, each element represents a unit of five: 0, 5 , 1 0 , . . . , 1 00 . The
value is divided by five to give the number of elements involved. This
number may be a fractional value, but the SET/RESET command looks
only at the integer value and discards the fraction. The bar is drawn by
plotting from Y 24 (bottom) to (25-value/5) in steps of -2 . This means
that the bar will be drawn from top to bottom .
The SET sets the current Y value. In doing so, it actually sets four
values as it changes the color code in the byte from green to another
color. STEPping in units of -2 avoids duplicating the SET for the next
higher element and the problems of blacking out an element discussed
earlier. Although the numeric resolution is within 5 units, the graphics
resolution is within 1 0 units, or one character position, because of the
black out problem.
For each value, the X coordinate is I x 4 + 1 2 , producing columns
at 1 2 , 1 6, 20 , and so forth. These correspond to the label placement
under the X axi s .
Each time a bar i s drawn, the color code i s changed (4 1 0) to a code
of 2 through 8 . The plotting stops when the next value from the array is
- 1 , or when 8 values have been processed.
=
INTERMIXING ALPHANUMERICS AND GRAPHICS
The above plot shows how easy it is to mix alphanumerics and
graphics characters . Simply be aware of the fact that there are four
semigraphics elements in each alphanumeric character position and avoid
overwriting of text.
Color BASIC Graphics Capabilities
65
TREATING G RAPHICS AS CHARACTER STRINGS
The semigraphics 4 mode in SET/RESET may be used to advantage
in character string display . Each of the four elements for a graphics
character position is held in I byte in the semigraphics 4 mode. One byte
is used to hold one character's worth of data. We can exploit this fact and
treat a block of four graphics elements as a string character.
The reason for using character strings to generate graphics is that it
is fast ! To give you an idea how this method works and to show you how
speedy it can be, look at the following program:
1 00 REM GRA PH I CS CHARACTER STR I NG EXAMPLE
1 1 0 A $ = CHR$ ( 1 28 ) +CHR$ ( 1 28 ) +CHR$ ( 1 28 ) +
CHR$ ( 1 28 >
1 20 B $ = A$+A$+A$+A$+A$+A$+A$+A$
1 30 FOR I = 0 TO 1 5
l l'.1 0 P R I N T B $ i
1 5 0 N E >: T I
This program uses the CHR$ function. CHR$ creates a
one-character string with the value of the argument. It is used for those
arguments that are not valid ASCII character codes, but still legitimate
codes in the computer. Many of these codes cannot be generated from the
keyboard (there are no keys for them), and CHR$ is a way of handling
them in strings.
An A$ = CHR$( 1 28) generates a one-character string that is treated
like any other string. In place of an ASCII character, such as decimal 65
for " A " , however, is the code 1 2 8 .
Now in this case the code 1 28 represents a binary 1 0000000 . We
know from study of semigraphics that any character in video memory
with the first bit set is a semigraphics character. So it is with CHR$( 1 28) .
It is a semigraphics character with a color code of 000 (green) with the 4
bits for the elements off (black).
Statement 1 1 0 uses the concatenation (from Middle Latin
" concatena , " a stringed instrument - no, just kidding) feature of strings
to form a long string of four of these codes . Statement 1 20 concatenates
eight of these, making the total string of B$ equal to 32 codes of 1 28 .
The B$ string i s now PRINTed i n the next loop, just a s any other
text string would be. The result is that for each line, 32 bytes of l 28s are
stored in video memory (which is synonymous with being displayed),
just as 32 bytes of another text string would be stored and displayed .
The effect is to clear the screen with a black background . (The
display scrolls up as the last character of the last line is output . ) The
entire clear takes only about 112 second. (We know that CLS(O) can do it
66
much more rapidly, but this is just to give you an idea of the relative
speed of strings over SET/RESET. )
The program below utilizes graphics strings i n animation . The figure
drawn is a cylinder and piston of a two-stroke engine. It fires with a red
explosion and the piston moves up and down. Figure 3 . 9 shows the
display.
1 00
1 10
1 20
1 30
1 40
1 50
1 80
1 70
1 80
1 80
200
210
220
230
240
250
280
270
280
280
300
310
320
330
340
350
380
370
380
380
REM AN I MAT I ON US I NG CHR$ STR I NGS
CLS ( 1 )
A $ = CHR$ ( 1 75 )
5$= CHR$ ( 1 28 )
C $ = A$+A$+A$+A$+A$+A$
0 $ = A $ + 5 $ +5$+5$+5$+A$
E $ = C H R $ ( 2 23 )
F $ = E$+E$+E$+E$
G$= 5$+5$+5$+5$
H$ = CHR$ ( 1 8 1 )
I $ = H$+H$+H$+H$
PR I NT @ 205 1 C$ i
PR I NT @ 237 1 C$ i
F O R I = 28 8 T D 454 STEP 32
PR I NT @ I ' 0$
N E :n I
P R I NT @ 302 1 F$ i
PR I NT @ 270 d $ ;
F O R I = 0 T D 2 0 : N E :n I
FOR I = 302 T O 388 STEP 32
PR I NT @ I - 32 1G$ i
PR I NT @ I +32 1F$ i
FOR J = 0 TD 75 : NEXT J
N E :n I
FOR I = 388 TD 334 STEP -32
P R I NT @ I - 32 1 F $ i
P R I NT @ I +32 1 G$ i
FDR J = 0 TD 75 : NEXT J
NEXT I
GOTO 270
To see how these strings are set up, look at Figure 3 . 1 0 . The
cylinder shell is blue . The inside of the cylinder is black. The piston is
cyan . The explosion is red .
A blue color is represented by a semigraphics byte of 1 75 , a black
color by a byte of 1 2 8 , a cyan color by 223 , and a red color by 1 9 1 .
Color BASIC Graphics Capabilities
67
5
BLUE
BLUE
BLUE
BLACK
BLACK
CYAN
CYAN
BLACK
BLACK
RED
CYAN
BLACK
2
SEQ U E N C E : l,
BLU E
BLUE
BLACK
BLACK
2, 3, 4, 3, 2,
l.. ..
CYAN
BLACK
Figure 3.9:
CYAN
Animation example.
These are one-character strings A $ , B $ , E$ , and H$ , respectively.
The top 2 rows of the cyl inder are 6 bytes of 1 75 , held in C$. The
cylinder shell is a blue byte, 4 black bytes, and a blue byte, held in string
D$ .
Each piston row is 4 bytes of 223 , held by string E$. A row of black
is held in string G$. The explosion will occur over l row , and is held in
string 1 $ , which is 4 bytes of red.
The basic outline is set up by statements 2 J O through 250.
Statements 2 J O and 220 display the upper 2 rows , while statements 230
through 250 display the 6 rows for the cylinder shell .
Statement 260 displays the first row for the piston and statement 270
fires the cylinder by PRINTing 1$. Statements 270 through 390 are the
main loop for the program.
Each time through the loop the piston moves downward in 4 steps
for statements 290 through 330. As each step is made, the previous upper
row is erased by PRINTing a row of black. When the piston reaches the
last position, statements 340 through 380 move it upward in 4 steps ,
erasing the previous bottom row of the piston for each step. At the top of
the travel , statement 270 fires the cylinder again.
Timing loops at 320 and 370 create a delay for the animation effect.
68
tB
BLUE
BLUE
�
A$ . I 1 I 0 I 1 I 0 I 1 I 1 I 1 I 1 I ( CHR$ (175))
I
BLACK
B $ = I 1 I 0 I 0 I 0 I 0 I 0 I 0 I 0 I ( CHR$ ( 1 2 8) )
ALL OFF
C $ A$ + A$ + A$ + A$ + A$ + A$
�
•
1111111111111
BLUE
D $ = A$ + B$ + B$ + B$ + B$ + A$
II
II
CYAN
�
tB
II
II
CYAN
E$ • l 1 l 1 l o l 1 l 1 l 1 l 1 l 1 I < CHR $ < 22 3 l l
F$• E$ + E$ + E$ + E$
G
111111111
$ B$ + B$ + B$ + B$
-
CYAN
=
RED
�
BLACK
rn RED
rn
I $ • H$ + H$ + H$ + H$
111111111
Figure 3. 10:
RED
Animation example. strings.
Color BASIC Graphics Capabilities
69
OTHER M ETHODS FOR IMPLEMENTING
COLOR BASIC G RAPHICS
Besides the string method, there are two alternatives to
SET/RESET. These are the POKE method to change video display
memory/semigraphics modes and assembly language.
POKE Method
In the first two chapters, we discussed all of the graphics modes that
are available in the Color Computer. There are many more semigraphics
modes than the ones used in Color BASIC , and some of these permit 8
colors at resolutions of up to 64 horizontal by 1 92 vertical . In addition,
all of the true graphics modes are available, and these will permit high
resolutions of up to 1 28 by 1 92 . The only catch is that none of these are
implemented in Color B ASIC .
All of the modes, however, are available by setting the proper mode
via POKE statements as shown in Appendix IV. In addition, you must
POKE the proper data into video memory, and in some of the modes this
is quite involved .
Another problem is that some of the modes will be incompatible
with Color B AS IC as far as video memory mapping. Color BASIC
assumes a 5 1 2-byte video memory area, and many of the other modes
require a much larger memory area than this. One solution to this is to
change the location of the display memory, as described in the previous
chapter.
If the display area is changed to a high memory location (dependent
upon your RAM size and video memory required for the mode) and that
area protected by a CLEAR high memory parameter, then you can alter
this memory area with impunity.
It will still be a formidable job to POKE the proper data into video
memory, however. Even such a seemingly simple task as drawing a line
from point A to point B is not a trivial matter. Here again we must stress
that Extended Color B ASIC does all of this for you without the agony. (If
you like agony, perhaps I could persuade you to help me on the next
Color Computer book . )
Assembly Language
If you want high-speed graphics with Color BASIC and are clever at
programming, then perhaps 6809 assembly language is your best bet. Try
your hand with Radio Shack's Editor Assembler for the Color Computer.
Assembly language will certainly give you the speed for rapid
manipulation of graphics. The complexity is still there , however, in
spades , as assembly-language programming is another order of
magnitude more difficult than BASIC .
70
It is possible to combine the features of BASIC and machine
language by calling high-speed graphics subroutines using the USR cal l .
If you have a limited number o f graphics applications , perhaps you might
code the graphics routines in machine language (the output of assembly
language) and call them by USR calls.
In the next several chapters we'll describe the Extended BASIC
graphics commands, and perhaps we'll convince you that the power of
Extended BASIC is worth the cost.
NOTES
Color BASIC Graphics Capabilities
71
Extended Color BASIC: Initialization
73
CHAPTER 4
Extended Color BASIC : Initialization
In this chapter we ' l l talk about six of the twelve Extended Color BASIC
commands , in addition to discussing the general mapping of the Extended
Color BASIC graphics. The six commands are used to either initialize the
color graphics or as commands to change colors, screen location , or
graphics resolution. The six commands are
•
•
•
•
•
•
SCREEN
PCLEAR
PMODE
COLOR
PCLS
PCOPY
Select graphics or text screen
Reserve graphics pages
Set graphics resolution and page
Select foreground, background color
Clear graphics screen
Copy one graphics page to another
G RAPHICS MODES
We discussed the graphics modes in detail in Chapter 2. We ' l l give
a recap of that material here , for those who didn't want the detailed
explanations of Chapter 2 . (Always taking the easy way out , eh? You' d
make a good writer. )
There are 1 5 total alphanumerics, semigraphics, and graphics modes
built into the Color Computer by the video display generator (VDG) chip.
The VDG is a general-purpose semiconductor chip meant to provide
many types of color graphics. Some of its modes are more useful than
others.
74
Of the 1 5 modes , two provide a display of alphanumeric or text data
on the screen, five provide a display of semigraphics , and eight provide a
display of graphics .
The two alphanumeric modes are supported by the Color BASlC and
Extended Color BASIC .
One of the five semigraphics modes is supported in Color BASIC
and Extended Color BASIC - the semigraphics 4 mode that provides a
64-by-32 color display of eight colors on a black background. The
remaining semigraphics modes are available only by special
programming, either in BASIC or assembly language.
The eight graphics modes generally provide high-resolution graphics
at the expense of the number of colors available. The modes provide
either four or two colors, with resolutions from 64 by 64 to 256 by 1 92 .
The higher the resolution and greater the number o f colors , the more
video memory required . Five of the eight modes are supported by
Extended Color BASIC . Those modes are:
•
PMODE 0 : 1 28 horizontal
1 536 bytes of video memory
• PMODE 1 : 1 28 horizontal
3072 bytes of video memory
• PMODE 2 : 1 28 horizontal
3072 bytes of video memory
• PMODE 3 : 1 28 horizontal
6 1 44 bytes of video memory
• PMODE 4 : 256 horizontal
6 1 44 bytes of video memory
by 96 vertical in two colors and
by 96 vertical in four colors and
by 1 92 vertical in two colors and
by 1 92 vertical in four colors and
by 1 92 vertical in two colors and
COLOR SETS
Up to eight colors are available in the VDG - green , yellow , blue,
red, buff, cyan, magenta, and orange . In addition, black, the absence of
any color on the screen, is used.
In the graphics modes (PMODEs 0 through 4) , two or four colors
are available, depending upon the mode .
In the two-color mode (PMODE 0, 2 , or 4) the two colors are either
black and green on a green background, or black and buff on a buff
background. The choice of color set is selectable by the SCREEN
command.
If in the four-color mode (PMODE 1 or 3) the four colors are either
green, yellow, blue, and red on a green background, or buff, cyan,
magenta, and orange on a buff background. The choice of color set is
selectable by the SCREEN command.
The colors available for the 5 PMODEs are shown in Table 4 . 1 .
Extended Color BASIC: Initializa tion
75
Colors (Color Set O or Color Set 1 )
PMODE
black/green or black/buff
green, yellow, blue, red or buff, cyan, magenta, orange
black/green or black/buff
green, yellow, blue, red or buff, cyan, magenta, orange
black/green or black/buff
0
1
2
3
4
Table 4. 1 :
PMODE Colors .
M EMORY MAPPING FOR PMODES
The memory mapping for a Color Computer with Extended Color
BASIC is shown in Figure 4 . 1 . RAM occupies the first 1 6 , 384 bytes of
memory space from location 0 through 1 6 ,383 (or 32 ,767 on 32K
systems). RAM is used for storage of BASIC variables (working
storage), storage of the text screens , storage of the graphics pages, user
BASIC programs, BASIC program variables, string storage , stack , and a
possible reserved area for machine-language programs or other uses , as
shown in Figure 4 . 2 .
DECIMAL
HEX
65.535
FFFF
O E D I CAT E D I 10
CARTRIDGE
RO M
4 9 , 1 52
c ooo
40,960
AOOO
3 2 ' 768
32, 767
8000
7FFF
COLOR
BASIC
EXTENDED
COLOR
BASIC
BYTES
OF MEMORY
ANO I 10
65, 536
UNUSED
OR
RAM
16, 384
16,383
4 000
3FFF
RAM
0
0000
Figure 4 . 1 :
Memory mapping fo r Extended Color BASIC.
76
DECIMA L
HEX
32, 76716,383OR 7FFF3FFFOR RESERVED
FOR
MACHI NSTACK
E LANGUAGE
STRISTORAGENG
USER
BASIC
OR
PROGRAMS
32,1OF6, 768384RAMBYTES
13,824 3600 BASIVARICABLES
GRAPHI
CS
PAGES
0400 WORKITEXTNGSCREEN
102415360 0600
STORAGE
0000
L.,__ - - - - - - - -
1-- - - - - - - '--- - - - - -
--
1--- - - - - - - -
Figure 4.2:
RAM storage.
Text Screen
The area from RAM location 1 024 through 1 535 is dedicated to the
text screen (see Figure 4 . 3 ) . This is the normal display of text that you
see when you are entering BASIC statements. It is used any time that the
Extended Color BASIC interpreter is reentered.
GRAPHICS
PAGES
15361535 05FF
0600
1024 0400
Figure 4.3:
TEXT
SCREEN
1------1
Text screen.
} PER(32162CHARACTERS
RLIYNESES AT
LI NE·l
�� � J
Extended Color BASIC: Initializa tion
77
G raphics Screen
The area from 1 536 upwards is divided into graphics pages (see
Figure 4.4). The minimum size graphics area required is 1 5 36 bytes
(PMODE 0). The 1 5 36 figure is used as a standard screen size in
Extended Color BASIC . PMODEs 0, 1 , 2, 3 , and 4 use 1 53 6 , 3072,
3072, 6 1 44 , and 6 1 44 bytes respectively. In terms of graphics pages ,
then, these modes use 1 , 2 , 2, 4, and 4 pages respectively.
DECIMA L
HEX
1 3 , 824
3600
12, 288
3000
JO, 752
2AOO
9216
2400
7680
lEOO
6 14 4
1800
4608
1 2 00
G R A P H I C PA G E
8
7
"
EXTRA " PAGES
FOR AN I M A T I O N
O R OT H E R U S E S
6
5
4
3
3072
ocoo
1536
0600
2
1
Figure 4.4:
}
REQ U I R E D
FOR P M O D E
4
REQUIRED
FOR PMODE 0
Graphics pages.
Up to 8 graphics pages can be allocated by the PCLEAR command.
While only 4 pages are required in the highest resolution graphics mode
(PMODE 4, 256 by 1 92 , two colors), Extended Color BASIC has the
ability to switch rapidly from one page to the other by the PMODE
command and to copy one page to another by the PCOPY command . lt
might be convenient, for example, to rapidly display 8 pages at 1/a second
intervals in the PMODE 0 mode to provide an animation effect .
The Extended BASIC user doesn't have to b e aware o f the actual
memory location of the graphics pages; all references to them are done by
a page number from 1 through 8 .
78
THE SCREEN COMMAND
The format of the SCREEN command is
S C R E E N type
t
color set
where type is 0 for text screen or l for graphics screen and color set is 0
or l .
The SCREEN command is used to switch from a display of the
5 1 2-byte text screen to the display of the current graphics page. The color
set selects one of two color sets, as described above . The SCREEN
command may be used at any time in an Extended BASIC program . The
color set select may be used for the text screen in addition to selecting a
set of graphics colors . The standard text display is black on green, but
executing
SCREEN 0 t 1
will display red on orange for the text. Pressing (BREAK) always resets the
text display to black on green.
The short program
1 00
1 10
1 20
1 30
1 ll 0
1 50
SCREEN 0 t 1
FOR 1 = 0 TD
SCREEN 1 ,0
FOR 1 = 0 TO
SCREEN 1 t 1
FOR 1 = 0 TD
1 0 00
N D( T
1 0 00
N E )< T
1 0 00
N E )< T
l
illustrates how the screen may be switched from text to graphics and how
the color set may be changed.
When the screen is changed from text to graphics, the graphics
displays the current page and the current graphics resolution selected by
the last PMODE statement. If there is garbage in the graphics screen
area, the graphics display may be somewhat strange (expect to see lemon
rinds, old balogna skins , and so forth) . Normally, the graphics screen
would contain meaningful data put in by the Extended Color BASIC
graphics statements.
Extended Color BASIC: Initialization
79
THE PCLEAR COMMAND
The PCLEAR command is used to reserve 1 to 8 graphics pages .
Extended Color B ASIC automatically reserves 4 graphics pages on
initialization , enough for every graphics mode. If no PCLEAR is done,
this number of pages will remain in force throughout the BASIC program
execution .
The format of the PCLEAR is
P C L E A Rn
where n is 1 through 8 .
The PCLEAR is normally issued at the beginning of a BASIC
program . If it is issued dynamically in the middle of a graphics program
after display processing has been done, the PCLEAR may cause
unexpected results. When the Extended Color BASIC interpreter executes
the PCLEAR, it reserves the appropriate amount of storage after the text
screen . The area immediately after the graphics page area is used for the
BASIC program . The pointer to this area is adjusted to point to the next
location after the last byte of the graphics pages.
The PCLEAR may be used to reduce the default value of 4 graphics
pages to l to 3, making more RAM available for BASIC program
storage, or to make certain that enough video memory is available for
programs that do a lot of graphics processing. Use as required.
THE PMODE COMMAND
The PMODE command is used to set one of the graphics modes (0
through 4) and to select the starting page number ( I through 8) for
display . The format of PMODE is
P M O D E mode 1 start-page
The default value for PMODE is PM ODE 2, 1 , a resolution of 1 28
by 1 92 (two-color) with a start-page number of one.
PMODE may be used at any time to change the resolution of the
graphics mode . Don 't forget that the actual command that causes the
graphics page to be displayed is SCREEN . SCREEN uses the last
PMODE mode and start-page values (or the default values) to display the
graphics page.
PMODE may be used to switch from one graphics page to the next
while keeping the same resolution. For example: If we were in the lowest
80
resolution of 1 28 by 96, two-color (PMODE 0), each page would be
1 536 bytes . We could rapidly display all 8 graphics pages by
1 00 FOR S P = 1 TO 8
1 1 0 PMODE 0 1S P
1 2 0 N E >( T S P
In this case , the PCLEAR command must have previously allocated 8
graphics pages, and, of course, the pages would have been fil led with
some meaningful data.
THE PCOPY COMMAND
The PCOPY command is used to copy the contents of one graphic
page to another. The format is
PCOPY
n
TO m
where n and m are graphics page numbers of I through 8 , previously
allocated by a PCLEAR command.
The PCOPY command is a convenient way to move display data
from one graphics page to another without having to do a series of
cumbersome PEEK and POKEs or some other scheme. Dependent upon
the mode, don ' t forget that a screen ful l of data may take more than a
single graphics page and that it may be necessary to do several PCOPYs
for a screen ' s worth of data.
THE PCLS COMMAND
The PCLS command is the Extended Color BASIC equivalent of the
CLS command. It clears the current graphics screen with a specified
color. The format of PCLS is
P C L S color
where color is a value of I through 8 , corresponding to the standard
graphics colors. If no color is specified , the current background color is
used.
The PCLS clears the entire screen; this means that more than I
graphics page will be used if you are in a PMODE that requires more
than 1 graphics page (PMODE 2 through 4) .
" Ah there' s the rub, " as the Bard says in A Merchant of Fort
Worth . As you know from the discussion earlier in this chapter, only four
Extended Color BASIC: Initialization
81
o r two colors are available a t any given time , depending upon the
PMODE. How can PCLS clear the current graphics screen with all
colors? The answer is that it doesn' t . Only the available colors are used
and only in the current color set as specified by the last SCREEN
command. Table 4 . 2 shows the proper codes for various PMODES, color
sets, and PCLS colors.
The PCLS command may be used even if a graphics screen is not
being displayed (SCREEN O,X). The PCLS simply clears the current
graphics page and the current display status is not a consideration .
PM ODE
Color Set
0
0
0
.
2
0
3
0
4
0
= border
Table 4.2:
PCLS Actions .
PCLS Color
black
*green
black
*buff
*green
yellow
blue
red
*buff
cyan
magenta
orange
black
*green
black
*buff
*green
yellow
blue
red
*buff
cyan
magenta
orange
black
*green
black
*buff
PCLS Code
0
1
0
5
1
2
3
4
5
6
7
8
0
1
0
5
1
2
3
4
5
6
7
8
0
1
0
1
82
THE COLOR COMMAND
The COLOR command is used to set the foreground and background
colors . The format of the COLOR command is
C 0 L 0 R foreground ' background
where foreground is a value from l to 8 and background is a value from l
to 8 .
Let's talk about what w e mean by foreground , background , and
border, since these are confusing terms.
The border for the alphanumeric and semigraphics modes is always
black, as shown in Figure 4 . 5 . The border for the graphics modes is
either green or buff, depending upon whether we have selected color set
0 (green) or color set I (buff) . In both the alphanumerics/semigraphics
modes and the graphics modes , we can set the background color to the
same color as the border, making the background disappear beyond the
edge of the screen. We can also set the background to another color,
creating a distinct border. The background , therefore , is the field upon
which graphics figures will be drawn, by the various Extended Color
BASIC commands. The foreground is the color used to draw the figures .
As with the PCLS command , there may be a limited number of
colors available for either background or foreground. If we are in the
two-color mode (PMODE 0, 2, or 4), the background can be green or
black for color set 0 or buff or black for color set l . The foreground can
be the same two colors . Obviously , we want the foreground to show up,
so we are left with green/black or buff/black for the two screen colors
whether they are specified as foreground or background.
If we are in a four-color mode (PMODE I or 3 ) , the background and
foreground colors can be green, yellow, blue, or red , for color set 0 or
buff, cyan , magenta, and orange , for color set 1 . Here again, we want
the colors to show up, so we have the following options for foreground
and background colors: green/yellow , green/blue , green/red , yellow/blue,
yel low/red, and blue/red, buff/cyan, buff/magenta, buff/orange,
cyan/magenta, cyan/orange, and magenta/orange.
The COLOR command may be used at any time; if it is used in the
four-color mode to change the foreground color, three separate colors
may be displayed upon a one-color background. If that background color
is the same as the border color, no border will appear.
As an example of the use of COLOR, look at the fol lowing
program . It paints three rectangles upon a buff background using the
LINE command discussed in the next chapter. The display is shown in
Figure 4 . 5 .
Extended Color BASIC: Initialization
1 00
1 10
1 20
1 30
1 40
1 50
1 60
1 70
1 80
1 80
220
83
REM USE OF COLOR COMMAND
PMODE 1 1 1
SCREEN 1 1 1
PCLS 5
COLOR 6 15
L I N E ( l1 8 1 2 6 l - ( 8 l1 1 5 ll l 1 P S E T 1 B F
COLOR 7 15
L I N E ( 1 2 0 1 8 2 l - ( 1 5 6 t l l ll l 1 P S E T 1 B F
COLOR 8 1 5
L I N E ( 1 8 2 t l ll 2 l - ( 2 2 8 t 1 7 0 l 1 P S E T 1 B F
GOTO 200
COLOR 6 , 5
B
B U F F BOR D E R ,
BAC K G R O U N D
7,
I I
COLOR
5
M A G E N TA
I I
C O L O R 8,
5
ORA N G E
Figure 4.5:
COLOR use example.
USING THE COMMANDS IN THIS CHAPTER
The commands discussed in this chapter were really the trivial
commands in Extended Color BASIC; they do very little as far as
producing graphics on the screen . Understanding SCREEN , PCLEAR,
PMODE, COLOR, and PCLS , and PCOPY , however, is essential to
working with the remaining graphics commands . In the rest of this book,
we ' ll be discussing the graphics commands that can be used to draw
plots , lines, boxes , filled-in boxes , circles, ellipses , arcs, irregular
figures, etc . , and we' II be using the material in this chapter as a base .
PSET, PRESET, PPOINT, and Plotting
85
CHAPTER 5
Extended Color BAS I C : PSET, PRESET,
PPOINT, and Plotting
We've covered the elementary commands of Extended Color BASIC in
previous chapters. In this chapter we ' l l discuss three of the Extended
Color B ASIC commands that are used to plot points . These commands
are very similar to the Color BASIC commands of SET, RESET, and
POINT, which let us set , reset, or test any graphics point; they are PSET,
PRESET, and PPOINT.
THE G RAPHICS MATRIX
As we' ve seen from the previous chapters , the graphics modes use
different resolutions, ranging from 1 28 horizontal elements by 96 vertical
elements to 256 by 1 92 . To simplify switching from one resolution to
another, all graphics commands in the remainder of the book use the
highest resolution graphics mode of 256 horizontal by 1 92 vertical in
specifying coordinates (See Figure 5 . 1 ) .
We can see how this works by previewing the LINE command,
which draws a line between any two screen points . The program below
displays the line in the upper left quadrant , as shown in Figure 5 . 2 , for
the 5 graphics modes. Notice in running the program that the line
becomes finer and finer as the graphics modes go to higher resolution.
(It's a fine line between the proper use of PMODE 0 and PMODE 4 ! )
86
(
ELEMENT
ELEMENT
r255.
o
0, 0
I
256 HORIZ ONTAL
ELEMENTS
2 CAL
VERTI
ELEMENTS
I
19
�
ELEMENT
0, 1 9 1
Figure 5. 1 :
ELEMENT
128,CENTER96 TO
!CLOSE
l
L 255,
ELEMENT
191
Graphics matrix.
1 0 0 R E M D E M O N S T R A T I O N OF G R A P H I C S
ADDRESS I NG
1 1 0 F O R P = 0 T O LI
1 20 PMODE P 1 1
1 30 SCREEN 1 1 0
1 40 PCLS
1 50 L I NE ( 0 1 0 ) - ( 1 27 185 ) 1 PSET
1 6 0 F O R I = 0 TO 1 0 00 : NEXT I
1 7 0 N E :n P
1 80 GOTO 1 80
USING PSET, PRESET, and PPOINT
The PSET, PRESET, and PPOINT are PMODE SETs, RESETs,
and POINTs, hence the prefix "P" . They do essentially the same
thing as the Color BASIC SET, RESET, and POINT - they set,
reset, or test one point on the screen. All coordinates for the com­
- - 1 92 coordinate system of graphics.
mands use the 256 by
PSET, PRESET, PPOIN T, and Plotting
Figure 5 . 2 :
87
Resolution example.
PSET
The format for PSET is
PSET
(h
1v 1c)
where h is a horizontal element number o f 0 through 255 , v i s a vertical
element number of 0 through 1 92 , and c is a color value of 0 through 8 .
I f the c parameter i s omitted , the current foreground color i s used .
PSET will set one element located at h, v. The size of the element
that is set will be one element of whatever PMODE is in force . The
actual physical size will be finer for higher resolution graphics modes.
The size of the element in PMODE 4 is 1 unit, for example, but the size
of the element in PMODE 0 is 4 units , due to the lower resolution.
This program sets one vertical line in the middle of the screen .
1 00
110
1 20
1 30
1 ll 0
1 50
1 60
1 70
R E M S E T O N E t.J E R T I C A L L I N E
PMODE 0 t 1
SCREEN 1 '0
PCLS
F O R l.l = 0 T O 1 9 2
P S E T ( 1 2 7 , t.J )
N E> : T l.J
GOTO 1 70
88
The PSET command uses the current foreground color to set the
points. In the program above, the background color defaulted to black
and the foreground color defaulted to green , as PMODE 0 is a two-color
mode.
In the program below , the same line is drawn, but PM ODE 1 is used
with the alternate color set (SCREEN 1 , 1 ) . The PSET here specifies
color 7, and the result turns out to be a blue line on a buff background .
1 00
110
1 20
1 30
1 ll 0
1 50
1 60
1 70
R E M S E T O N E l,J E R T I C A L L I N E
PMODE 1 t 1
SCREEN 1 t 1
PCLS
F O R l,! = 0 T D 1 9 2
P S E T ( 1 2 7 , l,J t 7 )
N E )< T l,J
GOTO 1 70
PRESET
The PRESET command works exactly the same as PSET in reverse .
The PRESET resets an element. Since the reset is always assumed to be
in the background color, no color value is specified in the format
PRESET
<H tV l
The program below sets a vertical line, delays for a display , and
then resets the same line.
1 00
110
1 20
1 30
1 ll 0
1 50
1 60
1 70
1 80
190
200
210
R E M S E T O N E l,J E R T I C A L L I N E
PMODE 1 t 1
SCREEN 1 t 1
PCLS
F O R l.1 = 0 T D 1 9 2
P S E T ( 1 2 7 , l.J t 7 )
N E :n l,J
N E )< T I
FOR ! = 0 TD 1 000
F D R l,! = 0 T D 1 9 2
P R E S E T ( 1 2 7 , i,J )
N E )< T l,J
GOTO 2 1 0
PSET, PRESET. PPOINT, and Plotting
89
PPOINT
PPOINT is used in similar fashion to POINT. It tests the color of a
specified graphics point. The format of PPOINT is
P PO I NT
<h 1v)
PSET and PRESET will be used a lot less frequently than the more
powerful Extended Color commands such as LINE and CIRCLE;
PPOINT will be used even less frequently . Sti ll, it is nice to have a
command that can test the color of an element. As an example of the use
of PPOINT, consider the program below , which clears the screen , sets
one random element to magenta, and then scans for the element returning
the location as shown in Figure 5 . 3 .
1 00
1 10
1 20
1 3 Q)
1 LI 0
1 5 Q)
1 G Ql
1 7 Q)
1 8 Q)
1 9 Q)
2 Q) Q)
2 1 Q)
R E M E >: A M P L E O F P P O I N T
PMODE 1 d
SCREEN 1 d
PCLS
PSET < RND < 255 ) 1 RND < 1 9 1 ) , 7 )
F O R )-( = 0 T D 2 5 5
F D R y = Q) T D 1 9 2
I F P P O I N T O( 1 Y ) = 7 G O T O 2 0 0
N E >( T y
N E )< T }-(
S C R E E N Q) ' Q)
P R I N T " P O I N T F O U N D A T " ' t\ ,
• \/
I
• \I
The program above first sets the PMODE to a four-color mode,
PMODE 1 . The screen is set to graphics with color set 1 by SCREEN
1 , 1 . Next, the screen is cleared to the background color (buff) by PCLS .
One random point is then set by PSET. The color for the PSET is 7 , or
blue.
A scan of all of the 3 ,072 points is then made by the X, Y loops. For
each point, a test is made of the color by the PPOINT statement. If any
point is color 7 , the screen is reset to text and the location of the point is
printed .
The maximum (worst-case) time for the scan here is 400 seconds , so
be patient !
In thinking about it, PPOINT is about as useful as POINT. See
earlier comments .
90
B U F F BACKG R O U N D
M A G E N TA P O I N T ,
S E T R A N DOM L Y - I
S TA R T
P PO I N T S C A N
ON S C R E E N
END
Figure 5.3:
PPOINT use example.
TIME FOR PSET/PRESET
The scan above indicates a disadvantage of PSET/PRESET and
PPOINT. All of these commands have fairly large overhead compared to
the more powerful commands such as LINE and CIRCLE. It is much
faster to draw a line with LINE, for example, than with a loop using
PSET. The PSET/PRESET commands should be used only when you
can ' t accomplish the same things with other Extended Color BASIC
commands. One of the best uses for PSET/PRESET is in plotting data,
which we'll discuss right now .
PLOTTING USING PSET/PRESET
In a plotting application, you can use the PSET/PRESET commands
to plot the results of graphs . To do this , we must give some thought
PSET, PRESET, PPO/NT, and Plotting
91
about the coordinates o f the graphics screen and the coordinates o f the
application . (We may be putting Descartes before de horse , but here
goes . . . )
Most plotting is done in Cartesian coordinates as shown in Figure
5 .4 . In this system, there are X and Y axes.
The X axis is the horizontal axis. X values increase in a positive
sense to the right, and decrease in a negative sense to the left. The Y axis
is the vertical axis. Y values increase in a positive sense in the up
direction , and decrease in a negative sense in the down direction. The
intersection of the X and Y axes defines the origin of the graph, where X
and Y are both zero.
AXI S
Y
POI N T AT \
(X , Y l • - 2 . 2
t-- - - - 2
I
!
0
0,
N
I
G
I
rOR
-t -+-- -+--i --+- +-_,1---+--!-- -+- +-+ X AXI S
-
-
-4
-3
-
-2
-
-
-I
I
I
-I
-2
_ _ _ _ _ _
-3
-4
Figure 5.4:
-
4
Cartesian coordinates.
_.
\_POIAT NT
(X , Y l • 3 , -2
92
, - - - - - - --- - - - - - ,I
y
I
I
I
I
I
I
I
CARTESIAN I�:
I
---����������----- ,
I
I
I
I
I
I
I
I
I
I
I
L_ _ _ _ _ _ _
_ _ _ _ _ __ _
J
ORIIS NOWG( 0IN, AATN
ATCARTESI
Ol
H
COLOR
COMPUTER
191
Figure 5.5:
v
./!
I
I
I
I
I
I
I
________________ _
_J
Conversion to Color Computer coordinates.
To convert from the X, Y coordinate system to the graphics of the
Color Computer screen is a fairly easy task. It involves changing the X , Y
coordinates to horizontal and vertical coordinates , as shown i n Figure
5.5.
First o f all , determine where the origin i s to be on the screen . You
might want a center origin for the display of a map, where the X, Y
coordinates are referenced to the center of a state, as shown in Figure
5 . 6 . For mathematical functions, you might also want a center origin
where both positive and negative values are represented, as shown in the
same figure . If you are displaying the elevation of a jogging course, you
might want the origin to start in the left-hand corner, as shown in the
figure . If you are displaying undersea mountain ranges , the origin might
start at the midpoint of the top screen row.
PSET, PRESET, PPOINT, and Plotting
GENCY
PPO I N T
CORN RS
�
CON FUSION
%!
O R I G I N FOR
MAP D I SPLAY
READINESS
SHOCK
z
0
1<I
>
w
-'1500
/ H E AR T B R E A K
w
1000
500
\_
D I ST A N C E
OR I G I N FOR J O GG I N G
COU R S E D I S P L AY
OR I G I N FOR
M AT H E M A T I C A L
P L OT T I N G
/"
Figure 5.6:
HILL
Determining the origin of a graph.
O R I G I N FOR
U N D E R S E A PLOT
93
94
Next, determine the limits of the X and Y data you want displayed.
The map coordinates might involve an area 400 miles by 200 miles. A
mathematical graph might involve horizontal values of 720 units and
vertical units of + 1 to - 1 . The jogging course display might cover 26
miles , 385 yards and elevations from 0 to 500 feet .
T o translate from X , Y coordinates to Color Computer screen
coordinates , do the following:
1 . Write down the maximum number of X units. Include both
negative and positive ranges . If an X, Y plot goes from -50 to + 50, for
example, the maximum number of units is 1 00 . Call this XR , for X range .
2 . Divide 254 by XR for a new value XS (X scale factor) . This is
the number of X units for every horizontal unit on the screen minus one .
3 . Write down the maximum number of Y units . Include both
negative and positive ranges . If an X, Y plot goes from - 1 0 to + 1 0 , for
example, the maximum number of units is 20. Call this YR , for Y range .
4 . Divide 1 9 1 by YR for a new value of YS , Y scale factor. This is
the number of Y units for every vertical unit on the screen minus one.
5 . Locate the origin that you want on the screen. Express it in h, v
units . The origin will have a horizontal location of 0 through 255 and a
vertical location of 0 through 1 9 1 . Call these coordinates H and V.
6 . Plot the values by
PSET
<H ,y 1C>
where H = H + X x XR , V = V Y x YR , and C is the PSET color
value . Note that the equation for V has a minus sign .
As an example of this method , let's plot a sine graph . The sine
waveform for 0 through 360 degrees is shown in Figure 5 . 7. It varies
between 0 and + 1 and 0 and -1 , vertically. The X range, or XR , is in
this case 360 degrees . The XS, or X scale factor is 254/360. The Y range,
or YR , is 2 units . The YS, or Y scale factor, is 1 9 1 /2 .
-
2( Y
U N I TS
RANGE )
3 6 0 DEGREES
X RANG E )
Figure 5.7:
(
Sine wave example.
PSET, PRESET, PPOINT, and Plotting
95
In this case there are no negative values of X (0 through 360
degrees) , but there are both positive and negative values of Y ( 1 through
1 ) . We ' ll locate our origin at the midpoint of the left side of the screen,
which is H 0 and V 96. H is therefore 0 and V is 96.
We are going to vary X from 0 through 360 and we should get
values of Y from 0 to 1 back to 0 and down to -1 and then back to 0. The
values of Y will be given by Y
SIN(X). A minor complication here,
however. . . X is in radians, a unit of angular measurement which is equal
to the number of degrees divided by 57. 2957 (or 2 x PV360) . When we
use this conversion , we have
-
=
=
=
Y = S I N I X / 57 . 2957 1
For our major loop in the program, then, it appears we have
something like
1 70
1 80
1 90
200
210
F D R }{ = 0 T D 3 8 0
H = H + )< * >: S
t.J = t.J _ Y * Y S
P S E T I H , 1.1 t 7 l
N E )< T }{
Using the scale factor and origin values , we have
1 70 FOR X = 0 TD 380
1 80 H = 0+X*254/ 380
1 90 V = 9 8 - Y * l 1 92 / 2 l
2 0 0 P S E T I H t l.l t 7 l
2 1 0 N E )< T ){
We also have to relate Y to X by the function
Y = SIN(X/5 7 . 29578):
1 7 0 F O R X = 0 TD 3 8 0
1 80 H = 0+X*254/ 380
1 90 V = 9 8 - S I N I X / 57 . 29578 l * l 1 92/ 2 l
2 0 0 P S E T I H , t.1 , 7 1
2 1 0 N E )< T ){
96
When we integrate this with the graphics commands, the program
looks like this:
1 00
1 10
1 20
1 30
1 70
1 80
1 90
200
210
220
REM PLOT S I NE WAVE
P M O D E ll 1 l
SCREEN 1 10
PCLS
FOR X = 0 TD 380
H = 0 + X * 2 5 ll / 3 8 0
V = 9 G - S I N I X / 57 . 29578 1 * 1 1 9 1 / 2 1
P S E T < H , t.1 I
N E ){ T }(
GOTO 220
The resulting display is shown in Figure 5 . 8 .
I
I
;�'\.
\.
I
\�
'
Figure 5.8:
/
180 DEGREES
\
0 DEGREES
\.
/
\
\
\'
"-/
I
360
DEGREES
/
/
I
Sine wave ploc.
In this program we took the approach of looping through the
external range of Xs - the range of degrees from 0 through 360 . Another
approach is to loop through the number of H or V points. In other words,
instead of plotting 360 increments, why not plot 255 increments , one per
horizontal unit? Depending upon the function that is being plotted, this
can sometimes eliminate multiple PSETs of the same point. This
approach is used in the program below , which plots multiple sine waves
PSET, PRESET, PPOINT, and Plotting
97
over a user-specified number of degrees and a starting angular
displacement (starting number of degrees) .
1 00
1 10
1 20
1 30
1 40
1 50
1 60
1 70
1 80
1 80
200
210
220
REM PLOT MULT I PLE S I NE WAVES
P M O D E ll 1 1
PCLS
I NPUT
NUMBER OF DEGREES ; ND
I N PUT " START I NG DEGREE S " ; so
ND=ND-SD
SCREEN 1 10
F O R X = 0 TD 255
R D = I I I X / 255 l •ND l +SD l / 57 . 28578
PSET I X 1 8 6 - S I N I RD l •85 l
N D( T :<
SCREEN 0 10
GOTO 1 30
II
I I
In this program X is the number of the horizontal point and varies
from 0 through 255 . The range of X is variable and is an input parameter.
It is set equal to ND , number of degrees . The starting number of degrees
is input variable ND .
Initiall y , the PMODE is set equal to 4 , the 255 by 1 92 two-color
resolution. The graphics screen is then cleared . Note that this can be done
even without displaying the screen . Statements 1 30 through 220
constitute the program loop. Each time through, the number of degrees to
be displayed is input as ND , along with the starting point, SD . The
SCREEN command then sets the graphic mode and the sine function is
plotted. At the end of the plot, the screen is set back to text mode , and
another pass is made . Note that the screen is only cleared at the
beginning , and that subsequent passes plot the new plot over the old.
-
-
Drawing Lines, Rectangles, Circles, and A rcs
99
CHAPTER 6
Extended Color BAS I C : Drawing Lines,
Rectangles, Filled Rectangles, Circles, and
Arcs with L I N E and C I RCLE
Up to this point in Color Computer Graphics, we ' ve discussed some
of the more mundane commands. In this chapter and the next, we ' ll be
discussing LINE , CIRCLE, ORAW , PAINT, and GET/PUT, the most
powerful Extended Color BASIC commands that will enable you to draw
a variety of lines , shapes , and figures and to color them easily .
This chapter discusses the LINE and CIRCLE commands which
enable you to:
•
•
•
•
•
•
Draw
Draw
Draw
Draw
Draw
Draw
a straight line between any two points on the screen
a box of any size anywhere on the screen
a filled-in box of any size anywhere on the screen
a circle of any size anywhere on the screen
an arc of any size anywhere on the screen
an ellipse of any size anywhere on the screen
USING THE LINE COMMAND TO DRAW LINES
The LINE command allows you to draw a line between any two
points on the screen . The format of the LINE for line drawing is
L I NE
( x1 t y1 ) - ( X2 t Y2 ) I A
100
The XI , YI and X2 , Y2 parameters define two points on the screen.
These points may be in any relationship to each other. In other words ,
point 2 may be to the left or right of point l and above or below point l .
(About the only stipulation is that the points must be on the screen ! ) The
points are defined by the standard H, V coordinates that we used in PSET,
PRESET, and PPOINT
X is a value from 0 through 255 that specifies
the horizontal coordinate; Y is a value from 0 through 1 92 that specifies
the vertical coordinate. The coordinates reflect the screen matrix in the
highest resolution mode, but, of course, are valid for any PMODE from 0
through 4 .
The A coordinate is either PSET o r PRESET. If PSET i s used, then
the current foreground color is used in drawing the line. If PRESET is
used, then the current background color is used to draw the line . In other
words, this command is really a PSET LINE or PRESET LINE , a
command that draws or erases the line , depending upon whether the
PSET or PRESET option is used.
That ' s all there is to drawing a line , any line ! Those of you who are
not impressed have probably never tried to implement a line-drawing
routine in BASIC or assembly language. It is quite involved when the
direction of the line, the limit conditions of the end points , and the
increments are considered. LINE will do all of this automatically , leaving
you free to do graphics applications .
T o draw a line between a point at 23,23 and a point at 1 00, 100,
then , we'd have
-
L I NE
( 23 1 23 ) - ( 1 00 1 1 00 ) 1 PSET
The result would be as shown in Figure 6 . 1 .
�3)
� (100,100)
Figure
6.1:
LINE example.
Drawing Lines, Rectangles, Circles, and A rcs
101
To show you that LINE does indeed work with any set of two
points , run the following program. The program selects any two points at
random and then uses LINE to connect them, using a random color.
PMODE 3 ( l 28 by 1 92 resolution) is used.
1 00
1 10
1 20
1 30
1 40
1 50
1 60
1 70
1 80
1 90
200
210
REM L I NE DEMONSTRA T I ON
PMODE 3 1 1
SCREEN 1 10
PCLS
X 1 = RND l 256 l - 1
Y 1 = R ND l 1 92 l - 1
X 2 = RND l 256 1 - 1
Y2=RND C 1 92 l - 1
C = RND l 5 l - 1 : I F C = l THEN GOTO
COLOR C d
L I N E 0( 1 1 Y 1 l I )<2 1 Y 2 l 1 P S E T
GOTO 1 40
1 80
-
Speed of LINE
How fast does LINE draw a line? To the eye it seems instantaneous.
This is an interesting question, for with a great deal of graphics
processing, execution speed may be a critical factor. We can easily find
out by running this program
1
1
1
1
1
1
1
00
10
20
30
40
50
60
REM L I NE T I MER
PMDDE 4 1 1
SCREEN 1 I 0
PCLS
FDR Y 1 = 0 TD 1 92
L I NE 1 0 1 Y 1 l - 1 255 1 Y l l 1 PSET
N E )< T Y l
The program action is shown in Figure 6 . 2 .
1 02
I
I CLEAR SCREEN
I
I
I
I
Figure
6.2:
FROM
BOTTOMTOP TO
LINE timing display.
When this program is run and timed , we get about 8 . 3 seconds to
clear the screen using LINE. If the statement in 1 50 is replaced by 1 50
REM AAAAAA, the time is about 1 . 3 seconds. The total time for LINE
processing in this simple case is therefore about 7 seconds , or about 36
milliseconds (36/ 1 000 second) per line. A similar test for LINE in
PMODE 4 yields 5 1 9 random-length, random-direction lines in 50
seconds, or about one "average" line per 96 milliseconds. The worst
case is probably about double this, or about 1 92 milliseconds . This is at
least 20 times faster than the fastest BASIC line drawer!
Background and Foreground Colors in LINE
The PSET option uses the current foreground color to draw the line.
This means that the foreground color must be changed by means of a
COLOR statement to draw a line in a color other than the current PSET
color. Using PRESET simply uses the current background color, which
has the effect of erasing the line as this program illustrates:
1 00
1 10
1 20
130
l t'.1 0
1 50
1 60
1 70
REM L I NE PRESET EXAMPLE
PMDDE 3 1 1
SCREEN 1 1 0
PCLS
L I N E ( 23 1 23 l - ( 1 00 d 00 l 1 PSET
FOR 1 = 0 TD 1 000 : NEXT I
L I NE < 23 1 23 ) - ( 1 00 ' 1 00 ) 1 PRESET
GOTO 1 70
Dra wing Lines, Rectangles, Circles, and A rcs
103
USING LINE TO DRAW BOXES AND FILLED-IN BOXES
LINE Should really have been called LINEBOX (or maybe
LINEBOXFILLEDINBOX), because it generates not only lines on the
screen but also boxes (rectangles) and filled-in boxes . In this option, the
two points of LINE define the opposing comers of a box as shown in
Figure 6 . 3 .
� - - - - - -,
I
I
L
TWO NPOINTS
DEFI
I N G BOX
I
I
I
I
_
_
_ _ _
I
I
_.
TWO
DEFINIPOIN GN TSBOX
Figure 6.3:
-----LIEXTENDED
NBASIESC DRAW
BY
COLOR
I N TERPRETER
Using LINE to draw boxes .
The format of line for box generation is
L I NE
( X 1 1 Y1 l - ( X2 1 Y2 l 1 P S E T 1 B
or
L I NE
( X 1 , Y1 >
-
( X2 , Y2 l
1
PSET 1 BF
where B generates a box outline, and B F generates a box filled in with
the current foreground color. The PRESET option can be used in place of
PSET to reset the box to the background color.
1 04
Let' s use the previous random line generator to generate boxes and
filled-in boxes:
1 00
1 10
1 20
1 30
1 40
1 50
1 60
1 70
1 80
1 90
200
REM BOX DEMONSTRAT I O N
PMODE 3 1 1
SCREEN 1 10
PCLS
X 1 = RND C 256 l - 1
Y l = RN D < 1 82 l - 1
}( 2 = ( 2 5 6 ) - 1
Y 2 = RND C 1 82 l - 1
C = R ND C 5 l - 1 : I F C = l THEN GOTO 1 80
COLOR C 1 l
I F RND C 2 l = 2 THEN L I NE
O ( l 1 Y l l - r n2 1 Y2 l 1 PSET 1 B ELSE L I NE
OD 1 Y l l - ( ){ 2 1 Y 2 l 1 P S E T 1 B F
2 1 0 GOTO 1 40
This program continually generates boxes and filled-in boxes of
every size at every location (see Figure 6.4; as usual , this is a program of
dubious practical value . ) The overhead of generating a filled-in box is
much greater than that of generating a line or outline of a box . Because
of thi s , you can see that there is a definite direction to the fil l , either up
or down. Furthermore , the time in generating a filled-in box may go over
one second for larger boxes.
I
Figure
6.4:
BOX example.
Dra wing Lines, Rec tangles, Circles, a n d A rcs
105
Direction of LINE
Some experimentation with LINE uncovers the fact that LINE
operates just as you would expect. It draws a line from the beginning to
end point and also generates a box from the horizontal line defined by the
start point (Xl , Yl ) to the horizontal line defined by the end point
(X2 , Y2 ) , as shown in Figure 6 . 5 .
BOX O R F I LLED-IN BOX
D R AWN IN I N DICATED
·� '"'"'"
1;:,
I t�
: IJJ'l'
.... , ,
DICATED
D I R E CT I O N
S
S
'
E
LJ
S = START P O I N T
E= END POINT
Figure
6.5:
Direction of LINE.
Speed of LINE,BF
A test case program for LINE, B F generated 1 05 filled-in boxes in
50 seconds. The average filled-in box generation is therefore about 1/2
second , a significant time for a microcomputer action, but far less than it
would take for the equivalent user code to perform such an action.
USING CIRCLE TO DRAW CIRCLES
The next Extended Color BASIC command that we'll discuss is
CIRCLE. Circle can be used to draw not only circles, but also ellipses
and arcs (CIRCLEELLIPSEARC, really) .
The format of CIRCLE to draw a circle is
C I RCLE
e x t Y),R . c
1 06
where X and Y are the horizontal and vertical coordinates of PMODE 4,
the 256 horizontal by 1 92 vertical mode. X can therefore be 0 through
255 and Y can be 0 through 1 92. This coordinate defines the center of the
circle, as shown in Figure 6 . 6 .
C I RCLE ( X , Y ) , R , C
C I R C L E ( 70, 9 0 ) , 46
�
G
CENTER D E F I N E D
BY ( 70 , 90 )
"-.:_j___ R A DIUS
Figure
6.6:
DEFINED
BY 4 6
M A X I MUM
R A D I U S • 1 28
CIRCLE format.
The R parameter is the circle's radius, or distance from the center to
any point on the circumference, as shown in the figure . The maximum
radius for a display of a circle will be 1 27 for a center of 1 28 ,92. The
radius may vary from 0 to 1 27 or above, although larger radii may result
in border segments (discussed later in this chapter) .
The C parameter is the color code for the foreground color. If this is
omitted, the current foreground color is used. A color code that is the
same as the background effectively causes a circle reset which erases a
previously drawn circle.
To gain some familiarity with the CIRCLE, run the following
program . It draws circles from the screen center with increasing radii ,
similar to what is shown in Figure 6. 7.
1 00
1 10
1 20
1 30
1 40
REM C I RCLE DRAWER
PMODE 4 t 1
SCREEN 1 ,0
PCLS 1
FOR R = 0 T O 200
Drawing Lines, Rectangles, Circles, and A rcs
107
1 50 C I RCLE ( 1 28 1 96 ) 1 R 1 0
1 60 F O R 1 = 0 T D 1 000 : NEXT
1 70 C I RCLE
1 8 0 N E >( T R
( 1 28 1 96 ) 1 R t l
APPROXIMATE
SCREEN
CENTER
figure 6.7:
CIRCLE e x ample .
There' s one interesting thing about the circles created by this
program . We specified a radius of up to 200; for the larger radii , the
circles flattened out and finally occupied the border area of the screen , as
shown in Figure 6 . 8 .
BORDER FROM LARGE
RADIUS
figure
6.8:
CIRCLE border case.
108
Height : Width Ratio
The normal aspect ratio of a television picture is 4 : 3 , as shown in
Figure 6 . 9 . This figure means that the width of the picture is 4 units and
that the height is 3 units . The VDG chip in the Color Computer divides
the screen up into 256 by 1 92 pixels, which is also an aspect ratio of
4 : 3 . A correctly adjusted television should show a perfectly round circle
when the program above is run. Inexpensive televisions may produce an
elongated circle which may have to be corrected by some adjustments to
the controls on the back of the TV - vertical height and centering.
4 (256
U N ITS
rn
..J
w
x
""'
"'
�
�
rn
!::
z
::>
"'
1
Figure 6.9:
P I X E L S.)
0
(128,96),40
C I R C LE G E N E RATED BY C I RC L E
OR S I M I L A R SHOULD
BE PERFECTLY ROUND
Aspect ratio
The height : width ratio for the circle is variable within the CIRCLE
command, however. The format for a CIRCLE command with
height : width ratio is
C I RCLE
( X 1 Y l R 1 C 1HW
where HW is the height : width ratio, expressed as a figure from 0 to
255 . The default HW ratio is 1 .
The HW ratio is just what the name says - the ratio of graphic
height to width . A HW ratio of 1 says that the height of the circle will be
1 unit and the width of the circle will be 1 unit. Height divided by width
is Il l and the HW ratio is 1 .
Dra wing Lines, Rec tangles, Circles, and A rcs
109
Suppose that the height was 40 units and the width was 80 units . In
this case the HW ratio would be 40/80, or . 5 , and the circle would appear
as shown in Figure 6 . 1 0 , a flattened circle, really an ellipse .
Figure 6. 10:
HW ratio example I
If the height was 80 and the width was 40, the circle would be
squashed from the sides . The HW ratio would be 80/40, or 2, and the
circle would appear as shown in Figure 6 . 1 1 .
/
Figure 6. 1 1 :
H W ratio e x ample 2 .
HW = _fill =
40
2
1 10
Cases from O through 3 are shown in Figure 6. 1 2 . These cases are
generated by the program below .
1 00
1 10
1 20
1 30
1 40
1 50
1 60
1 70
Figure
6. 12:
REM HW RAT I O FOR C I RCLES
P M O D E LI t 1
SCREEN 1 10
PCLS
F O R H W = 0 TO 3 S T E P . 25
C I RCLE < 1 28 186 ) 1 50 1 1 1HW
N D( T H W
GOTO 1 70
HW
=
1
HW
=
0
HW ratio program example.
You can see from the figure that an HW ratio of 0 produces a circle
of no height - a horizontal line - and that an HW ratio greater than 2 or
3 draws a very elongated ellipse. An HW of 255 would with a small
radius be close to a vertical line.
It's important to note that when the HW ratio is other than 1 , the
width of the circle is equal to the radius times 2 and the height of the
circle is equal to the radius times 2 and the HW ratio. It may well have
been the other way around, but one standard or the other had to be
chosen.
When the circle produced by such an extreme HW ratio is drawn,
any points that fall outside the border of the screen are drawn as being on
the border. Which brings us to our next topic.
Dra wing Lines, Recta ngles, Circles, and A rcs
111
Borders for Oversized Circles
As you can see from Figure 6 . 8 , any circle that falls outside of the
border is drawn as the border itself. The center of the circle must appear
within the screen display area, however, as there is no way to specify a
center outside of screen limits !
Filling in Circles
Is there a way to fill in circles similar to the way we filled in
rectangles? (Sorry, watercolors on the television are not allowed . ) The
PAINT command enables us to do this, but let's try another approach for
the time being . We ' l l start with a circle of small diameter and increase an
increment at a time to see the result.
1 00
1 10
120
1 30
140
150
1 60
REM F I LLED- I N C I RCLE
PMDDE 4 t 1
SCREEN 1 t 0
PCLS 1
FOR R 0 T D 200
C I RCLE ( 1 28 1 8 6 ) 1 R 1 0
N E >� T R
DRAWER
=
The circle appeared as shown in Figure 6 . 1 3 . It grew in size until it
occupied the screen boundaries . As it grew, however, there were points
that were not filled-in . Why is this? Because the increment of the radius
I , 2 , 3, and so forth . However, it takes
can only be an integer value
less than a one-unit increment to guarantee a fill of every pixel . So we
can fill in circles by using this method, but we will have to live with
some gaps in the result.
-
Figure 6 . 1 3:
Filled-in c i rcle example.
1 12
USING CIRCLE TO DRAW ARCS
CIRCLE can do more than draw circles, ellipses, or partial circles
with boundary edges; it can also be used to draw arcs. Arcs are partial
circumferences of circles, as shown in Figure 6 . 14.
CIRCLE DEFINED
BY
( 128,
96), 50
THIS PORTION .-- NOT DRAWN � /
I
I
I
\
\.
'
END OF ARC___...'
Figure
6. 14:
/ START OF ARC
THIS
PORTION
DRAWN
( ARC)
Drawing arcs.
The format o f CIRCLE for drawing an arc is
C I RCLE
< X 1 Y l 1 R 1 C 1 HW 1 START 1 END
In this format, START and END specify the start and end of the arc , as
shown in Figure 6 . 1 5 . The circle is marked off in values from 0 through
1 . The 0 point is at "three o'clock" (90 degrees geographic, 0 degrees
trigonometric) , the .25 point is six o'clock ( 1 80, -90) , the .5 point is
nine o'clock (270, - 1 80) , the .75 point is twelve o'clock (360 , -270) ,
and the I point is back to the start. When the circle is drawn, it is drawn
clockwise from the starting point.
You know from using CIRCLE in previous examples that when the
START and END are not specified, a complete circle or ellipse is drawn.
To specify any segment (arc) of a circle or ellipse, put in the proper
START and END and execute the circle command .
To convert from geographic degrees (compass coordinates from a
map) to CIRCLE START and END values, take the number of degrees ,
Dra wing Lines, Rectangles, Circles, a n d A rcs
ANY POIF IORENDTEND,ASMAY BE
SPECI
START
SUCH AS .6
.
5
POI
N
T
! 210°. - 180°1
Figure
6.15:
DEGREES
•
.
7
77
23....2801360
777-.
2
5
'.
5
5277 277
I.
COLOR COMPUTER
VA L UES
6.16:
-
.75 POI N T ( 360°,- 270°)
0 POINT (0°90°TRIGEOGRAPHI
GONOMETRIC, C )
CIRCLE arc fonnat.
GEOGRAPHIC
Figure
1 13
0
'.
1
25
23...45/360
125-.
2
5•
-.
17525
-.
1
25+1
'.
8
90
I.
180
.75
.25
Converting from geographic t o CIRCLE coordinates.
divide by 3 60 , then subtract .25 . If the result is negative, add I . A
compass heading of 1 80 degrees (due south), for example, would be
1 80/360 - . 2 5 , or . 5 - . 25 = . 2 5 . A compass heading of 45 degrees
(northeast) would be 45/360 - . 2 5 = . 1 25 - . 2 5 = -. 1 25 ; the result is
negative, so adding one gives us .75 . Figure 6. 1 6 shows the process.
1 14
In trigonometric representation, a circle starts at 0 degrees in the
three o'clock position and proceeds counterclockwise through 90 degrees
(twelve o'clock), 1 80 degrees (nine o'clock) , 270 degrees (six o'clock) ,
and back to 360 degrees or 0. The angular displacement may also
proceed clockwise from 0 degrees in a negative sense : -90 degrees (six
o'clock ) , - 1 80 degrees (nine o'clock), -270 degrees (twelve o'clock) ,
and back to -360 or 0 degrees . In many cases it may keep on going
through greater and greater angular displacements - 720 degrees , 1 080
degrees, and so forth. Figure 6 . 1 7 shows the scheme.
90°
4 5°
1�.......
180.
--0(360DEGREES
DEGREES}
270°
---- oF' ANGULAR
360° 360°DISPLACEMENT
go•. 10°
+
Figure
6.17:
+
s
Trigonometric representation.
To convert from positive trigonometric degrees (less than or equal to ·
360) to START and END representation, take the trigonometric degrees
and divide by 360 . Make this number negative . Add one to it. A
trigonometric value of + 90 degrees, for example, is -(90/360) + I =
-.25 + I
. 75. A trigonometric value of + 270 degrees is -(270/360)
+ I
-.75 + I = .25 . To convert from negative trigonometric
degrees (less than or equal to 360), change to the equivalent positive
=
=
Dra wing Lines, Rec tangles, Circles, and A rcs
90°
TRIGONOME TRIC
OEGREES
1 15
+45" 2.3.I. 45/360•.
MAKE
-.112525 V+l•.E -.812575
ADD NEGATI
�0
180°
-135" --- ���
I.2. -135"
270°
ALENT
V
EQUI
TO
CONVERT
+
225
+VALUE:
225/360'NEGATI.625V E: -.625
3.4. MAKE
.75 875
"'/ ·5
0
\.325.25
Figure
I:
'-""-....._
'
'" '• __ . , , . ,
6.18:
'
CIRCLE
COOROINA TES
Converting from trigonometric to CIRCLE coordinates.
+ 1 80;
+ 270; -1 80
value and then convert as above (-90
-270 = + 90; -360 = + 360). To convert from large angular
displacements (greater than 360) , subtract 360 until the result is less than
or equal to 360, and then convert as above . Figure 6 . 1 8 shows the
conversion method.
=
=
Now that we know how to convert into START and END values ,
let's plot some arcs. We 'll use one-quarter arcs of a circle stepping from
0 (three o'clock) to . 75 (twelve o' clock) , as shown in Figure 6 . 1 9 .
1 00
1 10
1 20
1 30
1 ll 0
1 50
1 80
1 70
1 80
1 90
REM PLOT ARCS
PMODE 3 , 1
SCREEN 1 t 0
PCLS
ST=0
F O R X = 35 TD 2 1 5 STEP 8 0
C I R C L E ( )< t 9 8 l t 2 0 t ll t 1 , S T t S T + , 2 5
ST=ST+ , 25
N E )<T :<
GOTO 1 90
1 16
5 5
0 .50 .5r(
7 �1.0
7
0
25� �25
Figure
6.19:
Arc example.
The CIRCLE statement above can be broken down as follows: The
centers for the four circles are at X,96, or 35 ,96; 95 ,96; 1 55 ,96; and
2 1 5 ,96. The radius is fixed at 20. The color is red (background is green
from the PCLS) , the HW ratio is 1 (perfect circle). The STARTs are 0,
. 25 , .5, and .75. The ENDs are . 25 , .5, . 7 5 , and 1 .
Arcs can also be drawn for ellipses. In this case the HW ratio would
define the eccentricity of the ellipse. The program below draws a series
of arcs from the six o'clock point to the nine o'clock point for HW values
of .25 through 3 in steps of .25. The result is shown in Figure 6 . 20 .
1 00
110
1 20
1 30
l ll 0
1 50
1 60
1 70
REM ARCS W I TH VARY I NG HW RAT I OS
P M D D E ll t 1
SCREEN 1 1 0
PCLS
FOR HW= . 25 TD 3 STEP . 25
C I RCLE < 1 28 1 86 ) 150 t 1 1 HW 1 . 25 1 . 5
N E >( T H W
GOTO 1 70
SEMIGRAPHIC 4 MODE
A n exam p l e o f t h e Color
B A S I C mode of 64 p i xe l s
horizonta l ly by 32 p i xe l s ver­
t i c a l l y , t h i s photograph
s hows ava i l a b l e colors.
(Chapter 1 )
2
BAR G RAPH PLOT
H e re we are u s i n g
S ET/RESET t o have u p to
e i g h t c o l ors o n a
backgro u n d , w i t h text as
we l l . (Chapter 3)
3
A N I MATI O N U S I N G
C H R $ ST R I N GS
T h i s program u t i l izes
g r a p h i c s s t r i n g s i n a n i ma­
tion. The f i g u re s h o w n i s a
c y l i nder a n d p i ston of a two­
stroke e n g i n e . I t f i res w i t h a
red explosion and t h e p i ston
moves up a n d d o w n .
(Chapter 3)
4
USE OF T H E COLOR
COM MAN D
T h i s exa m p l e of t h e COLOR
com ma n d p a i n t s t h ree rect­
a n g les o n a b u f f
backgro u n d . (Chapter 4)
5
PLOT A S I N E WAVE
U s i n g P S ET to p l o t a s i n e
wave, we a r e a l so convert i n g
from Cartesian coord i n ates
to Color Computer coor­
d i nates. (Chapter 5)
6
L I N E D E M O N STRATI ON
Her e we s e l e c t a n y two
poi nts at ra ndom a n d use
t h e L I N E c o mma n d to con­
nect t he m , u s i n g a ra ndom
color. (C h a pter 6)
7a
BOX D E M O N STRATI O N
T h e L I N E c o mma n d c a n a l so
be used to g e n erate boxes
and f i l l e d -i n boxes.
(Chapter 6)
7b
BOX D E M O N STRAT I O N
continued
This shows t h e BOX pro­
g ram at a later stage.
(Chapter 6)
8
H E I G HT: W I DTH RATIO
FO R C I R C L ES
Vary i n g t h e h e i g h t to w i d t h
rat io i n t h e C I R C L E com­
mand res u l t s in e l l i pses.
(Chapter 6)
9
F I L L E D-I N C I R C L E
DRAW E R
H ere w e f i l l i n a c i rc l e
without using the PAI NT
c o m m a n d . (Chapter 6)
10
ROTATE PROGRAM
U s i n g t he D RAW c o mma n d s ,
i n c l u d i n g t h e A n g le c o m­
m a n d , we c a n d raw a f i g u re,
th e n rotate and draw i t
aga i n . (Chapter 7)
11
DRAW T H E TAN DY
TOW E R
T h i s i s an exam ple of u s i n g
stri n g s a nd s u bs t r i n g s w i t h
the DRAW commands to
copy a repet i t ive s h ape.
(Chapter 7)
Drawing Lines, Rectangles, Circles, and A rcs
Figure 6.20:
117
Arcs for e l l ipses example.
CIRCLE Defaults
As we've discussed , the format of the CIRCLE command varies
from a simple CIRCLE (X, Y) ,R to CIRCLE (X, Y) ,R ,C,HW,START,END .
The default parameters for various formats are shown below:
C I RCLE
e x , n tR
C I RCLE
e x , y i tR t C
c
e x , y ) t R , c t HW
e x , y ) t R , c t HW t START
c
I RCLE
I RCLE
C = foreground,
HW= 1 , START = O,
END = l
HW = I , START = O ,
END = I
START= 0 , END = 1
END = 1
If a comma is used in place of specifying a parameter, the default
parameter is assumed . The statement
C I RCLE
0( , Y l t R , t H W t S T A R T , E N D
for example , would generate a circle with the foreground color. The HW
ratio must be specified for START and END .
Using the DRA W Command
1 19
CHAPTER 7
Extended Col or BASIC : Using the D RAW
Command
The DRAW command is somewhat related to the LINE command. It
draws a line from point 1 to point 2. The line may be drawn in an up
direction, at 45 degrees , to the right, at 1 35 degrees , down, at 225
degrees , or left, at 3 1 5 degrees , as shown in Figure 7 . I .
The length of the line may be any number of units , from 0 to
hundreds .
The DRAW command also includes the capability to move to a
designated spot on the screen , specified in X, Y coordinates or in relative
coordinates.
DRAW also has the provision of drawing a blank line ( !) or
changing the color.
The DRAW command uses a string of commands to indicate how
the line should be drawn . A typical line might be defined as DRAW "up
25 units , " " right 20 units , " and so forth . Within the commands, DRAW
may reference a substring of commands, a powerful feature that enables
the user to build little modules of commands.
Another powerful DRAW feature is the ability to scale DRAW
commands. This means that with a single command, DRAW may
produce displays that are l /4 scale , 1 12 scale , on up to 62/4 scale .
The DRAW command is really an order of magnitude more
powerful than LINE, which was an order of magnitude more powerful
than PSET ! (Which was an order of magnitude more powerful than SET ,
which was . . . ) We' l l discuss a l l o f the ramifications o f DRAW i n this
chapter.
120
UP
315°
45°
STARTING POI NT
2 25°
Figure
7.1:
135°
DOWN
D RAW directions.
DRAW FORMAT
The format of DRAW is
DR AW
11 string 11
or
DRAW A$
In the first case, " string" represents a string of DRAW commands;
the string may be any number from one to dozens . A typical DRAW
string might be
DRAW
" D20 ;
R25 ;
U23"
where the string represents a line drawn from the current screen position,
Down 20, Right 25 , and then Up 23 positions. Note that the individual
commands are separated by semicolons and that the entire line of
command is a string with double quotation marks enclosing the line.
In the second case, A$ represents a general string variable , which
might be A$, B$, CC$, YY$, or some other legitimate name. This string
variable in tum would define a string of valid DRAW commands.
Using the DRA W Command
121
DRAW COM MANDS
DRAW commands are shown in Table 7 . 1 . They include motion
commands which result in a line segment being generated, mode
commands which change the color, angle, or scaling, and two options,
" no update" and " blank . "
Motion
M
U
D
L
R
E
F
G
H
X
Move the cursor
Move Up
Move Down
Move Left
Move Right
Move 45 degrees
Move 1 35 degrees
Move 225 degrees
Move 31 5 degrees
EXecute a substring
Mode
C = Change Color
A = Change Angle (rotate)
S = Change Scale
Options
N
B
Table 7. 1:
=
No Update after draw action
Draw Blank line (move, do not display)
DRAW Commands .
M Command
The M command moves the imaginary cursor for the DRAW to a
specified spot on the screen . Initially, this is done with the " B " (or
B lank) option so that wherever the cursor is to start off, no line is
generated in the move . Thereafter, an M command can be used with the
B prefix or without.
To draw a line starting from 1 28 ,96 to 0,0 and then to 255 , 2 , for
example, the l ine is first positioned by B M 1 28 ,96 and then MO,O and
M25 5 , 2 are done to draw the lines. (See Figure 7 . 2) .
122
1 00
110
1 20
1 30
1 40
1 50
REM DRAW EXAMPLE
PMODE 3 t 1
SCREEN 1 t 0
PCLS
DRAW " BM 1 28 t 86 ; M0 t0 ; M255 t 2 "
GOTO 1 50
1 4 0 D R AW " B M 1 2 8 , 9 6 ; MO, O; M 2 5 5 , 2 "
• ( 128, 96 )
B M 1 2 8 , 96 POS I T I O N S
I M AG I N A R Y C U R S O R
( 128, 96 )
MO, 0 D R AWS T H E
LINE FROM CURRENT
C U R S O R POS I T I O N TO
(0, 0 )
Using the DRA W Command
123
(2 55, 2 )
( 128,
96 )
M255, 2 DRAWS THE
LINE FROM CURRENT
CURSOR POSITION TO
(255, 2)
Figure
7.2:
M command using absolute motion.
The M command, therefore , is used to position the cursor or to draw
a line between any two specified screen points (just as the LINE
command was used) . M will generate any angled line and draw the line
in any direction depending upon the relationship of the start point to the
ending point . Note that the screen points are explicitly identified in the
format (B)MX , Y , where (B) indicates a Blank option.
Another form of the M command uses relative rather than absolute
values for X and Y. After the first M command is executed, the graphics
cursor is in a known position . A Move may be done with a displacement
from that known position to any other position. The displacement may be
either negative or positive . The program above may be rewritten as
1
1
1
1
1
1
00
10
20
30
40
50
REM DRAW EXAMPLE
PMODE 3 1 1
SCREEN 1 t 0
PCLS
DRAW " BM 1 28 t 8 6 i M - 1 28 1 - 86 i M+255 t + 2 "
GOTO 1 50
This is a relative move . (Please, no jokes about the proximity of
mothers-in-law . ) The format for this type of relative move is
(B)M + -XD , + -YD , where XD is the number of units to move in the X
direction and YD is the number of units to move in the Y direction. The
sign indicates the direction
' ' + is right for X and down for Y and
-
' '
1 24
"-" is left for X and up for Y. The displacement value will be added to
the current cursor position, and the result will define the new point. The
Y positive sign is optional in the above format; it's probably best,
however, to always use a plus or negative sign when working in this
format to avoid confusion.
In the above program , BM 1 28 ,96 moved to 1 28 ,96 without writing
a line. The next Move was M - 1 28 ,-96 which gave the new value
1 28 - 1 28 , 96 - 96, or 0, 0. The next Move was M + 255 , + 2 which
gave the new value 0 + 255 , 0 + 2, or 255 , 2. You can look at the
relative displacements, then, as either being added to the current cursor
position, or moving in a " + " direction or "-" direction for X or Y.
Figure 7. 3 shows the movements.
1 4 0 D R A W " BM 12 8 , 9 6 ; M - 1 2 8 , - 9 6 ; M + 2 5 5 , + 2 "
• ( 1 2 8 , 96 )
B M 1 2 8 , 9 6 POSITIONS
I M A G I NARY C U R SO R
9 6 - 96 = 0 = Y
_....
_
_
_
_
_
_
_
128 - 1 2 8 = 0 = X
( 1 2 8 , 96 )
M - 1 2 8 , - 9 6 DR AWS T H E L I N E FROM
T H E C U R R E N T CURSOR POSITION AT ( 1 2 8 , 9 6 )
T O ( 1 2 8 - 12 8 , 9 6 - 9 6 ) O R ( 0, 0 )
Using the DRA W Command
-
1 25
( 2 55, 2 )
( 128, 9 6 )
M + 2 5 5 , + 2 D R AW S T H E L I N E F R O M
T H E C U R R E N T C U R S O R POS I T I O N A T ( 0 , 0 )
TO ( 0 + 2 5 5 , 0 + 2 ) O R ( 2 5 5 , 2 )
Figure
7.3:
M command using relative motion.
Other Motion Commands
The other motion commands are all relative commands that specify a
relative displacement from the current cursor position. (Remember that
the cursor is imaginary - it doesn't show up and we ' re using it only for
convenience . ) Up, Down, Right, and Left are easy to remember, as the
first letter of each direction is used as an abbreviation for the command.
E, F, G, and H fill in the gaps between these directions as shown in
Figure 7 .4 .
These commands allows u s to easily specify movement i n eight
directions. Since much graphics will involve drawing lines in this
fashion, they are much more convenient to use than specifying a new
Move command for each line segment. Suppose , for example, that we
wanted to draw a large letter " M " in the center of the screen, as shown
in Figure 7 . 5 . We could draw it very easily by using the DRAW motion
commands:
1 00
1 10
1 20
1 30
1 40
REM DRAW EXAMPLE 3
MODE 3 1 1
SCREEN 1 1 0
PCLS
DRAW " BM 1 28 1 96 i E 1 5 i R 1 0 i D30 i L 1 2 i
U 1 8 i G 1 3 i H 1 3 i D l B i L 1 2 i U30 i R 1 0 i
F15"
1 50 GOTO 1 50
1 26
U(Pl
------
L ( EFT l
R ( IGHT
�STARTI
N
G
POINT
O(OWNl
E (45°)
POINT
+--
H (315°)
F( !35°l
G(225°l
Figure
7.4:
RIO
Other motion commands.
RIO
Fl5
U30
Hl3 Gl3
Ul8
Ll2
Figure
l
7.5:
Ll2
Using the motion commands.
AT 128, 96
Using the DRA W Command
127
About the only difficulty in using the DRAW motion commands is
that the commands that specify motion in acute angles are referenced to
the number of pixel units displaced horizontally or vertically . Remember
that the number of units of length for a line drawn at a 45 degree angle is
approximately 1 . 42 times the length of a vertical or horizontal line with
the same displacement along the Y or X direction . See Figure 7 . 6 .
The M command can easily b e used to connect to any horizontal or
vertical line, since you need only to know the horizontal or vertical
displacement rather than the actual length of the angled line.
" D RAW
-
-
-
-
E5 ; "
-
- - - -
�---
ACTUA L L E N G T H
OF L I N E I S
1 .4 2 * 5 • 7.07 U N I T S
Z}
5
------Figure 7.6:
5 UNITS
------
Acute angle displacements .
The Blank Command
We saw the use of the Blank command used as a prefix for the
Move command to effect a move without drawing a line . The " B " prefix
may also be used before any motion command to blank out a line . Simply
tack it on before the command as in " B H 1 5 ; " in the above program . The
line will still be drawn, but it will be blank . (Some of you will be able to
relate this to the philosophical question about a tree falling in the woods
with no one around . If a line is DRAWn with a B lank prefi x , is it really
drawn?)
128
An alternative way to use the B lank command is to use the B
command separately, without prefixing another command. An example
from above is
1 40 DRAW " B M 1 28 1 88 i E 1 5 i R 1 0 i D30 i L 1 2 i
U 1 8 i G 1 3 i B i H 1 3 i D 1 B i L 1 2 i U30 i R 1 0 i
F15"
The Color Command
The C command is used at any time in the DRAW string to change
the color of the following line. The format of C is
Cx
where x is a standard color code from 0 through 8. The Cx command is
embedded in the string just as the other commands are, with a semicolon
following the Cx.
Using the M program from above, you can alternate colors on the
l ine segments quite easily. As with all graphics , you have only the four
colors of the color set to play with in PMODE I or PMODE 3 .
1
1
1
1
1
00 REM DRAW EXAMPLE 3
1 0 PMODE 3 1 1
20 SCREEN 1 1 0
30 P CL S
40 DRAW " BM 1 28 18G i C2 i E 1 5 i R 1 0 i C 1 i
D30 i L 1 2 i C2 i U 1 8 i G 1 3 i C3 i H 1 3 i D 1 8 i
C4 i L 1 2 i U30 i C2 i R 1 0 i F 1 5 "
1 50 GOTO 1 50
The colors for the M are as shown in Figure 7 . 7 .
C2 •YELLOW
C2
c.,,
z
w
w
a:
to
u
..,
"
c:;
N
u
FigC4•RED
ure
7.7:
Using the color command.
Cl
Using the DRA W Command
129
Once a color is specified by the C command, it will remain in force
until the C command is encountered .
The No Update Command
The N, or No Update command, is another optional command that
may be used similarly to the B command, either as a prefix to a motion
command or as a separate command delimited by a semicolon.
The N command allows the next motion command to be executed
but prevents it from updating the cursor position. In other words, the next
line is drawn , but the cursor remains at the beginning of the line after the
line is drawn , as shown in Figure 7 . 8 .
DRAW "U40;
"ND20·
130120110 DRAW
DRAW
"R30;"°R30""
BEFORE
' CURSOR"DRAW ND20;'
e
n,,
,
U40
I
U40
Figure
7.8:
AFTER "DRAW ND20; "
R30 R30
D20
AFTER "DRAW R30;"
Using the N command.
We can see how the N command works in displaying a giant asterisk
in the center of the screen, as shown in Figure 7 . 9 . Both forms of the N
command, the prefix and separate command, are used.
130
1 00 R E M D R A W EXAMPLE 3
1 1 0 PMODE 3 d
1 20 SCREEN 1 1 0
1 30 PCLS
1 4 0 D R A W " B M 1 2 8 1 8 B i N U ll 0 i N R 2 B i N R ll 0 i
N F 2 8 i N D ll 0 i N G 2 8 i N l ll 0 i N H 2 8 "
1 50 GOTO 1 5 0
Figure
7.9:
N command example.
The Angle Command
The A, or Angle command, is somewhat of a misnomer. It is really
a rotate command. The format of the command is
Ax
where x is 0, 1 , 2 , or 3 , specifying rotations of 0 degrees , 90 degrees ,
1 80 degrees , or 270 degrees. When the command is invoked, all
subsequent lines will be rotated to the new position.
To see how this works , look at the program below . The figure in the
normal position is shown in Figure 7 . 1 0 . It is drawn by "BM 1 28 ,96;
U70; R20; D20; L20" . The program draws four versions of the figure by
using four A commands . The first A command, "AO" , displays the
Using the DRA W Command
131
figure in the 0 degree position. The ' ' A 1 ' rotates the figure 9 0 degrees
clockwise and displays it. The "A2" rotates the figure 1 80 degrees and
displays it. The ' A 3 ' ' command rotates the figure 270 degrees and
displays it. The final display is shown in Figure 7 1 1
'
'
.
Figure
Figure
7. IO:
Angle command example 1 .
7. 1 1 :
Angle command example 2 .
.
132
1 00 REM ROTATE PROGRAM
1 1 0 PMODE 3 1 1
1 20 S C R E EN 1 1 0
1 30 PCLS
1 40 A$= B M 1 28 1 8 6 j U70 i R 20 ; o20 j L20 "
1 50 DRAW " A0 " +A $
1 60 GOSUB 1 000
1 70 DRAW " A 1 " +A$
1 80 GOSUB 1 000
1 80 DRAW " A2 " +A$
200 GOSUB 1 000
2 1 0 DRAW " A3 " +A$
220 GOSUB 1 000
230 GOTO 230
1 000 FOR I = 0 TD 1 000 : NEXT I
1 0 1 0 RETURN
II
The subroutine in 1 000 causes a slight delay between each rotation .
Each DRAW command is a combination of a fixed string A$ defining the
figure and an A command in a string. The two strings are concatenated to
form one string that is executed by each DRAW command .
The last angle used in the A command is in force until the next A
command is executed. An AO will reset the display to its normal 0 degree
orientation .
STRINGS AND SU BSTRINGS
Before we discuss the next command, the X command, let ' s review
what we know about strings and their use. A string is nothing more than
a collection of bytes . Many times these bytes represent text characters in
ASCII format as in the string ' ' THIS IS A STRING' ' . In other cases, the
string may represent non-ASCII codes by using the CHR$ command , as
in A$ = 'C HR$( 23) + CHR$(25 ) , which sets string A$ equal to two bytes
made up of 23 and 25 . We won 't be using the second format of strings in
the ORA W commands, where all of the data will be character data
representing the ORA W commands found in Table 7. I .
A string defined by a statement such as
1 00 A$= " TH I S
I S A STR I NG "
is a constant string. Any time A$ is referenced, it will contain the same
data.
Using the DRA W Command
133
Strings can be concatenated , which is a fancy term for appending
one string to the end of another string. When this is done, a new string is
created . This new string may become a constant string or may simply be
temporarily stored. C$ below is a constant string of ' 'THESE ARE THE
PROGRAMS THAT TRY MEN ' S SOULS " , while the temporary string
of ' ' FIFfY FOUR FORTY OR FIGHT' ' disappears after it is displayed .
1
1
1
1
1
1
00
10
20
30
40
50
A$ = " THESE ARE THE PROGRAMS
B $ = " THAT TRY MEN ' S SOULS "
C$=A$+B$
D $ = " F I FTY - FOUR FORTY
E $ = " 0R F I GHT "
PR I NT C$ , D$+E$
"
II
A substring in reference to the DRAW commands (a DRAW
string?) means any constant string that has been defined previously and
can be denoted by a string label, such as A$, 8$, or Z l $ . A substring for
DRAW may move to a new position, draw a series of lines , or change
the color, j ust as we have seen in the above examples .
A substring may be cal led from within a DRAW string by means of
the X command , execute substring. This means that one string can
reference another string which can reference another string which can
reference another string, and so on. When these strings define graphics
figures, a whole series of modules may be made up to perform various
graphics functions . We ' l l show you what we mean in the next program .
The program below draws a modest skyscraper, shown in Figure
7 . 1 2 . It uses several substrings to perform the graphics . String A$ defines
a " window draw " of right 8 , down 20, left 8 , and up 20, as shown in the
figure . String 8$ executes the window draw by "XA$" and then moves
the cursor over to the right 1 4 positions in preparation for the next
window . String C$ executes string 8$ by "X8$" three times, so it draws
three windows and then moves over left 24 positions and down 24
positions in preparation for the next floor. String D$ executes string C$
to draw a floor of windows five times to draw the entire five floors of
windows .
1
1
1
1
1
1
1
00
10
20
30
40
50
60
REM DRAW THE TANDY TOWER
P MODE 3 1 1
SCREEN 1 10
PCLS
A $ = " R8 i D20 i LB i U20 "
B $ = " >< A $ i B R 1 4 "
C $ = " )< B $ i )<B $ i >< B $ i B L 4 2 i B D 2 4 "
134
1 70
180
1 80
200
210
D $ = " ){ C $ i }( C $ i ){ C $ i }( C $ i X C $ i "
D R A W " B M 8 ll 1 3 G i R 5 0 i D 1 2 4 i L 5 0 i U 1 2 4 "
D R A W " B M 1 0 0 1 4 0 i }( D $ i "
D R A W " B M 8 ll 1 3 G i B R 2 5 i U G 0 i F 8 i G 8 i
GOTO 2 1 0
II
p
DOD
DOD
ODD
DOD
ODD
Figure
7 . 12:
) 0$
(4
C$
DRAWS )
D D D = c$
�
�
Using strings and substrings.
The actual drawing starts with line 1 70, which draws the building
outline. Line 1 80 moves the cursor to 1 00,40 and then executes string
XD$ to draw all of the windows. Line I 90 adds a flag to the top of the
building .
There were five levels of graphics here ! This simple example
doesn't do the X command justice. Graphics can be shortened drastically
whenever repetitive designs have to be drawn; they can be defined by a
substring and executed at any time. Submodules of designs can easily be
defined and used as building blocks to draw composite pictures . A very
powerful command!
SCALING UP AND DOWN
We're leaving the best commands until last. Scaling is another very
powerful feature of the DRAW command . It's implemented by the S
option . The format of S is (another complicated one)
Sx
Using the DRA W Command
135
where x is a value from l to 62 indicating the scale factor as shown in
Figure 7. 1 3 .
1/4 SIZE
��ORMAL"
SIZE
,/
Figure
7 . 1 3:
4
fil_ SIZE
Scale factor.
As you can see from the figure , scale factors from 1 /4 to 62/4 are
possible. Scale factors under 4/4 result in displays that are less than the
dimensions as defined in the ORA W; scale factors greater than 4/4 result
in enlarged displays.
To see how this works, look at the program below . It generates an
oddly shaped figure (see Figure 7 . 1 4) vaguely reminiscent of a Space
Shuttle in need of maintenance . The figure is defined by the A$ string,
which assumes a starting point in the midpoint of the figure . The actual
DRAW command is in line 1 60, which uses a blue color ( " C 3 " ) and
starts at 1 28 , 1 36 . The figure is drawn by executing the B$ string
followed by XA$.
00 R E M AN I MA T I ON BY S COMMAND
1 0 PMODE 3 d
20 SCREEN 1 '0
30 PCLS
LI 0 A $ = 11 B L B i R 1 6 i 0 1 ; L 1 6 i U l ; B R 6 i
R 2 i u a ; O Li i R 2 i D L! 11
1 50 FDR S = l T D 62
1 6 0 B $ = 11 S 11 + S T R $ ( S )
C 3 ; B M 1 2 8 ' 1 3 6 ; ){ 5 $ ; )< A $ ;
1 70 DRAW
1
1
1
1
1
II
II
ua ;
136
1 80
1 90
200
210
F O R I = 1 TO 9 9 / S : N E X T I
DRAW " C 1 ; BM 1 28 ' 1 36 ; XB$ ;
N E )< T S
GOTO 2 1 0
)-(A $ ;
II
H EA D - O N V I E W
O F SPACE SHUTTLE
( US E YOUR I M A G I NATION ! )
=1L
)
STA R T I N G POINT
Figure
7 . 14:
Scale factor example.
The B$ string is a constant string made up of ' ' S ' ' and the
equivalent string value of the numeric variable S. The STR$ function is
used to convert the numeric variable S to a string which is then
concatenated with " S " to form "S 1
"S 2 " , and so forth .
The B$ string sets the scale factor which ranges from l to 62 in the
loop from line 1 40 through 1 90 .
After the figure is drawn i n statement 1 60 , a short time delay that
decreases with larger scale factors is done in line 1 70 . Larger scale
factors generate larger figures that take longer times to generate . After
the time delay, the figure is erased by a second DRAW line that uses the
background color ( ' ' C l ' ' ) . The effect is of a figure getting larger and
larger on the screen.
The S command can be used any time that a figure must be reduced
or expanded - animation is just one use .
"
,
Using the DRA W Command
N OTES
137
[
Using the PAINT and GET/PU T Commands
139
CHAPTER 8
Extended Color BASIC : Using the PAINT and
G ET/PUT Commands
In this chapter we' II discuss the last three Extended Color BASIC
graphics commands: PAINT, GET, and PUT.
PAINT is used to fill in areas with a specific color very similar to a
paint-by-numbers technique. PAINT will color an area with any color in
the current color set (two or four colors) up to a boundary of another
specified color.
GET/PUT are two associated commands. They must be used
together. GET moves any screen area from the screen memory into an
array . A fter the move, the array holds the graphics data from the screen
area for as long as the user desires . The graphics screen may now be used
for other displays.
At some later time, the PUT is used to move the array data back
onto the screen at any user-specified area. As the areas may be different ,
GET/PUT can be used for animation and other graphics techniques .
T H E PAINT COMMAND
The PAINT command format is
PA I NT
( X 1 Y l 1 C 1B
where (X, Y) is a standard graphics coordinate with X = 0 through 255 and
Y = O through 1 9 1 . C is the color to be painted; B is the boundary color
for the PAINT.
140
The operation of PAINT is shown in Figure 8 . I , where a figure has
been drawn in PMODE 3 with one color. The graphics in this case were
generated with a series of DRAW commands, but similar figures could
have been generated with LINE, CIRCLE, or other commands. All of
these commands , with the exception of LINE BF, produce an outline of a
figure , but not a filled-in color. PAINT can be used to fill in any area.
The area to be filled in is first defined by means of the (X, Y)
coordinate . This coordinate can be anywhere within the confines o f the
area to be PAINTed. The C value specifies the color for the PAINT. This
�� � �
E I NBEASC��ROUN D
-------
R40
,BFlO
' R20
( 120,1TO00)BEIS
AREATNHITEDNTOI NIBENERS 3,PAIBOX.ORN TED.BLUE.COLOR
U40 U20
D20 WIPAIBOUNDARY
COLOR IS 4, OR RED.
D40
L20
L40
100,80'
e
GREEN
GREEN
GREEN
GREEN
GREEN
Figure
RED LI N ES
8.1:
PAINT example.
Using the PAINT and GET/PU T Commands
141
color can b e any one in the current color set. I n the four-color mode this
will be one set of four colors; in the other PMODES , this will be one set
of two colors . As with other graphics commands , a color out of the color
set can be specified, but the color value will be converted to a color in
the current set.
The B value is the boundary color. Here again, this must be a color
in the current color set. It may be the same as the color value to be
PAINTed.
The program below PAINTs one area in the figure .
1 0 0 R E M P A I N T E >( A M P L E
1 1 0 PMODE 3 t 1
1 20 SCREEN 1 10
1 30 PCLS
1 4 0 D R A W " B M 1 0 0 1 8 0 i R ll 0 ;
B F 1 0 i R20 i 020 ; L20 i
1 5 0 P A I N T ( 1 2 0 ' 1 0 0 ) 1 3 1 ll
1 60 GOTO 1 60
040 ;
U20 i
L ll 0 ;
U ll 0 ;
In the example above, the foreground color default was red on a
green background and the two concentric boxes were drawn with a red
color. The boundary color chosen in the PAINT command was also red
(4) . The color to be painted was blue ( 3 ) . As the area to be painted was
smal l , the PAINT seemed almost instantaneous.
Suppose that a PAINT was done with a gap in the boundary , as
shown in Figure 8. 2. Here, the paint leaks out of the boundary, first into
the outer box area and then into the area beyond the outer box . Finally,
the entire screen is PAINTed ! The point here is that the boundary area
must be well defined with no gaps or discontinuities or this type of
problem will occur. (Best to check the insides of your TV if you see this
occurring - video paint can be extremely corrosive . )
PAINT will leak in from outside a boundary also . If the PAINT start
point were specified out of both boxes in Figure 8 . 2 , say at 1 , 1 , the result
would have been the same .
Another thing about the PAINT of Figure 8 . 2 is that it takes a much
greater time than other Extended BASIC commands due to the filling-in
nature of the command. The time required to PAINT an area of one-half
the screen is about 4 seconds , a considerable time for any processing
operation .
Note also in Figure 8 . 2 that a PAINT proceeds in segments . In this
case the PAINT was done in about six or seven segments, each with an
unpredictable direction . (Actually, with a very predictable direction in
terms of a computer algorithm, but not very predictable in terms of using
the PAINT command . )
142
GAP !
�::�,�·:;,� ""'°
� ''"''''' ' ' ' '
..----_-_-_-_-_-_��
�-1 I
I -�
.. , , ,
"" "'"· ' · .
( PA I N T B L U E U N T I L R E D
'
Figure
8.2:
''"
''
'
'
Leaking PAINT.
As with all Extended Color BASIC commands , PAINT works only
with the colors in the current color set. If other color codes are specified ,
they are converted to a code in the current set. Specifying an 8 for the
PAINT color in the programs above would have had the same result as
specifying a 4 .
Another condition t o watch for i n PAINT i s that the start point is i n
the proper area t o be PAINTed. Suppose that we have the same figure as
Figure 8 . 1 but that we had specified an inside boundary color of yellow
(C2). The PAINT would proceed from the inside of the inner box out and
paint over the yellow boundary, as shown in Figure 8 . 3 . Ofcourse, if
this is planned, it's fine , but if not, the PAINT will obliterate all areas
except the one beyond the designated boundary .
Using the PAINT and GET/P U T Commands
Lq"
.--- -/i
�/
--., I i
GREEN
Y E L LO W
LINES
RED LI N E S
- PA I N T
GREEN
143
( 120, 100
),
3, 4
•
GREEN
GREEN
GRE E N
Figure
8.3:
PAINT boundaries.
THE G ET AND P UT COMMANDS
The last two commands are probably the most powerful (and most
complicated) in the Extended Color BASIC set. GET and PUT must be
used together. GET defines an area of the graphics screen and stores it in
an array while PUT retrieves the data from the array and puts in onto a
designated area of the screen.
The GET/PUT action works in the simplest case as shown in Figure
8 . 4 . The screen data in the GET rectangle is stored in array Z. During the
execution of the PUT statement, the data is taken from array Z and
displayed in the PUT area.
GET and PUT can be used to replicate figures in different places on
the screen or to produce animation effects. Before we get into the details
144
of GET/PUT, let ' s run a simple example.
The program below replicates (reproduces) the upper left-hand
figure at three other screen areas by one GET and three PUT statements ,
as shown in Figure 8 . 5 .
R E CTA N G L E D E F I N E D
BY GET STAT E M E N T
A R R AY Z
TWO - D I M EN S I ON A L A R R AY
D E F I N E D BY D I M A N D
R E F E R EN C E D BY G E T , PUT
STATE M E N T S
'"'""' ""'" I I
BY
Figure
8.4:
PUT STAT E M E N T
GET/PUT action.
�
4,/,1
Using the PAINT and GET/PU T Commands
1 00
1 10
1 20
1 30
1 LI 0
1 50
1 80
1 70
1 80
1 90
200
REM S I M PLE USE OF GET/ PUT
D I M A ( 1 9 t 39 l
PMODE 3 t 1
SCREEN 1 t 0
PCLS
DRAW
B M 8 LI t 4 0 ; E 1 0 ; F 1 0 ; D 2 9 ;
U29 "
G E T ( 8 Li t 3 0 l - ( 8 3 t 8 9 l t A
PUT ( 1 98 t 30 l - ( 2 1 5 t 89 l t A
P U T ( 8 Ll t 1 2 2 l - < 8 3 t 1 8 1 l t A
PUT < 1 98 t 1 22 l - ( 2 1 5 t 1 8 1 l t A
GOTO 200
II
�" G E T "
/
D
"PUT "
0
Figure
8.5:
'\
145
L20 ;
T H IS RECTA N G L E
UT "
0
11 PUT 11
0
GET/PUT example.
The GET command defines a rectangle in the same fashion as LINE .
The upper left-hand comer is (64 ,30) and the lower right-hand comer is
(83 , 69). The GET command stores the contents of the rectangle in
two-dimensional array A , previously defined by the DIM A( l 9 , 39) array .
The three PUTs read the array into the three rectangles defined .
Arrays
To understand the GET/PUT statements , we need to know a little
more about arrays . Arrays are structures to hold data. Data within the
array is referenced by an element number within the array . A
one-dimensional array holds each piece of data one after another in list
146
r
NAME OF A R R AY IS " z z "
1 00 D I M Z Z ( 1 0 0 )
\.._ DEFI NE S
A R R AY
OF 1 0 1 E L E M E N T S
5
ZZ ! O l
ZZ
I Jl
J22
zz ( 2 )
J3
zz 1 3 )
-JO
zz
(4 )
8
ZZ 1 5 l
556
ZZ ( 6 )
JO, 0 0 0
zz (7)
17
zz (8 )
2
A • ZZ ( 5 ) S E T S
VAR IA B L E A TO
CONTENTS OF 6th
E L E M E N T OF AR RAY
ZZ, OR 5 5 6 .
..
" "" � '""'" r
ZZ 19 9 )
J
ZZ (JOOl
-J
�
Figure
"ASCEND I NG " ELEMENT
N UMBERS FROM 0 TO JOO
8.6:
One-dimensional array.
form . An element within the array is referenced by one element number,
as shown in Figure 8 . 6.
A two-dimensional array is arranged in two directions, as in a chess
board . Elements within the array are referenced by two element numbers,
as shown in Figure 8. 7. Arrays of three or more dimensions are possible.
Arrays are set up by a DIMension statement. The DIM statement
simply allocates storage for the array - it sets aside a block of RAM
memory locations based upon the dimensions of the array .
Nothing is put into the elements of the array after the execution of
the DIM statement - the BASIC interpreter simply knows where to find
the array when references are made to it. The form of the DIM statement
for a two-dimensional array is
D I M X < N 1M )
where N is one less than the ' ' X ' ' dimension of the array , and M is one
less than the " Y " dimension of the array . "X" is the name of the array ,
Using the PAINT and G E T/PU T Commands
r
147
NA ME OF ARRAY IS " z z "
\_
1 00 D I M ZZ ( 4, 9 )
Z Z ( O, O l
�
DEF I N E S " X " D I M E N S I O N A S
0 - 4 , 0 R 5, A N D Y D I M E N S I ON
AS 0- 9 , O R 1 0
0
-1
18
10,000
5
17
-- z z <4. 0 l
l
-5
3
32,000
-18,000
16
..- Z Z ( 4 , l l
2
13
5
5
5
-- z z < 4. 9 l
2
3
10
E L E ME NTS
"
y"
4
5
6
8
9
z z ( 0 , 9)
�
0
3
4
�-----�----------'
5 E L E M E N T S " x"
A • ZZ ( 0 , 9l S E T S VAR I A B L E A
TO THE C O N T E N T S OF ( 0, 9 l
E L E M E N T O F A R R AY Z Z , O R 2.
Figure
8.7:
Two-dimensional array.
a one- or two-character name identical to a BASIC variable-name format .
An array that represents a graphics screen rectangle of width 1 5 by
height 1 0 could be set up by
D I M AA ( 1 4 18 )
Arrays are referenced by element number or numbers , depending
upon the number of dimensions . To store a 55 in the first element of the
AA array , we could do
AA ( 0 1 0 ) =55
Note that the index numbers for the array start with 0 and run
through to the last dimension number. In the case above we'd have
element numbers from 0 through 1 4 for X and 0 through 9 for Y . To put
numeric values of 0 into the entire array, we'd have
148
1 00
1 10
1 20
1 30
1 ll 0
1 50
1 80
REM SETUP AND CLEAR ARRAY
D I M A A < 1 ll 1 8 )
F O R ){ = 0 T D 1 ll
FOR Y = 0 TD 8
A A ( ){ 1 Y l = 0
N E )< T y
N E )< T )-(
One of the reasons arrays are used is to be able to represent one-,
two-, or three-dimensional arrangements of data that occur in the
real-world in computer form. Two-dimensional arrays are almost ideal
for processing the X and Y coordinates of the graphics screen . One
element number of the array represents the X coordinate , while the other
represents the Y coordinate .
We say almost ideal because Color Computer BASIC arrays have
one fault in regard to storing graphics data. Each element in an array
takes 5 bytes of storage space in RAM . An array of 1 5 by I O elements ,
then, has 1 5 x 1 0 , or 1 50 total elements, each one occupying 5 bytes .
The total number of bytes is 1 50 x 5 or 750 bytes, all to store 1 50
graphics elements .
On the other hand , utilizing an array in this fashion can be done
rapidly. We're really sacrificing storage for speed , and graphics speed is
probably most important.
You can see how much storage is allocated by an array or other
variable types by using the MEM command. The MEM command returns
the number of free RAM bytes available at any time. After SYSTEM
initialization and before any BASIC program is entered, for example, the
MEM command can be used like so
DK
PR I NT MEM
B ll 8 7
The MEM command returned the number of free RAM bytes for a
1 6K-RAM system with Extended Color BASIC . After adding some
BASIC code we get something like the following:
DK
1 00 REM TEST AVA I LABLE RAM
1 1 0 D I M A A < l ll 1 8 )
PR I NT MEM
B ll ll 7
Using the PAINT and G E T/PU T Commands
149
The difference between the two values of available RAM is
8487-8447, or 40 bytes. This difference is equal to the storage required
for statements 1 00 and 1 1 0. The statements are stored in a compressed
form for BASIC commands with most of the text data intact. Some space
is required for line numbers and pointers. Note that at this point we
haven't executed any BASIC statements yet and that the DIM statement
for array AA hasn't been processed . At this point the BASIC interpreter
is unaware of the array requirements. Now we'll execute the two
statements:
1 00 REM TEST AVA I LABLE RAM
1 1 0 D I M A A C l Ll 1 9 l
RUN
OK
PR I NT MEM
7888
OK
What we' ve done at this point is to execute the REM and DIM
statements . The REM statement had no effect on available RAM . The
DIM allocated space for array AA. The difference between 8447 and
7688 is the space allocated, plus a few bytes for array variable name and
pointers. The difference is 759 bytes , 750 bytes of space for the array
proper and 9 bytes for name and pointer.
The absolute maximum RAM space we have available in a I 6K
system with four graphics pages (default value for PCLEAR) is 8487
bytes . (PCLEAR I to 3 will provide additional RAM space . ) This
represents array storage of 8487/5 or 1 699 elements . With the proper
array allocation, up to 64 ,000 points can be stored in an array during
GET and PUT.
THE GET STATEMENT
The format of the GET statement is
GET
< XI 1 Yl l
-
C X2 1 Y2 l 1A 1 G
The first two sets o f parameters define a rectangle in a manner
similar to the LINE command. The upper left comer is specified by
(Xi , YI ) and the lower right comer is specified by (X2 , Y2 ) . The A
parameter is the name of the array into which the graphics data is to be
150
stored . This array must have previously been specified with a DIM
statement. The G parameter specifies full graphic detail and is optional .
When the GET is executed, the graphics data in the display
rectangle is moved into the array named in the GET. It remains there
forever, unless the array is changed in the program (which should not be
done) . The graphics data is stored in compressed form. There are either
4, 8, or 1 6 graphic elements in each byte of the array . We used an array
with the same dimensions as the graphic block in an earlier example, but,
in fact, we could have cut down on the array requirements considerably .
To make the most efficient use of array storage for GET, allocate an
array using a DIM statement of
D I M A < 0 1X )
where A is the array name and X is a number based on the number of
graphic elements, PMODE, and "G" option . To find X,
I
Find the number of elements in the graphic GET statement. If
the statement is GET (20 ,40)-(40,60) , for example, the number of
graphic elements is 2 1 x 2 1 or 442.
2. If you have specified the "G" option, divide this number by 8
if in PMODE 3 or 4, by 1 6 if in PMODE 1 or 2, or by 32 if in PMODE
0. The result, rounded to the next higher integer, is the number of bytes
required . If you aren 't using "G" , divide by 1 6 if in PMODE 3 or 4, 8 if
in PMODE 1 or 2, or 32 if in PMODE 0. The result, rounded to the next
higher integer, is the number of bytes required . If we had been in
PMODE 3 with a "G" option for GET (20,40)-(40 ,60) , for example,
we'd have 442/8 = 52 6/8 . This number rounded to the next higher
integer is 5 3 . A total of 53 bytes is required.
3. Now take the number of bytes required and divide by 5. This
number, rounded up to the next higher integer, is the X to put in the DIM
statement. In the example we've been working with we ' d have
53/5
1 0 3/5 , rounded up is 1 1 . The DIM statement would therefore be
DIM A(O, 1 1 ) . That ' s quite reasonable in terms of storage compared to
DIM A(20, 20), which would take up 1 2 1 0 bytes!
.
=
Of course , you can leave the DIM statement at the size of the
graphics area, but why waste space? The steps in figuring out the value
for the DIM statement are shown in Figure 8 . 8 . It's worth the trouble.
The array allocated is a two-dimensional array that really looks like a
one-dimensional array (say , what?) , as the X width is 1 (0 + I ) .
Using the PAINT and GET/PU T Commands
151
P M O D E 3, 1
G E T ( 42 , 4 2 ) - ( 10 6 , 106 ) , A , G
D
�
Z Z (O , 1 )
z z co. 106)
Figure
F I N D E L E M E NT S I N G E T
G E T ( 4 2 , 4 2 ) - ( 10 6 , 106 )
( 1 0 6 - 4 2 + 1 ) * ( 10 6 - 4 2 + l ) •
6 5 * 6 5 · 4225
2 .-
F I N D D I V I SOR :
I F "G " USE 8 I F PMODE
3 OR 4 ; 1 6 IF PMODE
1 O R 2 ; 32 IF P M O D E 0
I F NOT " G " U S E 1 6 I F PMODE
3 OR
8 IF PMODE
1 OR 2 ; 32 IF PMODE 0
422 5 / 8 • 52 8 1 1 8
5 2 8 1 / 8 ROU N D E D U P
IS 529
D I M Z Z ( 0, 106 )
ZZ (0,0)
STEPJ.STEP
t-------;
t-------;
STEP
4;
3.-
F I N D D I M VA L U E :
5 2 9 / 5 • 105 415 ,
R O U N D E D UP I S
106
I>------<J
8.8:
Calculation of minimum array for GET/PUT.
THE PUT STATEMENT
The PUT statement format is somewhat similar t o the GET
statement
PUT
< Xi t Yi l
-
< X2 t Y2 ) tA t A C T I O N
where Xi , Yi is the upper left comer of the destination rectangle and
X2 , Y2 is the lower right comer of the destination rectangle. A is the name
of the array used in the GET statement. ' ' ACTION ' ' is an optional action
to be taken if the " G " option has been used in the GET statement. We'll
discuss the ACTION operations in a moment.
The PUT accesses the array used in the GET (there may be more
than one GET, each with a different array) and stores the graphics data
152
found there in the area specified by the PUT. There must be enough roorr
in the PUT area to store all of the elements from the GET. In general , the
PUT should specify the same size rectangle as GET, although it' s
possible to play some games here and get partial data.
ACTION Items
If you 've used a "G" option in the GET, then you must use one of
the ACTION items in the PUT; otherwise you may have garbage on the
screen .
The PSET (sound familiar?) action items transfers the rectangle
defined in the GET with all colors and points set in the same way . An
example is shown in Figure 8 . 9 ; the program below duplicates the block
in the figure .
1 00
1 10
1 20
1 30
1 40
1 50
1 80
1 70
1 80
1 80
Figure
8.9:
R E M PSET A C T I ON I TEM
D I M AA ( 0 188 )
'51*51 18/5
P M O D E LI 1 1
SCREEN 1 1 1
PCLS
L I NE ( 0 1 0 ) - ( 40 1 40 ) 1 PSET 1BF
L I NE ( 0 1 0 ) - ( 1 0 ' 1 0 ) 1 PRESET 1BF
GET ( 0 1 0 ) - ( 50 1 50 ) 1AA 1 G
P U T ( 2 0 5 t 1 li 1 ) - ( 2 5 5 t 1 8 1 ) 1 A A 1 P S E T
GOTO 1 80
PSET with GET/PUT.
Using the PAINT and G E T/PUT Commands
153
The PRESET option transfer the data but resets the points that were
set in the GET statement area. Adding statement 1 65 PUT
(205 , 1 4 1 ) - (255 , 1 9 1 ) , PRESET resets the PUT area directly after the
PSET, as shown in Figure 8 . 1 0 . The PRESET can be used to erase areas
on the screen.
Figure
8. 10:
PRESET with GET/PUT.
The AND option performs an AND operation on the points of the
original rectangle and the points in the destination area. If both the
original and destination points are set, the result will be set; if either point
is reset, the result will be reset.
The AND can be used to mask out certain areas of graphics .
The OR option performs an OR operation on the points of the
original rectangle and the points in the destination area. If one or the
other of the points is set, the result will be set. If neither is set the result
will be reset.
The OR can be used to guarantee that certain areas of graphics are
set to the foreground color.
The NOT option reverses the state of each point in the destination
rectangle; the contents of the array do not affect the operation but only
define the area of the destination rectangle to be processed .
Using the G ET/PUT Commands
Any number of GET commands, up to the limits of memory, may
be used by defining new arrays to hold the GET data. PUT commands
154
may reference any of the arrays in any area of the screen desired,
provided that the destination areas do not go across screen boundaries .
The PMODEs for the GETs and PUTs must correspond, otherwise
garbage may appear on the screen .
NOTES
Using the PAINT and GET/PUT Commands
N OTES
155
"'
Q
.
SECTION II
157
SECTION II
Programming Techniques for
Color Computer Graphics
The material in this section is designed as an applications
workbook. It is a compendium of graphics techniques for the
Color Computer and includes applications techniques for
both Color Computer BASIC and Color Computer Extended
BASIC. It includes short notes on such things as drawing
lines, squares, rectangles, triangles, filled-in figures, gray
shades, circles, ellipses, arcs, animation, and others.
The code in the applications should be used as a guide for
your o wn applications. It is not always "idiot-proof" and may
not work with invalid arguments. In many cases the speed of
the code may be increased by combining statements in a
single BASIC line; single statements lines are used here for
clarity.
The applications are presented in alphabetical order for easy
reference. The application notes are meant to be used as a
quick guide on how to implement a graphics problem, but
they are not a replacement for the more comprehensive
material in earlier sections.
SECTION II
List of Applications
Alphanumeric Characters in Graphics Modes
Arc, Drawing
Border Outline, Drawing
Circle, Drawing
Ellipse, Drawing
Intermixing Text and Graphics
Line, Any Angle, Drawing (Method 1 )
Lines, Horizontal , Vertical, or Diagonal , Drawing
Mode of G raphics, Changing
Moving Figures by G ET/PUT
Moving Figures by I ndexing
Octagon, Drawing
Other Colors in PMODE 4
Rectangle, Filled-In, Color BASIC
Rectangle, Fil led- In, Drawing (Method 1 )
Rectangle, Fil led- In, Drawing (Method 2)
Rectangle, Outline, Drawing (Method 1 )
Rectangle, Outline, Drawing, (Method 2)
Rotations of Figures
Semigraphics 8, Set/Reset
Semigraphics 1 2, Set/Reset
Semigraphics 24, Set/Reset
Square, D rawing
Start of Video Memory, Changing
Triangle, Drawing
159
SECTION II
161
1
Alphanumeric Characters in Graphics Modes
Description
Although Extended Color BASIC graphics modes do not permit
internally generated text characters , it is relatively easy to define and
generate character sets . One popular way of defining alphabetic,
numeric , and special characters is by a 5-by-7 dot matri x , shown in
Figure 9 . ALP. l . Characters are defined by dots of the matrix.
5
,,_,,..-..,-,--,,.E1
I
"
U S E B U F F E R ZON E "
T O S E PA R A T E C H A RA C T E R S
5
5
•
•x"
Figure
9.ALP.1:
•
7.
• ! u
Five-by-seven characters.
This concept can be used with the DRAW command to create text
fonts that may be displayed along with graphics patterns in Extended
Color B AS IC graphics modes. Any number of character sets may be
created , with any patterns , such as Japanese Kata-Kana characters or
other foreign or special characters .
When 5-by-7 dot-matrix characters are used , up to 42 characters
may be displayed horizontally (5 dots plus a buffer of one "off" dot) and
24 characters vertically. Larger matrices , such as 6 by 8 , will allow a
reasonable number of characters with better resolution.
When the characters are defined properly by a DRAW string, they
may be executed at any spot on the screen and may be increased or
diminished in size at w il l .
1 62
Sequence
Draw the character to be represented as a dot matrix. Now define the
character as a series of DRAW commands. Assume some constant
starting position , such as the upper left-hand corner position. Use the
smallest number of dots that will be displayed (e . g . , 5-by-7 dots) . The
DRAW string can now be executed by a DRAW command.
Example
Define and draw an "X" using a 5-by-7 dot matrix . The "X" is
shown in Figure 9 . ALP . 1 . It is defined by
:a = 11 0 1 ; F a ; o 1 r n L LI ; u 1 ; E a ; u 1 ; 11
The X$ string can now be used in a DRAW command, together with
such commands as Execute, Color, and Scale .
1 00
1 10
1 20
1 30
1 40
1 50
P M O D E LI , 1
SCREEN 1 1 0
)-( $ = 11 0 1 i F Ll i 0 1 i B L l! i U 1 i E l! i U 1 i 11
PCLS 1
DRAW
C 0 ; S L! ; II + )-( $
GOTO 1 50
II
Notes
1 . Use PMODE 4 unless you are working in large scale characters .
2 . B l ack o n green i s a good foreground/background color. Other
colors cause convergence problems and characters show up in multiple
colors.
SECTION II
1 63
2
Arc, Drawing
Description
This application draws an arc between any two points by using the
CIRCLE command of Extended Color BASIC. The arc drawn will
represent a hemisphere between the two points as shown in Figure
9 . ARC. l . The arc can be specified "concave up/concave left" or
" concave down/concave right" .
t)
" CON CAVE
UP"
"
CONCAVE
LEFT "
l
::
-)
( 16 0 , 72 )
" CONCAVE
R I G HT "
c-
S PE C I F I E
POINTS
( 101, 1 4 9 )
Figure
9.ARC . l :
1
,,.,....
-C I RC U L A R
ARC
DRAWN
"
C O N C AVE
DOWN "
ARC action.
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Set C to the color to be used. Set
XI , YI and X2 , Y2 to the coordinates of the two points. Set D to 0 for
concave up/left or to 1 for concave down/right.
Use these commands:
1 00 X N = ABS C X2 - X l l / 2 : YN=ABS C Y2 - Y l l / 2
1 1 0 I F X 2 - X 1 < 0 THEN X M = XN+X2 ELSE XM = XN+X 1
1 64
1 20 I F Y 2 - Y 1 < 0 THEN Y M = Y N+Y2 ELSE Y M = Y N + Y l
1 30 X X = 0 : I F X2 = X 1 THEN X X = 90 : GOTO 1 50
lll0 JC< = A T N ( ( Y 1 - Y 2 l / ( )< 2 - >( 1 > ) * 5 7 . 2 9 5 8
1 5 0 JC< = 1 - JOU 3 6 0
1 60 I F xx+ . 5 } 1 THEN X Y = XX - . 5 ELSE X Y = XX+ . 5
1 70 I F 0 = 0 THEN C I RCLE
( J< M 1 Y M l 1 S Q R ( )< M * )< M + Y M * Y M l 1 C t 1 1 )0( 1 J< Y E L S E
C I R C L E ( )< M 1 Y M l , S Q R O( M * >( M + Y M * Y M l 1 C t 1 1 >( Y 1
1 80 GOTO
180
Example
Draw an arc between the points 50, 1 00 and 1 00,50.
80 P M O O E 3 1 1
82 SCREEN 1 10
84 PCLS
8 6 X 1 =50 : Y 1 = 1 00
X2= 1 00 : Y2=50
1 00 X N = ABS ( X2 - X 1 l / 2 : Y N = A BS ( Y 2 - Y 1 l / 2
1 1 0 I F X 2 - X 1 < 0 THEN XM= XN+X2 ELSE XM= XN+X 1
1 20 I F Y2 - Y 1 < 0 THEN YM= YN+Y2 ELSE YM=YN+Y 1
1 30 X X = 0 : I F X2 = X 1 THEN X X = 80 : GOTO 1 50
1 40 X X = ATN C C Y 1 - Y2 l / C X2 - X 1 l l *57 . 2858
1 5 0 ){ ){ = 1 - }( }( / 3 6 0
1 60 IF xx+ . 5 } 1 THEN XY=XX- . 5 ELSE XY = XX+ . 5
1 70 I F 0 = 0 THEN C I RCLE
( ){ M 1 Y M l 1 S Q R O ( M * }( M + Y M * Y M l 1 C t 1 1 )0: 1 ){ Y E L S E
C I R C L E O( M 1 Y M l 1 S Q R ( ){ M * l{ M + Y M * Y M l 1 C t 1 ,
1 80 GOTO
1 80
Notes
I
An error will occur if the center of the circle falls outside of the
screen limits . That is, if a full circle with the given points could not be
drawn, then the arc can not be drawn either.
2. The arc will be flattened if the center of the circle defining the
arc is within the screen limits, but a portion of the arc is out of the screen
l i mits .
.
SECTION II
1 65
3
Border Outli ne, Drawing
Description
This application draws a border outline by using the CIRCLE
command of Extended Color BASIC . The border is drawn in the
foreground color. It is assumed that the background color is green (color
set 0) or buff (color set l) so that the border outline is visible.
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. PCLS the screen to a green or buff
color by PCLS l or PCLS 5 .
Use this CIRCLE command:
C I RCLE
< 1 28 1 8 6 ) 1 2 0 0 1C
The color used i s the color specified i n C .
Example
Draw a border in color set 0 with green background and red outline.
1
1
1
1
1
00 PMOOE 3 t 1
1 0 SCREEN 1 1 0
20 PCLS
3 0 C I R C L E ( 1 2 8 1 8 6 ) 1 2 0 0 i ll
Ll 0 G O T O 1 l'.1 0
1 66
4
Circle, Drawing
Description
This application draws a circle by using the CIRCLE command of
Extended Color B ASIC . The center of the circle, the radius , and color
code are defined in the command. The circle will be a complete circle
and not an arc .
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Use this CIRCLE command:
C I RCLE
( X 1 Y l 1R 1 C
The circle will be drawn with center at X,Y, a radius o f R , and a
color of C .
Example
Draw a circle of radius 20 at the center of the screen .
1 00 PMOOE 3 1 1
1 1 0 SCREEN 1 10
1 20 PCLS
1 30 C I RCLE ( 1 28 1 88 ) 1 20 14
1 40 GOTO 1 40
SECTION ti
167
5
Ellipse, Drawing
Description
This application draws an ellipse by using the CIRCLE command of
Extended Color BASIC . The center of the circle, the radius, and color
code are defined in the command. The radius will determine the width of
the ellipse; the height will be determined by the height:width ratio.
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Use this CIRCLE command:
C I RCLE
< X 1 Y > 1 R 1 C 1HW
The ellipse will be drawn with center at X , Y, a color of C , a width
of 2 x R , and a height of 2 x R x HW.
Example
Draw an ellipse of width 1 00 and height of 50 at the center of the
screen .
1
1
1
1
1
00
10
20
30
40
PMODE 3 d
SCREEN 1 '0
PCLS
C I RCLE < 1 28 1 88 ) , 50 , 4 , , 5
GOTO 1 40
1 68
6
Intermixing Text and Graphics
Description
Alphanumerics and text can be intermixed only while in the normal
text display mode of Color BASIC or Extended Color BASIC . The
graphics display mode uses a separate graphics page that will not allow
internal generation of text characters . The text display mode allows both
internally generated text characters and limited graphics (64 elements
horizontally by 32 elements vertically) .
Because the four graphics elements of a character position are
contained in 1 byte in the text display mode , four graphics elements may
be defined by a single 8-bit value. This value may be treated as a single
character in a character string, or a series of these graphics characters
may be joined together in a longer string.
Alternativel y , the values defining the four elements of graphics may
be POKEd into the text display area from 1 024 through 1 53 5 .
Sequence
For each four graphics elements in a character position, do the
following:
1 . Determine the color for the elements . All elements in one
character position must be the same color, or black.
2 . Compute the value for the character position by
l,J
= 1 2 8 + ( C - 1 ) * 1 G +L3+L2+LI +LO
where C is the color code of 1 through 8 (green through orange) and L3 ,
L2 , LI , and LO correspond to the graphics element position as shown in
Figure 9 . INT . 1 . If L3 is to be on, L3 = 8; if off, 0. If L2 is to be on,
L2 = 4; if off, 0. If LI is to be on, LI = 2; if off, 0 . If LO is to be on,
LO = l; if off, 0 . If a black color (0) is to be used, all elements are off
and V = 1 28 .
3 . POKE the value V into the proper byte of the text display
buffer. The address for the POKE will be
SECTION II
V
L3
(8)
Ll
(2)
L2
(4)
•
1 2 8 + ( C - 1 ) * 1 6 + L 3 + L 2 + L l + LO
c • 0
1
2
3
4
5
6
LO
(J)
7
8
Figure 9.INT. l :
1 69
BLACK
GREEN
Y L LO
BLUE
RED
BUFF
CYAN
M A G E N TA
ORANGE
E
W
Graphics elements coding.
1 0 2 ll +L * 3 2 + CP 1
where L is the line number of 0 through 1 5 , and CP is the character
position of 0 through 3 1 .
4 . Alternatively , set a one-character string equal to CHR$(V) . The
resulting string can then be PRINTed @ or used in any other way a string
is used .
Example
Display " TEXT" bracketed on the left by a bar of blue and on the
right by a bar of red, as shown in figure 9 . INT. 2 .
z
�
f-­
U)
0
a..
"'
w
f-­
u
<I
� /\
B L U E BAR
B LA C K
[l rl E lxl rl
) (___�
B U F F BAR
Figure 9.INT.2:
Intermix of text and graphics example.
1 70
The graphics character position on the left is
l.I
1 = 1 28+2* 1 8+8+2
The graphics character position on the right is
t.1 2 = 1 2 8 + 4 * 1 8 + 4 + 1
The 6 characters can now be PRINTed by
1 00
P R I N T C H R $ < t.i 1 l + " T D( T " + C H R $ < t.1 2 l
or displayed by
P R I N T @ 2 5 8 + 1 8 1 " T E >( T " ;
POKE 1 024+258+ 1 5 1 V l : POKE
2 5 8 + 2 0 ' t.1 2
1 20 GOTO 1 20
1 00
1 10
1 024+
SECTION II
1 71
7
Line, Any Angle, Drawing (Method 1 )
Description
In this method of drawing a line using the LINE command of
Extended Color B ASIC , a start and end point for the line are determined .
The X and Y coordinates of the line are based upon the maximum graphic
resolution of 255 horizontal by 1 92 vertical elements . The two points
must be within the screen boundaries .
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Use the LINE command in the
following format:
L I NE
( X1 , Y 1 ) - ( X2 , Y2 ) , P S E T
This draws a line between points XI , Yl and X2 , Y2 . The start and
end points are included in the line. The color used is the current
foreground color.
Example
Draw a line between 24 ,30 and 1 28 , 5 5 .
1 0 0 P M O O E ll , 1
1 1 0 SCREEN 1 ,0
1 20 PCLS
1 3 0 L I N E ( Z l! , 3 0 ) - ( 1 2 8 , 5 5 ) t P S E T
1 ll 0 G O T O 1 ll 0
Notes
l . This method is best for lines which may have any angle.
Consider DRAW for angles of O , 45 , 90, 1 3 5 , 1 80 , 225 , 270, and 3 1 5
degrees.
1 72
8
Lines, Horizontal, Vertical, or Diagonal, Drawing
Description
This method of drawing a line uses the DRAW command of
Extended Color BASIC. A starting point, direction , and length for the
line are determined . The X and Y coordinates of the starting point are
based upon the maximum graphic resolution of 255 horizontal by 1 92
vertical elements. The starting point must be within the screen
boundaries.
The length of the line is expressed in high-resolution units. Diagonal
lines are expressed in the number of units moved in a horizontal or
vertical position.
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Set Xl , Yl to the starting point for
the line. Use the DRAW command in the following format:
DRAW
" B MXJ 1 Yl ;
#L "
The " # " sign represents the DRAW command as follows: U = up,
D = down, R = right, L = left, E = 45 degrees , F = 1 35 degrees , G = 225
degrees , H 3 1 5 degrees . The L parameter is the length of the line to be
drawn . The color used is the current foreground color. Any color in the
current PMODE may be used by using the format
=
DRAW
II
B MXJ , yj ;
C& ;
#L "
where & is the color code from 1 to 8 .
Example
Draw a diagonal red line from 1 28 ,92 to 148 ,72 .
SECTION II
1 00 PMODE 3 t 1
1 1 0 SCREEN 1 10
1 20 P C L S
1 30 DRAW " BM 1 28 192 ;
1 40 GOTO 1 40
ca ;
1 73
E20"
Notes
1 . This method is best for lines with angles of O , 45, 90, 1 3 5 , 1 80 ,
225 , 270, and 3 1 5 degrees .
2 . The LINE command may be used instead of DRAW. In LINE,
however, the color cannot be specified as in DRAW.
1 74
9
Mode of Graphics, Changing
Description
This BASIC program provides an easy way to change the graphics
mode to one not implemented in either Color BASIC or Extended Color
BASIC . Changing the mode can be used as an initialization to doing
graphics work in the video display generator (VDG) modes that are not
implemented in the BASIC interpreters .
Sequence
Set variable P to the mode to be used. Set variable C to the color
set , 0 or 1 .
For P : Values of 0 through 4 correspond to PMODE 0 through 4
(even if Extended BASIC is not installed). Values of -6, -8 , - 1 2 , and
-24 correspond to the semigraphics modes 6, 8 , 1 2 , and 24 respectively.
Values of 5 through 7 correspond to the 64 x 64 four-color mode, the
1 28 x 64 two-color mode , and the 1 28 x 64 four-color mode
respectively .
Use these statements:
1 000
1010
1 020
1 030
1 040
1 050
1 060
1 070
1 080
I F P > 7 THEN GOTO 1 5 00
ELSE I F P = - 6 THEN GOTO 1 1 00
ELSE I F P = - 8 THEN GOTO 1 1 00
ELSE I F P = - 1 2 THEN GOTO 1 1 00
ELSE I F P = -24 THEN GOTO 1 1 00
ELSE I F P < 0 THEN GOTO 1 500
I F P >4 THEN T = P+3 ELSE T = P+ 1 1
A = < PEEK C 653 1 4 l AND 7 l : POK E
653 1 4 1A+T*1 6+C*8
I F P = 5 THEN P = 6
I F P >4 THEN P = P - 5 ELSE P = P+3
I F P = 7 THEN P = 6
I F ( p A N D 4 ) = 4 T H E N P O K E &: H F F C 5 , 1
E L S E P O K E &: H F F C 4 1 0
I F ( p A N D 2 ) = 2 T H E N P O K E &: H F F C 3 , 1
E L S E P O K E &: H F F C 2 1 0
I F ( p A N D 1 ) = 1 T H E N P O K E &: H F F C 1 , 1
E L S E P O K E &: H F F C 0 1 0
SECTION II
1 75
1 090 GOTO 1 500
1 1 00 IF P = - 6 THEN P = 0
E L S E I F P = - 8 THEN P = 2
E L S E I F P = - 1 2 THEN P = 4
ELSE I F P = - 24 THEN P = 6
1 1 1 0 A = < PEEK ( 65 3 1 4 l AND 7 l :
I F P = 0 THEN POKE 653 1 4 t A+ 1 6+C*B
ELSE POKE 653 1 4 t A
1 1 2 0 G O T O ·1 0 6 0
1 500 RETURN
Example
To set PMODE 4 and color set 1 in a Color BASIC machine, do the
following:
1 00 P = 4 : C = 1
1 1 0 GOSUB 1 000
1 20
1 30
1 40 GOTO 1 40
1 000 ( s u b r o u t i n e
•
•
ab o v e )
Notes
The area displayed will be from the current starting address
1 024
if in Color B ASIC or Extended Color BASIC text display, or a graphics
page start if in Extended Color BASIC graphics display . Change the
starting address as described in "Start of Video Memory, Changing" if
desired.
-
1 76
10
Moving Figures, by GET,PUT
Description
This application shows how figures can be moved on the screen to
produce animation or other effects . The technique used here is by the use
of the Extended Color BASIC GET/PUT commands. The figure is drawn
at a given starting point by a standard Extended Color BASIC command
or commands. The figure is then moved into an array by the GET
command and redrawn at a new screen position by the PUT command .
The process is repeated as often as required. Indexing (see "Moving
Figures by Indexing" ) can be used to facilitate the PUTs.
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Clear the screen by PCLS , or leave
the current screen contents in place.
Establish a two-dimensional array for the GET. The array should be
large enough to hold the area of the screen to be stored. In the simplest
case, the dimensions of the array should match the area dimensions .
However, a great deal of memory may be saved and the speed will be
increased by using the techniques of Chapter 8 .
Draw the figure to b e moved by normal commands . Perform a GET
on the screen area to move the entire area into the array . Initiate a
FOR . . . TO . . . SET loop from 0 to an end index value. Draw the figure by
performing a PUT to the next screen area, using the index value to
determine the location . Continue through the end of the loop.
Example
Move a circle centered at 20,20 with a radius of 3 , diagonally down
to 1 70 , 1 70 .
1 00
1 10
1 20
1 30
1 ll 0
1 50
P M O D E ll t 1
SCREEN 1 ,0
PCLS
D I M l.l ( 1 0 t 1 0 )
C I RCLE ( 20 120 ) 13
G E T ( 1 5 t 1 5 l - ( 2 5 1 2 5 ) 1 IJ 1 G
SECTION II
1 80
1 70
1 80
1 90
200
1 77
FOR
1 = 0 TD 1 50
P U T ( 1 5 + 1 t 1 5 + 1 ) - ( 2 5 + 1 1 2 5 + 1 ) , t.1 , p s E T
FOR J = 0 TD 20 : NEXT J
N D( T I
GOTO 200
This example produces a succession of circles, as shown in
9 . MFG . I . Each is drawn with a center at 20 + 1 , 20 + I and then erased.
The overhead of the PUT command allows the figure to remain long
enough to create an animation effect.
rDEFINED
r.:J-AREA
L:'.r
IN GET ( I = O )
( 1 5 , 15 )
c2:��" '
� INTERMEDIATE
POSITION ( ! = 6 0 )
0"
'
"'
"'
" "-.
( 16 5 16 5 )
.
Figure 9 . MFG . l :
FINAL
f POSITION
[email protected]]- ( 1 7 5 , 175 )
'
Moving figures b y GET/PUT example.
Notes
l . This example moves a circle along the diagonal in about 1 3
second s .
2 . Delete the FOR J = 0 . . loop for a faster move (6 seconds) .
3 . The PUTs effect an automatic erase as the array block is
rewritten . More elaborate figures may leave garbage unless a proper erase
(by a PUT with PRESET or other means) is done .
4. Replicating the block will cut a swath along the path and
possibly overwrite other figures that fall into the block area .
5 . U s e a larger STEP size fo r slower moves.
.
1 78
1 1
Moving Figures, by Indexing
Description
This application shows how figures can be moved on the screen to
produce animation or other effects . The technique used here is indexing .
The figure is drawn at a given starting point by a standard Extended
Color B ASIC command. The figure is then erased by using a PCLS or by
overwriting the figure with the background color. The figure is then
redrawn at a new screen position and the process is repeated. The process
continues until the end of the path is reached .
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Clear the screen by PCLS , or leave
the current screen contents in place. Initiate a FOR . . . TO . . . STEP loop
from 0 to an end index value.
Draw the figure at the screen start plus the index value . Erase the
figure by a PCLS or by redrawing the figure with the background color.
Continue until the last index is reached .
Example
Move a circle centered at 20 ,20 with a radius of 3 , diagonally down
to 1 70 , 1 70 .
1 00
1 10
1 20
1 30
1 40
1 50
1 60
1 70
P M O D E Ll 1 1
SCREEN 1 1 0
PCLS
FOR I = 0 TD 1 50
C I RCLE ( 20+ I 120+ I ) 1 3
C I RCLE ( 20 + I 1 20+ I ) 13 1 0
N E )< T I
GOTO 1 70
This example produces a succession of circles as shown in 9 . MFI . l .
Each is drawn with a center at 20 + 1,20 + I and then erased. The
overhead of the CIRCLE command allows the figure to remain long
enough to create an animation effect .
SECTION II
OR I G I N AL
0,---- P O S I T I O N
"-
"
( CE N T E R AT
20, 20)
"
",
,...--- I N T E R M E D I AT E
POS I T I O N
'{ C E N T E R AT B O ,
"-
0
"
FINAL
PO S I T I O N
{ C E N T E R AT
Figure 9.MFl . l :
"-
"
80)
"
".
"
1 7 0 , 170 ) �a
Moving figures b y indexing example.
Notes
1 . This example moves a circle along the diagonal in about 3 1
seconds .
2 . Use a l arger STEP size for a faster move.
3 . Substitute a PCLS for the second move i f desired. The speed
will be about the same.
4 . Vary X and/or Y with the index variable to move vertically ,
horizontally, or diagonall y .
5 . U s e t w o index variables for other angles , although this will
slow down the move considerably .
1 79
180
12
Octagon, Drawing
Description
This application draws an octagon, as shown in Figure 9 . 0CT. l .
The octagon is drawn with the midpoint at any given X , Y location. It may
be any of 3 '.2 sizes - width of 3 , 6, 9, 1 2 , 1 5 , etc . , up to a base of 96.
The entire octagon must be within the screen boundaries or an imperfect
octagon will result.
-f
I
I
I
���:ER AT
< 128, 1 1 2 1
S•32
!
Figure
9.0CT. l :
Octagon action.
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Set X, Y to the midpoint of the
octagon. Set S, scale factor, to a value of 1 through 32. The width of the
octagon will be 3 times S .
Use the following BASIC line to draw the octagon:
1 0 0 D R A W 11 B M 11 + S T R $ C X ) + 11 1 11 + S T R $ ( Y ) + 11 S 11 +
S T R $ ( s ) + II ; II + II B M +0 ' - 6 ; R 2 ; F ll ; D ll ; G ll ; L ll ;
H ll i U ll l E ll i R 2 i B M + 0 1 + 6 11
SECTION II
Example
Draw an octagon centered at 1 28 , 96 with a width of 3 3 .
1
1
1
1
1
00 PMOOE 3 t 1
1 0 SCREEN 1 10
20 PCLS
30 X = 1 28 : Y = 8G : S = l l
4 0 O R A W 11 B M 11 + S T R $ ( ){ ) + 11 1 " + S T R $ ( Y ) + " S " +
S T R $ ( S ) + " ; " + " 5 M + 0 1 - G i R 2 i F ll i D ll i G ll i l l! ;
H ll i U ll i E ll i R 2 i B M + 0 1 + 6 11
1 50 GOTO
1 50
Notes
1 . The cursor is centered at the midpoint of the octagon after the
line has been executed. Further DRA Ws will occur from this point.
2. If the octagon will not fit on the screen, the DRAW will still
draw a figure, but one or more sides will be the wrong lengths.
181
182
13
Other Colors in PMODE 4
Description
This application provides a gray color in addition to green and black
in color set 0, or a blue color in addition to buff and black in color set 1 .
It uses the PSET command to alternate black and green stripes in a
rectangular area. The same technique can be used in a non-rectangular
area with some modification .
Sequence
Set PMODE to 4 and page number. Set SCREEN to graphics and
color set 0 or l . Reverse the foreground/background colors by COLOR
0, 1 . PCLS the screen to a green or bu ff color by PCLS .
Define the rectangle to be colored gray or blue by setting Xl ,Y J to
the upper left-hand corner and X2 Y2 to the lower right-hand corner.
Perform the fol lowing loop:
,
1 30 FDR X = X l TO X2 STEP 2
1 40 FOR Y = Y l TO Y2
1 5 0 P S E T ( ){ 1 Y l
1 60 NEXT Y : NEXT X
Example
Color the rectangle defined by 20,20 to 1 00, 1 00 gray.
90 PMODE 4 1 1
1 00 SCREEN 1 ' 0
1 1 0 COLOR 0 d
1 2 0 P C L S : >: 1 = 2 0 : Y 1 = 2 0
}( 2 = 1 0 0
1 3 0 F O R }-{ = ){ 1 T D ){ 2 S T E P 2
1 40 FOR Y = Y l TD Y2
1 5 0 P S E T ( )- ( , y )
1 6 0 N E :n y : N E :n )-(
1 70 GOTO 1 70
Y2= 1 00
Notes
Other STEP sizes in color set l produce additional effects , including
rainbow striping.
SECTION II
1 83
14
Rectangle, Fi l led-in, Color BASIC
Description
POKE graphics may be used for Color BASIC to draw filled-in
rectangles . This method is fast, allows eight colors , but works only with
the 64-by-64 resolution of Color BASIC .
The rectangles may be any size in multiples of character positions .
Normal graphics in Color B ASIC has a resolution of 64 by 32 with each
character position defining four graphics elements. The character position
is 4 pixels wide by 6 pixels high. The smallest rectangle that can be
defined in this mode is one character position (4 by 6, or two X units by
two Y units) . Other rectangles will be drawn to the next smallest
character position. For example, if a 1 2-wide by 1 5 -high rectangle was
called for, the rectangle would be 1 2/2 = 6 character positions wide by
1 5/2 = 7 character positions high. The rectangle is specified in Color
BASIC graphic coordinates where X = 0 to 63 and Y = 0 to 3 1 .
Sequence
Set C to the color to be used , 0 through 9 . Set (Xi , Yi ) to the
coordinates of one comer of the rectangle. Set (X2 , Y2 ) to the coordinates
of the opposite corner of the rectangle .
Use these statements to draw the rectangle:
1 0 0 I F )< 2 < )-( 1 T H E N }{ L = }( 2 E L S E }( L = i< l
1 1 0 I F )< 2 < )< 1 T H E N )< R = )<1 E L S E )-( R = i< 2
1 20 I F Y2< Y 1 THEN YT=Y2 ELSE Y T = Y l
1 30 I F Y2< Y 1 THEN YB= Y l ELSE YB=Y2
l< R = I N T < l< R / 2 )
1 4 0 l< L = I N T ( )-( L / 2 )
l<D = )< R - l< L + l
YB= I NT < YB / 2 )
1 50 Y T = I NT < YT / 2 )
YD=YB-YT+ l
1 60 I F C = 0 THEN L = 0 ELSE L = 1 5
1 7 0 I F C< >0 THEN C=C- 1
1 80 P K = 1 2B+C* 1 G+L
1 80 FOR I = l TO YD
200 FOR J = l TO XO
2 1 0 POKE 1 024+XL+J - 1 +YT*32+ ( l - 1 l *32 1 PK
220 NEYT J
2 3 0 N E l< T
I
184
The sequence above first finds the "left" X, XL , the "right" X, XR ,
the "top" Y, YT, and the "bottom" Y, YB .
It then finds the coordinates in character positions by dividing the X
coordinates by 2 and the Y coordinates by 2 . The X and Y distances are
then computed - XD and YD .
If the color is black, all elements will be off and variable L set to O;
otherwise L is set to all on ( 1 1 1 1 binary or 1 5 decimal ) . The color code
for POKEs is then found by subtracting 1 from variable C. The proper
code to be POKEd for each character position is 1 2 8 + C x 1 6 + L .
Next, two loops are performed . The innermost " J " loop draws a
row of colors. The outermost " I " loop increments over YD rows. Each
POKE stores one character position of the rectangle.
Example
Draw a blue rectangle with an upper left comer at 32, 1 6 (center of
screen) and a lower right corner at 48,24 .
80 C = 3 : X 1 = 3 2 : Y 1 = 1 G : X 2 = 4 8 : Y 2 = 2 4
1 0 0 I F }< 2 < >( 1 T H E N }{ L = >( 2 E L S E )-( L = )< l
1 1 0 I F }{ 2 < }( 1 T H E N )-( R = }( l E L S E }< R = >( 2
1 20 I F Y2< Y 1 THEN Y T = Y2 ELSE Y T = Y l
1 30 I F Y2< Y 1 THEN YB = Y l ELSE Y B = Y2
1 4 0 ){ L = I N T ( )-( L / 2 )
)< R = I N T ( }( R / 2 )
)< D = >< R - }( L + 1
1 50 YT = I NT < YT/2 )
YB= INT < YB/2 )
YD=YB -YT+ l
1 60 I F C = 0 THEN L = 0 ELSE L = 1 5
1 70 I F C< >0 THEN C = C - 1
1 80 P K = 1 28+C* 1 B+L
1 80 FOR I = l TO YD
200 FOR J = l TO XD
2 1 0 P O K E 1 0 2 4 + }( L + J - 1 + Y T * 3 2 + < I - 1 l * 3 2 1 P K
2 2 0 N E> : T J
2 3 0 N E )< T I
240 GOTO 240
Notes
This code is not " idiot-proof. " Using invalid X and Y coordinates or
colors will yield improper results !
SECTION II
185
15
Rectangle, Fil led-in, Drawing (Method 1 )
Description
In this method of drawing a filled-in rectangle using the LINE
command of Extended BASIC, a diagonal of the rectangle defines the
size and position . The X and Y coordinates of the diagonal are based upon
the maximum graphic resolution of 255 horizontal by 1 92 vertical
elements . The two points must be within the screen boundaries.
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set . Use the LINE command in the
following format:
L I NE
( X 1 1 Y1 ) - ( X2 1 Y2 ) 1 P S E T 1 B F
This draws a rectangle outline. The upper left corner of the rectangle
is defined by XI , Yl . The lower right corner of the rectangle is defined by
X2 , Y2 . The start and end points are included in the outl ine. The color
used is the current foreground color.
Example
Draw a rectangle whose upper left corner is at I , I and whose lower
right corner is at 1 27 , 9 1 .
1 00 P M O O E 3 1 1
1 1 0 SCREEN 1 10
1 20 PCLS
1 30 L I NE ( 1 t 1 ) - < 1 27 1 8 1 ) 1 PSET 1BF
1 40 GOTO 1 40
Notes
The method is faster than creating a filled-in rectangle with DRAW
and PAINT. Compare the example with " Drawing a Filled-in Rectangle
(Method 2 ) . ' '
1 86
16
Rectangle, Filled-in, Drawing (Method 2)
Description
This method of drawing a rectangle uses the ORAW and PAINT
commands of Extended BASIC . In this method , a ORAW string defines
the sides of the rectangle and the starting point. This method has some
advantages over LINE with the B option. A color other than the
foreground color may be specified and the rectangle may be scaled up or
rotated. The increments for the ORAW are based upon the maximum
graphic resolution of 255 horizontal by 1 92 vertical elements. The
rectangle may not go beyond the boundaries .
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Use the ORA W command in the
following format:
DRAW
II B MXJ 1 Yl ; B ;
Rll ;
Dl2 ;
Lll ;
Ul2 II
In this format X1 and Y1 are the starting coordinates of the rectangle
where XI = 0 to 255 and Y1 = 0 to 1 9 1 . ll is the width of the rectangle
minus 1 , ( 1 - 255) and l2 is the height of the rectangle minus 1 , ( 1 1 9 1 ) . B is the border color for the rectangle .
PAINT the rectangle by
P A I NT
( XJ + l 1 Yl + l l 1 C 1B
where C is the color for painting and B is the border color used in the
ORA W command. B and C may be equal if the rectangle is to be one
solid color. If B and C are not equal , there will be a narrow outline
around the rectangle.
Example
Draw a rectangle whose upper left comer is at 1 , 1 and whose lower
right comer is at 1 27 , 9 1 . The width is therefore 1 27 and the height 9 1 .
Color the rectangle blue.
SECTION fl
1 00 PMODE 3 , 1
1 1 0 SCREEN 1 10
1 20 PCLS
1 3 0 D R A W II B M 1 ' 1 ; C 3 ;
1 40 PA I NT ( 2 1 2 ) ,3 ,3
1 50 GOTO 1 50
R 1 26 ;
080 ;
L 1 26 ;
187
U 8 0 II
Notes
The cursor for the draw is positioned back at 1 , 1 after the ORA W .
188
17
Rectangle Outline, Drawing (Method 1 )
Description
In this method of drawing a rectangle using the LINE command of
Extended BASIC, a diagonal of the rectangle defines the size and
position. The X and Y coordinates of the diagonal are based upon the
maximum graphic resolution of 255 horizontal by 1 92 vertical elements.
The two points must be within the screen boundaries .
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Use the LINE command in the
following format:
L I NE
( XJ 1 Yl > - ( X2 1 Y2 > , P S E T ,
B
This draws a rectangle outline. The upper left comer of the rectangle
is defined by Xl , Yl . The lower right comer of the rectangle is defined by
X2 , Y2 . The start and end points are included in the outl ine . The color
used is the current foreground color.
Example
Draw a rectangle whose upper left comer is at 1 , I and whose lower
right comer is at 1 27 , 9 1 .
1 00 PMODE 3 t 1
1 1 0 SCREEN 1 10
1 20 PCLS
1 30 L I NE ( 1 t 1 > - ( 1 27 1 9 1 l 1 PSET 1 B
1 ll 0 G O T O 1 ll 0
Notes
The method is faster than a rectangle drawn with the DRAW
command. Compare the example with "Rectangle Outline, Drawing
(Method 2) . "
SECTION II
189
18
Rectangle Outline, Drawing (Method 2)
Description
In this method of drawing a rectangle using the DRAW command of
Extended B ASIC, a DRAW string defines the sides of the rectangle and
the starting point. This method has some advantages over LINE with the
B option. The color of the sides may be changed easily and the rectangle
may be scaled up or rotated. The increments for the DRAW are based
upon the maximum graphic resolution of 255 horizontal by 1 92 vertical
elements . The rectangle may not go beyond the boundaries.
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Use the DRAW command in the
following format:
DRAW
" B MXJ 1 Yl ;
RLJ ;
DL2 ;
LLJ ;
UL2 1 1
In this format X J and Y1 are the starting coordinates of the rectangle
where Xl = 0 to 255 and Y1 = 0 to 1 9 1 . Ll is the width of the rectangle
minus l ( 1 255) , and L2 is the height of the rectangle minus 1 ( l
1 9 1 ) . The color used is the current foreground color.
-
-
Example
Draw a rectangle whose upper left corner is at I , 1 and whose lower
right corner is at 1 27 , 9 1 . The width is therefore 1 27 and the height 9 1 .
1 00 P MODE 3 , 1
1 1 0 SCREEN 1 10
1 20 PCLS
1 30 DRAW
BM 1 ' 1 ;
1 40 GOTO 1 40
II
R 126 ;
D90 ;
L 1 26 ;
U90
II
Notes
1 . The cursor for the draw is positioned back at 1 , l after the
DRAW.
2. The C command can be used at any time to change the color of
a side . Example: " R l 26 ; C2; D90; . .
.
"
1 90
19
Rotations, of Figures
Description
The best way to rotate figure outlines is with the Angle option of the
DRAW command. Angle lets you displace any line drawn by 0, 90, 1 80,
or 270 degrees , in effect a rotation . The format of Angle is
" AX "
where X is 0, 1 ,2 , or 3 , corresponding to 0 degrees , 90 degrees , 1 80
degrees , or 270 degrees .
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Define your figure by a ORAW
string.
Define the angle command as a separate string , such as A$ . This
string can be concatenated onto the ORA W string for the figure . Draw
the figure by performing a ORAW A$ +
(draw string) , " where A$ is
the Angle option.
"
Example
Rotate the pentomino (figure made up of five squares) defined by
" R4;D4;R4;D4;L4;D4;L8 ;U4;R4;U8" (see Figure 9 . ROT. l ) through 0,
90 , 1 80, 270 , and 0 degrees .
1 00
1 10
1 20
1 30
1 40
1 50
1 80
1 70
1 80
1 80
PMODE 3 1 1
SCREEN 1 1 0
PCLS
5 $ = " R ll m a ; R a m a ; L a m a ; L B ; u a m a ; u s ; "
DRAW " A0 " +5$
G O S U 5 1 000
DRAW " A l " +5$
GOSU5 1 000
DRAW " A2 " +5 $
GOSU5 1 000
SECTION II
200 DRAW " A3 " +B$
2 1 0 GDSUB 1 000
220 DRAW " A0 " +B$
230 GOTO 230
1 000 FOR ! = 0 TO 1 000
1 0 1 0 PCLS
1 020 RETURN
N E >( T
I
4
4
8
4
1-- - - - I
I
I
I
4
-
4
-
I
- -
-
I
I
I
I
I
4
I
I
8
Figure 9 .ROT. 1 :
Pentomino .
Notes
l . The default Angle value is 0.
2 . Once a n Angle option is executed, i t stays i n force for all
subsequent DRAW s .
191
1 92
20
Semigraphics 8, SET/RESET
Description
This application allows a set or reset of one graphic element in the
semigraphics 8 mode while in either a Color BASIC or Extended Color
BASIC machine. The semigraphics 8 mode is not supported in either
BASIC version . It allows 8 colors in a 64-by-64 matrix with a black
border.
Sequence
Prior to the set or reset, semigraphics 8 mode must be set by the
instructions in "Mode of Graphics, Changing . " Also, the start of the
display area must have been defined by the procedures in "Start of Video
Memory, Changing . ' '
Set variable X to the horizontal coordinate, 0 through 63 . Set
variable Y to the vertical coordinate, 0 through 63 . Set C to the color, 1
through 8 . 0 (black) is not a valid color. Set SR to 0 if the element is to
be set, or to 1 if the element is to be reset . Variable ST should be set to
the start of the display area (this may be done only once, after setting the
start).
Use the following statements:
1 00
1 10
1 20
1 30
1 40
I F S R = 0 THEN M = 1 28+ ( C - l l * 1 B
I F < X AND l l = 0 THEN M = M+ 1 0 ELSE M = M+5
IF SR= 1 THEN M= 1 28+ ( C - 1 l * 1 B :
I F < X AND 1 l = 0 THEN N = 5 ELSE N = 1 0
AD=ST+Y*32+ I NT < X l2 l
I F S R = 0 THEN A = < PEEK < AD l AND 1 5 ) :
A = A D R M : P O K E AD 1 A
I F SR= 1 THEN A = < PEEK < AD l AND N l :
A = A D R M : P O K E AD 1 A
Example
Set element 63 ,63 (lower right-hand comer) to blue.
90 C = 3 : X = G3 :
1 00 ( s t a t e m e n t s
1 50 GOTO 1 50
Y = G3 :
above )
SR=0
:
ST = 1 4000
SECTION II
1 93
Notes
1 . When working in graphics modes that require more buffer than
is allocated (more than 5 1 2 in Color BASIC), set the display start to high
memory and protect this area with a CLEAR.
2. Before processing graphics in this mode, reset all 4096 elements
(2048 bytes ) . This can be done by the statements described here or by
2048 POKEs of 1 28 + (C- 1 )* 1 6 .
1 94
21
Semigraphics 1 2, SET/RESET
Description
This application allows a set or reset of one graphic element in the
semigraphics 1 2 mode, while in either a Color BASIC or Extended Color
B ASIC machine. The semigraphics 1 2 mode is not supported in either
B ASIC version . The semigraphics 1 2 mode allows 8 colors in a 64-by-96
matrix with a black border.
Sequence
Prior to the set or reset, semigraphics 1 2 mode must be set by the
instructions in "Mode of Graphics , Changing . " Also , the start of the
display area must have been defined by the procedures in ' ' Start of
Memory , Changing . ' '
Set variable X to the horizontal coordinate, 0 through 63 . Set
variable Y to the vertical coordinate, 0 through 95. Set C to the color, 1
through 8 . Black (0) is not a valid color. Set SR to 0 if the element is to
be set or to 1 if the element is to be reset. Variable ST should be set to
the start of the display area (this may be done only once, after setting the
start) .
Use the following statements:
1 00
1 10
1 20
1 30
140
I F SR=0 THEN M = 1 2B+ e C - 1 l • 1 G : I F e x
AND 1 1 = 0 THEN M = M+ 1 0 ELSE M = M+5
I F SR= l THEN M = 1 2B+ e C - 1 l • 1 G : I F e x
AND 1 1 = 0 THEN N = 5 ELSE N = 1 0
AD= ST+Y•32+ I NT e X / 2 l
I F S R = 0 THEN A = C PEEK e AD l AND 1 5 1
A = A D R M : P O K E AD 1 A
IF SR = l THEN A= C PEEK C AD l AND N l : A=A
D R M : P O K E AD 1 A
Example
Set element 63 ,95 (lower right-hand comer) to red.
90 C = 4 : X = G3 :
1 00 ( s t at emen t s
1 50 GOTO 1 50
Y=95 :
above )
SR = 0 :
ST= 1 4000
SECTION II
1 95
Notes
1 . When working in graphics modes that require more buffer than
is allocated (more than 5 1 2 in Color BASIC) , set the display start to high
memory and protect this area with a CLEAR.
2. Before processing graphics in this mode, reset all 6 1 44 elements
(3072 bytes) . This can be done by the statements described here or by
3072 POKEs of 1 28 + (C- 1 )* 1 6 .
1 96
22
Semigraphics 24, SET/RESET
Description
This application allows a set or reset of one graphic element in the
semigraphics 24 mode while in either a Color BASIC or Extended Color
B ASIC machine. The semigraphics 24 mode is not supported in either
BASIC version . The semigraphics 24 mode allows 8 colors in a
64-by- 1 92 matrix with a black border.
Sequence
Prior to the set or reset, semigraphics 24 mode must be set by the
instructions in ' 'Mode of Graphics, Changing . ' ' Also, the start of the
display area must have been defined by the procedures in "Start of Video
Memory, Changing . ' '
Set variable X to the horizontal coordinate , 0 through 63 . Set
variable Y to the vertical coordinate , 0 through 1 9 1 . Set C to the color, 1
through 8 . B l ack (0) is not a valid color. Set SR to 0 if the element is to
be set or to 1 if the element is to be reset. Variable ST should be set to
the start of the display area (this may be done only once, after setting the
start) .
Use the following statements:
1 00
1 10
120
130
1 1'.1 0
I F S R = 0 THEN M = 1 28+ 1 C - 1 1 * 1 G : I F I X
A N D 1 1 = 0 THEN M = M+ 1 0 ELSE M = M+5
I F SR= l THEN M = 1 28+ 1 C - 1 1 * 1 G : I F I X
AND 1 1 = 0 THEN N = S ELSE N = 1 0
AD= ST+Y*32+ I NT I X / 2 1
I F SR=0 THEN A= I PEEK I AD I AND 1 5 1
A = A D R M : POKE AD 1A
I F S R = l THEN A = I PEEK I AD I A N D N I : A = A
D R M : P O K E AD 1 A
Example
Set element 63 , 1 9 1 (lower right-hand comer) to yellow.
SECTION II
90 C = 2 : X = G3 :
1 00 ( s t a t e M e n t s
1 50 G O T O 1 50
Y= 191 :
above )
SR=0
197
S T = 1 ll 0 0 0
Notes
1 . When working in graphics modes that require more buffer than
is allocated (more than 5 1 2 in Color BASIC), set the display start to high
memory and protect this area with a CLEAR.
2. Before processing graphics in this mode, reset all 6 1 44 elements
(3072 bytes ) . This can be done by the statements described here or by
3072 POKEs of 1 28 + (C- 1 )* 1 6 .
1 98
23
Square, Drawing
Description
This application draws a square of any of 32 sizes, as shown in
Figure 9 . SQU . 1 . The square is drawn with the midpoint at any given
X , Y location. The square may be any of 32 sizes - sides of 4, 8, 1 2 ,
1 6 , 20, etc . , u p t o sides o f 1 2 8 . The entire square must b e within the
screen boundaries or an imperfect square will result.
' '"" '.'.r
..'..'.__ " .
S M A L LE S T S Q U A R E
- �;;"'"
'-..._ L A R G E ST
SQUARE
( S I DES OF 1 2 8 )
Figure 9.SQU . l :
Square action.
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Set X , Y to the midpoint of the square .
Set S, scale factor, to a value of 1 through 32. The size of the square ' s
sides w i l l be 4 times S .
Use the following BASIC line to draw the square:
1 0 0 D R A W " B M " + S T R $ ( ){ ) + " t " + S T R $ ( Y l +
" S " +STR$ ( S l + " ; " + " BM - 8 t - B ; R 1 G i D 1 G ;
L 1 6 i U 1 6 i BM+B t + B "
SECTION II
Example
Draw a square centered at 1 28 ,96 with sides of 8 .
1 00 PMODE 3 , 1
1 1 0 SCREEN 1 10
1 20 PCLS
1 30 X = 1 28 : Y=8G : 8 = 32
1 4 0 D R A W " " B M " + S T R $ ( )-( ) + " 1 " + S T R $ ( Y ) +
" S " +STR$ ( S ) + " i " + " BM - 8 1 - B i R 1 G i D 1 G i L 1 G i
U l G i BM+B ,+8 "
1 50 GOTO 1 50
Notes
1 . The cursor is centered at the midpoint of the square after the
line has been executed. Further DRA Ws will occur from this point .
2 . If the square will not fit on the screen , the DRAW will draw a
figure , but one or more sides will be the wrong lengths .
199
200
24
Start of Video Memory, Changing
Description
This B ASIC program provides an easy method of changing the start
of video memory in the hardware to any 5 1 2-byte boundary . The
program can be used in both Color BASIC and Extended Color B ASIC .
Changing the start of video memory can be used to graphically display
the BASIC interpreter or as initialization to doing graphics work in the
VDG modes that are not implemented in the BASIC interpreters .
Sequence
Set variable S to the address to be used. The lower 9 bits of this
address will be ignored if the address is other than a multiple of 5 1 2 - 0,
5 1 2 , 1 024, 1 536, etc. The program will set the VDG start to the given
address.
Use these statements:
1 000
1010
1 020
1 030
1 040
1 050
S = I NT ( S / 5 1 2 l
FOR I = &HFFCG TO &HFFD2 STEP 2
R = S - I NT ( S /2 l *2 : S = I NT ( S / 2 l
POKE I +R 1 0
N E :n I
RETURN
Example
To set the VDG to display the area starting at location 2048:
1 00 5 = 2048
1 1 0 GOSUB 1 0 00
1 20
1 30
1 40 GOTO 1 40
1 000 ( s u b r o u t i n e
•
•
ab o v e )
Notes
The mode of display will be the one that is currently in force . lf in
Color BASIC or the text display of Extended Color BASIC , the mode
will be alphanumeric and the area on the screen will be the start specified
through start + 5 1 1 . If in an Extended Color BASIC graphics mode, the
mode will be the current PMODE and will display the number of bytes
normally displayed in that PMODE.
SECTION II
20 1
25
Triangle, Drawing
Description
Thi s application draws a triangle with the base down , as shown in
Figure 9 . TRI . I . The triangle is an isosceles triangle with a right angle at
the apex. The triangle is drawn with the midpoint at any given X,Y
location. The triangle may be any of 32 sizes - base of 4 , 8, 12, 16, 20 ,
etc . , up to a base of 1 28 . The entire triangle must be within the screen
boundaries or an i mperfect triangle will result.
/
APEX
�
'
I
80
I
I
M I DPOINT AT
= (72, 108)
= 20
X, Y
s
f+- B A S E O F �
Figure 9.TRl . I :
Triangle action.
Sequence
Set PMODE to proper graphics mode and page number. Set
SCREEN to graphics and color set. Set X,Y to the midpoint of the
triangle . Set S, scale factor, to a value of 1 through 32. The size of the
triangle ' s base will be 4 times S .
U s e the following BASIC line t o draw the triangle:
202
1 0 0 D R A W " B M " + S T R $ ( ){ ) + " 1 " + S T R $ ( Y ) +
" S " + S T R $ ( S ) + " ; " + " B M + 0 1 - ll i F B i L 1 G i E B ;
B M + 0 1 + ll 11
Example
Draw a triangle centered at 1 29 ,96 with a base of 32.
1 00 PMODE 3 1 1
1 1 0 SCREEN 1 10
1 20 PCLS
1 30 X = 1 28 : Y = 8G : S = B
1 4 0 D R A W " B M " + S T R $ ( )-( ) + " 1 11 + S T R $ ( Y l +
" S " + S T R $ ( S ) + " ; " + " B M + 0 1 - ll i F B i l 1 G i E B ;
B M + 0 1 + ll 11
150 GOTO
1 50
Notes
1 . The cursor is centered at the midpoint of the triangle after the
line has been executed. Further DRAWs will occur from this point.
2. If the triangle will not fit on the screen , the DRAW will draw a
figure , but one or more legs will be the wrong lengths .
Append ices
APPENDICES
205
APPEN DICES
Appendix 1.
DEC
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Decimal/Binary Conversion Chart
BINARY
00000000
00000001
000000 1 0
000000 1 1
00000 1 00
00000 1 0 1
00000 1 1 0
000001 1 1
00001 000
0000 1 001
0000 1 0 1 0
0000 1 0 1 1
0000 1 1 00
0000 1 1 0 1
00001 1 1 0
00001 1 1 1
0001 0000
0001 000 1
000 1 00 1 0
000 1 001 1
000 1 0 1 00
000 1 0 1 0 1
0001 0 1 1 0
0001 0 1 1 1
000 1 1 000
0001 1 00 1
0001 1 0 1 0
0001 1 01 1
0001 1 1 00
0001 1 1 0 1
0001 1 1 1 0
0001 1 1 1 1
001 00000
001 00001
001 000 1 0
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
001 0001 1
001 001 00
00 1 00 1 01
001 001 1 0
001 001 1 1
001 01 000
00 1 0 1 001
001 01 01 0
001 01 01 1
001 0 1 1 00
001 0 1 1 0 1
00 1 0 1 1 1 0
00 1 0 1 1 1 1
001 1 0000
001 1 0001
001 1 001 0
001 1 001 1
001 1 01 00
001 1 01 0 1
001 1 01 1 0
001 1 01 1 1
001 1 1 000
001 1 1 00 1
001 1 1 01 0
001 1 1 0 1 1
001 1 1 1 00
001 1 1 1 01
00 1 1 1 1 1 0
00 1 1 1 1 1 1
01 000000
01 000001
01 00001 0
01 0000 1 1
01 000 1 00
0 1 0001 01
01 0001 1 0
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
1 00
1 01
1 02
1 03
1 04
1 05
1 06
0 1 000 1 1 1
0 1 001 000
01 001 001
0 1 001 0 1 0
0 1 001 0 1 1
0 1 001 1 00
01 001 1 0 1
0 1 001 1 1 0
01 001 1 1 1
0 1 01 0000
0 1 0 1 0001
0 1 0 1 00 1 0
01 0 1 00 1 1
0 1 0 1 01 00
01 01 01 01
01 01 01 1 0
01 0 1 0 1 1 1
01 0 1 1 000
01 01 1 00 1
0 1 01 1 0 1 0
0 1 01 1 0 1 1
0 1 0 1 1 1 00
01 01 1 1 01
01 0 1 1 1 1 0
01 0 1 1 1 1 1
0 1 1 00000
0 1 1 0000 1
0 1 1 0001 0
01 1 0001 1
0 1 1 00 1 00
0 1 1 00 1 01
0 1 1 00 1 1 0
0 1 1 001 1 1
0 1 1 0 1 000
01 1 0 1 001
01 1 01 0 1 0
206
1 07
1 08
1 09
1 10
111
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
1 28
1 29
1 30
1 31
1 32
1 33
1 34
1 35
1 36
1 37
1 38
1 39
1 40
1 41
1 42
1 43
1 44
1 45
1 46
1 47
1 48
1 49
1 50
0 1 1 0 1 01 1
0 1 1 0 1 1 00
01 1 0 1 1 0 1
01 1 0 1 1 1 0
01 1 0 1 1 1 1
01 1 1 0000
0 1 1 1 0001
0 1 1 1 001 0
01 1 1 00 1 1
01 1 1 01 00
01 1 1 0 1 0 1
01 1 1 01 1 0
01 1 1 01 1 1
0 1 1 1 1 000
01 1 1 1 001
0 1 1 1 1 01 0
01 1 1 1 01 1
01 1 1 1 1 00
01 1 1 1 1 0 1
01 1 1 1 1 1 0
01 1 1 1 1 1 1
1 0000000
1 0000001
1 00000 1 0
1 00000 1 1
1 0000 1 00
1 0000 1 01
1 00001 1 0
1 0000 1 1 1
1 0001 000
1 0001 001
1 0001 0 1 0
1 000 1 0 1 1
1 000 1 1 00
1 000 1 1 0 1
1 0001 1 1 0
1 0001 1 1 1
1 001 0000
1 001 000 1
1 001 001 0
1 001 001 1
1 001 0 1 00
1 001 01 0 1
1 001 01 1 0
1 51 1 001 01 1 1
1 52 1 00 1 1 000
1 53 1 00 1 1 001
1 54 1 001 1 0 1 0
1 55 1 001 1 01 1
1 56 1 001 1 1 00
1 57 1 001 1 1 0 1
1 58 1 001 1 1 1 0
1 59 1 00 1 1 1 1 1
1 60 1 0 1 00000
1 61 1 0 1 00001
1 62 1 0 1 000 1 0
1 63 1 01 0001 1
1 64 1 01 001 00
1 65 1 01 001 01
1 66 1 0 1 00 1 1 0
1 67 1 0 1 001 1 1
1 68 1 0 1 01 000
1 69 1 0 1 01 001
1 70 1 0 1 0 1 0 1 0
1 71 1 01 0 1 0 1 1
1 72 1 01 0 1 1 00
1 73 1 0 1 0 1 1 0 1
1 74 1 01 0 1 1 1 0
1 75 1 0 1 0 1 1 1 1
1 76 1 0 1 1 0000
1 77 1 0 1 1 0001
1 78 1 0 1 1 00 1 0
1 79 1 0 1 1 00 1 1
1 80 1 01 1 0 1 00
1 81 1 0 1 1 0 1 0 1
1 82 1 0 1 1 0 1 1 0
1 83 1 0 1 1 01 1 1
1 84 1 0 1 1 1 000
1 85 1 01 1 1 00 1
1 86 1 0 1 1 1 0 1 0
1 87 1 0 1 1 1 0 1 1
1 88 1 01 1 1 1 00
1 89 1 0 1 1 1 1 0 1
1 90 1 0 1 1 1 1 1 0
1 91 1 0 1 1 1 1 1 1
1 92 1 1 000000
1 93 1 1 000001
1 94 1 1 00001 0
1 95
1 96
1 97
1 98
1 99
200
201
202
203
204
205
206
207
208
209
21 0
21 1
21 2
213
214
21 5
21 6
21 7
21 8
21 9
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
1 1 0000 1 1
1 1 0001 00
1 1 000 1 0 1
1 1 0001 1 0
1 1 0001 1 1
1 1 001 000
1 1 00 1 001
1 1 001 01 0
1 1 001 01 1
1 1 00 1 1 00
1 1 001 1 0 1
1 1 001 1 1 0
1 1 001 1 1 1
1 1 01 0000
1 1 01 0001
1 1 0 1 00 1 0
1 1 01 001 1
1 1 0 1 0 1 00
1 1 01 01 01
1 1 01 01 1 0
1 1 01 01 1 1
1 1 0 1 1 000
1 1 01 1 001
1 1 01 1 01 0
1 1 01 1 0 1 1
1 1 0 1 1 1 00
1 1 01 1 1 0 1
1 1 01 1 1 1 0
1 1 01 1 1 1 1
1 1 1 00000
1 1 1 0000 1
1 1 1 000 1 0
1 1 1 0001 1
1 1 1 00 1 00
1 1 1 001 01
1 1 1 001 1 0
1 1 1 001 1 1
1 1 1 0 1 000
1 1 1 0 1 00 1
1 1 1 0 1 01 0
1 1 1 0 1 01 1
1 1 1 0 1 1 00
1 1 1 0 1 1 01
1 1 1 01 1 1 0
APPENDICES
239
240
24 1
242
243
244
245
246
247
248
249
250
251
252
253
254
255
1 1 1 01 1 1 1
1 1 1 1 0000
1 1 1 1 0001
1 1 1 1 001 0
1 1 1 1 001 1
1 1 1 1 0 1 00
1 1 1 1 01 01
1 1 1 1 01 1 0
1 1 1 1 01 1 1
1 1 1 1 1 000
1 1 1 1 1 001
1 1 1 1 1010
1 1 1 1 1 01 1
1 1 1 1 1 1 00
1 1 1 1 1 1 01
1 1 1 1 1 110
11111111
207
APPENDICES
Appendix 11.
209
Color BASIC Graphics Commands
and Actions
CLS (c)
c is a color code of 0-8 . Clears all 5 1 2 bytes (64 by 32 pixels) of
text screen to specified color.
1 00 CLS U I l
'clear
sc reen
to
red
POINT (h,v)
h is the horizontal element number from 0 through 63 . v is the
vertical element number from 0 through 3 1 . Returns an argument for the
specified pixel at h , v . If the character position containing the pixel is in
the alphanumeric (text) mode , returns - 1 . If the character position
containing the pixel is in the graphics mode and the pixel is on, returns
the color code (c) of 1 through 8. If the character position is in the
graphics mode and the pixel is off (black) , returns a 0 .
1 00
I F P O I NT ( 32 t 1 5 l = - 1 THEN PR I NT
GRAPH I CS !
ELSE PR I NT " OK
II
" NOT
II
RESET (h,v)
h is the horizontal element number from 0 through 63 . v is the
vertical element number from 0 through 3 1 . The pixel at h, v is turned
off. A black color results.
1 0 0 R E S E T (Q) , 0 ) : R E S E T ( 6 3 , 3 1 l
' re s e t c o rn e r P i x e l s
SET (h,v,c)
h is the horizontal element number from 0 through 63 . v is the
vertical element number from 0 through 3 1 . c is the color code (see
CLS ) . Sets the pixel at h , v . If background color is other than black,
changes three adjacent pixels to the specified color. If background is
black, only the specified pixel is set to the color.
210
1 00 SET ( 63 1 0 ) : SET ( 0 13 1 )
' s e t c o rn e r P i x e l s
Color Codes (c)
O = black
1 = green
2 = yellow
3 = blue
4 = red
5 = buff
6 = cyan
7 = magenta
8 = orange
APPENDICES
Appendix 111.
21 1
Extended Color BASI C Graphics
Commands and Actions
CIRCLE (X,Y) ,R,C,HW,S,E
(X, Y) are the coordinates of the center of the circle or ellipse or arc .
R is the radius of the circle or ellipse or arc to be drawn . C is the color to
be used in drawing the outline and is optional . If not specified, the
current foreground color is used. HW is the ratio of height to width, from
0 to infinity . If not specified , 1 (circle) is used. S is the starting point for
an arc and E is the ending point for an arc . S and E may be 0 to 1 and are
optional . If not specified , a complete circle or ellipse is drawn .
1 00 C I RCLE ( 1 28 1 86 ) 120
' d raw c i rc l e of rad i us
1 10
20
in
c en t e r
C I RCLE < 1 28 186 ) 120 1 6
' d raw c Y an c i rc l e
1 20 C I RCLE ( 1 28 186 l 1 40 1 1 . 5
' d r a r,r e l l i p s e
(
1 30
C I RCLE
1 28 186 ) 140 1 12
1 40
C I RCLE ( 1 28 1 86 ) 1 40 1 1 1 0 1 . 5
' d r aw c i r c u l a r a r c
1 50 C I RCLE ( 1 28 1 86 ) 1 40 1 1 2 1 0 1 . 5
' d raw e l l i P t i c a l a rc
COLOR F,B
F is the foreground color from 0 to 8. B is background color from 0
to 8 . Foreground and background colors are set accordingly . Colors must
be in the current color set as defined by SCREEN .
212
1 00 COLOR 1 1 4
' s e t f o r e g r o un d
to red
to
g reen 1
b a c k g r o un d
DRAW "string"
The string is string of ORAW commands. See Chapter 7 .
GET (Xl,Yl)-(X2,Y2),A,G
(XI , YI ) is one comer of the screen area to be processed. (X2 , Y2) is
the opposite comer of the screen area to be processed. A is the name of
the array to be used to store graphics data from the GET. A must be
previously defined by a DIM statement. G is optional. When used ,
complete graphics detail will be stored in the array . GET stores graphics
data from the defined screen area into an array for later use by PUT.
1 00
C 50 1 50 ) - ( 60 1 6 0 l 1 Z Z 1 G
• get g raPh ics data
LINE (Xl,Yl)-(X2,Y2) ,PSET or PRESET,B or BF
(XI , YI ) is one end point of line on screen . (X2 , Y2) is the opposing
end point. If PSET is used, the line , box, or filled-in box will be the
current foreground color. If PRESET is used, the line, box , or filled-in
box will be the current background color. B or BF are optional . If neither
is used, a line will be drawn between XI , YI and X2 , Y2 . If B is used, a
box will be drawn with XI , YI and X2 , Y2 treated as opposite comers. If
BF is used, a filled-in box will be drawn with the color defined by PSET
or PRESET.
1 00 L I NE ( 50 1 5 0 ) - ( 80 1 8 0 ) 1 PSET
' d r a 1A1 l i n e
1 1 0 L I NE ( 50 1 50 ) - ( 80 1 8 0 ) 1 PRESET
'e rase l ine
1 20 L I NE < 50 1 50 ) - ( 80 1 8 0 ) 1 PSET 1 B
' d r aw b o x o u t l i n e
1 30 L I NE < 50 1 50 ) - ( 80 180 ) 1 PRESET 1 B
' e rase box o ut l ine
1 40 L I NE ( 50 1 50 ) - ( 80 1 8 0 ) 1 PSET 1 B F
' d r aw f i l l e d - i n b o x
APPENDICES
2 13
PAINT (X,Y),CP,CB
{X, Y) defines the point at which the color is to be started. CP is 0 to
8 and is the color for the PAINT. CB is 0 to 8 and is the border color at
which the painting is to stop. PAINTing with color proceeds until the
border color is encountered . The border must completely surround the
area in which PAINTing is to occur.
1 00
P A I NT
< 1 28 186 ) 1 7 1 8
' Paint
Marenta
un t i l
o r an re
b o rde r
PCLEAR N
This reserves N graphics pages of 1 536 bytes each. N is l to 8 . If
this command is never specified , the default number of pages reserved is
4 . No data is stored in the pages. (The pages are not cleared . )
1 00
P CLEAR
5
'clear 5
Pares
PCLS C
This clears the current graphics screen with specified color C. C is 1
through 8 . C must be in the current color set.
1 00
P C L S LI
'clear
sc reen
with
buff
PCOPY N TO M
This copies the contents of graphics page N to graphics page M . N
and M are I to 8 . The contents of N are not affected.
1 00
PCOPY
1
TO 5
' C O PY
Pare
1
to
5
PMODE M,P
M is 0 to 4 and specifies the graphic mode to be selected. P is 1 to 8
and specifies the graphics page to be displayed . If PMODE is never
specified, mode 0 and page I are used .
1 00
PMODE
3 12
'set
PMODE 3
and
Pare
2
PPOINT (X, Y)
This tests the point at {X,Y) and returns the color code of the point.
The color code w i l l be in the current color set.
214
1 00
'test
A = P PO I NT C 1 28 186 )
cente r
po int
PRESET (X, Y)
This resets the point at (X,Y) . The current background color is used
in the reset.
1 00
PRESET
< 1 28 1 86 >
' reset
c ente r
Point
PSET (X,Y)
This sets the point at (X,Y). The current foreground color is used in
the set.
1 00
PSET
( 1 28 1 86 )
'set
the
c ente r
Po int
PUT (XI, Yl)-(X2, Y2),A,(options)
(XI , YI) defines one corner of a screen area. (X2 , Y2) defines the
opposite corner. A defines an array previously used by a GET. See
Chapter 8 for options . Graphics data previously stored in array A is PUT
into defined screen area. Contents of array A are not affected.
1 00
PUT ( 80 1 80 ) - ( 80 180 ) 1 Z Z
' d i s P l aY g raph i c s d a t a
SCREEN T,S
This selects the text or graphics screen and color set . T is 0 if text
screen to be displayed or 1 if graphics screen is to be displayed. S is color
set, 0 or 1 .
1 00 SCREEN 1 1 1
' se l e c t g raph i c s
an d
color
set
0
Notes
1 . X (or XI or X2 ) is 0 to 255 .
2. Y (or Yl or Y2) is O to l 9 1 .
3 . C is 0 t o 8 , representing black, green , yellow, blue, red , buff,
cyan, magenta, or orange , respectively .
Appendices
215
Appendix 1 v . Color Computer Graph ics M odes
MODE
1
BASIC MODE
ALPHAN U M E R I C
NORMAL TEXT
DISPLAY FORMAT
ELEMENT FORMAT
ABCDEFGH
01234567
t-" '"'"""
•
•
POSITIONS
16
LINES
•
•
0
j
1 C H A R ACTER
POSITION
1•
•
•
•
•
•
•
12
P I X E LS
•
•
8 P I X E LS
BYTE MAPPING
MEMORY MAPPING
+o
LINE 1, CP 1
+l
LINE 1, CP 2
+32
LINE 2 , CP 1
+33
LINE 2, CP 2
�
+ 5 10
L I N E 16, C P 3 1
+511
L I N E 1 6 , C P 32
-
N O R M A L START
= 1 0 2 4 10
t-.
) 512
��
7
2:
s
0
II I I II I II
0
r�
BYTES
T H I S B I T IS S E T I F I N V E R T E D ,
R E S E T I F N O T I NV E R T E D
COLORS
BORDER
BLACK
CHARACTEWBACKGROUND
I F C S S = 0 AND I N V
=
0, G R E E N ON
=
1 , BLACK ON
BLACK
IF CSS = 0 AND I N V
GREEN
I F C S S = 1 AND I N V
BLACK
IF CSS = 1 AND I N V
ORANGE
=
=
0, O R A N G E ON
1 , BLACK ON
USE
Color BASIC and Extended Color BASIC both reset to green on black.
216
Appendices
MODE 2
BASIC MODE
SEM I G RAPHIC 4
USED BY S ET/RESET IN COLOR
BASI C A N D EXTEN D E D COLOR
BAS IC.
DISPLAY FORMAT
ELEMENT FORMAT
�
I
64 H O R I ZONTAL E L E M E N T S
" " " """' '°"".'"
"'I'"",
32
VE RTICAL
E L E MENTS
_
12
� ---+----+I
1 C H A RACTER
P O S I T I ON
·�
8
BYTE MAPPING
MEMORY MAPPING
+o
L I N E l , CP 1
+l
L I N E 1 , CP 2
��
+32
L I N E 2 , CP 1
+33
L I N E 2 , CP 2
+ 510
+511
<�
J 1 Jc J c Jc J�J�JI J5J
N O R M A L START
= 1 0 2 4 10
7
--t--_
�
> 5 1 2 BYTES
0
'---....--J ..._____,
COLOR
<<
L I N E 1 6 , CP 3 1
I F B I TS = O ,
E L EM E N T I S OFF,
I F = 1, O N
LINE 16, CP 3 2
COLORS
BORDER
CHARACTER/BACKGROUND
BLACK
CCC
000
001
010
01 1
1 00
1 01
1 10
111
GREEN
YELLOW
BLUE
RED
BUFF
CYAN
MAGENTA
ORANGE
USE
SET/RESET when in text display uses this mode in both Color BASIC and Extended
Color BASIC. Alphanumeric mode above and this mode can be used together
by storing proper bytes in text buffer. Graphics bytes will have bit 7 set.
Appendices
217
MODE 3
BASIC MODE
S E M I G RA P H I C 6
NOT I M P L E M E NTED. MUST B E SET
AS D E S C R I B E D U N D E R "USE."
DISPLAY FORMAT
ELEMENT FORMAT
�1
'"
' " ' "" " " " " " "
6 4 H O R I Z O N TA L E L E M E N TS
4
--
48
VERTICAL
E L E M ENTS
( 16 L I N E S )
j
1 C H A R AC T E R
POS I T I O N
�J
8
MEMORY MAPPING
+O
L I N E 1, C P 1
+l
L I N E I , CP 2
;�
+32
LINE 2 , CP 1
+33
L I N E 2 , CP 2
+ 510
+ 51 1
'�
BYTE MAPPING
r--_
SET START
AS R E Q U I R E D
0
7
i c ic ! � 1� 1 � 1 � 1 \ l 6 I
��
'--_,-/ '--����--'
> 5 1 2 BYTES
COLOR
«
L I N E 16, CP 3 1
IF B I TS = O ,
E L E M EN T IS O F F ,
I F = 1 , ON
L I N E 1 6 , CP 3 2
COLORS
BORDER
USE
4
CHARACTER/BACKGROUND
BLACK
cc
00
01
10
11
00
01
10
11
GREEN
YELLOW
BLUE
RED
BUFF
CYAN
MAGENTA
ORANGE
)
)
css
css
=
=
0
1
1 . A = P EEK (6531 4) : POKE 653 1 4, (A AND 7) + B + X where X = 0 for CSS
0 OR 1 6 for CSS 1 .
2. POKE 65476, 0 = POKE 65474, 0 : POKE 65472, 0.
3. Set START by POKEs to 65,478-65,491 . See Chapter 2.
4. Store bytes in 51 2-byte video display area as required.
218
Appendices
MODE 4
BASIC MODE
S EM I G RA P H I C 8
NOT IM PLEM ENTED. MUST BE S ET
AS DESCRIBED U N D ER "USE."
ELEMENT FORMAT
DISPLAY FORMAT
_--+_
ZONTAL ELEMENTS
64( 32HORICHARACTER
POSITIONS)
64 CAL
VERTI
ELEMENTS
(16 LI N ES) I CHARACTER
POSITION
MEMORY MAPPING
+o+I ROWROW A,A, LILINNEE II,, CPICP 2
+2 ROW A, LI N E I, CP 3
+32+33+31 ROWROWROW B,B,A, LILILINNNEEE I,II,, CP2CPCPI32
+128 ROWROW A,A, LILINNEE 2,2, CPICP2
+!29
+2046
+2047 ROWROW D,D, LILINENE 1166,, CPCP3132
�
;
ROW A
B
12
BYTE MAPPING
�
�
SET START
ASREQUI
RED
2048
BYTES
·r:1·1·1·1�111 ·1:f.
'I I I I I I I I }"
'I I I I I I I I �I...
I' I COLORI I I ION/OFFI I �I·"
0
'
•
•
•
� �
•
'
•
•
•
•
•
\
•
•
•
•
•
\
•
� '------....,,--
X
ELEMENT
�DON'STATE
T CARE
Appendices
Semlgraphlc 8 continued
COLORS
BORDER
CHARACTER/BACKGROUND
BLACK
CCC
000
001
010
01 1
1 00
1 01
110
111
GREEN
YELLOW
BLUE
RED
BUFF
CYAN
MAGENTA
ORANGE
USE
1.
2.
3.
4.
A = PEEK (6531 4) : POKE 653 1 4, (A AND 7) .
POKE 65475, 0 : POKE 65475, 1 : POKE 65472, 0.
Set START by POKEs to 65,478-65,491 . See Chapter 2.
Store bytes in 2048-byte video display area as required.
219
220
Appendices
MOOE 5
BASIC MODE
S EM I G RA P H I C 1 2
NOT I M PLEMENTED. MUST BE SET
AS DESCRIBED U N D ER "USE."
DISPLAY FORMAT
ELEMENT FORMAT
t+--+--
ZONTAL POSIELEMENTS
(6432 HORICHARACTER
TIONS!
96ELEMENTS
VERTI
C
AL
(16 LINES! I CHARACTER
POSI T I O N
12
�
BYTE MAPPING
MEMORY MAPPING
+O+
+2
+32+3+33I
+192
+193
+3070
+307
I
:
:!:.
I
ROWROW A,A, LILINNEE I, CPIGP 2
ROW A, LINE I, CP3
ROWROW A, LILINNEE I, CP32
ROW B, LINE CPICP2
ROWROW A,A, LILINNEE 2,2, GPCP2
ROWROW F,F, LILINNEE 1166,, CP31
CP32
I,
8,
I,
I,
I
:
8
SETREQUI
AS START
RED
3072
BYTES
ON /OFF
COLOR ELEMENT
STATE
•DON'T CARE
X
Appendices
Semlgraphlc 1 2 continued
CHARACTER/BACKGROUND
COLORS
BORDER
BLACK
CCC
000
001
01 0
01 1
1 00
101
110
111
GREEN
YELLOW
BLUE
RED
BUFF
CYAN
MAGENTA
ORANGE
USE
1.
2.
3.
4.
A = PEEK (6531 4) : POKE 6531 4, (A AND 7).
POKE 65477, 1 : POKE 65474, 0 : POKE 65472, 0.
Set START by POKEs to 65,478-65,491 . See Chapter 2.
Store bytes in 3072-byte video display area as required.
221
222
Appendices
MODE 6
BASIC MODE
S E M I G RAPHIC 24
NOT IM PLEM ENTE D. MUST BE S ET
AS DESCRIBED U N D E R "USE."
DISPLAY FORMAT
ELEMENT FORMAT
�
ROW
64 H O R I Z O N TA L E L E M E N T S ( 32 C H A R A C T E R POS I T I O N S )
192
VER T I C A L
E L E M ENTS
( 16 L I N E S )
12
m
1 CHARACTER
POSITION
K �_.c...<...'-477-.,.,..-;,..,j
L L---=c:-----":.L.<..::....:.L..LJ
MEMORY MAPPING
+O
ROW A, L I N E 1, C P l
+1
R O W A, L I N E 1 , C P 2
+2
ROW A , L I N E 1, C P 3
�
+31
ROW A, L I N E 1 , C P 3 2
+32
R O W B , LI N E 1, C P l
+33
+384
��
+ 3 85
+ 6 1 42
+ 6143
:
ROW B , L I N E 1 , C P 2
R OW A , L I NE 2 , C P l
R O W A , L I N E 2, C P 2
R O W L , L I N E 16, C P 3 1
R O W L, L I N E 1 6 , C P32
BYTE MAPPING
SET START
AS
R E Q U I RED
�
�
�
6144
BYTES
0
I
c
c
c
L
23
x
x
+O
B
1
c
c
c
L
21
L
20
x
x
+32
c
I
c
c
c
L
19
L
18
x
x
+64
D
I
c
c
c
L
17
L
16
x
x
+ 96
E
I
c
c
c
L
15
L
14
x
x
+ 128
F
I
c
c
c
L
13
L
12
x
x
+ 1 60
G
I
c
c
c
x
x
L
11
L
JO
+ 1 92
H
1
c
c
c
x
x
L
9
L
8
+224
I
c
c
c
x
x
L
7
L
6
+ 2 56
I
c
c
c
x
x
L
5
L
4
+ 2 88
I
c
c
c
x
x
L
3
+320
I
L
2
c
c
c
x
x
I
L
0
+352
A
K
L
L
22
L
'--...,---J �
COLOR
ON / O F F
ELEMENT
STATE
'
X • D O N T CARE
Appendices
Semlgraphlc 24 continued
COLORS
BORDER
CHARACTE�BACKG ROUND
BLACK
CCC
000
001
010
01 1
1 00
1 01
110
111
GREEN
YELLOW
BLUE
RED
BUFF
CYAN
MAGENTA
ORANGE
USE
1.
2.
3.
4.
A
PEEK (653 1 4) : POKE 6531 4, (A AND 7) .
POKE 65477, 1 : POKE 65475, 1 : POKE 65472, 0.
Set START by POKEs to 65,478-65,491 . See Chapter 2.
Store bytes in 61 44-byte video display area as required.
=
223
224
Appendices
MODE 7
BASIC MODE
G RAPHICS 64
x
64 F
NOT I M PLEMENTED. M UST B E S ET
AS DESCR I B E D U N D E R "USE."
ELEMENT FORMAT
DISPLAY FORMAT
64 C O L U M N S
,
4
4
4
4
FOUR
COLORS
64
ROWS
64
64
123
BYTE MAPPING
MEMORY MAPPING
+o
R O W 1 , COL 1 - 4
+1
ROW 1, COL 5 -8
+2
:
ROW 1 , C O L 9 - 1 2
+15
ROW l , C O L 6 1 - 6 4
+16
R O W 2 , COL 1 - 4
+ 1 0 22
+ 1023
R O W 6 4 , COL 5 7 - 6 0
,
0
SET START
AS R E Q U I R ­
ED OR U S E
CURRENT
GRAPHICS
PAGE
,
cc
cc
c c
cc
COL
N+3
1024
BY T E S
COL
ROW 64, COL 6 1 - 6 4
N+2
�--- C O L N + l
'----- C O L N
COLORS
CHARACTER/BACKGROUND
BORDER
G R E E N I F CSS
css
1
=
=
0, BUFF IF
cc
00
01
10
11
00
01
10
11
GREEN
YELLOW
BLUE
RED
BUFF
CYAN
MAGENTA
ORANGE
}
}
css - o
css - 1
Appendices
Graphics 64
x
225
64 F contin ued
USE
1 . A = PEEK (653 1 4) : POKE 653 1 4, (A AND 7) + 1 28 + C where C = 1 28
for CSS
1 or 0 for CSS
0.
2. POKE 65473, 1 : POKE 65474, 0 : POKE 65476, 0.
3. Set START by POK Es to 65,478-65,491 (see Chapter 2) or use current graphics
page (Extended Color BASIC).
4. Store bytes in 1 024-byte video display area as required.
=
=
Appendices
226
MODE 8
BASIC MODE
G RAPHICS 1 28
x
64 T
NOT I M PLEMENTED. M U ST B E SET
AS DESCRIBED U N D E R "USE."
ELEMENT FORMAT
DISPLAY FORMAT
�� &a tfil �:
1 2 8 COLUMNS
64
R O WS
2
2
2
2
2
2
2
TWO
COLO R S
64
128
123
BYTE MAPPING
MEMORY MAPPING
+o
R OW l , C O L l - 8
+ l
R O W 1 , COL 9 - 1 6
+2
R O W 1, COL 1 7 - 2 4
+15
ROW 1 , COL 1 2 0 -1 2 8
+ 16
R O W 2, C O L 1 - 8
+1022
+1023
�
'
ROW 6 4 , C O L 1 1 2 - 1 19
'
S E T START
A S REQU I R ­
E D OR USE
CURRENT
GRAPHICS
PAGE
COL N + 7
1'
COL N+6
1024
BYTES
'---- COL N +5
�--- COL N+4
'----- COL N +3
ROW 6 4 , COL 1 2 0 - 1 2 8
1'
�------ COL N +2
'----- COL N + l
'------ COL N
COLORS
CHARACTER/BACKGROUND
BORDER
G R E E N IF CSS = 0 , BUFF IF
css = 1
c
0
1
0
1
BLACK
GREEN
BLACK
BUFF
css
=
0
css
=
1
USE
1 . A = PEEK (653 1 4) : POKE 653 1 4, (A AND 7) + 1 28 + 1 6 + C where
C
8 for CSS = 1 or 0 for CSS
0.
2. POKE 65473, 1 : POKE 65474, 0 : POKE 65476, 0.
3. Set START by POKE to 65,478-65,491 (see Chapter 2) or use current graphics
page (Extended Color BASIC).
4. Store bytes in 1 024-byte video display area as required.
=
=
Appendices
9
MODE
G RA P H I CS 1 28
x
64 F
NOT I M PLEMENTED. M UST BE SET
AS DESCR I B E D U N D E R "USE."
DISPLAY FORMAT
ELEMENT FORMAT
1
2
3
128 C O L U M N S
64
R OWS
FOUR
COLORS
64
128
123
MEMORY MAPPING
+O
R O W 1 , COL 1 - 4
+1
ROW 1 , COL 5 - 8
+ 2
R O W 1, COL 9- 1 2
�
+31
ROW 1 , C O L 6 1 - 6 4
+ 32
ROW 2, COL 1 - 4
'
+ 20 4 6
ROW 6 4 , C O L 57-60
+2047
ROW 64, COL 6 1 - 6 4
.
BYTE MAPPING
SET START
AS R E Q U I R ­
E D OR USE
C U R RENT
GRAPHICS
PAGE
�
0
cc
cc
cc
cc
2048
BYTES
."
COLORS
CHARACTER/BACKGROUND
BORDER
G R E E N IF CSS
css
=
1
227
BASIC MODE
0 , BUFF I F
cc
00
01
10
11
00
01
10
11
GREEN
YELLOW
BLUE
RED
BUFF
CYAN
MAGENTA
ORANGE
}
}
css
=
0
css
=
1
228
Appendices
Graphics 128
x
64 F continued
USE
1 . A = PEEK (6531 4) : POKE 6531 4, (A AND 7) + 1 28 + 32 + C where
C = 8 FOR CSS = 1 or 0 for CSS
0.
2. POKE 65472, 0 : POKE 65475, 0 : POKE 65476, 1 .
3. Set START by POKEs to 65,478-65,491 (see Chapter 2) or use current graphics
page (Extended Color BASIC).
4. Store bytes in 1 024-byte video display area as required.
=
Appendices
MODE
10
BASIC MODE
G RA P H I C S 1 28
x
96 T
P M O D E 0 ( Ext) OR "USE."
DISPLAY FORMAT
1 2 8 C OL U M N S
TWO COLORS
BY 96
ELEMENT FORMAT
ROWS,
2
2
M EMORY MAPPING
BYTE MAPPING
1536 BYTES. EACH BYTE HOLDS 8
C OL U M N S . S E T START OR USE PAGE.
lcl cl c l cl c l clc l
0
7
COLORS
BORDER
CHARACTER/BACKGROUND
G R E E N OR B U F F
0
0
=
=
BLK 1
BLK 1
=
=
G A N I F CSS = 0
B U F F IF CSS
1
USE
A
PEEK (6531 4) : POKE 6531 4, (A AND 7) + 1 28 + 32 + 1 6 + C
POKE 65476, 0 : POKE 65475, 1
POKE 65473, 1
=
=
=
229
230
Appendices
MODE 1 1
G RAPH ICS 1 28
BASIC MODE
x
96 F
DISPLAY FORMAT
1 2 8 C O LU M N S BY 96 R OWS,
FOUR C O L O R S
MEMORY MAPPING
3072 BYT E S. EACH BYTE HOLDS 4
C O L U M N S . S E T STA R T OR U S E PAGE.
PMODE 1 ( Ext) OR "USE."
ELEMENT FORMAT
Same as M ode 1 0
BYTE MAPPING
I
cc
cc
cc
cc
0
I
COLORS
BORDER
G R E E N OR B U FF
}
}
CHARACTER/BACKGROUND
00
GREEN
01 = YELLOW
1 0 = BLUE
11
RED
00 = BUFF
01
CYAN
1 0 = MAGEN TA
1 1 = ORANGE
=
=
=
(CSS OJ
(CSS 1 )
USE
PEEK (653 1 4) : POKE 6531 4, (A AND 7) + 1 28 + 64 + C
A
POKE 65477, 1 : POKE 65474, 0 : POKE 65472, O
=
Appendices
MODE
12
G RAPH ICS 1 28
BASIC MODE
x
1 92 T
DISPLAY FORMAT
PMODE 2 ( Ext) OR "USE."
ELEMENT FORMAT
128 C O L U M N S BY 192 R O W S ,
TWO C O L O R S
M EMORY MAPPING
BYTE MAPPING
3 0 7 2 B Y T E S . E AC H B Y T E H O L D S 8
COLU M N S . S E T STA R T OR USE P A G E .
COLORS
BORDER
CHARACTE�BACKGROUND
G R E E N OR B U FF
SAME AS 1 28
x 96
T
USE
A
PEEK (6531 4) : POKE 653 1 4 , (A AND 7) + 1 28 + 64 + 1 6 + C
POKE 65477, 1 : POKE 65474, 0 : POKE 65473, 1
=
231
232
Appendices
MODE 1 3
G RAPH ICS 1 28
BASIC MODE
x
1 92 F
DISPLAY FORMAT
1 2 8 C O L U M N S BY 1 9 2 ROWS,
FOUR C O L O R S.
MEMORY MAPPING
6 1 4 4 B Y T E S. E A C H BYTE HOLDS 4
C O L U M NS. S E T START OR USE PAGE.
P M O D E 3 ( Ext) OR "USE."
ELEMENT FORMAT
Same as M ode 1 2
BYTE MAPPING
I
cc
cc
cc
cc
0
I
COLORS
BORDER
G R E E N OR BUFF
CHARACTER/BACKGROUND
SAME AS 1 28
x
96
F
USE
A
PEEK (6531 4) : POKE 653 1 4, (A AND 7) + 1 28 + 64 + 32 + C
POKE 65477, 1 : POKE 65475, 1 : POKE 65472, 0
=
Appendices
MODE
14
G RAPH ICS 256
BASIC MODE
x
1 92 T
DISPLAY FORMAT
PMODE 4 ( Ext) OR "USE."
ELEMENT FORMAT
256 C O L U M N S BY 192 ROWS,
T W O C O LO R S .
MEMORY MAPPING
BYTE MAPPING
6 1 4 4 BYT ES. E A C H BYTE H O L D S 8
COLU M N S. S E T STA R T OR U S E PA G E .
COLORS
BORDER
CHARACTE�BACKGROUND
G R E EN OR B U FF
SAME A S 1 28
x
96
T
USE
PEEK (653 1 4) : POKE 6531 4, (A AND 7) + 1 28 + 64 + 32 + 1 6 + C
A
POKE 65477, 1 : POKE 65475, 1 : POKE 65472, 0
=
233
Index
235
I n d ex
ACTION items, 1 52
A N D, 1 53
N OT, 1 53
OR, 1 53
PRES ET, 1 53
PSET, 1 52
Address s pace, 1
American Standard Code for
I n format ion I nterchange
(ASCI I), 9, 1 32
A N D , 1 53
A l p h a n u meric characters i n
graphics modes, 1 6 1
A l p h a n u meric mode, 6
inve rted, 7
non-i nverted, 1 1
A l pha sem i g ra p h i c mode, 7
A n i mation, 66, 1 39, 1 43, 1 78
A n g l e command (A), 1 30, 1 90
Arcs , d raw i ng , 1 1 3, 1 63
A rrays, 1 45, 1 76
RAM s pace for, 1 49
two-d i mension a l , 1 76
A s pect rati o, 1 08
Assembly l an g u age, 69
Automat i c erase, 1 77
Bar graphs, 61
BAS I C i nterpreter, 3, 12
Bit, 2
most s i g n i ficant, 1 0, 24
B l a n k command (B), 1 27
B l a n k l i ne, d raw i ng, 1 1 9
Border out l i ne, d raw ing, 1 65
Boxes:
d raw i n g , 1 03
d raw i n g f i l l ed- i n , 1 04
Byte, 2
C I RCLE command, 99, 1 05, 1 63,
1 67
defau lt va l u e of, 1 1 7
CI RCLE coord i nates, convert i ng to,
1 13
C i rcles:
d rawi ng, 1 05, 1 66
f i l l i ng i n , 1 1 1
C LS command, 53
format for, 56
Color BAS I C, 53, 69
Color code, 56
COLOR command, 73, 82
Color command (C), 1 28
Color set, 74
Color set select (CCS) s i g n a l , 34
Colors:
background, 82
border, 82
chan g i n g , 73
foreground, 82
Concatenat ion, 65, 1 32
Coord i nates, 91
Cartes ian, 91
convert i n g , 92
D I M statement, 1 46
values for, 1 50
Dot-mat rix characters, 6, 1 6 1
DRAW command, 99, 1 6 1 , 1 72, 1 86,
1 89, 1 90
format for, 1 20
motion, 1 21
mode, 1 2 1
sca l i n g , 1 34
S option, 1 34
E l l i pse, 1 09
draw i ng, 1 67
Eng i ne, an imation of, 66
Extended Color BASIC, 42, 73, 85
i n itial izat ion of, 73
236
Index
G ET/PUT command, 99, 1 39, 1 43,
1 76
format for, 1 49, 1 51
Graphics generator chip, 1
G raphics matrix, 85
G raph ics modes, 1 , 6, 7, 73
alphanu meric characters i n , 1 6 1
border and color set for, 33
chang i ng , 1 74
memory req u i rements for, 31 , 35
resoluti ons of, 85
video memory mapping i n , 34
64 x 64 F, 37
1 28 x 64 T, 39
1 28 x 64 F, 40
G raphics pages, 49
memory location of, 77
Height : w i dth ratio, 1 08, 1 67
H i gh-reso l ution mode, 4
I ndex ing, 1 76
mov i ng f i g u res by, 1 78
I n p ut-output addresses, 3
L I N E command , 99, 1 0 1 , 1 7 1 , 1 85,
1 88
col ors i n , 1 02
d i rection of, 1 05
speed of, 1 0 1 , 1 05
Li nes, d rawi n g , 1 00, 1 1 9, 1 7 1 , 1 72
Low-resolution mode, 4
M EM command, 1 48
Memory mapping, 1 , 75
M i x i n g a l p h a n u merics and
g raphics, 64, 1 68
M ost s i g n i ficant bit, 1 0, 24
M oves:
absol ute, 1 23
f i g u re, 1 76, 1 78
rel at ive, 1 23
N o n-ASC I I codes, 1 32
NOT, 1 53
No Upd ate com mand (N), 1 29
Octagon, d raw ing, 1 80
OR, 1 53
PAINT command, 99, 1 39, 1 86
format for, 1 39
leaking, 1 4 1
s peed of, 1 41
PCLEAR com m and, 49, 73, 79
defau lt value of, 79
PCLS command, 73, 80, 1 78
PCOPY command, 73, 80
Pento m i no, 1 90
Pixel (pi ctu re e lement), 6
Plott ing, 90
s i ne g raph, 94
PMODE command, 36, 73, 79
default val u e of, 79
format for, 36
PMODE 0, 42, 74
PMODE 1 , 43, 74
PMODE 2, 44, 74
PMODE 3, 44, 74
PMODE 4, 45, 74
other colors i n , 1 82
POI N T command, 53
format for, 53
PPO I NT command, 85
format for, 89
speed of, 89
PRESET command, 85
format for, 88
speed of, 90
PSET command, 85, 1 82
format for, 87
speed of, 90
Rad ians, 95
Random-access memory
(RAM), 1 , 3, 75
Rectang les:
d raw i n g f i l led- i n , 1 83, 1 85
d ra wing outl i ne of, 1 88, 1 89
Read-on ly memory (ROM), 1 , 3
cartridge, 3
RESET com mand, 53
format for, 58
speed of, 59
typical uses of, 61
Resol utions, 4
chang i n g , 73
speeds i n , 6
tradeoffs i n , 5
Rotat ion, f i g u re, 1 90
Scale d rawi ng , 1 1 9
SCRE EN command, 73, 74, 78
format for, 33
Screen location, chang ing, 73
Sem igraphics modes, 1 3
Index
Sem i g raph ic 4 mode, 1 3, 1 5, 53
col ors i n , 1 5
Sem i g raph ic 6 mode, 1 3, 1 7
colors i n , 1 8
mapp i n g for, 1 7
Semigraphic 8 mode, 1 3, 20
colors i n , 21
memory req u i rements of, 20
S ET/RESET, 1 92
Semigraphic 1 2 mode, 1 3, 23
colors i n , 24
memory req u i rements of, 23
SET/RESET, 1 94
Semigraphic 24 mode, 1 3, 26
SET/RESET, 1 96
SET com mand, 53
format for, 58
speed of, 59
typ ical u ses of, 6 1
Spec i a l characters, 1 6 1
Squ are, d raw i n g , 1 98
Strings, 1 32
character, 65
command, 1 1 9
concatenated, 1 33
constant, 1 32
tem porary, 1 33
Stri pes, 1 82
Subst r i n g s , 1 32, 1 33
command, 1 1 9
Text screen , 76
Tria n g l e , d raw i ng , 201
Trigonometric representat i o n , 1 1 4
USR ca l l , 70
V ideo d i s p l ay generator (VDG), 6,
1 6, 33, 73
Video memory, 3
cha ng i ng start of, 200
X (execute) command, 1 33
23 7
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement