
TABLE OF MODES
AND
SCREEN FORMATS
Vert.
(Rows)
Vert.
(Rows)
RAM
Gr.
Mode
Horiz.
Split
Full
II
Of
Requir
ed
Mod
e Ty
pe
(Column
s)
Scre
en
Screen
Colors
(B
y tes)
0
TE
XT
40 -
24
2
993
1
TEXT
20
20
24
5
513
2
TEXT
20
10
12
5
26
1
3
GRA PHI
CS
40
20
24
4 2
73
4
GR
APHICS
80
40
48
2
537
5
GRA PHI
CS
80
40
48
4
1
017
6
GR
A PHI
CS
160
80
96
2
2025
7
GR
APHI
CS
160
80
96
4
3945
8
GRAPH
ICS
320
1
60
1
92
1/2
7900
MODE, SET COLOR, COLOR TABLE
SETC
OLOR
(aexpl)
De
fault
Mode or
C
olor
C
olo
r
C
ol
ors
Co
nditi
on
Re
gi
st er No .
(aex
p)
D ESC RIP
TION AN
D COMMENTS
0 COLOR data
-
LIGHT BLUE MODE 0 a
nd
1 ac
tu
ally
Cha
ra
cter
luminance (sa
m e color as
bac
kground
)
DARK BLUE ALL
TEXT
2
determines
Back
ground
WINDOWS
3
ch
aracter
to
-
BLACK
4
be plot
ted
Borde1·
ORANGE
0 COLOR
data
Cha1·acter
LI
GHT
GREEN
MODES
1 1
actually
determine
s Ch
aracte
r
DARK BLUE
a
nd
2
cha
ra
cter
to
be Ch
aracter
RED 2
3 plott
ed
Char
acte
r
BL
ACK
(
Text
Modes)
4
Backgro
und, Bord
er
ORANGE
0 1
Graphics
poin
t
LIGHT GREEN MODES
3,
5, 1 2
Graphi
cs
poin
t
DARK BLUE
and
7 2
3
Graph
ics
poi
nt
(Four-color
3
-
BLACK
Mode
s)
4 0
Gr a
phics
point
(bac
kground
defa
ult
), Border
ORANGE
MODES 4
0 1
Grap
hics
point
an d 6 1
-
(Two-color
2
-
Modes)
3
-
BLACK 4 0
Graphi
cs
point (background default),
Bor
der
LIG
HT GREEN
0 - -
DARK BLUE
1
1
Graphics p
oin
t lum i
nan
ce
(sa
me
col
or
as background)
MODE 8
2
0
Graphi
cs
poi
nt
(ba
ckgroun
d de liiUlt )
(1 Col
or
3
-
BLACK 2 Lumin
ances)
4
Bor
der

TERMINOLOGY
1
GENERAL
INFORMATION
This
section
explains
BASIC
terminology,
special
notations, and
abbreviation
s
used
in
this
manual,
and
the
special
keys
on
the
AT
ARI 400™
and
AT
ARI
800
™
Personal
Computer
Systems
keyboard
.
It
also
points
to
other
sections
where
BASIC
commands
deal
with
specific
applications.
BASIC:
Beginner's
All-purpose
Symbolic
Instruction
Code.
BASIC
Keyword:
Any
reserved
word
"legal" in
the
BASIC
language.
May
be
used
in a statement, as a command,
or
for
any
other
purpose.
(See
Appendi
x A
for
a list
of
all
"reserved
words"
or
keywords
in
AT
ARI BASIC.)
BASIC
Statement:
Usually
begins
with a keyword, like
LET,
PRINT,
or
RUN.
Constant:
A
constant
is a
value
expressed
as a number
rather
than
represented
by a variable
name. For
example,
in
the
statement
X =
100
, X is a v
ariable
and
100
is a constant.
(See
Variable.)
Command
String:
Multiple commands
(or program statem ents) plac
ed
on the
same
numbered
line
separated
by
colons.
Expression:
An expression
is i
my legal combination
of variables
, c
onstan
ts,
operators,
and
functions
used
together
to
compute a value.
Expressions
can
be
either
arithmetic,
logical,
or
string
.
Function:
A
function
is a
computation
built
into
the
computer
so
that
it
can
be
called
for
by
the
user
's
program. A function
is
NOT
a
statement
; it
is
part
of
an
expression.
It
is really a subroutine used
to comput
e a value which
is
then
"returned"
to
the
main
program
when
the
subroutine
returns.
COS (Cosine),
RND
(random),
FRE
(unused
memory
space),
and
INT
(integer) are examples
of
functions. In
man
y cases the v
alue
is simpl
y as
sign
ed to a variabl
e (stor ed
in
a
var
iable)
for
lat
er use.
In
other cas
es
it
may
be
print
ed
out
on the
scr
een
im-
mediately.
See Section 6
for
more
on
functions.
Examples
of
functions
as
they
might
appear
in
programs
are:
10
PF.:HH
F.l[l(
0)
(
print out
the
random
numb
er ret
urn
ed)
(add
the
value
re-
return
ed to 100 a
nd
sto
re the tota
l in
variable
X)
General Information 1

2 Gene
ral
Inf
ormation
Logical
Line: A logical
line
consists
of
one
to
three
physical
lines,
and
is
ter-
minated
either
by
a l;i#iii;lli
or
automatically
when
the
maximum
logical
line
limit
is
reached.
Each
numbered
line
in
a BASIC
program
consists
of
one
logical
line
when
displayed
on
the
screen.
When
entering a line
which
is
longer
than
one
physical
line,
the
cursor
will
automatically
go
to
the
beginning
of
the
next
physical
line
when
the
end
of
the
current
physical
line
is
reached. Ifi@ii!;lllis
not
entered,
then
both
physical
lines
will
be
part
of
the
same
logical
line.
Operator:
Operators
are
used
in
expressions.
Operators
include
addition
( + ),
subtraction (-),
multiplication ( *
),
division (/), exponentiatinn
(A),
greater
than
(>), less
than
(<),equal
to
(=),greater
than
or
equal t
o(>=),
less
than
or
equal to
(
<,:::
),
and
not equal
to
( < >
).
The
logical
keywords
AND,
NOT
and
OR
are
also
operators.
The + and -operators
can
also
be
used
as
unary
operators; e.g.,
-3.
Do
not
put
several
unary
operators
in a row;
e.g.,--3, as
the
computer
will
in-
terpret
it
incorrectly.
Physical
Line:
One
line
of
characters
as
displayed
on a television
screen.
String:
A
string
is a
group
of
characters
enclosed
in
quotation
marks.
"ABRACADABRA"
is a
string.
So
are "ATARI
MAKES
GREAT
COMPUTERS"
and
"123456789"
. A
string
is
much
like a constant,
as
it
too,
may
be
stored
in
a
variable
. A
string variable
is
different,
in
that
its
name
must
end
in
the
character$.
For
example,
the
string
"AT
ARI
800"
may be
assigned
to a variable
called
A$
using
(optional)
LET
like
this:
10
LET
A$="ATAF.J
8H0"
OR
(note quot
ation
marks)
(LET is optional;
the
quotes are required.)
Quotation
marks
may
n
ot
be
used
within a string.
However, the
closing
quota-
tion
can
be
omitted
if
it
is
the
last
character
on a logical
line.
(See
Section
7 -
STRINGS).
Variable:
A
variable
is
the
name
for a numerical
or
other
quantity
which
may
(or
may
not)
change.
Variable
names may be
up
to
120
characters
long.
However, a variable
name
must
start
with
an
alphabetic
letter,
and may
contain
only
capital
letters
and
numerical
digits.
It
is adv
isable
not
to
use a ke
yw o
rd
as a
variable
name
or
as
the
first
part
of
a va
riable
name
as
it
m ay
not
be
interpreted
correctly.
Examples
of storing a value
in a variable:
LETC
123Dt..J8=
1 .
234
LETI
.
.JARIABLE112=267
.
543
LETA=1
LET
F5TH=6
. 5
LET
TH
J::;HO = 59
.
:::£19
Note:
LET
is
optional
and
may
be
omitted)
Variable
Name
Limit:
ATARI BASIC
limits
the
user
to
128
variable
names
. To
bypass
this
problem, use
individual
elements
of
an
array instead
of
having
separate
variable
names.
BASIC
keeps
all
references to a variable which
has
been
deleted
from a program, and
the
name
still
remains
in
the
variable
name
table.

ABBREVIATIONS
USED IN THIS
MANUAL
4 General Information
Items
in
Brackets:
Brackets, [ ],
contain
optional
items
which
may
be
used
,
but
are
not
required.
If
the
item
enclosed
in
brackets
is
followed
by
three
dots
[exp, ... ],
it
means
that
any
number
of
expressions
may
be
entered,
but
none
are
required.
Items
stacked
vertically
in
braces:
Items
stacked
vertically
in
braces
indicate
that
any
one
ofthe
stacked
items
may
be
used,
but
that
only
one
at a time
is
per-
missible.
In
the
example
below,
type
either
the
GOTO
or
the
GOSUB.
{
GOTO}
100
GOSUB
2000
Command
abbreviations
in
headings:
If a command
or
statement
has
an
ab-
breviation
associated
with
it,
the
abbreviation
is
placed
following
the
full
name
of
the
command
in
the
heading;
e.g., LET (L.).
The
following
table
explains
the
abbreviations
used
throughout this
manual:
avar
svar
mvar
var
aop
lop
aexp
lexp
TABLE
1.1
ABBREVIATIONS
Arithmetic
Variable:
A
location
where a numeric
value
is
stored.
Variable
names
may
be
from 1 to
120
alphanumeric
characters,
but
must
start
with
an
alphabetic
character,
and
all
alpha
characters
must
be
unreversed
and
upper
case.
String
Variable:
A
location
where a string
of
characters
may
be
stored.
The
same
name
rules
as
avar
apply,
except
that
the
last
character
in
the
variable
name
must
be a$.
String
variables
may
be
subscripted.
See Section 7,
STRINGS.
Matrix
Variable:
Also
called
a Subscripted Variable.
An
ele-
ment
of
an
array
or
matrix.
The
variable
name
for
the
array
or
matrix
as a whole
may
be
any
legal variable
name
such
as
A,
X,
Y,
ZIP,
or
K.
The
subscripted
variable
(name
for
the
particular
element)
starts
with
the
matrix variable,
and
then
use
s a
number,
variable,
or
expression
in
parentheses
immediately
following
the
array
or
matrix
variable.
For
example,
A(ROW),
A(1),
A(X + 1).
Variable:
Any
variable.
May
be
mvar,
avar,
or
svar
.
Arithmetic
operator.
Logical
operator.
Arithmetic
Expression:
Generally
composed
of a variable
,
function,
constant,
or
two
arithmetic
expressions
separated
by
an
arithmetic
operator
.
Logical
Expression:
Generally composed
of
two
arithmetic
or
string
expressions
separated
by a logical
operator.
Such
an
ex-
pression
evaluates
to
either
a 1 (logical
true)
or
a 0 (logical false).
For
example,
the
expression
1<
2 ev
aluates
to
the
value 1 (true)
while
the
expression
"LEMON" = "ORANGE"
evaluates
to a zero
(false) as
the
two
strings
are
not
equal.

OPERATOR
PRECEDENCE
AND
OR
Logical
AND
Logical OR
Examples:
10
IF
A=12
AND
T=0
THEN
F'RWT
"Q)00
11
Both expressions
must
be true before GOOD is
printed.
10
A=(C>l)
AND
(N<1)
10
A =
(C+l)
OR
Ol-1)
Hi
A =
NOT<
C+
1 )
If
both
expressions
true,
A= + 1;
otherwise
A=O.
If
either expression
true, A=
+
1;
otherwise
A=O.
If
expression is false,
A= + 1;
otherwise
A=
0.
The
rest
of
the
binary
operators
are
relational.
<
The
first
expression
is less
than
the
second
expression.
>
The
first
expression
is
greater
than
the
second.
-
The
expressions
are
equal
to
each
other.
< =
The
first
expression
is less
than
or
equal
to
the
second.
> =
The
first
expression
is
greater
than
or
equal
to
the
second.
<
>The
two
expressions
are
not
equal
to
each
other.
These
operators
are
most
frequently
used
in
IF/THEN
statements
and
logical
arithmetic.
Operations
within
the
innermost
set
of
parentheses
are
performed
first
and
pro-
ceed
out
to
the
next
level.
When
sets
of
parentheses
are
enclosed
in
another
set,
they
are
said
to
be
"nested".
Operations
on
the
same
nesting
level
are
performed
in
the
following
order:
Highest
<,
>,=,<=,
>=,<->
precedence
* ' I
+,
-
Lowest
precedence
NOT
AND
OR
Relational
operators
used
in
string
expres-
sions.
Have
same
precedence
and
are
per-
formed
from
left
to
right.
Unary
minus
Exponentiation.
Multiplication
and
division
have
the
same
precedence
level
and
are
performed
from
left
to
right.
Addition
and
subtraction
have
the
same
precedence
level
and
are
performed
from
left
to
right.
Relational
operations
in
numeric
expressions
have
the
same
precedence
level
from
left
to
right.
Unary
operator
Logical
AND
Logical OR
General
Information
7

FOR
(F.),
TO,
STEP/NEXT
(N.)
4
PROGRAM
STATEMENTS
This
section
explains
the
commands
associated
with
loops,
conditional
and
un-
conditional
branches,
error
traps,
and
subroutines
and
their
retrieval.
It
also ex-
plains
the
means
of
accessing
data
and
the
optional
command
used
for
defining
variables.
The
following
commands
are
described
in
this
section:
FOR,
TO,
STEP/NEXT
GOSUB/RETURN
GOTO
IF/THEN
ON,GOSUB
ON,GOTO
POP
RESTORE
TRAP
Format:
FOR
avar = aexp1
TO
aexp2
[STEP
aexp3]
NEXT
avar
Examples:
FOR X = 1
TO
10
NEXT X
FOR Y = 10
TO
20
STEP 2
NEXT Y
FOR INDEX
= Z
TO
100 * Z
NEXT INDEX
This
command
sets
up a loop
and
determines
how
many
times
the
loop
is exe-
cuted.
The
loop
variable
(avar) is
initialized
to
the
value
of
aexp1.
Each
time
the
NEXT
avar
statement
is
encountered,
the
loop
variable
is
incremented
by
the
aexp3
in
the
STEP
statement.
The
aexp3
can
be
positive
or
negative
integers,
decimals,
or
fractional
numbers.
If
there
is
no
STEP
aexp3
command,
the
loop
increments
by
one.
When
the
loop
completes
the
limit
as
defined
by
aexp2,
it
stops
and
the
program
proceeds
to
the
statement
immediately
following
the
NEXT
statement;
it
may
be
on
the
same
line
or
on
the
next
sequential
line.
Loops
can
be
nested,
one
within
another.
In
this
case,
the
innermost
loop
is
com-
pleted
before
returning
to
the
outer
loop.
The
following
example
illustrates
a
nested
loop
program.
10
FOF.:
>=:=
1
TO
3
:::IJ
PF.:HH 110UTER
LOOP"
30
Z=f1
40
Z=Z+2
50
FOP
'·.1-i
1-1
6~3
PF.:It·H
II
7f1
t·~E>::T
'··'
I
:::0
t·4E>::T
>=:
90
am
TO
C" ,-......
~:,
-,
·-'
.::
I t.:-
.::..
I
Nt·iE~:
LOOP
n
Figure
4-1.
Nested
Loop
Program
Program
Statements
15

GOSUB (GOS.)
RETURN (RET.)
16
Program Statements
In
Figure
4-1,
the
outer
loop
will
complete
three
passes
(X
= 1
to 3 ).
However,
before
this
first
loop
reaches
its NEXT X
statement,
the
program
gives
control
to
the
inner
loop. Note
that
the
NEXT
statement
for
the
inner
loop
must
precede
the
NEXT
statement
for
the
outer
loop.
In
the
example,
the
inner
loop's
number
of
passes
is
determined
by
the
STEP
statement
(STEP
Z).
In
this
case, Z
has
been
defined
as 0,
then
redefined
as Z +
2.
Using
this
data,
the
computer
must
complete
three
passes
through
the
inner
loop
before
returning
to
the
outer
loop.
The
aexp3
in
the
step
statement
could
also
have
been
defined
as
the
numerical
value
2.
The
program
run
is
illustrated
in
Figure
4-2.
OUTEF.:
LOOP
I
t·~t·-IEF.:
LOOF'
I
t-~t-~EF.:
LOOP
I
t-~HEP
LOOP
OUTEP
LOOF'
I
t·~t-lE~:
LOOP
I
t-~t-~EP
LOOP
I
t-~t-~ER
LOOP
OUTEP
LOOP
IHt·4ER
LOOP
I
t·4t-~EF.~
LlJOP
I
t·~HE~~
LOOP
Figure
4-2.
Nested
Loop
Execution
The
return
address
for
the
loops
are
placed
in
a special
group
of
memory
ad-
dresses
referred
to
as a stack.
The
information
is
"pushed"
on
the
stack
and
when
used,
the
information
is
"popped"
off
the
stack
(see
POP.)
Format:
GOSUB
lineno
lineno
RETURN
Example:
100
GOSUB
2000
2000 PRINT "SUBROUTINE"
2010 RETURN
A
subroutine*
is a
program
or
routine
used
to
compute a certain
value, etc.
It
is
generally
used
when
an
operation
must
be
replaced
several
times
within a pro-
gram
sequence
using
the
same
or
different
values.
This
command
allows
the
user
to
"call"
the
subroutine!,
if
necessary.
The
last
line
ofthe
subroutine
must
contain
a RETURN
statement.
The
RETURN
statement
goes
back
to
the
physical
line
following
the
GOSUB
statement.
Like
the
preceding
FOR/NEXT
command,
the
GOSUB/RETURN
command
uses a
stack
for
its
return
address.
If
the
subroutine
is
not
allowed
to
complete
normally;
e.g., a GOTO
lineno
before
a RETURN,
the
GOSUB
address
must
be
"popped"
off
the
stack
(see
POP)
or
it
could
cause
future
errors.
• Generally, a
subroutine
can
do
anything
that
can
be
done
in a program.
It
is
used
to
save
memory
and
program-entering
time,
and
to
make
programs
easier
to
read
and
debug.

GOTO
(G.)
To
prevent
accidental
triggering
of a subroutine
(which
normally
follows
the
main
program),
place
an
END
statement
preceding
the
subroutine.
The
follow-
ing
program
demonstrates
the
use
of
subroutines.
H3
PRH-H
")"
:::·r_-1
:;,
.·.F~~-~.
E',:-!,H·.
~.
i,F'L
....
t '
~.-.
E
,-,r
~-,-
..
-.,
'P
'F.'ET'jr•L'
-'"
- L!.:r - r
·.liJ.::~_
Iu.··
•, : ! f':.ri
30
>=:=100
4~-:-1
co::;tJE:
1
oo~J
5[
1
::<=120
6~1
GOSUE:
1
0(1~3
70
>::=50
:::o
Go::;ut: 1 a·.;:Jo
90
Et·~D
1
~1(1~1
'/=3::;::::-::
101[1
;:-:;:;;::+\'
(Clear
screen)
Figure
4-3.
GOSUB/RETURN
Program
Listing
In
the
above
program,
the
subroutine,
beginning
at
line
1000, is
called
three
times
to
compute
and
print
out
different
values
of X andY.
Figure
4-4
illustrates
the
results
of
executing
this
program.
400
301-J
480
360
200
15(1
Figure
4-4.
GOSUB/RETURN
Program
Run
Format:
{GO
TO} aexp
GOTO
Examples:
100 GOTO 50
500 GOTO
(X+ Y)
The
GOTO
command
is
an
unconditional
branch
statement
just
like
the
GOSUB
command.
They
both
immediately
transfer
program
control
to a target
lin
e
number
or
arbitrary
express
ion. How
ever,
using
anything
other
than
a con-
stant
will
make
renumbering
the
program
difficult.
If
the
target
line
number
is
non-existent,
an
error
results.
Any
GOTO
statement
that
bran
ch es
to
a
preceding
line
may
result
in
an "endless" loop. Statements
following
a GOTO
statement
will
not
be
executed.
Note that a conditional
branching
statement
(see
IF/THEN)can
be used
to break out
of
a GOTO
loop. The
following
program
il-
lustr
ates
two
uses
of the GOTO
command.
Program
Stat
eme
nts
17

IF/THEN
18
Program
Statements
10
PRHH
20
F'~:ItH
:PRINT
"ONE
11
30
PR
nn
"n.~r
40
P~:
HH
"THPEP
50
PRI~H
"FOUP"
6f1
P~:nn
"FI'..JE
11
65
GOTO
101:1
70
PF.:ItH
"$$$$$$$$$$$$$$$$$"
:::0
P
F.~
I
r-~T
II~-~~-~;-~~-~~-~~-~~-~~-~~·~~-~~
-~~-
~~-~~-~~-~~-~~-~"
90
F•k: I t·iT
11
???'??????:?????'?'?? n
95
Et-iD
1
fij
F'F.:
H-iT
!!
~=;I:=-::
II
11(1
FtR
I
t·iT
II
::;El.)Et
·f'
E'0
F'F.:It·H
aEIGHF
130
F,F.:
I
f·~T
II
t·i1
t·~E
H
14(1
F)~~
I
~-iT
!I
TEf·~
II
150
GOTO
70
Figure
4-5.
GOTO
Program
Listing
Upon
execution,
the
numbers
in
the
above
listing
will
be
listed
first
followed
by
the
three
rows
of
symbols.
The
symbols
listed
on
lines
70,
80,
and
90
are
ignored
temporarily
while
the
program
executes
the
GOTO
100
command.
It
proceeds
with
the
printing
of
the
numbers
"SIX"
through
"TEN
",
then
executes
these
-
cond
GOTO
statement
which
transfers
program
control
back
to
line
70
.
(This
is
just
an
example.
This
program
could
be
rewritten
so
that
no
GOTO
statements
were
used.)
The
program, when
executed,
looks
like
the
follow ing:
Ot
·£
HID
Tl-f.:EE
FOUF.:
FI!..JE
~:;£1.,.1£
t·~
EIGHT
t·HNE
THl
$$$$$$$$$$$$$$$$$
'?'??????'?'
'?'
?''?'?'?'?'???
Format:
Examples:
Figure
4-6.
GOTO
Program
Run
IF
aexp
THEN {
lineno
}
statement [:statement
... ]
IF
X =
100
THEN 150
IF
A$
= "
AT
ARI
" THEN
200
IF
AA
= 145
and
BB
= 1 THEN PRINT
AA,
BB
IF X =
100
THEN X = 0

RESTORE (RES.)
In
the
description
of
the
FOR/NEXT
statement,
the
stack
was
defined
as a
group
of
memory
addresses
reserved
for
return
addresses.
The
top
entry
in
the
stack
controls
the
number
of
loops
to
be
executed
and
the
RETURN
target
line
for
a
GOSUB.
If a subroutine
is
not
terminated
by
a RETURN
statement,
the
top
memory
location
of
the
stack
is still
loaded
with
some
numbers.
If
another
GOSUB
is
executed,
that
top
location
needs
to
be
cleared.
To
prepare
the
stack
for a new
GOSUB,
use
a POP
to
clear
the
data
from
the
top
location
in
the
stack.
The
POP
command
must
be
used
according
to
the
following
rules:
1.
It
must
be
in
the
execution
path
of
the
program.
2.
It
must
follow
the
execution
of
any
GOSUB
statement
that
is
not
brought
back
to
the
main
program
by
a RETURN
statement.
The
following
example
demonstirates
the
use
of
the
POP
command
with
a
GOSUB
when
the
RETURN is
not
executed:
10
Go~:;us
1000
15
F.:Et-1
LINE
20
WLL
t·mT
BE
E>=:ECUTED
:::1:.1
PF.:
I
t·n
II
t·~OPt·1AL
F.:ETuft:t·~
FR I t·ns
TH
I~=;
t·1Ef;~:;
AGE.
H
30
PF.:WT
11
ABt·iOlmAL
PETUF:t-l
PPrt-n::;
THI::;
r·1E
SSAGE.
11
40
POP
999
HiD
1
f1t-:::1~~1
F~~~
I
t·iT
II
t·~o~~J
E::<ECiJT
I
t·i~~
~:;uE:F.:CHJT
I
t·1E
.
!I
1010
GOTO
30
1020
~:ETUF:ti
Figure
4-11.
GOSUB
Statement
With
POP
Format:
Example:
RESTORE [aexp]
100 RESTORE
The
Atari
Personal
Computer
System
contains
an
internal
"pointer"
that
keeps
track
ofthe
DATA
statement
item
to
be
read
next.
Used
without
the
op-
tional
aexp,
the
RESTORE
statement
resets
that
pointer
to
the
first
DATA
item
in
the
program.
Used
with
the
optional
aexp,
the
RESTORE
statement
sets
the
pointer
to
the
first
DATA
item
on
the
line
specifed
by
the
value
ofthe
aexp.
This
statement
permits
repetitive
use
of
the
same
data.
10
FOR
N=1
TO
2
20
READ
A
30
RESTORE
40
READ
B
50
t·l=A+B
60
PRIHT 11TOTAL
EQUALS 11;M
70
NE:>\T
N
00
END
90
DATA
30,15
Figure
4-12.
Restore
Program
Listing
On
the
first
pass
through
the
loop, A
will
be
30
and B will
be
30 so
the
total
line
50
will
print
SUM
TOTAL
EQUALS
60,
but
on
the
second
pass, A
will
equal15
Program
Statements
21

INPUT/OUTPUT
DEVICES
5
INPUT/OUTPUT
COMMANDS
AND
DEVICES
This
section
describes
the
input/output
devices
and
how
data
is
moved
between
them.
The
commands
explained
in
this
section
are
those
that
allow
access
to
the
input/output
devices.
The
input
commands
are
those
associated
with
getting
data
into
the
RAM
and
the
devices
geared
for
accepting
input. The
output
com-
mands
are
those
associated
with
retrieving
data
from
RAM
and
the
devices
geared
for
generating
output
.
The
commands
described
in
this
section
are:
CLOAD
CSAVE
DOS
ENTER
INPUT
LOAD
LPRINT
NOTE
OPEN/CLOSE
POINT
PRINT
PUT/GET
READ/DATA
SAVE
STATUS
XIO
The
hardware
configuration
of
each
of
the
following
devices
is
illustrated
in
the
individual
manuals
furnished
with
each.
The
Central
Input/Output
(CIO)
sub-
system
provides
the
user
with a single
interface
to
access all
of
the
system
peripheral
devices
in
a (largely)
independent
manner.
This
means
there
is
a
single
entry
point
and a device-independent
calling
sequence.
Each
device
has
a
symbolic
device
name
used
to
identify
it;
e.g.,
K:
for
the
keyboard.
Each
device
must
be
opened
before
access
and
each
must
be
assigned
to
an
Input/Output
Con-
trol
Block
(IOCB).
From
then
on,
the
device
is
referred
to
by
its
IOCB
number.
ATARI
BASIC
contains 8 blocks
in
RAM
which
identifies
to
the
Operating
System
the
information
it
needs
to
perform
an
I/0
operation.
This
information
includes
the
command,
buffer
length,
buffer
address,
and
two
auxiliary
control
variables.
AT
ARI BASIC
sets
up
the
lOCH's,
but
the
user
must
specify
which
IOCB
to
use.
BASIC
reserves
IOCB
ItO
for
1/0
to
the
Screen
Editor,
therefore
the
user
may
not
request
IOCB
11'0.
The
GRAPHICS
statement
(see Section
9)
opens
IOCB
11'6
for
input
and
output
to
the
screen.
(This
is
the
graphics
window
S:).
IOCB
11'7
is
used
by
BASIC
for
the
LPRINT, CLOAD,
and
CSA
VE
commands.
The
IOCB
number
may
also
be
referred
to
as
the
device
(or
file)
number.
IOCB's 1
through 5 are
use.d
in
opening
the
other
devices
for
input/output
operations.
If
IOCB
11'7
is
in
use,
it
will
prevent
LPRINT
or
some
of
the
other
BASIC
I/0
statements
from
being
performed.
Keyboard:
(K:)
Input
only
device.
The
keyboard
allows
the
user
to
read
the
converted
(ATASCII)
keyboard
data
as
each
key
is
pressed.
Line
Printer:
(P:)
Output
only
device.
The
line
printer
prints
ATASCII
characters, a line
at a time.
It
recognizes
no
control
characters.
Program
Recorder:
(C:)
Input
and
Output
device.
The
recorder
is a
read/write
device
which
can
be
used
as
either,
but
never
as
both
simultaneously.
The
cassette
has
two
tracks for
sound
and
program
recording
purposes.
The
audio
track
cannot
be
recorded
from
the
ATARI
system,
but
may
be
played
back
through
the
television
speaker.
I/0
Commands
and
Devic
es
23

DOS
(DO.)
ENTER(E.)
INPUT
(I.)
Format:
Example:
DOS
DOS
The
DOS
command
is
used
to
go
from
BASIC
to
the
Disk
Operating
System
(DOS).
If
the
Disk
Operating
System
has
not
been
booted
into
memory,
the
com-
puter
will
go
into
Memo
Pad
mode
and
the
user
must
press
IMMM';!i@!ll
to
return
to
Direct
mode.
If
the
Disk
Operating
System
has
been
booted,
the
DOS
Menu
is
displayed.
To
clear
the
DOS
Menu
from
the
screen,
press
*'itii#&l;li!Mi.
Control
then
passes
to
BASIC.
Control
can
also
be
returned
to
BASIC
by
selecting B (Run
Cartridge)
on
the
DOS
Menu.
The
DOS
command
is
usually
used
in
Direct
mode;
however,
it
may
be
used
in
a
program.
For
more
details
on
this,
see
the
Atari
DOS
Manual.
Format:
ENTER filespec
Examples:
ENTER
"C
ENTER "D:DEMOPR.INS"
This
statement
causes a
cassette
tape
to
play
back a program
originally
recorded
using
LIST (see
Section
2,
LIST).
The
program
is
entered
in
unprocessed
(un-
tokenized)
form,
and
is
interpreted
as
the
data
is
received.
When
the
loading
is
complete,
it
may
be
run
in
the
normal
way.
The
ENTER
command
may
also
be
used
with
the
disk
drive.
Note
that
both
LOAD
and
CLOAD (see Section 2)
clear
the
old
program
from
memory
before
loading
the
new
one
. ENTER
merges
the
old
and
new
programs.
This
ENTER
statement
is
usually
used
in
Direct
mode.
Format:
INPUT [
#aexp
{ ; } ] {
~~;~
}
[,
{
~~~~
} ... ]
Examples:
100 INPUT X
100 INPUT N$
100 PRINT "ENTER THE VALUE
Of
X"
110 INPUT X
This
statement
requests
keyboard
data
from
the
user.
In
execution,
the
com-
puter
displays
a?
prompt
when
the
program
encounters
an
INPUT
statement.
It
is
usually
preceded
by
a PRINT
statement
thCJ.t
prompts
the
user
as
to
the
type
of
information
being
requested.
String
variables
are
allowed
only
if
they
are
not
subscripted.
Matrix
variables
are
not
allowed.
The
#aexp
is
optional
and
is
used
to
specify
the
file
or
device
number
from
which
the
data
is
to
be
input
(see
Input/Output
Devices).
If
no
#aexp
is
specified,
then
input
is
from
the
screen
editor
(E:).
If
several
strings
are
to
be
input
from
the
screen
editor,
type
one
string,
press
liiii!Jml,
type
the
next
string,
l;i§iii;lll , etc.
Arithmetic
numbers
can
be
typed
on
the
same
line
separated
by commas.
10
PRWT 11Et-iTER 5 NUt"18EPS
TO
BE
SUt·1t·1ED
11
20
FOR
t·~=
1
TO
5
30
I
t·~PUT
::-::
40
C=C+>::
50
NE>::T
t·~
60
PR r HT
II
THE :::ut
·1
oF
'/OUP
Nut·1E:ER::: If:
II
; c
70
um
Figure
5-1
Input
Program
Listing
I/0
Commands
and Devices
25

LOAD
(LO.)
LPRINT (LP .)
NOTE
(NO.)
OPEN
(0.)
CLOSE (CL.)
26
J/0
Commands
and
Devices
Format:
LOAD filespec
Example:
LOAD "D1:JANINE.BRY"
This
command
is
similar
to
CLOAD
except
the
full file
name
system
can
be
used.
LOAD
uses
long
inter-record
gaps
on
the
tape
(see
CLOAD)
and
uses
the
token-
ized
version
ofthe
program.
When
using
only
one
disk
drive,
it
is
not
necessary
to
specify a number
after
the
"D"
because
the
default
is
disk
drive
#1.
Format:
Example:
LPRINT
[exp][
{ : }
exp
... ]
LPRINT "PROGRAM TO CALCULATE
X"
100 LPRINT X;" ";Y;"
";Z
This
statement
causes
the
computer
to
print
data
on
the
line
printer
rather
than
on
the
screen.
It
can
be
used
in
either
Direct
or
Deferred
modes.
It
requires
no
device
specifier
and
no
OPEN
or
CLOSE
statement.
(BASIC
uses
IOCB
#7.)
The
above
program
listing
illustrates a program
that
will
add 5 numbers
entered
by
the
user.
To
print a program
listing
on
the
line
printer,
see
LIST.
Format:
Example:
NOTE
#aexp,
avar,
avar
100 NOTE #1,
X,
Y
This
command
is
used
to
store
the
current
disk
sector
number
in
the
first
avar
and
the
current
byte
number
within
the
sector
in
the
second
avar.
This
is
the
current
read
or
write
position
in
the
specified
file
where
the
next
byte
to
be
read
or
written
is located.
This
NOTE
command
is
used
when
writing
data
to
a
disk
file (see
POINT).
The
information
in
the
NOTE
command
is
written
into
a
second
file
which
is
then
used
as
an
index
into
the
first
file.
Formats:
OPEN
#aexp,aexp1,aexp2,
filespec
CLOSE
#aexp
Examples:
100 OPEN #2,8,0,
"D1:A
T ARI800.BAS"
100 A$
=
"D1:A
TARI800.BAS"
110 OPEN #2,8,0,A$
150 CLOSE #2
Before a
device
can
be
accessed,
it
must
be
opened.
This "opening"
process
links
a specific
IOCB
to
the
appropriate
device
handler,
initializes
any
CIO-related con-
trol
variables,
and
passes
any
device-specific
options
to
the
device
handler.
The
parameters
for
the
OPEN
command
are
defined
as follows:
#
Mandatory
character
that
must
be
entered
by
the
user.
aexp
Reference
IOCB
or
file
number
to
same
parameters
for
future
use
(as
in
CLOSE
command).
Number
may
be 1 through
7.

aexp1
aexp2
filespec
Code
number
to
determine
input
or
output
opera
-
tion.
Code 4
8
12
6
9
input
operation
output
operation
input
and
output
operation
disk
directory
input
operation
(In
this
case,
the
filespec is
the
search
specifica-
tion.)
end-of-file
append
(output) operation.
Append
is
also
used
for
a special
screen
editor
input
mode
.
This
mode
allows a program
to
input
the
next
line
from
E:
without
waiting
for
the
user
to
press
lim!Jm.
Device-dependent
auxiliary
code.
An
83
in
this
parameter
indicates
sideways
printing
on a printer
(see
appropriate
manuals
for
control
codes
).
Specific file
designation.
Must
be
enclosed
in
quota-
tion
marks.
The
format
for
the
filespec
parameter
is
shown
in
Figure
5-2.
"D
1 : A T A R I 8 0 0 . B A
S"
-
__
____.Jl
......
V'
,
~
Device
-----.:1•
Code
Device
Number
(optional)
Required
-------'
Colon
File
name
--------------'
(up
to
8
charactersmust
begin
with
alphabetic
character)
Period
required
-------------..l
as
separator
if
extender
is
used.
Extender-------------------~
(optional)Includes
0-3
characters
Figure
5-2
Filename
Breakdown
Note:
Filenames
are
not
used
with
the
program
recorder.
The
CLOSE
command
simply
closes files
that
have
been
previously opened
with
an
OPEN
command.
Note
in
the
example
that
the
aexp
following
the
mandator
y
#charact
er
must
be
the
sam
e as
the
aexp refere
nce
number
in
the
OPEN
state
-
ment.
IIO
Commands
and Devices
27

POINT
(P.)
PRINT
(PR
or?)
PUT(PU.)/
GET(GE.)
READ
(REA.)
DATA
(D.)
28
I/0
Commands
and
Devices
Format:
Example:
POINT
#aexp,
avar,
avar
100 POINT
112,
A,B
This
command
is
used
when
reading
a file
into
RAM.
The
first
avar
specifies
the
sector
number
and
the
second
avar
specifies
the
byte
within
that
sector
where
the
next
byte
will
be
read
or
written.
Essentially,
it
moves a software-controlled
pointer
to
the
specified
location
in
the
file.
This
gives
the
user
"random"
access
to
the
data
stored
on a disk
file.
The
POINT
and
NOTE
commands
are
discussed
in
more
detail
in
the
DOS
Manual.
Format:
PRINT [#aexp] {
:}
[exp] [,exp
..
.]
Examples:
PRINT X,
Y,
Z,
A$
100 PRINT
"THE
VALUE OF X
IS
";X
100 PRINT "COMMAS", " CAUSE",
"COLUMN",
"SPACING"
100
PRINT
#3,
A$
A PRINT
command
can
be
used
in
either
Direct
or
Deferred
mode.
In
Direct
mode,
this
command
prints
whatever
information
is
contained
between
the
quotation
marks
exactly
as
it
appears.
In
the
first
example,
PRINT
X,
Y ,Z,A$,
the
screen
will
display
the
current
values
of
X,Y,Z,
and
A$
as
they
appear
in
the
RAM-resident
program.
In
the
last
example,
PRINT #3,A$,
the
#3
is
the
file
specifier
(may
be
any
number
between 1 and
7)
that
controls
to
which
device
the
value
of
A$
will
be
printed.
(See
Input/Output
Devices.)
A
comma
causes
tabbing
to
the
next
tab
location.
Several
commas
in a row
cause
several
tab
jumps. A semicolon
causes
the
next
aexp
or
sexp
to
be
placed
im-
mediately
after
the
preceding
expression
with
no
spacing.
Therefore,
in
the
second
example a space
is
placed
before
the
ending
quotation
mark
so
the
value
of X will
not
be
placed
immediately
after
the
word
"IS".
If
no
comma
or
semicolon
is
used
at
the
end
of
a PRINT
statement,
then
a
£lmD
is
output
and
the
next
PRINT
will
start
on
the
following
line.
Format:
PUT
#aexp,
aexp
GET
#aexp,
Examples:
100
PUT
116,
ASC("
A")
200 GET
111,X
The
PUT
and
GET
are
opposites.
The
PUT
command,outputs a single
byte
from
0-255
to
the
file
specified
by
#aexp.
(II
is a
mandatory character
in
both
these
commands).
The
GET
command
reads
one
byte
from
0-255
(using
#aexp
to
designate
the
file,
etc.
on
diskette
or
elsewhere)
and
then
stores
the
byte
in
the
variable
avar.
Formats:
READ
var
[ ,
var
... ]
DATA
adata
[ ,
adata
..
.]
Examples:
100 READ A,B,C,D,E
110
DATA
12,13,14,15,16
100 READ A$,B$,C$,D$ ,E$
110
DATA
EMBEE, EVELYN, CARLA, CORINNE, BARBARA
These
two
commands
are
always
used
together
and
the
DATA
statement
is
always
used
in
Deferred
mode
1
•
The
DATA
statement
can
be
located
anywhere
1
A
Direct
mode
READ
will
only read
data
if a DATA statement
was
executed
in the pro
gram.

CHAINING
PROGRAMS
30
I/O
Commands and
Devi
ces
and
lines
with a color
(see Section 9).
The
parameters
for
this
command
are
de-
fined
as
follows:
cmdno
cmdno
3
5
7
9
11
12
13
17
18
32
33
35
36
37
38
254
aexp
aexp1
aexp2
filespec
Number
that
stands
for
the
particular
command
to
be
performed.
OPERATION
EXAMPLE
OPEN
Same
as
BASIC OPEN
GET RECORD
These 4 commands
are
similar
to
GET CHARACTERS
BASIC
INPUT
GET, PRINT,
and
PUT
PUT
RECORD
PUT
CHARACTERS
respectively.
CLOSE
Same
as
BASIC CLOSE
STATUS REQUEST
Same
as BASIC STATUS
DRAW
LINE
Same
as
BASIC DRA
WTO
FILL See
Section
9
RENAME XIO
32,111,0,0, "D:TEMP.CAROL"
DELETE
XIO 33,111,0,0, "D:TEMP .BAS"
LOCK
FILE
XIO
35,111,0,0, "D:TEMP.BAS"
UNLOCK FILE
XIO 36,111,0,0,"D:TEMP.BAS"
POINT
Same
as
BASIC
POINT
NOTE
Same
as
BASIC NOTE
FORMAT
XIO 254,111,0,0,
"D2
:"
Device
number
(same
as
in
OPEN). Most
of
the
time
it
is
ignored,
but
must
be
preceded
by
II
.
Two
auxiliary
control
bytes.
Their
usage
depends
on
the
particular
device
and
command.
In
most
cases,
they
are
unusecl
and
are
set
to
0.
String
expression
that
specifies
the
device.
Must
be
enclosed
in
quotation
marks.
Although
some
com-
mands,
like
Fill (Section 9),
do
not
look
at
the
filespec,
it
must
still
be
included
in
the
statement.
If a program
requires
more
memory
than
is
available,
use
the
following
steps
to
string
programs
ofless
than
the
maximum
memory
available
into
one
program.
1.
Type
in
the
first
part
ofthe
program
in
the
normal
way.
2.
The
last
line
of
the
first
part
of
the.
program
should contain
only
the
line
number
and
the
command
RUN"C:"
3.
Cue
the
tape
to
the
blank
section.
Write
down
the
program
counter
number
for
later
RUN pur
poses. Press
PLAY
and
RECORD
buttons
on
the
deck
so
that
both
remain
down.
4.
Type
SA
VE"C:"
and
press
IBil3.
5.
When the
beeping
sound
occurs,
press
lj'I'J'i!lm
aga
in.
6.
When
the
screen
displays
"READY",
rio
not
move
tape.
Type
NEW
m:i!Im
.
7.
Repeat
the
above
instructions
for
the
second
part
ofthe
program.
8.
As
the
second
part
ofthe
program
is
essentially a totally new
program,
it
is
possible
to
re-use
the
line numbers
used
in
the
first
part
of
the
program.
9.
If
there
is a third
part
of
the
program,
make
sure
the
last
line
ofthe
second
part
is a RUN"C:"
command.

MODIFYING A
BASIC PROGRAM
ON
DISK
To
execute a "chained"
program,
use
the
following
steps:
1. Cue
the
tape
to
the
beginning
of
part 1 of
the
program.
2.
Press
PLAY
button
on
the
recorder.
3.
Type
RUN"C:"
ll!I.I.!ImJ
.
4.
When
the
"beep"
sounds,
press
ll!I.I.!ImJ
again.
The
computer
automatically
loads
the
first
part
of
the
program,
runs
it,
and
sounds a "beep"
to
indicate
when
to
hit
the
space
bar
or
Em
to
trigger
the
tape
motor
for
the
second
LOAD/RUN.
The
loading
takes a few
seconds.
Note:
A
one-part
program
can
be
recorded
and
reloaded
in
the
same
way
or
CSA VE
and
CLOAD
can
be
used.
Note:
Remember
to
boot
DOS
before
typing
in
your
program.
The
procedure
for
modifying
an
existing
BASIC
program
stored
on a diskette
is
demonstrated
in
the
following
steps:
1.
Turn
off
ATARI
console
and
insert
BASIC
cartridge.
2.
Connect
disk
drive
and
turn
it
on
-without
inserting
diskette.
3.
Wait
for
Busy
Light
to
go
out
and
for
the
drive
to
stop.
Open
disk
drive
door.
4.
Insert
diskette
(with
DOS)
and
close
door.
5.
Turn
on
console.
DOS
should
boot
in
and
the
screen
show
READY.
6.
To
load
program
from
disk,
type
LOAD
"D:filename.ext
7.
Modify
program
(or
type
in
new
program).
8. To
save
program
on
disk,
type
SAVE
"D:filename.ext
9.
Always
wait
for
the
Busy
light
to
go
out
before
removing
diskette.
10.
To
get a Directory
listing,
do
not
remove
diskette
and
type
DOS
Upon
lliilm,
the
DOS
Menu
will
be
displayed.
Select
command
letter
A,
type
it,
and
press
liill!m
twice
to
list
the
directory
on
the
screen;
or
type
A
followed
by
pressing
lliilm
then
P:
liill!m to list
directory
on
the
printer.
11. To
return
to BASIC,
type
B liill!m
or
press
Utiii!&l;li@:U
.
IIO
Commands
and
Devices
31

LOG
RND
SGN
s~
Returns
the
greatest
integer
less
than
or
equal
to
the
value
of
the
expression.
This
is
true
whether
the
expression
evaluates
to a
positive
or
negative
number.
Thus,
in
our
first
example
above, I is
used
to
store
the
number
3.
In
the
second
example,
X is
used
to
store
the
number-
15
(the
first
whole
number
that
is
less
than
or
equal
to
-14.66778).
This
INT
function
should
not
be
confused
with
the
function
used
on
calculators
that
simply
truncates
(cuts
off)
all
decimal
places.
Format:
LOG(aexp)
Example:
100 L = LOG(67.89/2.57)
Returns
the
natural
logarithm
of
the
number
or
expression
in
parentheses.
LOG(O)
should
give
an
error
and
LOG(1)
should
be
0.
Format:
RND(aexp)
Example:
10
A=RND
(0)
Returns a hardware-generated
random
number
between 0 and
1,
but
never
returns
1.
The
variable
or
expression
in
parentheses
following
RND is a
dummy
and
has
no
effect
on
the
numbers
returned.
However,
the
dummy
variable
must
be
used.
Generally,
the
RND
function
is
used
in
combination
with
other
BASIC
statements
or
functions
to
return a number
for
games,
decision
making,
and
the
like.
Here's a simple
routine
that
returns a random
number
between 0 and
999 .
1 0
:~~=~~NO(
0)
20
F.::x:=IHT<
1000:~~:;()
33
PRINT
R?i
Format:
SGN(aexp)
Example:
100 X = SGN(-199}
(0
is
dummy
variabl
e)
(-1
would
be returned)
Returns a -1
ifaexp
evaluates
to a negative
numbe
r;
a 0
ifa
exp
evaluates
to 0,
or
a
1
if
aexp
evaluates
to a
positive
number.
Format:
SQR(aexp)
Example:
100 PRINT SQR(100) (10
would
be printed)
Returns
the
square
root
of
the
aexp
which
must
be
positive.
TRIGONOMETRIC
FUNCTIONS
ATN
Format:
ATN(aexp)
Example:
100 X = ATN(65)
Returns
the
arctangent
of
the
variable
or
expression
in
parentheses
.
cos
Format:
COS(aexp)
Example:
100 C = COS(X+Y+Z)
Note:
Presumes
X,
Y, Z previously
defined
!
Returns
the
trigonometric
cosine
of
the
expre
ssion
in
parentheses.
34
Funct
ion
Library

SIN
DEGIRAD
SPECIAL
PURPOSE
FUNCTIONS
ADR
FRE
PEEK
POKE
Format:
SIN(aexp)
Example:
100 X = SIN(Y)
Note:
Presumes Y previously
defined.
Returns
the
trigonometric
sine
of
the
expression
in
parentheses.
Format:
DEG
RAD
Example:
100 DEG
100
RAD
These
two
statements
allow
the
programmer
to
specify
degrees
or
radians
for
trigonometric
function
computations.
The
computer
defaults
to
radians
unles
s
DEG is specified.
Once
the
DEG
statement
has
been
executed,
RAD
must
be
used
to
return
to
radians.
See
Appendix E for
the
additional
trigonometric
functions
that
can
be
derived.
Format:
Example:
ADR(svar)
ADR(A$)
Returns
the
decimal
memory
address
ofthe
string
specified
by
the
expression
in
parentheses.
Knowing
the
address
enables
the
programmer
to
pass the
informa-
tion
to
USR
routines,
etc. (See
USR
and
Appendix
D)
Format:
FRE(aexp)
Examples:
PRINT FRE (0)
100 IF
FRE
(0)<1000
THEN PRINT "MEMORY CRITICAL"
This
function
returns the
number
ofbytes
of user
RAM
left.
Its
primary
use
is
in
Direct
mode
with a dummy
variable
(0)
to
inform
the
programmer
how
much
memory
space
remains
for
completion
of a program.
Of
course
FRE
can
also
be
used
within
a BASIC
program
in
Deferred
mode.
Format:
PEEK(aexp)
Examples:
1000 IF PEEK (4000) =
255
THEN
PRINT
"255"
100 PRINT
"LEFT
MARGIN IS"; PEEK (82)
Returns
the
contents
of a specified
memory
address
location
(aexp).
The
address
specified
must
be
an
integer
or
an
arithmetic
expression that
evaluates to
an in-
teger
between 0 and
65535
and
represe
nts
the
memory
address in
decimal
nota-
tion
(not
hexadecimal). The
number
returned
will
also
be a decimal
integer
with
a
ran
ge from
0 to
255.
This
function
allows
the
user
to
examine
either
RAM
or
ROM locat
ion
s.
In
the
first
examp
le
above, the
PEEK is us
ed
to
determine
whether location
4000
(decimal)
contains
the
number
255.
In
the
second
exam
-
ple,
the
PEEK
function
is u
sed
to
examine
the
left
margin.
Format:
POKE
aexp1,
aexp2
Examples:
POKE 82, 10
100 POKE 82,
20
Function Li
brary
35

DIM
(DI.)
8
ARRAYS
AND
MATRICES
An
array
is a one-dimensional
list
of
numb
ers
assigned
to
subscripted variables
;
e.g.,
A(O),
A(1), A(2).
Subscripts
range
from 0 to
the
dimensioned
value.
Figure
8-1
illustrates a 7-element
arra
y.
A(O)
A(1)
A(2)
A(3)
A(4)
A(S)
A(6)
Figure
8-1.
Example
of
an
Array
A
matrix,
in
this
context,
is a two-dimensional
table containing
rows
and
col-
umns.
Rows
run
horizontally
and
columns
run verticall
y.
Matrix
elements
are
stored
by
BASIC
in
row-ma
jor
order.
This
means
that all
the elem
ents
of
the
first
row
are
stored
first,
followed
by
all
the
elements
of
the
second
row,
etc
.
Figure
8-2
illustrates
a 7 x 4
matrix.
Columns
M(O,O)
M(0,1) M(0,2)
M(0,3)
M(1,0)
M(1
,1)
M(1,2 )
M(1,3)
M(2,
0)
M(2,1)
M(2,2)
M(2,3)
M(3,
0)
M(3,1)
M(3,2)
M(3,3)
M(4,0) M(4,1) M(4,2) M(4,3)
M(5,
0)
M(5,1) M(5,2) M(5,3)
M(6,0) M(6,1) M(6,2)
M(6,3)
Figure
8-2.
Example
of a Matrix
This
section
describes
the
two
commands
associated
with
arrays,
matrices,
and
strings, and
how
to
load
both
arrays
and
matrices.
The
com~a
nds
in
this sec-
tion
are:
DIM
CLR
Format:
D M {
svar(aexp)
}
1
mvar(aexp[
,aexp])
IJ{
,svar(aexp)
}tl
~
,mvar(aexp[
,aexp
... ] U
Examples:
DIM A(100)
DIM M(6,3)
DIM B$(20)
used with
STRINGS
Ana,v
s
and
Matr·ices
41

9
GRAPHICS MODES
AND
COMMANDS
This
section
describes
the
Atari
BASIC
commands
and
the
different
graphics
modes
ofthe
ATARI
Personal
Computer.
Using
the
se
commands,
it
is
possible
to
create
graphics
for
game,
graphics, and
patterns
.
The
commands
to
be
described
in
this
section
are:
GRAPHICS
COLOR
DRAWTO
LOCATE
PLOT
POSITION
PUT/GET
SETCOLOR
XIO
The
PUT/GET
and
XIO
commands
explained
in
this section
are
special
applica-
tions
of
the
same
commands
described
in
Section 5.
GRAPHICS (GR.)
Format:
Example:
GRAPHICS
aexp
GRAPHICS 2
This
command
is
used
to
select
one
of
the
nine
graphics
modes.
Table
9-1
sum-
marizes
the
nine
modes and
the
characteristics
of
each. The
GRAPHICS
com-
mand
automatically
opens
the
screen
, S:(the
graphics windo
w),
as
device
116.
So
w
hen
printing
text
in
the
text window,
it
is
not
nece
ssary
to
specify
the
device
code.
The
aexp must
be
positive,
rounded
to
the
nearest
integer. Graphics
mode
0 is a full
-screen display
while
modes 1 through 8 are split
screen
displays. To
override
the split-screen,
add
the
characters
+ 16
to
the
mode
numb
er (aexp)
in
the
GRAPHICS
command.
Adding
32
prevents
the
graphics
comma
nd
from
clearing
the
scre
en.
To
return
to
graphics
mode 0 in
Dir
ect
mode,
pre
ss hiii@l;li@ii
or
type
GR.O
and press l;!jiii;Ui
TABLE
9.1-TABLE
OF
MODES
AND
SCREEN
FORMATS
SCREEN
FORMAT
Vert.
Vert.
Number
Gr.
Mode
Horiz.
(Col)
(Col)
Of
RAM
Mode
Type
(Rows)
Split
Full
Colors
Required
Screen
Screen
(Bytes)
0
TEXT
40
24
2
993
1
TEXT
20
20
24
5 513
2
TEXT
20
10
12
5 261
3 GRAPHICS
40
20
24
4 273
4 GRAPHICS
80
40
48
2 537
5 GRAPHICS
80
40
48
4 1017
6 GRAPHICS
160
80
96
2
2025
7 GRAPHICS
160 80
96
4
3945
8
GRAPHICS 320
160
192
1/2
7900
The
following
paragraphs
describe
the
nine
graphics
modes
.
Graph
ic Modes
and Cmnmand.
s
45

GRAPHICS
MODEO
GRAPHICS
MODES
1AND2
This
mode
is
the
1-color,
2-luminance
(brightness)
default
mode
for
the
AT
ARI
Personal
Computer.
It
contains a 24
by
40
character
screen
matrix. The
default
margin
settings
at 2 and
39
allow
38
characters
per
line.
Margins
may
be
chang-
ed
by
poking
LMARGN
and
RMARGN (82
and
83). See
Appendix
I.
~orne
syst_ems
have
different
margin
default
settings. The
color
ofthe
characters
IS
determmed
by
the
background
color.
Only
the
luminance
ofthe
characters
can
be
different.
This
full-screen
display
has a blue
display
area
bordered
in
black
(unless
the
border
is
specified
to
be
another
color).
To
display characters
at a specified
loca-
tion,
use
one
of
the
following
two
methods
.
Method
1.
lineno
POSITION aexp1,
aexp2
lineno
PRINT
sexp
Method
2
lineno
GR.
0
lineno
POKE 752,1
lineno
COLOR ASC(sexp)
lineno
PLOT
aexp1,aexp2
lineno
GOTO
lineno
Puts cursor
at
location
sp
ecified
by
aexp1
and
aexp2.
Specifies
gr
aphics
mode
.
Suppresses
cur
sor.
Specifies character
to
be
printed.
Specifies where
to
print
character.
Start
loop to prevent
READY
from
being
printed. (GOTO
same
linerw.J
Press
lll1D:I
to
terminat
e
loop.
GRAPHICS 0 is also
used
as a clear
screen
command
either
in
Direct
mode
or
Deferred
mode.
It
terminates
any
previously
selected
graphics
mode
and
returns
the
screen
to
the
default
mode
(GRAPHICS 0).
As
defined
in
Table
9-1,
these
two
5-color
modes
are
Text
modes.
However,
they
are
both
split-screen
(see
Figure
9-1)
modes.
Characters
printed
in
Graphics
mod
e 1 a
re
twice
the
width
of
those printed
in
Graphics
0,
but
are
the same
height.
Characters
printed
in
Graphics
mode 2 are
twice
the
width
and
height
of
those
in
Graphics
mode
0.
In
the
split-screen
mode,
a PRINT
command
is us
ed
to
display
characters
in
either
the
text
window
or
the
graphics window
. To
print
characters
in
the
graphics
window,
specify
device
#6
after
the
PRINT
com-
mand.
Example:
100
GR.
1
110 PRINT#6;"
ATARI"
The
default colors depend
on
the type
of
character
input.
Table
9-2
defines
the
default
color
and
color
register
used
for
each
type.
Table
9-2.
Default
Colors
for
Specific
Input
Types
Character
Type
Upper
case
alphabetical
Lower
case
alphabetical
Inverse
upper
case
alphabetical
Inverse
lower
case
alphabetical
Numbers
Inverse
numbers
Color
Register
0
1
2
3
0
2
Note:
See SETCOLOR
to
change
character
colors.
Default
Color
Orange
Light
Green
Dark
Blue
Red
Or
ange
Dark
Blue
46
Graphic Modes
and
Commands

COLOR (C.)
DRA
WTO
(DR.)
LOCATE (LOC.)
Format:
COLOR
aexp
Examples:
110 COLOR ASC("A")
110 COLOR 3
The
value
of
the
expression
in
the
COLOR
statement
determines
the
data
to
be
stored
in
the
display
memory
for
all
subsequent
PLOT
and
DRA
WTO
com-
mands
until
the
next
COLOR
statement
is
executed. The
value
must
be
positive
and
is
usually
an
integer
from 0 through
255.
Non-integers
are
rounded
to
the
nearest
integer.
The
graphics
display
hardware
interprets
this
data
in
different
ways
in
the
different
graphics
modes. In
text
modes 0 through
2,
the
number
can
be
from 0 through
255 (8 bits)
and
determines
the
character
to
be
displayed
and
its
color. (The
two
most
significant
bits
determine
the
color. This
is
why
on-
ly
64
different
characters
are
available
in
these
modes
instead
of
the
full
256-character
set.)
Tables
9-6
and
9-7
at
the
end
ofthis
section
illustrate
the
internal
character
set
and
the
character/color
assignment.
Table
9-2
is a simplified
table
which allow
s
easy
generation
of
some
of
the
colors.
For
example,
COLOR
ASC("
A"):
PLOT
5,5
will
display
an
orange A character
in
graphics
modes 1 or 2 at
location
5,5.
Graphics
modes 3 through 8 are
not
text
modes,
so
the
data
stored
in
the
display
RAM
simply
determines
the
color
of
each
pixel.
Two-color
or
two-luminance
modes
require
either 0 or
1 (1-bit)
and
four-color
modes
require
0, 1, 2 ,
or
3.
(The
expression
in
the
COLOR
statement may
have a value
greater
than
3,
but
onl
y
one
or
two
bits
will
be
used.)
The
actual
color
which
is
displayed
depends
on
the
value
in
the
color
register
which
corresponds
to
the
data
of
0, 1,
2,
or 3 in
the
pa
rticular
graphi
cs
mode being used .
This· may be
dete
rmin
ed
by
looking
in
Table
9-5,
which
gives
the
default
colors
and
the
corresponding
register
numbers.
Colors
may
be
changed
by
using
SETCOLOR.
Note
that
when
BASIC is
first
powered
up,
the
color
data
is
0,
and when
a
GRAPHICS
command
(without
+ 32) is
executed
, all
of
the
pixels
are
set to 0.
Therefore,
nothing
seems
to
happen
to PLOT
and
DRA
WTO
in
GRAPHICS 3
through 7 when
no
COLOR statem e
nt
has bee
n execut
ed. Cor
rec
t b y
doing
a
COLOR 1
first
.
Fonnat:
Example:
DRA
WTO
aexp1, aexp2
100 DRA
WTO
10, 8
This state
ment caus
es a line to
be draw
n fr
om the last po
int display
ed
by a PLOT
(see
PLOT)
to
the
location
specified
by
aexp1
and
aexp2.
The
first
expression
represents
the X coordinate
and
the second
represents the
¥-coordinate
(see
Fig
ur
e 9-1). The color
of the
lin
e is the sam e color
as th e point dis
played
by the
PLOT.
Format:
Example:
LOCATE a
exp1, aexp2, va
r
150 LOCATE 1
2,
15, X
This
command
positions
the invisible
graphics
cursor
at
the
specified loc
ation
in
th
e graph
ics w
ind
ow,
retri
eves th
e data at that pixe
l, a
nd
stor
es
it
in the
specified
arithmetic variable
. T
his gives a
number
from 0 to
255
for
Graphics
mode
s 0
through
2;
0
or 1 for
the
2-color
graphics modes; and
0, 1, 2,
or 3 for
the
4-co
lor
modes. The tw o arithmetic expre
ssions specify
th e X a
nd
Y coo
rdinates
of the
point. LOCATE
is e
quivale
nt
to:
POSITION
aexp1
, a
exp
2:GET #6,av
ar
48
Graphic Modes a
nd Commwu
is

SETCOLOR (SE.)
Note:
Doing a PRINT
after a LOCATE
or
GET
from
the
screen
may
cause
the
data
in
the
pixel
which
was
examined
to
be
modified.
To
avoid
this
problem,
reposition
the
cursor
and
put
the
data
that
was
read,
back
into
the
pixel
before
doing
the
PRINT.
Format:
Example:
SETCOLOR
aexp1,
aexp2,
aexp3
100 SETCOLOR 0, 1, 4
This
statement
is
used
to
choose
the
particular
hue
and
luminance
to
be
stored
in
the
specified
color
register.
The
parameters
of
the
SETCOLOR
statement
are
defined
below:
aexp1
aexp2
aexp3
=
Color
register
(0-4
depending
on
graphics
mode)
=
Color
hue
number
(0-15. See
Table
9-3)
Color
luminance
(must
be
an
even
number
between 0 and
14;
the
higher
the
number,
the
brighter
the
display.
14
is
almost
pure
white.)
TABLE
9.3-THE
ATARI
HUE
(SETCOLOR
COMMAND)
NUMBERS
AND
COLORS
COLORS
GRAY
LIGHT
ORANGE
(GOLD)
ORANGE
RED-ORANGE
PINK
PURPLE-BLUE
BLUE
BLUE
LIGHT BLUE
TURQUOISE
GREEN-BLUE
GREEN
YELLOW-GREEN
ORANGE-GREEN
LIGHT ORANGE
SETCOLOR
(aexp2)
NUMBERS
0
1
2
3
4
6
7
8
9
10
11
12
13
14
15
Note:
Colors
will
vary
with
type
and
adjustment
of
TV
or
monitor
used.
The
ATARI
display
hardware
contains
five
color
registers,
numbered
from 0 through
4.
The
Operating
System
(OS)
has
five
RAM
locations
(COLORO
through
COLOR4,
see
Appendix
I -
Memory
Locations)
where
it
keeps
track
of
the
current
colors.
The
SETCOLOR
statement
is
used
to
change
the
values
in
these
RAM
locations.
(The
OS
transfers
these
values
to
the
hardware
registers
every
television
frame.)
The
SETCOLOR
statement
requires a value
from 0 to
4
to
specify a color
register.
The
COLOR
statement
uses
different
numbers
because
it
specifies
data
which
only
indirectly
corresponds
to a color
register.
This
can
be
confusing,
so
careful
experimentation
and
study
of
the
various
tables
in
this
section
is
advised.
No
SETCOLOR
commands
are
needed
if
the
default
set
of
five
colors
is
used.
Although
128
different
color-luminance
combinations
are
possible,
not
more
than
five
can
be
displayed
at
any
one
time.
The
purpose
of
the
color
registers
and
SETCOLOR
statement
is
to
specify
these
five
colors.
50
Graphic Modes
and
Commands

Using
the
note
values
in
Table
10-1,
the
following
example
demonstrates
how
to
write a program
that
will
"play"
the
C scale.
TABLE
10.1.
TABLE
OF PITCH
VALUES
FOR
THE
MUSICAL
NOTES
HIGH
NOTES
MIDDLE C
LOW
NOTES
10
F.:EAD
A
~
c
B
A#
orB~
A
G#
or
A~
G
F#
or
G~
F
E
D#
orE
D
C#
or
D~
c
B
A#
orB
A
G#
or
A~
G
F#
or
G~
F
E
D#
orE~
D
C#
or
D~
c
B
A#
orB~
A
G#
or
A~
G
F#
G~
F
D
D#
or
I~
D
C#
or
Db
c
20
IF
A=256
iHEt·i
HiD
30
SOUr·iD
~3
.'
A
..
1
(1
.•
1 0
40
FOP
~·J=1
TO
400:
r·iE>~T
~·J
50
PRWT
A
60
GOTO
10
70
END
29
31
33
35
37
40
42
45
47
50
53
57
60
64
68
72
76
81
85
91
96
102
108
114
121
128
136
144
153
162
173
182
193
204
217
230
243
80
DATA
~·9
..
31.·
35,
4f)
..
45
..
4 7
..
53
..
6(1, 64,
72
·'
:31
191.·
96.:
108.:
121
90
[lATA
12:3.~
144.~162
..
1:::2.~
193.:217)243
..
256
Figure
10-1.
Musical
Scale
Program
Note
that
the
DATA
statement
in
line
80
ends
with a 256,
which
is
outside
ofthe
designated
range.
The
256 is
used
as
an
end-of-data
marker.
58
Sounds
and
Game Controllers

GAME
CONTROLLER
FUNCTIONS
PADDLE
PTRIG
STICK
Figure
10-2 is
an
illustration
of
the
three
controllers
used
with
the
Atari
Per-
sonal
Computers.
The
controllers
can
be
attached
directly
to
the
Atari
Per-
sonal
Computer
or
to
external
mechanical
devices
so
that
outside
events
can
be
fed
directly
to
the
computer
for
processing
and
control
purposes.
Format:
Example:
Figure
10-2.
Game
Controllers
P ADDLE(aexp)
PRINT P ADDLE(3)
This
function
returns
the
status
of a particular
numbered
controller.
The
paddle
controllers
are
numbered
0-7
from
left
to
right.
This
function
can
be
used
with
other
functions
or
commands
to
"cause"
further
actions
like
sound,
graphics
controls,
etc.
For
example,
the
statement
IF
PADDLE(3) = 14
THEN
PRINT
"PADDLE
ACTIVE."
Note
that
the
PADDLE
function
returns a number
bet-
ween 1 and
228,
with
the
number
increasing
in
size
as
the
knob
on
the
con-
troller
is
rotated
counterclockwise
(turned
to
the
left).
Format:
PTRIG(aexp)
Example:
100
IF
PTRIG(4)"'0 THEN PRINT "MISSILES FIRED!"
The
PTRIG
function
returns a status
ofO
ifthe
trigger
button
ofthe
designated
controller
is
pressed. Otherwise,
it
returns a value
of
1.
The
aexp
must
be
a
number
between 0 and 7 as
it
designates
the
controller.
Format:
STICK(aexp)
Example:
100 PRINT
STICK(3)
This
function
works
exactly
the
same
way
as
the
PADDLE
command,
but
can
be
used
with
the
joystick
controller.
The
joystick
controllers
are
numbered
from
0-3
from
left to
right.
Controller
1 =
STICK(O)
Controller
2 = STICK(l)
Controller
3
==
STICK(2)
Controller
4 =
STICK(3)
Figure
10-3
shows
the
numbers
that
will
be
returned
when
the
joystick
con-
troller
is
moved
in
any
direction.
Sounds
and
Game Controllers
59

MEMORY
CONSERVATION
11
ADVANCED
PROGRAMMING
TECHNIQUES
This
section
includes
hints
on
increasing
programming
efficiency,
conserving
memory,
and
combining
machine
language
programs
with
Atari
BASIC
pro-
grams.
This
section
does
not
include
an
instruction
set
for
the
6502
micro-
processor
chip
nor
does
it
give
instructions
on
programming
in
machine
language.
An
additional
purchase
of
the
Atari
Assembler
Editor
cartridge*
and
a
careful
study
of
Atari's
Assembler
Editor
Manual
are
strongly
recommended
.
These
hints
give
ways
of
conserving
memory
. Some
ofthese
methods
make
pro-
grams
less
readable
and
harder
to
modify,
but
there
are
cases
where
this
is
necessary
due
to
memory
limitations.
1.
In
many
small
computers,
eliminating
blank
spaces
between
words
and
characters
as
they
are
typed
into
the
keyboard
will
save
memory. This
is
not
true
of
the
ATARI
Personal
Computer
System,
which
removes
extra
spaces.
Statements
are
always
displayed
the
same
regardless
of
how
many
spaces
were
used
on
program
entry.
Spaces
should
be
used
Gust as
in
typing
on
a
conventional
typewriter)
between
successive
keywords
and
between
keywords
and
variable
names.
Here
is
an
example:
10
IF A
5 THEN PRINT A
Note
the
space
between
IF
and A and
between
THEN
and
PRINT.
In
most
cases, a
statement
will
be
interpreted
correctly
by
the
computer
even
if
all
spaces
are
left
out,
but
this
is
not
always
true.
Use
conventional
spacing.
2. Each
new
line
number
represents
the
beginning
of
what
is
called a new
"logical
line".
Each
logical
line
takes
6 bytes
of "overhead
",
whether
it
is
used
to
full
capacity
or
not.
Adding
an
additional
BASIC
statement
by
using
a
colon
(:)
to
separate
each
pair
of
statements
on
the
same
line
takes
only
3
bytes.
*Available
late
1980.
Advanced Programming Techniques
61

If
you
need
to
save
memory,
avoid
programs
like
this:
10
>{='r'+1
20
V=Y+1
3e
Z=X+"i'
40
PRI~H
Z
5e
GOTO
53
and
consolidate
lines
like
this:
10
>::=:~+l:Y='l+1:2=::·::+'-f
:
PRINT
Z:GOTO
10
This
consolidation saves
12
bytes.
3.
Variables
and
constants
should
be
"managed"
for
savings,
too. Each
time
a
constant
(4,5,16,3.14159, etc.) is used,
it
takes 7 bytes.
Defining a new
variable
requires 8 bytes
plus
the
length
of
the
variable
name
(in characters).
But
each
time
it
is
used
after
being
defined,
it
takes
only 1 byte,
regardless
of
its
length.
Thus,
if a constant
(such as 3.14159) is
used
more
than
once
or
twice
in a program,
it
should
be
defined
as a variable,
and
the
variable
name
used
throughout
the
program.
For
example:
10
PI=3 .
14159
20
PRINT
"AREA
OF
A
CIRCLE
IS
THE
RADIUS
SQUARED T It1ES
II
i
pI
4. Literal
strings
require 2 bytes
overhead
and 1 byte
for
each
character
(including
all spaces)
in
the
string.
5.
String
variables
take 9 bytes
each
plus
the
length
of
the
variable
name
(including
spaces)
plus
the
space
eaten
up
by
the
DIM
statement
plus
the
size
ofthe
string
itself(1
byte
per
character,
including
spaces)
when
it is
defined.
Obviously,
the
use
of
string
variables
is
very
costly
in
terms
of
RAM.
6. Definition
of a new
matrix
requires
15
bytes
plus
the
length
of
the
matrix
variable
name
plus
the
space
needed
for
the
DIM
statement
plus 6 times
the
size
of
the
matrix
(product
of
the
number
of
rows
and
the
number
of
col-
umns).
Thus,
a 25
row
by 4 column
matrix
would
require
15 +
approxi-
mately
3 (for
variable
name) + approximately
10
(for
the
DIM
statement)
+ 6
times
100 (the
matrix
size),
or
about
630
bytes.
82
Advanced Programming Techniques

PROGRAMMING
IN
MACHINE
LANGUAGE
7. Each
character
after
REM
takes
one
byte
of
memory.
Remarks
are
helpful
to
people
trying
to
understand a program,
but
sometimes
it
is
necessary
to
remove
remark
statements
to
save
memory.
8.
Subroutines
can
save
memory
because
one
subroutine
and
several
short
calls
take
less
memory
than
duplicating
the
code
several
times.
On
the
other
hand, a subroutine
that
is
only
called
once
takes
extra
bytes
for
the
GOSUB
and·
RETURN
statements.
9.
Parentheses
take
one
byte
each.
Extra
parentheses
are
a good
idea
in
some
cases
if
they
make
an
expression
more
understandable
to
the
programmer
.
However,
removing
unnecessary
parentheses
and
relying
on
operator
precedence
will
same a few
bytes.
Machine
language
is
written
entirely
in
binary
code.
The
AT
ARI
Personal
Com-
puter
contains
a 6502
microprocessor
and
it
is possible to call 6502
machine
code
subroutines
from
BASIC
using
the
USR
function. Short
routines may
then
be
entered
into a program
by
hand
assembly
(if
necessary).
Before it
returns
to
BASIC,
the
assembly
language
routine
must
do a pull
ac-
cumulator
(PLA)
instruction
to
remove
the
number
(N)
of
input
arguments
off
the
stack.
If
this
number
is
not
0,
then
all
ofthe
input
arguments
must
be
pop-
ped
off
the
stack
also
using
PLA. (See
Figure
6-1).
The
subroutine
should
end
by
placing
the
low
byte
of
its
result
in
location 212
(decimal),
and
then
return
to
BASIC
using
an
RTS
(Return
from
Subroutine)
in-
struction.
The
BASIC
interpreter
will
convert
the
2-byte
binary
number
stored
in
locations 212
and
213
into
an
integer
between 0 and
65535
in
floating-point
format
to
obtain
the
value
returned
by
the
USR
function.
The
ADR
function may
be
used
to
pass
data
that
is
stored
in
arrays
or
strings
to
a
subroutine
in
machine
language. Use
the
ADR
function
to
get
the
address
of
the
array
or
string,
and
then
use
this
address
as
one
of
the
USR
input
arguments.
The
following
program,
Hexcode Loader,
provides
the
means
of
entering
hexa-
decimal
codes, co
nverting
each
hexadecimal
number
to
decimal,
and
storing
the
decimal
number
into
an
array.
The
array
is
then
executed
as
an
assembly
language
subroutine.
(An
array
is
used
to
allocate space
in
memory
for
the
routine.)
Advanced Programming Techniques
63

Address
Object
Code
02C4
02C5
02C6
02C7
6000 68
6001
A200
6003
ACC402
6006
BDC502
6009
9DC402
600C
E8
600D
E002
600F
90F5
6011 8CC602
6014 60
Assembler
Prints
This
11
Indicates
data
(source)
*
Routine
is
relocatable
When
completed,
type
DONE
and
press
lilii!lmJ.
Now
place
the
cursor
after
the
last
entry
(999)
on
the
DATA
line
and
press
lilii!lmJ.
Now
run
the
program
by
typing
GOTO 1000
and
pressing
limml3,or
add
line
5
GOTO 1000
and
type
RUN
lilii!lmJ.
Press
l!m!!:l
to
stop
program
and
delete
line
5.
Figure
11-2
illustrates
an
assembler
subroutine
used
to
rotate
colors
which
might
prove
useful.
It
is
included
here
for
the
information
of
the
user.
Assembler
Subroutine
to
Rotate
Colors
..
Line
No.
0100
0110
0120
0130
0140
0150
0160
0170
0175
0180
0190
0200
0210
0220
0230
0240
0250
0260
0270
0280
0290
Label
Mnemonic
Data
Routine
to
rotate
COLOR
data
From
one
register
to
another.
4
colors
are
rotated.
Operating
system
address
COLOR 0 = $02C4
COLOR 1 = $02C5
COLOR 2 = $02C6
COLOR 3 = $02C7
*=
$6000
Machine
program
starting
address*
PLA
Pop
stack
(See
Chapter
4)
LDX
110
Zero
the X register
LDY
COLORO
Save COLOR 0
LOOP
LDA COLOR1,X
STA
COLORO,X
INX
Increment
the
X re.e;ister (add
one)
CPX
113
Compare
contents
of X register
with
2
BCC
LOOP Loop
if X register
contents
are
less
than
2
STY
COLOR3
Save COLOR 0
in
COLOR 3
RTS
Return
from
machine
level
sub-
routine
This
Portion
is
Source
Information
Programmer
Enters
Using
Atari
Assembler
Cartridge
$
Indicates a hexadecimal
number
Figure
11-2.
Assembler
Subroutine
To
Rotate
Colors
Advanced Programming Techniques
67

ERROR
CODE
NO.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ERROR
CODE
MESSAGE
APPENDIX
B
ERROR
MESSAGES
Memory
insufficient
to
store
the
statement
or
the
new
variable
name
or
to
DIM a
new
string
variable.
Value
Error: A value
expected
to
be a positive
integer
is
negative, a value
ex-
pected
to
be
within
a specific
range
is
not.
Too
Many
Variables: A maximum
of
128
different
variable
names
is
allowed.
(See
Variable
Name
Limit.)
String
Length
Error:
Attempted
to
store
beyond
the
DIMensioned s
tring
length.
Out
of
Data
Error: READ
statement
requires
more
data
items
than
supplied
by
DATA
statement(s).
Number
greater
than
32767:
Value
is
not a positive
integer
or
is
greater
than
32767.
Input
Statement
Error:
Attempted
to
INPUT a non-numeric
value
into
a
numeric
variable.
Array
or
String
DIM
Error:
DIM
size
is
greater
than
32767
or
an
array/martix
reference
is
out
of
the
range
of
the
dimensioned
size, or
the
array/matrix
or
string
has
been
already
DIMensi
oned,
or a reference
has
been
made
to
an
undimensioned
array
or
string.
Argument
Stack
Overflow:
There
are
too
many
GOSUBs
or
too
large
an
expres-
sion.
Floating
Point
Overflow/Underflow
Error:
Attempted
to
divide
by
zero
or
refer
to a number
larger
than
1 x
10
96
or
smaller
than
1 x
10-
99
•
Line
Not
Found:
A GOSUB, GOTO,
or
THEN
referenced a non-existent
line
number
.
No
Matching
FOR
Statement:
A NEXT
was
encountered
without a previous
FOR,
or
nested
FOR/NEXT
statements
do
not
match
properly.
(Error
is
reported
at
the
NEXT
statement,
not
at
FOR).
Line
Too
Long
Error:
The
statement
is
too
complex
or
too
long
for
BASIC
to
handle.
GOSUB
or
FOR
Line
Deleted:
A NEXT
or
RETURN
statement
was
encountered
and
the
corresponding
FOR
or
GOSUB
has
been
deleted
since
the
last RUN.
App
endix
B-1

ERROR
CODE
NO.
143
144
145
146
147
160
161
162
163
164
165
166
167
168
169
170
171
ERROR
CODE
MESSAGE
Serial
bus
data
frame
checksum
error.
Device
done
error
(invalid "done"
byte):
Attempt
to
write
on a write-protected
diskette.
Read
after
write
compare
error
(disk
handler)
or
bad
screen
mode
handler.
Function
not
implemented
in
handler.
Insufficient
RAM
for
operating
selected
graphics
mode.
Drive
number
error.
Too
many
OPEN
files
(no
sector
buffer
available).
Disk
full
(no
free
sectors).
Unrecoverable
system
data
I/0
error.
File
number
mismatch:
Links
on
disk
are
messed up.
File
name
error.
POINT
data
length
error.
File
locked.
Command
invalid
(special
operation
code).
Directory
full
(64 files).
File
not
found.
POINT
invalid.
Append£);
B-3

ADDRESS
CONTENTS
Decimal
Hexadecimal
4863
12FF
FILE
MANAGEMENT
SYSTEM RAM
(current
DOS)
1792
700
1791
6FF
FREE RAM
1536
600
1535
5FF
FLOATING
POINT
(used
by
BASIC)
1406
57E
1405
57D
BASIC CARTRIDGE
1152
480
1151 47F
]
OPERATING
SYSTEM
RAM
(47F-200)
3FD
CASSETTE BUFFER
1021
1020
3FC
RESERVED
1000
3E8
999
3E7
PRINTER BUFFER
960
3CO
959
3BF
J
IOCB's
832
340
831
33F
J
MISCELLANEOUS OS VARIABLES
512
200
511
1FF
HARDWARE
STACK
256
100
255
FF
PAGE
ZERO
FLOATING
POINT
(used
by
BASIC)
212
D4
211
D3
BASIC
or
CARTRIDGE PROGRAM
210
D2
209
D1
FREE BASIC RAM
208
DO
207
CF
FREE BASIC
AND
ASSEMBLER RAM
203
CB
202
CA
FREE ASSEMBLER
RAM
}
176
BO
BASIC
128
80
ASSEMBLER ZERO
PAGE
ZERO
PAGE
127
7F
OPERATING SYSTEM RAM
0
0
As
the
addresses
for
the
top
of
RAM, OS,
and
BASIC
and
the
ends
of
OS
and
BASIC
vary
according
to
the
amount
of
memory,
these
addresses
are
indicated
by
pointers.
The
pointer
addresses
for
each
are
defined
in
Appendix
I.
D-2
Appendix

Derived
Functions
Secant
Cosecant
Inverse
Sine
Inverse
Cosine
Inverse
Secant
Inverse
Cosecant
Inverse
Cotangent
Hyperbolic
Sine
Hyperbolic
Cosine
Hyperbolic
Tangent
Hyperbolic
Secant
Hy
perbolic
Cosecant
Hyperbolic
Cotangent
Inverse
Hyperbolic
Sine
Inverse
Hyperbolic
Cosine
Inverse
Hyperbolic
Tangent
Inv
erse Hy
per
bolic Sec
ant
Inverse
Hyperbolic
Cosecant
Inverse
Hyperbolic
Cotangent
Notes:
APPENDIX
E
DERIVED
FUNCTIONS
Derived
Functions
in
Terms
of
Atari
Functions
SEC(X)"' 1/COS(X)
CSC(X)"' 1/SIN(X)
ARCSIN(X)
"'A
TN(X/SQR( -X*
X+
1))
ARCCOS(X)"'
-A
TN(X/SQR(-
X*
X+
1)
+CONSTANT
ARSEC(X)
"'ATN{SQR(X
* X-1)) + (SGN(X-1)*
CONSTANT
ARCCSC(X)
"'A
TN(1
/SQR(X * X-1)) + (SGN(X-1)
*CONSTANT
ARCCOT(X)
"'A
TN(X)
+CONSTANT
SINH(X)"' (EXP(X)-EXP(-X))/2
COSH(X) "'(EXP(X) + EXP(-X))/2
TANH(X),-EXP(-X)/(EXP{X)
+EXP(-X))
*2
+ 1
SECH(X) = 2/(EXP(X) + EXP(-
X))
CSCH(X) = 2/(EXP(X)-EXP(-X))
COTH(X) = EXP(-X)/(EXP(X)-EXP(-X)}* 2 + 1
ARCSINH(X)
=LOG(
X+
SQR(X
*X+ 1 ))
ARCCOSH(X) + LOG(X + SQR(X * X-1))
ARCTANH(X)
"'LOG((1 + X)/(1-X))/2
ARCSECH(X) =LOG((SQR(-
X*
X+
1) + 1)/X)
ARCCSCH(X) "'LOG((SGN(X) * SQR(X
*X+
1) + 1)/X)
ARCCOTH(X) = LOG((X + 1)/(X-1))/2
1.
If
in
RAD
(default)
mode,
constant
= 1.57079633
If
in
DEG
mode,
constant
= 90.
2.
In
this
chart, the
variable X in
parentheses
represents
the
value
or
expression
to
be
evaluated
by
the
derived
function
. Obviously,
any
variable
name
is
permissible,
as
long
as
it
represents
the
number
or
expression
to
be evaluated.
App
endix
E-1

AlphanuDieric:
Array:
AT
ASCII:
BASIC:
Binary:
Bit:
Branch:
Bug:
Byte:
Central
Processing
Unit
(CPU):
Code:
Con1mand:
APPENDIX G
GLOSSARY
The
alphabetic
letters
A-Z,
the
numbers
0-9,
and
some
symbols.
(No
punctuation
marks
or
graphics
symbols).
A list
of
numerical
values
stored
in
a series
of
memory
locations
preceded
by a DIM
statement.
May
be
referred
to
by
use
of
an
array
variable,
and
its
individual
elements
are
referred
to
by
subscripted
variable
names.
Stands
for
Atari
American
Standard
Code
for
Information
Inter-
change.
High level
programming
language.
Acronym
for
Beginner's
All-
purpose
Symbolic
Intruction
Code.
BASIC
is
always
written
using
ali
capital letters. Developed
by
Mssrs.
Kemeny
and
Kurtz
at
Dartmouth
College
in
1963.
A
number
system
using
the
base
two.
Thus
the
only
possible
digits
are 0 and
1,
which
may
be
used
in a computer
to
represent
true
and
false,
on
and
off, etc.
Short
for
Binary
Digit. A
bit
can
be
thought
of
as
representing
true
or
false,
whether a circuit
is
on
or
off,
or
any
other
type
of
two-
possibility concept. A
bit
is
the
smallest
unit
of
data
with
which
a
computer
can
work.
Atari
BASIC
executes a program
in
order
of
line
numbers.
This
ex-
ecution
sequence
can
be
altered
by
the
programmer,
and
the
pro-
gram
can
be
told
to
skip
over a certain
number
of
lines
or
return
to
a
line
earlier
in
the
program.
This
contrived
change
in
execution
se-
quence
is called
"branching".
A
mistake
or
error
usually
in
the
program
or
"software"
.
Usually
eight
bits
(enough
to
represent
the
decimal
number
255
or
11111111
in
binary
notation). A
byte
of
data
can
be
used
to
represent
an
A TASCH
character
or a number
in
the
range
ofO
to 255.
In
microcomputers
such
as
the
Atari
systems,
these
are
also called
microprocessors
or
MPU.
At
one
time,
the
CPU
was
that
portion
of
any
computer
that
controlled
the
memory
and
peripherals.
Now
the
CPU
or
MPU is usually
found
on
a single
integrated
circuit
or
"chip"
(in
Atari's
case a 6502
microprocessor
chip).
Instructions
written
in a language
understood
by a computer.
An
instruction
to
the
computer
that
is
executed
immediately. A good
example
is
the
BASIC
command
RUN. (See
Statement.)
Appendix
G-1

HardW"are:
Increment:
Initialize:
Input:
Interactive:
Interface:
IOCB
I/0:
K:
KeyW"ord:
Language:
Memory:
Menu:
Microcomputer:
Monitor:
Null
String:
OS:
Output:
Parallel:
Peripheral:
The
physical
apparatus and
electronics
that
make
up a computer.
Increase
in
value
(usually)
by
adding
one.
Used a lot
for
counting
(as
in
counting
the
number
of
repetitions through
a loop).
Set
to
an
initial
or
starting
value.
In
Atari
BASIC, all
non-array
variables
are
initialized
to
zero
when
the
command
RUN
is
given.
Ar-
ray
and
string
elements
are
not
initialized.
Information
transfer
to
the
computer.
Output
is
information
transfer
away
from
the
computer.
In
this
manual,
input
and
output
are
always
in
relation
to
the
computer.
A
system
that
responds
quickly
to
the
user,
usually
within a second
or
two
. All
personal
computer
systems
are
interactive.
The
electronics
used
to
allow
two
devices
to
communicate.
Input/Output
Control
Block. A
block
of
data
in
RAM
that
tells
the
Operating
System
the
information
it
needs
to
know
for
an
I/0
opera-
tion.
Short
for
input/output,
I/0
devices
include
the
keyboard,
TV
monitor,
program
recorder,
printer,
and
disk
drives.
Stands
for
"kilo"
meaning
"times
1000".
Thus
1 KByte is (approx-
imately)
1000
bytes
. (Actually
1024
bytes.)
Also,
the
device
type
code
for
the
Keyboard.
A
word
that
has
meaning
as
an
instruction
or
command
in a com-
puter
language,
and
thus
must
not
be
used
as a
variable
name
or
at
the
beginning
of a variable
name.
A set
of
conventions
specifying
how
to
tell a computer
what
to
do.
The
part
of a computer
(usually
RAM
or
ROM)
that
stores
data
or
in-
formation.
A list
of
options
from
which
the
user
may
choose.
A
computer
based
on a microprocessor
chip;
in
Atari's
case,
the
6502.
The
television
receiver
used
to
display
computer
output.
A
string
consisting
of
no
characters
what
ever.
Abbreviation
for
Operating
System.
This
is
actually
a collection
of
programs
to
aid
the
user
in
controlling
the
computer.
Pronounced
"oh
ess".
See
1/0.
Two
or
more
things
happening
simultaneously. A parallel
interface,
for
example,
controls a number
of
distinct
electrical
signals
at
the
same
time.
Opposite
of
serial.
An
I/0
device. See
1/0
.
Appendix G-3

H-2
Appendix
22f1
IF
A:t<
1 J 1
)=II
t-f'
THHl
4(10
230
IF
A:t( 1 ..
1 ){
>!''r'"
THEH
200
240
TRAP
180
250
LPF.~
I
r·H
:
F::8"1
TE~:T
PR
I
r·-iTE~:
260
PERt-1:=1
280
LPF.: I t·n
II
YOU
F.
:
BEG
I
t·.tt
1 r
r·iG
E;,;Ui!·iCE
I::;
:t
•!
.i
YOU~:E:AL
f'90
LPR
I
f·~T
u
EAt·4~< ~3TATEt
·
1Et·~T
BE
I~ I r-
~~-~
I
~·~G
BAL
At·CE
r s
$"
.;
BANI<BAL , LPR
I
t·n
400
TPAP
400
:?
:?
"Chu.:t$e
o:•ne
of
the f eo
1
lowin~:"
41
a ? " ( 1
::o
!I
;
tt::G
1 z
415
·t·
"(
2)
II
j
tt3(~2$
4~'0
·;.·
11
( 3 ) n
.i
f1SJ~3$
425
·t
430
·::·
435
'?
440
""?
49ft
.-
.
•
II(
4)
II{
c:"
••
1
'..J
.•
11(6)
"(
7)
II;
t·1SG4$
II
;MSG5:t
II
;ftSG6$
DOt·lE
11
500
INPUT
H : IF
t~
<
1
OR
t·~
>7
THEt-~
400
505
TRAP
4fl~i€10
510
ON H GOSUB
10~30
..
20(10
..
30;3[1, 4;300
..
5€10(1,
600f1
J
7[~)0
5~'0
i1SG$=
II
t·lH~
CHECKBOOK
BALAt·iCE
Is
II
:
At10Ut·lT=\'OUF.:8AL;
GOSUB
:3000
539
t1SG$="t·lEJ.~
E:ANK
STATH1EHi
BALAt·~CE
IS
II
:
At10Ut·lT
=8ANK8HL ; GOSU8
8000
540
r·1SG$=
II
our::::r
A~~o
1
t·iG
cHEo:s-DEPos
r
TS=
II
:
At10UNT=OUT:3iA~~D
:
GOSUB
:30(10
545
IF
PERt
·1
THEt
·i
LPR
I
t·H
550
GOTO
400
1000
REt·1
OLD
CHECK
--
::;TILL
OUT::;TAr
·
[!!t-~G
1010 t·
1SG$=t·1SG1$:
GO~:;UB
:31fi0
10'20
OUiSTAt·~O=OUiSTAr·i[H-At·1C;U
r
H
1030
F.~ETURN
2000
REt1
OLD
DEPOSIT --ST!
LL
HOT
CREDIT
EO
201(1
M:3G$=t1SG2$:
GOSUB
:::1t1~3
2020
OUT::;TAt·[I=OUT
:::
TAt·~-At·lOUr
·
n
2030
~:ETURt
·
~
3W3
REr-1
OLD
CHECK
--
.J
...
r.:;T
CLEAF.:EO
3010
MSG$=tt3G3$
=
GOSUE:
:::10t1
3020
BANKBAL
=E:ANKE:AL-At"Kll_ir
·H
3030
F.:ETURt
·
~
4000
REt1
OLD
DEPOSIT --JUST
CREDITED
4010
t1SG$=tt3G4$:
GOSUE:
8100
4020
E:At·~KE:AL
=E:AHK8AL
+At·10Ur·H
4030
RETURr~
5000
REt1
NEl·l
CHECK
(
0~:
:3ERl..J
ICE
CHAPGE
:::
-
-
JUST
CLEA~£0
5010
t1SG$=tt3G5$:
GOSUE:
81£10
5020
'lOURBAL
=YOUR8AL
-AnOUNT

5030
?
II
I:;
t·~El·J
CHECl::
srI
LL
our::;TAr·iO
HiG"
.•
:
It~PUT
A$
5040
IF
LEt·K
A:t
)=(1
THD·~
5f13(i
5050
IF
A$(
1, 1 )(
>II
N"
THEt·~
$)60
5055
E:AHKBAL=8At·iKBAL-At10Ut·H
5057
IF
PERt·1
Th'H~
LPF.:
I
t·H
"CHECK
HA::;
CLE~I
RED
.
II
5058
RETURt·4
5060
IF
A$(
1,
1
){>nyu
THH~
5£130
5070
OUTSTANO=OUTSTAt
·
ntAt·10UNi
5075
IF
PERt·1
THHi
LPRit-IT
"CHECK
IS
STILL
ouTSTAHD
It·~~
.
II
5080
F.:ETURr·~
60€10
RH1
~lB·l
OEPOS
IT ( OR
I
t~TEPEST
) --..JU
ST
CF~ED
I
TED
6010
11SG:t=r-t3G6$:
GOSUB
8100
602~1
'iOURBAL=\'OUF.:E:AL
+AmUt·H
603(1
?
11
HAS
'lOU~
:
HEl·J
OEP0:3
IT
BEH~
CREDIT
ED";
:INPUT
A$
6040
IF
LHK
A$
)=0
THH~
6030
605(1
IF
A$( 1 ·' 1 ){
>
.......
II
THH~
606~Z1
6052
E:At~K8AL=E;At
·
iK8AL
+At·10Ut·H
6053 IF
PERt1
THEt-i
LPF.:
I
NT
"DEP0:3
IT
HA::;
BE
EN
CRED I TEO
.
II
6055
F~ETURt·l
6060
IF
A$(
1
·'
1 )(
>II N !I
THH~
6030
6070
OUT:3TAt·iD=OUTSTAt
·
iD-At·10Ut-H
6075
IF
PERt·l
THEt·4
LPR
I
HT
11
OEPO::;
IT
HA:3
t·iO
T
BEEt·~
CF.:EO
ITEO
.
II
6080
F.:ETURr~
7000
F.H1
[RJt·iE
7010
?
11
BAt·lK
Is
BALAt·~CE
t-Ht·t
u~; ( oursTA~iOI
H
G
CHEC!<:3-DEPOS I T:3 ) SHOULD
r·~m·J
E@JAL
YOURCHECKBOOK
BALAt·iCE
. u
7020
D!F='/OUP8AL
-(8At
·iK
E:AL-OUT::;TAt·1D
)
7030
IF
OIF<
>0
THH~
7040
7035
? " r s $
11
i
BAt·il<BfiL
.i
II
THE
Er·{D
I
~·~G
BALAt
·i
CE
Ot-i
'r'OU~:
BAHK
STATEt-1Et-H
II
,; : !
t·4F'UT
A$
7036
IF
LHK
A$
)=(1
THEt~
7035
7037
IF
A$(
1
..
1
)=
11
Y"
THE~ ? '1COt·iGP~1TULATI
ms
:
'lOUP
CHECKBOOK
BALAr·iCE
::;
! " :
a10
703:3
GOiO
706t]
7040
IF
OIF:::{1
THEt-i
?
11
\'0UP
CHECKBOOK
TOT
AL
IS
$"
;OIF;
II
Ol,IEF~
'lOUR
t:At·~r<'S
TOTAL
. n
:GQTO
7060
7050
'?
"'r'OU~:
CHECKBOOK
TOTAL
IS
$n;
-OIF;
II
Ut·iDER
''i'
OUF.:
BAt·iK
Is
TOTAL
.
!!
7060
·-::·
~~~~OULD
~~ou
LIKE
TO
t·1AKE
COF.:F.:ECiiO
t·
iS'?
11
7070
·{
II
REt1Et18EF.: ·'
'lOU
CAt·i
ENTEF.:
A
~·iEGAT
I
l)E
DOLLAR
I..JALUE
TO
t1AK£
A
CORRECT I ON
.
II
Appendix
H-3