ATARI 400/800 computer BASIC reference manual
Below you will find brief information for computer 400/800. The computer 400/800 is a personal computer system capable of executing commands in BASIC. It has a unique set of graphic capabilities and a library of built-in functions.
Advertisement
Advertisement
*--,,
. .
__.... .:• e-m-5 e
- •
_
.
'
_
-
:•44.34,=e- -
-
.
-..-
„.•
.... ..
-
_
••, .,‘
,.-•
'
'
2.1
54tr'-
-
-
4,.., e-----
- -,
.
» -
•
•
*
'
,
'../.
,.
"--'-',.':1-: --
,
..•
•
.
g i
'
..--.Z.: '`.1. -
,
-
4,e
-',-- -- --
-
-
-
- o pete
_
,
_
4
* l
a.--
'.•Tal*
...
-
,.'
• 's
.
• _
,• --‘,.,
.
,
-
=2,
..'
-
,
„.
.
-
--.
- ,,.,----,..-. k
,
.
...,„.. ,=
"T--s
.
..4
,
,
e stii
•:
• --,..
'.4e--,
...
y i.,_.,
,
---;_e-,-...-e%-..--_-:
.- „-
,-„--.-,.....r.
Iter,.,'
-
-
,
,
,
,•"-:7-
_
'
.
,....-
.
.- -e ,
: -,
\----
- -
7.
-
:
_,...4•"*"------Y
V
- -.--.- -
-1 *‘ -, e re
,
_J
-
'
.
-
-
-
----'----
1
,,,c.;*-------,---_-
7:;'
'''
•
-
----
--.
7}---- -- --.
--- .
.
.
ATA
.
t
,
1 "41
2
-
‘.
/
I
,,,,,
,
, Illeria'
'
,,
------,
,t--
ri _
-:'
• .
.•
___.
.
2,
..,,._:,,,..e.(,...„..,,.-.:._-__..,...
'
F--='re%„
- e
.
,.
•=',
-
•,-.
-i. -,--,
,
',7--.- '--
-,-,-
`. 54---_ l''' ....- .1,
--7Ae .>
----
eAt
a
oeys Coigazanyet
• 1,
-
■
- ,'
\
.
.--_
_
.
'
g' '
...
,
'-- ' ,
-7 .
-
-
,_
,_
.
-
'
,
- ' . "
'"
-
.-
.._ __ -
-
..
-*
-
--
•---.-
-t
,...
w
'
.'
,
'-
iii
r
-..<-;--__-....__.,.. e
-
----.-_,_-_
...... - _
-
..,-----"....._-- ,-
--
-- .,.--.7-,--,,,24-- -....-rr,--,--'
-
-,
•
•
-
,...„
..
-.,,,,-..
-
...,
'",--.. ___,,.
.
..4
-
N.
7
,--
. ..,.
--";•'
,
' e,
,
..
.
› .
.
-
-
s
y
•-:,.--
-
'
.
_
'
..
_
,...,----
.._ -..-.
....„
1
,
..
...,„
' 'a
I
'.. ..,
■
-4".,-,- -
•
Ar41
e
-
,
17.---,:i
-.77'
,1"
•
.
I
T
-
J '
0--ell
.-;.--
-,.....
-
,
ERROR CODES
ERROR
CODE ERROR CODE MESSAGE
2
3
4
5
6
7
8
Memory Insufficient
Value Error
Too Many Variables
String Length Error
Out of Data Error
Number greater than 32767
Input Statement Error
9
Array or String DIM Error
10 Argument Stack Overflow
11 Floating Point Overflow/
12
Underflow Error
Line Not Found
13
14
15
16
No Matching FOR Statement
Line Too Long Error
GOSUB or FOR Line Deleted
RETURN Error
17
Garbage Error
18
Invalid String Character
Note: The following are INPUT/OUTPUT errors that result during the use of disk drives, printers, or other accessory devices. Further information is provided with the auxiliary hardware.
19
134
135
136
137
138
139
140
141
20
21
128
129
130
131
132
133
LOAD program Too Long
Device Number Larger
LOAD File Error
BREAK Abort
IOCB
Nonexistent Device
IOCB Write Only
Invalid Command
Device or File not Open
BAD IOCB Number
IOCB Read Only Error
EOF
Truncated Record
Device Timeout
Device NAK
Serial Bus
Cursor Out of Range
ERROR
CODE ERROR CODE MESSAGE
142
143
144
145
146
147
160
161
162
163
164
165
166
167
168
169
170
171
Serial Bus Data Frame Overrun
Serial bus data frame checksum error
Device done error
Read after write compare error
Function not implemented
Insufficient RAM
Drive number error
Too many OPEN files
Disk full
Unrecoverable system data I/O error
File number mismatch
File name error
POINT data length error
File locked
Command invalid
Directory full
File not found
POINT invalid
For explanation of Error Messages see Appendix B.
BASIC
REFERENCE
MANUAL
)IL
ATARI®
0
A Warner Communications Company
Every effort has been made to ensure that this manual accurately documents the operation of the ATARI 400 and the ATARI 800 computer. However, due to the ongoing improvement and update of the computer software, Atari, Inc. cannot guarantee the accuracy of printed material after the date of publication, nor can Atari accept responsibility for errors or omissions. Revised manuars and update sheets will be published as needed and may be purehased by writing to:
Atari Software Support Group
P.O. Box 427
Sunnyvale, CA 94086
©1980 ATARI, INC.
Printed in USA
CONTENTS
PREFACE
1 GENERAL INFORMATION
Terminology
Special Notations Used In This Manual
Abbreviations Used In This Manual
Operating Modes
Special Function Keys
Arithmetic Operators
Operator Precedence
Built-In Functions
Graphics
Sound and Garnes
Wraparound and Keyboard Rollover
Error Messages
2 COMMANDS
BYE
CONT
END
LET
LIST
NEW
REM
RUN
STOP
3 EDIT FEATURES
Screen Editing
Contröl (CTRL) Key
Shift Key
Double Key Functions
Cursor Control Keys
Keys Used With CTRL Key
Keys Used With Shift Key
Special Function Keys
Break Key
Escape Key
4 PROGRAM STATEMENTS
FOR/NEXT/STEP
GOSUB/RETURN
GOTO
IF/THEN
15
16
17
18
Contents
lii
13
13
13
14
14
14
14
14
14
14
9
9
9
10
10
10
10
11
11
vii
1
3
4
5
5
6
7
7
8
8
8
8
IV COntents
ON/GOSUB
ON/GOTO
POP
RESTORE
TRAP
5 INPUT/OUTPUT COMMANDS
Input/Output Devices
CLOAD
CSAVE
DOS
ENTER
INPUT
LOAD
LPRINT
NOTE
OPEN/CLOSE
POINT
PUT/GET
READ/DATA
SAVE
STATUS
XIO
Chaining Programs
6 FUNCTION LIBRARY
Arithmetic Functions
ABS
CLOG
EXP
INT
LOG
RND
SGN
SQR
Trigonometric Functions
ATN
COS
SIN
DEG/RAD
Special Purpose Functions
ADR
FRE
PEEK
POKE
USR
7 STRINGS
ASC
CHR$
33
33
34
34
35
35
35
35
35
35
35
36
33
33
33
34
34
34
34
34
37
37
23
24
24
25
25
25
26
26
26
26
28
28
28
28
29
29
30
30
20
20
20
21
22
LEN
STR$
VAL
String Manipulations
8 ARRAYS AND MATRICES
DIM
CLR
9 GRAPHICS MODES AND COMMANDS
GRAPHICS
Graphics Modes
Mode 0
Modes 1 and 2
Modes 3, 5, and 7
Modes 4 and 6
Mode 8
COLOR
DRAWTO
LOCATE
PLOT
POSITION
PUT/GET
SETCOLOR
XIO (Special Fill Application)
Assigning Colors to Text Modes
Graphics Control Characters
10 SOUND AND GAME CONTROLLERS
SOUND
PADDLE
PTRIG
STICK
STRIG
38
38
38
39
41
43
57
59
59
59
60
11 ADVANCED PROGRAMMING TECHNIQUES
Memory Conservation
Programming In Machine Language
61
63
APPENDIX A BASIC RESERVED WORDS
A-1
APPENDIX B ERROR MESSAGES
B-1
APPENDIX C ATASCII CHA.RA.CTER SET
WITH DECIM.AL/
HEXADECIMAL LOCATIONS c-i.
APPENDIX D ATARI 400/800
MEMORY MAP
D-1
45
45
46
46
47
48
47'
48
48
48
49
49
49
50
54
54
56
Contents V
vi Contents
APPENDIX E DERIVED FUNCTIONS
APPENDIX F PRINTED VERSIONS OF
CONTROL CHARACTERS
APPENDIX G GLOSSARY
APPENDIX H USER PROGRAMS
APPENDIX I MEMORY LOCATIONS
INDEX
F-1
G-1
11-1
I-1
117
PREFACE
This manual assumes the user has read the Atari BASIC — A Seif-Teaclang
Guide or some other book on BASIC. This manual is not intended to "teach"
BASIC. lt is a reference guide to the commands, statements, functions, and special applications of Atari® BASIC.
The programs and partial programming examples used in this manual are photostats oflistings printed on
the Atari 820TM Printer. Some of the special Sym- bols
in the Atari character set do not appear the same on the printer; e.g., the clear screen symbol appears as a " ". The examples in the text were chosen to illustrate a particular function — not necessarily "good" programming techniques.
Each of the sections contains groups of commands, functions, or statements dealing with a particular aspect of Atari BASIC. For instance, Section 9 contains all the statements pertaining to Atari's unique graphics capabilities. The appendices include quick references to terms, error messages, BASIC keywords, memory locations, and the ATASCII character set.
As there is no one specified application for the Atari Personal Computer System, this manual is directed at general applications and the general user. Appendix H contains programs that illustrate a few of the Atari system's capabilities.
Preface vii
1
GENERAL
INFORMATION
This section explains BASIC terminology, special notations, and abbreviations used in this manual, and the special keys on the ATARI 4QQTM and ATARI 800T 1
Personal Computer Systems keyboard. lt also points to other sections where
BASIC commands deal with specific applications.
TERMINOLOGY
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 Appendix A for a list of all "reserved words" or keywords in ATARI BASIC.)
BASIC Statement:
RUN.
Usually begins with a keyword, like
LET, PRINT,
or
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 variable and
100 is a constant. (See
Variable.)
Command String:
Multiple commands (or program statements) placed on the same numbered line separated by colons.
Expression:
An expression is any legal combination of variables, constants, 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. lt is really a subroutine used to compute 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 many Cases the value is simply assigned to a variable (stored in a variable) for later use. In other cases it may be printed out on the screen immediately. See Section 6 for more on functions. Examples of functions as they might appear in programs are:
113 PRINT RNE( )
11.3 Xr--.1E1F1+012( 45
(print out the random number returned)
(add the value rereturned to 100 and store the total in variable X)
General Information 1
2
Generalbyönnation
Logical Line: A logical line consists of one to three physical lines, and is terminated either by a
RETURN
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. If
RETURN
is 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 (/), exponentiation
(A),
greater than
(›), less than (<)‚ equal to ( = greater than or equal to (> .), 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 interpret 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 "ATARI 800" may be assigned to a variable called A$ using (optional)
LET
like this:
12 LET AS=HATARI
12 A$="ATARI
202"
222"
OR
(note quotation marks)
(LET is optional; the quotes are required.)
Quotation marks may not be used within a string. However, the closing quotation 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. lt is advisable not to use a keyword as a variable name or as the first part of a variable name as it may not be interpreted correctly. Examples of storing a value in a variable:
LETC127003=1_234
LETUARIABLE112=257.543
LETA=1
LETF5TH-G.5
LETTHISNO = 59.309
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.
If the screen displays an ERROR-4 (Too Many Variables) message, use the following procedure to make room for new variable names:
LIST filesPec
NEW
ENTER filesPec
The LIST filespec writes the untokenized version of the program onto a disk or cassette. NEW clears the program and the table areas. The program is then reentered, re-tokenized, and a new variable table is built. (The tokenized version is Atari BASIC's internal format. The untokenized versions in ATASCH which is the version displayed on the screen).
Arrays and Array Variables: An array is a list of places where data can be
Med for future use. Each of these places is called an element, and the whole array or any element is an array variable. For example, define "Array A" as having 6 elements. These elements are referred to by the use of subscripted variables such as A(2), A(3), A(4), etc. A number can be stored in each element. This may be accomplished element by element (using the LET statement), or as a part of a FOR/NEXT loop (see Chapter 8).
Note:
Never leave blanks between the element number in parentheses and the name of the array.
Correct Incorrect
A(23)
ARRAY(3)
X123(38)
A
(23)
ARRAY (3)
X123
(38)
SPECIAL
NOTATIONS
USED
IN THIS
MANUAL
Line Format:
The format of a line in a BASIC program includes a line number
(abbreviated to lineno) at the beginning of the line, followed by a statement keyword, followed by the body of the statement and ending with a line ter- minator command ( nETuRN key). In an actual program, the four elements might look like this:
Line Number
100
STATEMENT
Keyword
Body
A/X * (Z + 4.567)
Terminator
RETURN
Several statements can be typed on the same line provided they are separated by colons (:). See IF/THEN in Section 5, and Section 11.
Capital Letters: In this book, denote keyvvords to be typed by the user in upper case form exactly as they are printed in this text. Reverse-video characters will not work except in the case of the RUN command. Here are a few examples:
PRINT INPUT LIST END GOTO GOSUB FOR NEXT IF
Lower Case Letters: In this manual, lower case letters are used to denote the various classes of items which may be used in a program, such as variables
(var), expressions (exp), and the like. The abbreviations used for these classes of items are shown in Table 1.1.
General Information
3
Items in Brackets: Brackets, II 1, 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 of the stacked items may be used, but that only one at a time is permissible. In the example below, type either the GOTO or the GOSUB.
wo{
GOTO 12000
GOSUB
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.).
ABBREVIATIONS
The following table explains the abbreviations used throughout this manual:
USED IN THIS
MANUAL
TABLE 1.1 ABBREVIATIONS
avar
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.
svar
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.
mvar var aop
Matrix Variable: Also called a
Subscripted Variable.
An element 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 uses 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. lop aexp lexp
Logical operator.
Arithmetic Expression: Generally composed of a variable, function, constant, or two arithmetic expressions separated by an arithmetic ourator.
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 evaluates to the value 1 (true) while the expression "LEMON" = "ORANGE" evaluates to a zero
(false) as the two strings are not equal.
4 General Information
_
OPERATING
MODES
SPECIAL
FUNCTION
KEYS
sexp exp lineno adata filespec
String Expression:
Can consist of a string variable, string literal
(constant), or a function that returns a string value.
Any expression, whether sexp or aexp.
Line Number:
A constant that identifies a particular program line in a deferred mode BASIC program. Must be any integer from 0 through 32767. Line numbering determines the order of program execution.
ATASCII Data:
Any ATASCII character excluding commas and carriage returns. (See Appendix C.)
File Specification:
A string expression that refers to a device such as the keyboard or to a disk file. lt contains information on the type of I/O device, its number, a colon, an optional file name, and an optional filename extender. (See OPEN, Section 5.)
Example filespec: "Dl:NATALIE.ED"
Direct Mode:
Uses no line numbers and executes instruction immediately after
RETURN
key is pressed.
Deferred Mode:
Uses line numbers and delays execution of instruction(s) until the RUN command is entered.
Execute Mode:
Sometimes called Run mode. After RUN command is entered, each program line is processed and executed.
Memo Pad Mode:
A non-programmable mode that allows the user to experiment with the keyboard or to leave messages on the screen.
Nothing written while in Memo Pad mode affects the RAM-resident program.
CAPS/LOWR
1113
Reverse (Inverse) Video key,
or "ATARI LOGO KEY". Press- ing this key causes the text to be reversed on the screen (dark text on light background). Press key a second time to return to normal text.
Lower Case key:
Pressing this key shifts the screen characters from upper case (capitals) to lower case. To restore the characters to upper case, press the
sHIFT
key and the
CAPS/LOWR
key simultaneously.
Escape key:
Pressing this key causes a command to be entered into a program for later execution.
Example: To clear the screen, you would enter:
10 PRINT "
Em3
CLEAR "
and press
RETURN .
Escape is also used in conjunction with other keys to print special graphic control characters. See Appendix F and back cover for the specific keys and their screen-character representations.
General Information
5
BREAK
SYSTEM RESET
SET-CLR-TAB
Break key: Pressing this key during program execution causes execution to stop. Execution may be resumed by typing CONT followed by pressing
RETURN
System Reset key: Similar to
BREAK
in that pressing this key stops program execution. Also returns the screen display to
Graphics mode 0, clears the screen, and returns margins and other variables to their default values.
Tab key: Press
SHIFT
and the
SET-CLR-TAB
keys simultaneously to set a tab. To clear a tab, press the
EZ3
and
SET•CLR•TAB
keys simultaneously. Used alone, the
SET-CLR-TAB
advances the cursor to the next tab position. In Deferred mode, set and clear tabs by preceding the above with a line number, the command PRINT, a quotation mark, and press the
EZ
key.
INSERT
DELETE BACK S
DELETE BACK S
CLEAR
RETURN
Examples:
100 PRINT
"
200
"
CE31
SHIFT SET-CLR-TAB
"
1E3 Ez3
SET•CLR-TAB
"
Default tab settings are placed at columns 7, 15, 23, 31, and 39.
Insert key: Press the
SHIFT
and
INSERT
keys simultaneously to insert a line. To insert a single character, press the
GE3
and
INSERT
keys simultaneously.
Delete key: Press the
SHIFT
and
DELETE
keys simultaneously to delete a line. To delete a single character, press
EM
and
DELETE
simultaneously.
Back Space key: Pressing this key replaces the character to the left of the cursor with a space and moves cursor back one space.
Clear key: Pressing this key while holding down the
sHIFT or
EM
key blanks the screen and puts the cursor in the upper left corner.
Return key: Terminator to indicate and end of a line of BASIC.
Pressing this key causes a numbered line to be interpreted and added to a BASIC program RAM. An unnumbered line (in Direct mode) is interpreted and executed immediately. Any variables are placed in a variable table.
ARITHMETIC
OPERATORS
The Atari Personal Computer System uses five arithmetic operators:
+ addition (also unary plus; e.g., +5)
- subtraction (also unary minus; e.g., - 5)
* multiplication
/ division
A
exponentiation
LOGICAL
OPERATORS
The logical operators consists of two types:
Operator is NOT. The binary operators are:
unary
and
binary.
The unary
6
General Information
AND
Logical AND
OR
Logical OR
Examples:
10 IF A=12 ANO T=0 THEN PRINT "GOOD"
10 A = (C)1) AND (N<1)
10 A = (C+1) OR (N-1)
Both expressions must be true before GOOD is printed.
If both expressions true, A = +1; otherwise
A = 0.
If eit her expression true, A= +1; otherwise
A=0.
If expression is false,
A= + I; otherwise A =0.
10
A = NOT( C+1
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 eclual to each other.
These operators are most frequently used in IF/THEN statements and logical arithmetic.
OPERATOR
PRECEDENCE
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 < , > , =,< =, >=,<-> Relatibnal operators used in string expresprecedence 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.
Lowest
< , > , = =, >=,< > Relational operations in numeric expressions have the same precedence level from left to
NOT right.
Unary Operator
AND
OR
Logical AND
Logical OR precedence
General Information 7
BUILT-IN
FUNCTIONS
GRAPHICS
The section titled
FUNCTION LIBRARY
explains the arithmetic and special functions incorporated into Atari BASIC.
Atari graphics include 9 graphics modes. The commands have been designed to allow- maximum flexibility in color choice and pattern variety. Section 9 explains each command and gives examples of the many ways to use each.
SOUND AND
GAMES
CONTROLLERS
The Atari Personal Computer is capable of emitting a large variety of sounds including simulated explosions, electronic music, and "raspberries." Section 10 defines the commands for using the SOUND function and for controlling paddie, joystick, and keyboard controllers.
WRAPAROUND
The ATARI Personal Computer System has screen wraparound thus allowing
AND KEYBOARD greater flexibility. lt also allows the user to type one key ahead. If the user presses and holds any key, it will begin repeating after 1/2 second.
ROLLOVER
ERROR
MESSAGES
If a data entry error is made, the screen display shows the line reprinted preced- ed by the message ERROR- and the offending character is highlighted. After correcting the character in the original line, delete the line containing the
ERROR
-
before pressing
RETURN
.
Appendix B contains a list of all the error messages and their definitions.
8
General Information
2
COMMANDS
BYE (B.)
CONT (CON.)
END
Whenever the cursor (0) is displayed on the screen, the computer is ready to accept input. Type the command (in either Direct or Deferred mode), and press
RETURN
.
This section describes the commands used to clear computer memory and other useful control commands..
The commands explained in this section are the following:
BYE
CONT
END
LET
LIST
NEW
REM
RUN
STOP
Format:
BYE
Example:
BYE
The current function of the BYE command is to exit BASIC and put the computer in Memo Pad mode. This allows the user to experiment with the keyboard or to leave messages on the screen without disturbing any BASIC program in memory. To return to BASIC, press
SYSTEM RESET .
Format:
CONT
Example:
CONT
Typing this command followed by a
RETURN
causes program execution to resume. If a
BREAK
, STOP, or END is encountered, the program will stop until
CONT
RETURN
is entered. Execution resumes at the next sequential
line number
following the statement at which the program stopped.
Note: If the statement at which the program is halted has other commands on the same numbered line which were not executed at the time of the
BREAK
5
STOP, or END, they will
not
be executed. On CONT, execution resumes at the next numbered line. A loop may be incorrectly executed if the program is halted before the loop completes execution.
This command has no effect in a Deferred mode program.
Format:
END
Example:
1000 END
This command terminates program execution and is used in Deferred mode. In
Atari BASIC, an END is not required at the end of a program'. When the end of the program is reached, Atari BASIC automatically closes all flies and turns off sounds (if any). END may also be used in Direct mode to close flies and turn off sounds.
Commands 9
LET
(LE.)
LAYF
NEW
REM
(R. or
. SPACE )
Format:
1E1'1 var = exp
Example:
LET X = 3.142 * 16
LET X = 2
This statement is optional in defining variables. lt can just as easily be left out of the statement. lt may be used, however, to set a variable name eclual to a value.
Format:
LIST [lineno [ , lineno]
LIST [filespec [ ,lineno [ ,lineno]1 ]
Examples:
LIST
LIST 10
LIST,10,100
LIST "P.",20,100
LIST "P"
LIST "D.DEMO.LST"
This command causes the computer to display the source version of all lines currently in memory if the command is entered without line number(s), or to display a specified line or lines. For example, LIST 10,100
RETURN
displays lines
10 through 100 on the screen. If the user has not typed the lines into the computer in numerical order, a LIST will automatically place them in order.
Typing L."P will print the RAM-resident program on the printer.
LIST can be used in Deferred mode as part of an error trapping routine (See
TRAP in Section 4).
The LIST command is also used in recording programs on cassette tape. The second format is used and a filespec is entered. (See Section 5 for more details on peripheral devices.) If the entire program is to be listed on tape, no line numbers need be specified.
Example:
LIST "Cl"
1000 LIST "Cl"
Format:
NEW
Example: NEW
This command erases the program stored in RAM. Therefore, before typing
NEW, either SAVE or CSAVE any programs to be recovered and used later.
NEW clears BASIC's internal symbol table so that no arrays (See Section 8) or strings (See Section 7) are defined. Used in Direct mode.
Format:
REM text
Example:
10 REM ROUTINE TO CALCULATE X
This command and the text following it are for the user's information only. lt is ignored by the computer. However, it is included in a LIST along with the other numbered lines. Any statement on the same numbered line which occurs after a
REM statement will be ignored.
10 Commancls
RUN (RU.)
STOP (STO.)
Format:
Examples:
RUN Efilesped
RUN
RUN "D:MENU"
This command causes the computer to begin executing a program. If no filespec is specified, the current RAM-resident program begins execution. If a filespec is included, the computer retrieves the specified, tokenized program from the specified file and executes it.
All variables are set to zero and all open flies and peripherals are closed. All arrays, strings, and matrices are eliminated and all sounds are turned off. Unless the TRAP command is used, an error message is displayed if any error is detected during execution and the program halts.
RUN can be used in Deferred mode.
Examples:
19 PRINT "QUER Ale OVER AGAIN. "
29 Rill
Type RUN and press
RETURN
.
To end, press
BREAK
To begin program execution at a point other than the first line number, type
GOTO
followed by the specific line number, then press
RETURN
Format:
Example:
STOP
100 STOP
When the STOP command is executed in a program, BASIC displays the message
STOPPED AT LINE ,
terminates program execution, and returns to Direct mode. The
STOP
command does not close files or turn off sounds, so the program can be resumed by typing CONT
RETURN .
Conunmuts
11
NOTES
12
Notes
SCREEN
EDITING
3
EDIT
FEATURES
In addition to the special function keys described in Section 1, there are cursor control keys that allow immediate editing capabilities. These keys are used in conjunction with the
SHIFT or
Ez3
keys.
The following key functions are described in this section:
EMD
SHIFT
CTRL
0
1321 o
Eia o
EiG3
•
INSERT
113131
DELETE
INSERT
SHIFT
SHIFT DELETE
CAPS/LOWR
SHIFT
EM
1
cm. 2
CTRL
3
BREAK
CM
The keyboard and display are logically combined for a mode of Operation known as screen editing. Each time a change is completed on the screen, the
RETURN key must be pressed. Otherwise, the change is not made to the program in RAM.
Example: 10
RE.M PRESS F:E.TUR±,- 1„zh,FT ER L I NE 7--.0 I T
Pr
,
TM7
•
.PiZTHT
32 PRINT "THIS IS
TU:
1
rm
'T"p17 ,
- • •
To delete line 20 from the program, type the line number and press the
RETURN key. Merely deleting the line from the screen display does not delete it from the program.
The screen and keyboard as devices are described in Section 5.
13113
Control key. Striking this key in conjunction with the arrow keys produces the cursor control functions that allow the user to move the cursor anywhere on the screen without changing any characters already on the screen. Other key combinations control the setting arid clearing of tabs, halting and restarting program lists, and the graphics control symbols.
Striking a key while holding the
Ez3
key will produce the upper-left symbol on those keys having three functions.
SHWT
Shift key: This key is used in conjunction with the numeric keys to display the symbols shown on the upper half of those keys. lt is also used in conjunction
Edit Features
13
DOUBLE-KEY
FUNCTIONS with other keys to insert and delete lines, return to a normal, upper case letter display, and to display the function symbols above the subtraction, equals, addition, and multiplication operators as well as the brackets, [ ]‚ and question mark,?.
Cursor Control Keys
12E3 o
EID 1D
GED o
Moves cursor up one physical line without changing the program or display.
Moves cursor one space to the right without disturb- ing the program or display.
Moves cursor down one physical line without chang- ing the program or display.
▪
c:
Moves cursor one space to the left without disturbing the program or display.
Like the other keys on the Atari keyboard, holding the cursor control keys for more than 1/2 second causes the keys to repeat.
Keys Used With
En
Ez3
INSERT
Inserts one character space.
CTRL
DELETE
CTRL
1
EM
2
Can
3
Deletes one character or space.
Stops temporarily and restarts screen display without "breaking out" of the program.
Rings buzzer.
Indicates end-of-file.
SHIFT
SHIFT DELETE
SHIFT
BREAK
Ca
INSERT
CAPS/LOWR
Keys Used With
SHIFT
Inserts one physical line.
Deletes one physical line.
Returns screen display to upper-case alphabetic characters.
Special Function Keys
Stops program execution or program list, prints a
READY on the screen, and displays cursor.
Allows commands normally used in Direct mode to be placed in Deferred mode; e.g., In Direct mode, cnu
CLEAR clears the screen display. To clear the screen in Deferred mode, type the following after the program line number. Press
ESC then press c-rTit. and
CLEAR together.
PRINT "
ESC
(E3
CLEAR "
14
Edit Features
4
PROGRAM
STATEMENTS
This section explains the commands associated with loops, conditional and unconditional branches, error traps, and subroutines and their retrieval. lt also explains 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 IF/THEN
GOSUB/RETURN ON, GOSUB
GOTO ON, GOTO
POP
RESTORE
TRAP
FOR (F.), TO,
STEP/NEXT
(N.)
Format:
FOR avar = aexpl 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 executed. The loop variable (avar) is initialized to the value of aexpl. 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 completed before returning to the outer loop. The following example illustrates a nested loop program.
10 FÜR X=1 TO 3
20 PRINT "OUTER LOOP"
30 Z=0
40 Z=Z+2
50 FÜR Y=1 TO 9 STrP
7
GO PRINT "
INNER !OOP"
70 NEXT Y
80 NEXT X
%
EN°
Figure 4-1. Nested Loop Program
Program Statements
15
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.
OUTER LOOP
INNER LOOP
INNER LOOP
IHNER LOOP
OUTER LOOP
INNER LOOP
INNER LOOP
INNER LOOP
OUTER LOOP
INNER LOOP
INNER LOOP
INNER LOOP
Figure 4-2. Nested Loop Execution
The return address for the loops are placed in a special group of memory addresses referred to as a stack. The information is "pushed" on the stack and when used, the information is "popped" off the stack (see
POP.)
GOSUB (GOS.)
RETURN (RET.)
Format:
GOSUB lineno lineno
RETURN
Example:
100 GOSUB 2000
2000 PRINT "SUBROUTINE"
2010 RETURN
A subroutine* is a program or routine used to cornpute a certain value, etc. lt is generally used when an Operation must be replaced several times within a program secluence using the same or different values. This command allows the user to "call" the subroutinel, if necessary. The last line of the 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. lt is used to save memory and program-entering time, and to make programs easier to read and debug.
16
Program Statements
GOTO (G.)
To prevent accidental triggering of a subroutine (which normally follows the main program), place an
END
statement preceding the subroutine. The following program demonstrates the use of subroutines.
10 PRINT ")"
20 REM EXAmPLE LEE OF GOSUE/RETURN
30 •=122
4n GOSUP 120n
50 X=I20
60 GOSUB 1000
70 x=50
30 GOSUE 100n
90 END lenn
1010 ‘,..Z=x+'.1"
1020 PRINT
1222 RETURN
X,7
(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 and Y. Figure 4-4 illustrates the results of executing this program.
400
480
200
300
360
150
Figure 4-4. GOSUB/RETURN Program Run
Format: {
GO TO I 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 line number or arbitrary expression. However, using anything other than a constant will make renumbering the program difficult. If the target line number is non-existent, an error results. Any GOTO statement that branches 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 illustrates two uses of the GOTO command.
Program Statements 17
10 PRINT
20 PRINT :PRINT "ONE"
30 PRINT "TWO"
40 PRINT "THREE"
50 PRINT "FOUR"
60 PRINT "FIIJE"
65 GOTO 100
70 PRINT
80 PRINT
90 PRINT _.,..„.18383111
END
100 PRINT "SIX"
110 PRINT "SEUEN"
120 PRINT uEIGHTH
172
PRINT "NINE"
140 PRINT 4 TEN"
150 GOTO 70
Figure 4-5. GOTO Pro gram 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. lt proceeds with the printing of the numbers "SIX" through "TEN", then executes the second 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 following:
ONE
TWO
THREE
FOUR
FIUE
SEUEN .
EIGHT
NINE
TEN
IF/THEN
18
Program Statements
Figure 4
-
6. GOTO Program Run
Format:
IF aex] ) THEN { lineno
Examples: IF X = statement [:statement...]
100 THEN 150
IF
A$ = "ATARI" THEN 200
IF AA
IF X =
= 145 and BB = 1 THEN PRINT AA, BB
100 THEN X = 0
The IF/THEN statement is a conditional branch statement. This type of branch occurs only if certain conditions are met. These conditions may be either arithmetical or logical. If the aexp following the IF statement is true (non-zero), the program executes the THEN part of the statement. If, however, the aexp is false (a logical 0), the rest of the statement is ignored and program control passes to the next numbered line.
In the format, IF aexp THEN lineno, lineno must be a constant, not an expression and specifies the line number to go to if the expression is true. If several statements occur after the THEN, separated by colons, then they will be executed if and only if the expression is true. Several IF statements may be nested on the same line. For example:
122 IF X=5 THEN IF Y=7 THEN R=9:GOT0200
The statements R=9: GOTO 100 will be executed only if X=5 and Y =3. The statement Y=3 will be executed if X= 5.
The following program demonstrates the IF/THEN statement.
5 .GRAPHICS 0:? :? "
10 ? "ENTER A";INPUT A
IF DEMO"
20 IF,A=1 THEN eREM MULTIPLE STATEMENT
S HERE WILL NEUER BE EXECUTEDM
30 ? :? "A 13 NOT 1. EXECUTION CONTINUE
S
HEFE WHEN THE EXPRESSION IG FALSE."
40 IF•A=1 THEN ? :? "A=1":? "YES, IT IS
REALLY 1..":REM MULTIPLE STATEMENTS HEFE
WILL BE EXECUTED ONLY IF A=1!!
50 ? '? "EXECUTION CONTINUES HEFE IF A<>
1 OR AFTER 'YES, IT IS REALLY 1' IS DISP
LAYED."
AO GOTO 10
Figure 4-7. IF/THEN Program
ENTER A
A IS NOT 1. EXECUT ION CONTINUES HERE WH
EN THE EXPRESSION IS FALSE.
EXECUTION CONTINUES HERE IF A(>1 OR AFTE
R 'YES, IT IS REALLY 1 IS DISPLAYED.
ENTER A
(entered 2)
(entered 1)
A=1
YES, IT REALLY 1.
EXECUTION CONTIMES HERE IF A<>1 OR AFTE
R 'YES, IT IS REALLY 1' IS DISPLAYED.
ENTER A
Figure 4-8. IF/THEN Program Execution.
Program Statements 19
ON/GOSUB/
RETURN
ON/GOTO
POP
20
Program Statements
Format:
ON aexp GOTOI lineno [ ,lineno...]
GOSUB
Examples:
100 ON X GOTO 200, 300, 400
100 ON A GOSUB 1000, 2000
100 ON SQR(X) GOTO 30, 10, 100
Note:
GOSUB
and
GOTO
may not be abbreviated.
These two staternents are also conditional branch statements like the IF/THEN statement. However, these two are more powerful. The aexp must evaluate to a positive number which is then rounded to the nearest positive integer (whole number) value up to 255. If the resulting number is 1, then program control passes to the first lineno in the list following the GOSUB or GOTO. If the resulting number is 2, program control passes to the second lineno in the list, and so on. If the resulting number is 0 or is greater than the number of linenos in the list, the conditions are not met and program control passes to the next statement which may or may not be located on the same line. With ON/GOSUB, the selected subroutine is executed and then control passes to the next statement.
The following routine demonstrates the ON/GOTO statement:
10 X=X+1
20 ON X GOTO 100,200,300,400,500
30 IF X>5 THEN PRINT "COMPLETE.".END
40 GOTO 10
50 ENO
109 PRINT uNOW WORKING AT LINE 100".GOTO
10
200 PRINT "NDW WORKING AT LINE 200".GOTO
10
300 PRINT "NOW WORKING AT LINE 300".G0T0
10
400 PRINT uNOW WORKING AT LINE 400".GOTO
10
500 PRINT uNOW WORKING AT LINE 500".GOTO
10
Figure 4-9 ON/GOTO Program Listing
When the program is executed, it looks like the following:
NOW WORKING AT LINE 100
NOW WORKING AT LINE 200
NOW WORKING AT LINE 300
NOW WORKING AT LINE 400
NOW WORKING AT LINE 500
WIPLETE
Figure 4-10 ON/GOTO Program Execution
Format:
POP
Example:
1000 POP
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.
lt must be in the execution path of the program.
2.
lt must follow the execution of any GOSUB statement that is not brought back to the main program by a RETURN statement.
The following example demonstrates the use of the POP command with a
GOSUB when the RETURN is not executed:
10 GOSUB 1000
15 REM LINE 20 WILL NOT BE EXECUTED
20 PRINT "NORMAL RETURN PRINTS THIS MESS
AGE "
30 PRINT "ABNORMAL RETURN PRINTS THIR NE
SSAGE."
4n POP
999 ENO
1002 PRINT "NOW
7-XECUTING SUBROUTINE."
1012 GOTO 30
1222 RETURN
Figure 4-11. GOSUB Statement With POP
RESTORE
(RES.) Format:
RESTORE [aexp]
Example:
100 RESTORE
The Atari Personal Computer System contains an internal "pointer" that keeps track of the DATA statement item to be read next. Used without the optional 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 of the aexp. This statement permits repetitive use of the same data.
10 FOR N=1
20 RE:43
72 RgSinR
40
RED
E
50 M=A+B
GO PRINT "TO-U;i! Eh;
70 WNT N
20 ,uND
90 DAT 72, 5
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 equal 15
PrOgranl Statements
21
TRAP (T.) and B, because of the RESTORE statement, will still equal 30.
PRINT statement
Therefore, the in line 50 will display
SUM TOTAL EQUALS 45.
Format:
TRAP aexp
Example:
100 TRAP 120
The TRAP statement is used to direct the program to a specified line number if an error is detected. Without a TRAP statement, the program stops executing when an error is encountered and displays an error message on the screen.
The TRAP statement works on any error that may occur after it has been executed, but once an error has been detected and trapped, it is necessary to reset the trap with another TRAP command. This TRAP command may be placed at the beginning of the section of code that handles input from the keyboard so that the TRAP is reset after each error. PEEK(195) will give you an error message (see Appendix B). 256*PEEK(187)+ PEEK(186) will give you the number of the line where the error occurred. The TRAP may be cleared by executing a
TRAP statement with an aexp whose value is from 32767 to 65535 (e.g., 40000).
22
PrOgra/72 Statements
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 commands 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
PUT/GET
READ/DATA
SAVE
STATUS
XIO
INPUT/OUTPUT
DEVICES
The hardware configuration of each of the following devices is illustrated in the individual manuals furnished with each. The Central Input/Output (GI) subsystem 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 Control 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/O operation. This information includes the command, buffer length, buffer address, and two auxiliary control variables. ATARI BASIC sets up the IOCB's, but the user must specify which
IOCB to use. BASIC reserves IOCB
110 for I/O to the Screen Editor, therefore the user may not request IOCB #0. The GRAPHICS statement (see Section 9) opens
IOCB 116 for input and output to the screen. (This is the graphics window S:).
IOCB
117 is used by BASIC for the LPRINT, CLOAD, and CSAVE commands. The
IOCB number may also be referred to as the device (or file) number. IOCB's 1 through 5 are used in opening the other devices for input/output operations. If
I0C13
117
is in use, it will prevent LPRINT or some of the other BASIC I/O 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. lt 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.
COMMCIMIS and
Devices
23
Disk Drives: (D1:, D2:, D3:, D4:)
Input and Output devices. If 16K of RAM is installed, the ATARI can use from one to four disk drives. If only one disk drive is attached, there is no need to add a number after the symbolic device code D.
Screen Editor: (E:)
Input and Output device. This device uses the keyboard and display (see
TV Monitor)
to simulate a screen editing terminal. Writing to this device causes data to appear on the display starting at the current cursor position. Reading from this device activates the screen editing process and allows the user to enter and edit data. Whenever the
RETURN key
is pressed, the entire logical line within which the cursor resides is selected as the current record to be transferred by CIO to the user program. (See Section 9).
TV Monitor: (S:)
Input and Output device. This device allows the user to read characters from and write characters to the display, using the cursor as the screen addressing mechanism. Both text and graphics operations are supported.
See Section 9 for a complete description of the graphics modes.
Interface, RS
-
232: (R:)
The RS-232 device enables the ATARI System to interface with RS-232-compatible devices such as printers, terminals, and plotters. lt contains a parallel port to which the 80-column printer (ATARI
825TM) can be attached.
CLOAD (CLOA.)
Format:
CLOAD
Examples:
CLOAD
100 CLOAD
This command can be used in either Direct or Deferred mode to load a program from cassette tape into RAM for execution. On entering CLOAD, one bell rings to indicate that the PLAY button needs to be pressed followed by
RETURN
However, do not press PLAY until after the tape has been positioned. Specific instructions for CLOADing a program are contained in the
ATARI 410 Progranz
Recorder Manual.
Steps for loading oversized programs are included in the paragraphs under
CHAINING PROGRAMS
at the end of this section.
CSAVE (CS.)
Format:
CSAVE
Examples:
CSAVE
100 CSAVE
100 CS.
This command is usually used in Direct mode to save a RAM-resident program onto cassette tape. CSAVE saves the tokenized version of the program. On entering CSAVE two bells ring to indicate that the PLAY and RECORD buttons must be pressed followed by
RETURN
.
Do not, however, press these buttons until the tape has been positioned. lt is faster to save a program using this command rather than a SAVE "C" (see SAVE) because short inter-record gaps are used.
Notes:
Tapes saved using the two commands, SAVE and CSAVE, are not compatible lt may be necessary to enter an LPRINT (see
LPRINT)
before using
CSAVE. Otherwise, CSAVE may not work properly.
For specific instructions on how to connect and operate the hardware, cue the tape, etc., see the
ATARI 410 Program Recorder Manual.
24
1/0 Garnnlands and Devices
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 computer will go into Memo Pad mode and the user must press
SYSTEM RESET 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
SYSTEM RESET .
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 (untokenized) 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:
Examples:
avar I [ avar svar
, svar •••
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 computer displays a ? prompt when the program encounters an INPUT statement. lt is usually preceded by a PRINT statement that 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 itaexp 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 traexp 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
RETURN
,
type the next string,
RETURN
,
etc. Arithmetic numbers can be typed on the same line separated by commas.
19 PRINT "ENTER 5 MUMBERS TO BE SUMMET'
20 FÜR N=1 TO 5
30 INPUT X
40 C=C+X
50 NEXT M
60 PRINT "THE SUM OF YOUR NUMBERS IS n; C;
70 EMO
Figure 5-1 Input Program Listing
I/O Conzmands and Devices
25
LOAD (LO.)
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 tokenized version of the 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.
LPRINT (LP.)
Format:
LPRINT [exp][ ; exp..
Example: 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. lt can be used in either Direct or Deferred modes. lt 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.
NOTE (NO.)
Format:
NOTE #aexp, avar, avar
Example:
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.
OPEN (0.)
CLOSE (CL.)
Formats:
OPEN #aexp,aexpl,aexp2, filespec
CLOSE gaexp
Examples: 100 OPEN #2,8,0,"D1:ATARI800.BAS"
100 A$ = "D1:ATARI800.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 control variables, and passes any device-specific options to the device handler. The parameters for the OPEN command are defined as follows: aexp
Mandatory character that must be entered by the user.
Reference IOCB or file number to same parameters for future use (as in CLOSE command). Nurnber rnay be 1 through 7.
26 1/0 Cornmands und
Devices
aexpl aexp2 filespec
Device
Code
Device
Number
(optional)
Code number to determine input or output Opera- tion.
Code 4 = input Operation
8 = output Operation
12 = input and output Operation
6 = disk directory input Operation
(In this case, the filespec is the search specification.)
9 = 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
RETURN .
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.
"D1 ATARI800.BAS"
,1%.m.mumiN
timi
A
A %saliN
A
Required
Colon
File name —
(up to 8 charactersmust begin with alphabet character)
Period requin as separator ii extender is us
Extender
(optional)-
Includes
0-3 characters
Note:
Filenames are not used with the program recorder.
Figure 5
-
2 Filename Breakdown
The CLOSE command simply closes flies that have been previously opened with an OPEN command. Note in the example that the aexp following the mandatory character must be the same as the aexp reference number in the OPEN statement.
Commands and Devices
27
POINT (P.)
Format:
POINT ilaexp, avar, avar
Example:
100 POINT #2, 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.
PRINT (PR
or ?)
Format:
PRINT [#aexp]i ; [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$
PUT(PU.)/
GET(GE.)
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 immediately 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
RETURN is output and the next PRINT will start on the following line.
Format:
PUT #aexp, aexp
GET gaexp,
Examples: 100 PUT #6, ASC("A")
200 GET #1,X
The PUT and GET are opposites. The PUT commandputputs a single byte from
0-255 to the file specified by #aexp. (# is a mandatory character in both these commands). The GET command reads one byte from 0-255 (using gaexp to designate the file, etc. on diskette or else -Where) and then stores the byte in the variable avar.
READ (REA.)
DATA (D.)
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'. The DATA statement can be located anywhere
'A Direct mode READ will only read data if a DATA statement was executed in the program.
28
1/0 Cornmands and Devices
\—
in the program, but must contain as many pieces of data as there are defined in the READ statement. Otherwise, an "out of data" error is displayed on the screen.
String variables used in READ statements must be dimensioned and cannot be subscripted. (See
STRINGS
Section). Neither may array variables may be used in a READ statement.
The DATA statement holds a number of string data for access by the READ statement. lt cannot include arithmetical operations, functions, etc. Furthermore, the data type in the DATA statement must match the variable type defined in the corresponding READ statement.
The following program totals a list of numbers in a DATA statement:
19 FÜR N=1 TO 5
20 READ 0
30 M=M+D
40 NEXT N
59 PRINT "SUM TOTAL EOUALS "iM
60 END
70 DATA 30,15,106,17,87
SAVE (S.)
STATUS (ST.)
MO (X.)
Figure 5-3 Read/Data Program Listing
The progran-1, when executed, will print the statement:
SUM TOTAL EQUALS 255.
Format:
Example:
SAVE filespec
SAVE "D1:YVONNE.PAT"
The SAVE command is similar to the CSAVE command except that the full file name System can be used. The device code number is optional when using only one disk drive. The default is to disk drive #1. SAVE, like LOAD, uses long interrecord gaps on the cassette (see
CSAVE)
and the tokenized form of the program.
Format:
Example:
STATUS #aexp,avar
350 STATUS #1,Z
The STATUS command calls the STATUS routine for the specified device (aexp).
The status of the STATUS command (see
ERROR MESSAGES,
Appendix B) is stored in the specified variable (avar). This may be useful for future devices such as the RS-232 interface.
Format:
XIO cmdno, #aexp, aexpl, aexp2, filespec
Example: XIO
18,#6,0,0,"S:"
The XIO command is a general input/output statement used for special opera- tions. One example is its use to fill an area on the screen between plotted points
I/O Commands and Devices
29
and lines vvith a color (see Section 9). The parameters for this command are defined as follows: cmdno
Number that stands for the particular command to be performed.
cmdno OPERATION
17
18
32
33
35
36
37
38
254
3
5
7
9
11
12
13
OPEN
GET RECORD
GET CHARA.CTERS
PUT RECORD
PUT CHARACTERS
CLOSE
STATUS REQUEST
DRAW LINE
FILL
RENAME
DELETE
LOCK FILE
UNLOCK FILE
POINT
NOTE
FORMAT aexp
EXAMPLE
Same as BASIC OPEN
These 4 commands are similar to
BASIC INPUT GET, PRINT, and PUT respectively.
Same as BASIC CLOSE
Same as BASIC
STATUS
Same as BASIC DRAWTO
See Section 9
XIO 32,#1,0,0,"D:TEMP.CAROL"
XIO 33,#1,0,0,"D:TEMP.BAS"
XIO 35,#1,0,0,"D:TEMP.BAS"
XIO 36,#1,0,0,"D:TEMP.BAS"
Same as BASIC POINT
Same as BASIC NOTE
XIO 254,#1,0,0,"D2:"
Device number (same as in OPEN). Most of the time it is ignored, but must be preceded by #. aexpl aexp2
Two auxiliary control bytes. Their usage depends on the particular device and command. In most cases, they are unused and are set to 0. filespec String expression that specifies the device. Must be enclosed in quotation marks. Although some commands, like Fill (Section 9), do not look at the filespec, it must still be included in the statement.
CHAINING
PROGRAMS
30
I/O Commands and Devices
If a program requires more memory than is available, use the following steps to string programs of less than the maximum memory available into one program.
1.
Type in the first part of the 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 purposes. Press PLAY and RECORD buttons on the deck so both remain down.
4.
Type SAVE"C:" and press
RETURN
that
5.
When the beeping sound occurs, press RETuRN again.
6.
When the screen displays
"READY", do not move tape. Type NEW RETuRN .
7.
Repeat the above instructions for the second part of the program.
8.
As the second part of the 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 of the second part is a RUN"C:" command.
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:"
RETURN
4.
When the "beep" sounds, press
RETuRN 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
RETURN
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
CSAVE and CLOAD can be used.
Note: Remember to boot DOS
before
typing in your program.
MODIFYING A
BASIC PROGRAM
ON DISK
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
RETURN
,
the DOS Menu will be displayed. Select command letter
A, type it, and press
RETURN
twice to list the directory on the screen; or type
A followed by pressing
RETURN
then
P:
RETURN
to list directory on the printer.
11. To return to BASIC, type
B
RETURN
or press
SYSTEM RESET
Commands and Devices
31
NOTES
32
Notes
6
FUNCTION
LIBRARY
This section describes the arithmetic, trigonometric, and special purpose functions incorporated into the ATARI BASIC. A function performs a computation and returns the result (usually a number) for either a print-out or additional computational use. Included in the trigonometric functions are two statements, radians (RAD) and degrees (DEG), that are frequently used with trigonometric functions. Each function described in this section may be used in either Direct or Deferred mode. Multiple functions are perfectly legal.
The following functions and statements are described in this section:
ABS
CLOG
EXP
INT
LOG
RND
SGN
SQ,R
ATN
COS
SIN
DEG/RAD
ADR
FRE
PEEK
POKE
USR
ARITHMETIC
FUNCTIONS
ABS
CLOG
EXP
INT
Format:
ABS(aexp)
Example:
100 AB = ABS (-190)
Returns the absolute value of a number without regard to whether it is positive or negative. The returned value is always positive.
Format:
CLOG (aexp)
Example:
100 C = CLOG(83)
Returns the logarithm to the base 10 of the variable or expression in parentheses. CLOG(0) should give an error and CLOG(1) should be 0.
Format:
EXP (aexp)
Example:
100 PRINT EXP(3)
Returns the value of e (approximately 2.71828283), raised to the power specified by the expression in parentheses. In the example given above, the number returned is 20.0855365. In some cases, EXP is accurate only to six significant digits.
Format:
INT (aexp)
Examples: 100 I = INT(3.445)
100 X = INT(- 14.66778)
(3 would be stored in I)
(-15 would be stored in X)
Function Library 33
LOG
RND
SGN
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(0) 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.
10 X=RN0( )
20 RX= I NT( 1X)
39 PRINT RX
is dumm» variable)
Format:
Example:
SGN(aexp)
100 X = SGN(-199)
(-1 would be returned)
Returns a -1 if aexp evaluates to a negative number; a 0 if aexp evaluates to 0, or a
1 if aexp evaluates to a positive number.
Format:
Example:
SQR(aexp)
100 PRINT SR(100)
(10 would be printed)
Returns the square root of the aexp which must be positive.
TRIGONOMETRIC
FUNCTIONS
ATN
COS
Format:
ATN(aexp)
Example: 100 X = ATN(65)
Returns the arctangent of the variable or expression in parentheses.
Format:
COS(aexp)
Example:
100 C = COS(X Y + Z)
Note:
Presumes X, Y, Z previously defined!
Returns the trigonometric cosine of the expression in parentheses.
34 Function L,ibrary
SIN
DEG/RAD
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 unless
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.
SPECIAL
PURPOSE
FUNCTIONS
ADR
FRE
PEEK
POKE
Format:
ADR(svar)
Example:
ADR(A$)
Returns the decimal memory address of the string specified by the expression in parentheses. Knowing the address enables the programmer to pass the information 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 of bytes 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 integer between 0 and 65535 and represents the memory address in decimal notation (not hexadecimal). The number returned will also be a decimal integer with a range from 0 to 255. This function allows the user to examine either RAM or
ROM locations. In the first example above, the PEEK is used to determine whether location 4000 (decimal) contains the number 255. In the second example, the PEEK function is used to examine the left margin.
Format:
POKE aexpl, aexp2
Examples: POKE 82, 10
100 POKE 82, 20
Function Library 35
USR
Although this is not a function, it is included in this section because it is closely associated with the PEEK function. This POKE command inserts data into the memory location or modifies data already stored there. In the above format, aexpl is the decimal address of the location to be poked and aexp2 is the data to be poked. Note that this number is a decimal number between 0 and 255. POKE cannot be used to alter ROM locations. In gaining familiarity with this command it is advisable to look at the memory location with a PEEK and write down the contents of the location. Then, if the POKE doesn't work as anticipated, the original contents can be poked into the location.
The above Direct mode example changes the left screen margin from its default position of 2 to a new position of 10. In other words, the new margin will be 8 spaces to the right. To restore the margin to its normal default position, press
SYSTEM RESET •
Format:
USR (aexpl [, aexp2][, aexp3...])
Example: 100 RESULT = USR (ADD1,A*2)
This function returns the results of a machine-language subroutine. The first expression, aexp1, must be an integer or arithmetic expression that evaluates to an integer that represents the decimal memory address of the machine language routine to be performed. The input arguments aexp2, aexp3, etc., are optional.
These should be arithmetic expressions within a decimal range of 0 through
65535. A non-integer value may be used; however, it will be rounded to the nearest integer.
These values will be converted from BASIC's Binary Coded Decimal (BCD) floating point number format to a two-byte binary number, then pushed onto the hardware stack, composed of a group of RAM memory locations under direct control of the 6502 microprocessor chip. Figure 6-1 illustrates the structure of the hardware stack.
N
X,
X,
Y7
Y,
Z1
Z2
(Number of arguments on the stack-may be 0)
(High byte of argument X)
(Low byte of argument X)
(High byte of argument Y)
(Low byte of argument Y)
(High byte of argument Z)
(Low byte of argument Z)
R i
R 2
(Low byte of return address)
(High byte of return address)
Figure 6-1. Hardware Stock Definition
Note:
X is the argument following the address of the routine, Y is the second, Z is the third, etc. There are N pairs of bytes.
See Section 11 for a description of the USR function in machine language programming. Appendix D defines the bytes in RAM available for machine language programming.
36 Function Librcuy
STRINGS
ASC
CHRS
This section describes strings and the functions associated with string handling.
Each string must be dimensioned (see DIM statement, Section 8) and each string variable must end with a $. A string itself is a group of characters "strung" together. The individual characters may be letters, numbers, or symbols
(including the Atari special keyboard symbols.) A substring is a part of a longer string and any substring is accessible in Atari BASIC if the string has been pro- perly dimensioned (see end of section). The characters in a string are indexed from 1 to the current string length, which is less than or equal to the dimensioned length of the string.
The string functions described in this section are:
ASC STR$
CHR$
VAL
LEN
Format:
ASC(sexp)
Examples: 100A = ASC(A$)
This function returns the ATASCII code number for the first character of the string expression (sexp). This function can be used in either Direct or Deferred mode. Figure 7-1 is a short program illustrating the ASC function.
10 D1M A$(3)
20 A$="E"
30
A=A51:( A$ )
49 PRINT A
Figure
7-1.
ASC Function Program
When executed, this program prints a 69 which is the ATASCII code for the letter "E". Note that when the string itself is used, it must be enclosed in quotation marks.
Format:
CHR$ (aexp)
Examples:
100
PRINT CHR$ (65)
100 A$ = CHR$ (65)
This character string function returns the character, in string format, represented by the ATASCII code number(s) in parentheses. Only one character is returned. In the above examples, the letter A is returned. Using the ASC and
CHR$ functions, the following program prints the upper case and lower case letters of the alphabet.
Strings
37
LEN
STR$
VAL
In
FÜR. I=0 TO 25
pp.:INT
ASC( "A"
I )
NEXT I
CHRS( Pi'7:f2( "
Figure 7-2. ASC and CHRS Program Example
Note: There can be only one STR$ and only one CHR$ in a logical comparison.
Format:
LEN (sexp)
Example:
100 PRINT LEN(A$)
This function returns the length in bytes of the designated string. This information may then be printed or used later in a program. The length of a string variable is simply the index for the character which is currently at the end of the string. Strings have a length of 0 until characters have been stored in them. lt is possible to store into the middle of the string by using subscripting.
However, the beginning of the string will contain garbage unless something was stored (using STO) there previously.
The following routine illustrates one use of the LEN function:
10 DIM A$(10)
20 AS-= ATARI "
30 RIR I!
.
.1T LEN( A$ )
Figure 7-3. LEN Function Example
The result of running the above program would be 5.
Format:
STR$ (aexp)
Example:
A$ =STR$(65)
This string from number function returns the string form of the number in parentheses. The above example would return the actual number 65, but it would be recognized by the computer as a string.
Note: There can only be one STR$ and only one CHR$ in a logical comparison.
For example, A =STR$(1) > STR$(2) is not valid and will not work correctly.
Format: VAL(sexp)
Example:
100 A = VAL(A$)
This function returns a number of the same value as the number stored as a string. This is the opposite of a STR$ function. Using this function, the computer can perform arithmetic operations on strings as shown in the following example program:
10 DIM B$(5)
20 24= 11 10000"
30 B=SOROJAL(B$))
40 PRINT "THE SQUARE ROOT OF "Jae," IS "
Figure 7-4. VAL Function Program
38
Strings
Upon execution, the screen displays THE SQUARE ROOT OF B$ IS 100. lt is not possible to use the VAL function with a string that does not start with a number, or that cannot be interpreted by the computer as a number. lt can, however, intrepret floating point numbers; e.g.,VAL ("1E9")would return the number 1,000,000,000.
STRING
MANIPULATIONS
Strings can be manipulated in a variety of ways. They can be split, concatenated, rearranged, and sorted. The following paragraphs describe the different manipulations.
String Concatenation
Concatenation means putting two or more strings together to form one large string. Each string to be included in a larger string is called a substring. Each substring must be dimensioned (see DIM). In Atari BASIC, a substring can contain up to 99 characters (including spaces). After concatenation, the substrings can be stored in another string variable, printed, or used in later sections of the
=program. Figure 7-5 is a sample program demonstrating string ccincatenation.
In this program, A$, B$, and C$ are concatenated and placed in A$.
10 DIM A$(100),B$(100),C$(100)
20 AS="STRINGS 2, SUESTRINGS ARE DISCUSSE
D "
30 E:$" IN 'ATARI BASIC--A SELF-TEACHING
GUIDE'"
40 C="---CHAPTER 9."
50 E
LEN( AS )+
1
>=B$
60 4( LEW ..J+1 )=CS
70 PRINT AS
Figure 7-5. String Concatenation Example
String Splitting
The format of a subscript string variable is as follows: svarname(aexpl[ ,aexp2])
The svarname is used to indicate the unsubscripted string variable name (with
$). aexpl indicates the starting location of the substring and aexp2 (if used) indicates the ending location of the substring. If no aexp2 is specified, then the end of the substring is the current end of the string. The starting location cannot be greater than the current length of the string. The two example programs in
Figure 7-6 illustrate a split string with no end location indicated and a split string with an ending location indicated.
10 DIM SS(5)
20 5$=" PIECE*"
33 PRINT SV
2::
40 END •
Result is BCD.
(without ending location)
10 DIM SS(20)
20 SS="ATARI 200 BASIC"
30 PRINT SE 7, 9 )
40 END
Result is 800.
(with ending location)
Figure 7-6. Split String Examples
Strings 39
40
St rings
String Comparisons and Sorts
In string comparisons, the logical operators are used exactly the way they are with numbers. The second program in Appendix H is a simple example of bubble sort.
In using logical operators, remember that each letter, number, and symbol is assigned an ATASCII code number. A few general rules apply to these codes:
1.
ATASCII codes for numbers are sized in order of the numbers' real values and are always lower than the codes for letters (see Appendix C).
Upper case letters have lower numerical values than the lower case letters. To obtain the ATASCII code for a lower case letter if you know the upper case value, add 32 to the upper case code.
Note:
Atari 13ASIC's rnemory management system moves strings - around in memory to make room for new statements. This causes the string address to vary if a program is modified or Direct mode is used.
8
ARRAYS AND
MATRICES
DIM (DI.)
An array is a one-dimensional list of numbers assigned to subscripted variables; e.g., A(0), A(1), A(2). Subscripts range from 0 to the dimensioned value. Figure
8-1 illustrates a 7-element array.
A(0)
A(1)
A(2)
A(3)
A(4)
A(5)
A(6)
Figure 8-1. Example of an Array
A matrix, in this context, is a two-dimensional table containing rows and columns. Rows run horizontally and columns run vertically. Matrix elements are stored by BASIC in row-major order. This means that all the elements 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(0,0)
M(1,0)
M(2,0)
M(3,0)
M(4,0)
M(5,0)
M(6,0)
M(0,1)
M(1,1)
M(2,1)
M(3,1)
M(4,1)
M(5,1)
M(6,1)
M(0,2)
M(1,2)
M(2,2)
M(3,2)
M(4,2)
M(5,2)
M(6,2)
M(0,3)
M(1,3)
M(2,3)
M(3,3)
M(4,3)
M(5,3)
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 commands in this section are:
DIM
CLR
Format:
Dim svar(aexp) 1 I ,svar(aexp) mvar(aexp[ ,aexp]) I 1 ,mvar(aexp [ ,aexp •••
ExampIes:
DIM A(100)
DIM M(6,3)
DIM B$(20) used with STRINGS
Arrays and Matrices
41
42 Arrays and Matrices
A DIM statement is used to reserve a certain number of locations in memory for a string, array, or matrix. A character in a string takes one byte in memory and a number in an array takes six bytes. The first example reserves 101 locations for an array designated A. The second example reserves 7 rows by 4 columns for a two-dimensional array (matrix) designated M. The third example reserves
20 bytes designated B$.
All strings, arrays, and matrices must be dimensioned.
lt is a good habit to put all DIM statements at the beginning of the program. Notice in Figure 8-1 that although the array is dimensioned as DIM A(6), there are actually 7 elements in the array because of the 0 element. Although
Figure 8-2 is dimensioned as DIM M(6,3), 28 locations are reserved.
Note:
The ATARI Personal Computer does not automatically initialize array or matrix variables to
0 at the start of program execution. To initialize array or matrix elements to 0, use the following program steps:
259 °IM A(100)
390 FÜR E=0 TO 100
319 A(E)=0
320 NEXT E
Arrays and matrices are "filled" with data by using
FOR/NEXT statements,
READ/DATA statements and INPUT commands. Figure 8-3 illustrates the
"building" of part of an array using the FOR/NEXT loop and
Figure
84 builds an array using the READ/DATA statements.
10 DIM A(100
20 X=10
70 FÜR E=1 TO 90
40 X=X+1
50 A(E)=X
60 NEXT E
70 FÜR P=1
TO 90
0 PRINT E,A(E)
90 NEXT
Figure 8-3. Use of FOR/NEXT to Build An Array
10 °IM A(3)
20 FÜR E=1 TO 3
30 READ X
40 i(E)=X
59 PRINT A( E),
60 NEXT E
70 END
100 DATA 33,45,12
Figure 8-4. Use of READ/DATA to Build An Array
CLR
Figure 8-5 shows an example of building a 6 x 3 matrix.
10 EIIM M6,3)
:20 FÜR ROW=0 TO G
30 FÜR COL.1 TO 7
40 WROW,COL)=INT(RNO(0)1000)
50 NEXT COUNEXT ROW
60 FÜR ROW=0 TO 6
70 FÜR COL.1 TO 3
80 PRINT WROW,COL>
90 NEXT COL , PRINT sNEXT ROW
Figure 8-5. Building A Matrix
Note that the words ROW and COLUMN are not BASIC commands, statements, functions, or keywords. They are simply variable names used here to designate which loop function is first. The program could just as easily have been written with X and Y as the variable names.
Format:
Example:
CLR
200 CLR
This command clears the memory of all previously dimensioned strings, arrays, and matrices so the memory and variable names can be used for other purposes. lt also clears the values stored in undimensioned variables. If a matrix, string, or array is needed after a CLR command, it must be redimensioned with a DIM command.
Arrays und Muttiees 43
NOTES
44
Notes
9
GRAPHICS MODES
AND COMMANDS
This section describes the Atari BASIC commands and the different graphics modes of the ATARI Personal Computer. Using these 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 applications of the same commands described in Section 5.
GRAPHICS (GR.)
Format:
GRAPHICS aexp
Example: GRAPHICS 2
This command is used to select one of the nine graphics modes. Table 9-1 summarizes the nine modes and the characteristics of each. The GRAPHICS command automatically opens the screen, S:(the graphics window),as device #6. So when printing text in the text window, it is not necessary 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 number (aexp) in the GRAPHICS command. Adding 32 prevents the graphics command from clearing the screen.
To return to graphics mode 0 in Direct mode, press and press
RETURN .
or type GR.0
TABLE 9.1—TABLE OF MODES AND SCREEN FORMATS
Gr.
Mode
Mode
Type
SCREEN FORMAT
Verl.
Verl.
Horiz.
(Hours)
(Col)
Split
(Col)
Full
Screen Screen
Number
Of
Colors
RAM
Required
(Bytes)
4
5
6
7
8
0
1
2
3
TEXT
TEXT
TEXT
GRAPHICS
GRAPHICS
GRAPHICS
GRAPHICS
GRAPHICS
GRAPHICS
40
20
20
40
80
80
160
160
320
-
20
10
20
40
40
80
80
160
24
24
12
24
48
48
96
96
192
The following paragraphs describe the nine graphics modes.
2
4
2
4
1/2
2
5
5
4
993
513
261
273
537
1017
2025
3945
7900
Graphic Müdes and Commands
45
GRAPHICS
MODE 0
GRAPHICS
MODE S
1 AND 2
This mode is the 1-color, 2-luminance (brightness) default mode for the ATARI
Personal Computer. lt contains a 24 by 40 character screen matrix. The default margin settings at 2 and 39 allow 38 characters per line. Margins may be changed by poking LMARGN and RMARGN (82 and 83). See Appendix I. Some systems have different margin default settings. The color of the characters is determined by the background color. Only the luminance of the 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 location, use one of the following two methods.
Method 1. lineno POSITION aexp1, aexp2 lineno PRINT sexp
Puts cursor at location specified by aexpl and aexp2.
Method 2 lineno GR. 0 lineno POKE 752,1 lineno COLOR ASC(sexp) lineno PLOT aexp1,aexp2 lineno GOTO lineno
Specifies graphics mode.
Suppresses cursor.
Specifies character to be printed.
Specifies where to print character.
Start loop to prevent READY from being printed. (GOTO same lineno.)
Press
BREAK
to terminate loop.
GRAPHICS 0 is also used as a clear screen command either in Direct mode or
Deferred mode. lt 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 mode 1 are 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 used 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 command.
Example:
100 GR. 1
110 PRINT46;"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 Default Color
0
1
2
3
0
2
Note: See SETCOLOR to change character colors.
Orange
Light Green
Dark Blue
Red
Orange
Dark Blue
46 Graphic Modes and Commands
Unless otherwise specified, all characters are displayed in upper case noninverse form. To print lower case letters and graphics characters, use a POKE
756,226. To return to upper case, use POKE 756,224.
In graphics modes 1 and 2, there is no inverse video, but it is possible to get all the rest of the characters in four different colors (see end of section).
(X=0)
(Y=0)
S:
Graphics Window
(graphies or test)
E:
Text Window lines) border (size depends on individual
TV's overscan)
Figure 9-1. Split-Screen Display For Graphics Modes 1 and
2
The X and Y coordinates start at 0 (upper left of screen). The maximum values are the numbers of rows and columns minus 1 (see Table 9-1).
This split-screen configuration can be changed to a full screen display by adding the characters + 16 to the mode number.
Example:
GRAPHICS 1+16
GRAPHICS
MODES
3, 5, AND 7
These three 4-color graphics modes are also split-screen displays in their default state, but may be changed to full screen by adding +16 to the mode number.
Modes 3, 5, and 7 are alike except that modes 5 and 7 use more points (pixels) in plotting, drawing, and positioning the cursor; the points are smaller, thereby giving a much higher resolution.
GRAPHICS
These two 2-color graphics modes are split-screen displays and can display in
MODES only two colors while the other modes can display 4 and 5 colors. The advantage of a two-color mode is that it requires less RAM space (see Table 9-1). Therefore,
4 AND 6 it is used when only two - colors are needed and RAM is getting crowded. These two modes also have a higher resolution which means smaller points than
Graphics mode 3.
GRAPHICS
MODE 8
This graphics mode gives the highest resolution of all the other modes. As it takes a lot of RAM to obtain this kind of resolution, it can only accomodate a maximum of one color and two different luminances.
Graphie Modes and Connnands
47
COLOR (C.)
Format:
Examples:
COLOR aexp
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 DRAWTO commands 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 only 64 different characters are available in these modes instead of the full
256-character set.)
Tables 9-6 and 9-7 at the end of this section illustrate
the internal character set and the character/color
assignment. Tahle 9-2 is a simplified table which allows 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 only 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 particular graphics mode being used. This may be determined 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 DRAWTO in GRAPHICS 3 through 7 when no COLOR statement has been executed. Correct by doing a .
COLOR 1 first.
DRAWTO (DR.)
Format:
DRAWTO aexpl, aexp2
Example:
100 DRAWTO 10, 8
This statement causes a line to be drawn from the last point displayed by a PLOT
(see
PLOT)
to the location specified by aexpl and aexp2. The first expression represents the X coordinate and the second represents the Y-coordinate (see
Figure 9-1). The color of the line is the same color as the point displayed by the
PLOT.
LOCATE (LOC.)
Format:
LOCATE aexpl, aexp2, var
Example:
150 LOCATE 12, 15, X
This command positions the invisible graphics cursor at the specified location in the graphics window, retrieves the data at that pixel, and stores it in the specified arithmetic variable. This
gives
a• number from 0 to 255 for Graphics modes 0 through 2; 0 or 1 for the 2-color graphics modes; and 0, 1, 2, or 3 for the
4-color modes. The two arithmetic expressions specify the X and Y coordinates
of the
point. LOCATE is equivalent to:
POSITION aexp1, aexp2:GET #6,avar
48
Graphic Modes and Commands
■
..__
Doing a PRINT after a LOCATE or GET from the screen may cause the data in the pixel which was examined to be modified. This problem is avoided by repositioning the cursor and putting the data that was read, back into the pixel before doing the PRINT. The following program illustrates the use of the
LOCATE command.
10 GRAPHICs 7+16
29 coLoR
1
30 GETCOLOP 2,10,8
40 PLOT 10,15
50 DRANTO 15,15
60 LOCATE 12,15 X
70 PRINT X
Figure 9-2. Example Program Using LOCATE
PLOT (PL.)
On execution, the program prints the data (1) determined by the COLOR statement which was stored in pixel 12, 15.
Format:
PLOT aexpl, aexp2
Example:
100 PLOT 5,5
The PLOT command is used in graphics modes 3 through 8 to display a point in the graphics window. The aexpl specifies the X-coordinate and the aexp2 the
Y-coordinate. The color of the plotted point is determined by the hue and luminance in the color register from the last COLOR statement executed. To change this color register, and the color of the plotted point, use SET-
COLOR. Points that can be plotted on the screen are dependent on the graphics mode being used. The range of points begins of 1 and extends to one less than the total number of rows (X-coordinate) or columns (Y-coordinate) shown in
Table 9-1.
POSITION
(POS.) Format:
POSITION aexpl, aexp2
Example:
100 POSITION 8, 12
PUT/GET
PU /GE)
The POSITION statement is used to place the invisible graphics window cursor at a specified location on the screen (usually precedes a PRINT statement). This statement can be used in all modes. Note that the cursor does not actually move until an I/O command which involves the screen is issued.
Formats:
PUT #aexp, aexp
GET #aexp, avar
Examples: 100 PUT #6, ASC("A")
200 GET #1, X
In graphics work, PUT is used to output data to the screen display. This statement works hand-in-hand with the POSITION statement. After a PUT (or GET), the cursor is moved to the next location on the screen.
Doing a PUT to device causes the one-byte input (second aexp) to be displayedaat the cursor position.
The byte is either an ATASCII code byte for a particular character (modes 0-2) or the color data (modes 3-8).
GET is used to input the code byte of the character displayed at the cursor tion, into the specified arithmetic variable. The values used in
PUT and GET correspond to the values in the COLOR statement. (PRINT and INPUT may also be used.)
Graphic Müdes arid Cornmands
49
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.
SETCOLOR (SE.)
Format:
SETCOLOR aexpl, aexp2, aexp3
Example:
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: aexpl = Color register (0-4 depending on graphics mode) aexp2 = Color hue number (0-15. See Table 9-3) aexp3 = 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 SETCOLOR (aexp2) NUMBERS
GRAY
LIGHT ORANGE (GOLD)
ORANGE
RED-ORANGE
PINK
PURPLE-BLUE
BLUE
BLUE
LIGHT BLUE
TURQUOISE
GREEN-BLUE
GREEN
YELLOW-GREEN
ORANGE-GREEN
LIGHT ORANGE
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 (COLOR° 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 Gornmonds
TABLE 9.4—TABLE OF SETCOLOR "DEFAULT" COLORS*
Setcolor
(Color Register)
0
1
2
3
4
Defaults To
Color
2
12
9
4
0
Luminance
8
10
4
6
0
Actual Color
ORANGE
GREEN
DARK BLUE
PINK OR RED
BLACK
'DEFAULT" occurs if not SETCOLOR statement is used.
Note:
Colors may vary depending upon the television monitor type, condition, and adjustment.
A program illustrating Graphics mode 3 and the commands explained so far in this section is shown below:
10 GRAPHICS 3
20 RETCOLOR 0,
2 ,8:C3LOR 1
39 PLOT 17,1 , DRAWTO 17,12 , DRAWTO 9,12
40 PLOT 19,1 , 0RAWT0 19,12
59 PLOT 20,1:DRAWTO 20,12
60 PLOT 22,1:0RAWTO 22,10:DRAWTO 30,18
70 POKE 752,1
89 PRINT :PRINT " ATARI PER2ONAL COMP
UTERS"
90 GOTO '
The SETCOLOR and COLOR statements set the color of the points to be plotted
(see Table 9.5). The SETCOLOR command loads color register 0 with hue 2
(orange) and a luminance of 8 ("normal"). The next 4 lines plot the points to be displayed. Line 90 suppresses the cursor and line 100 prints the string expression
ATARI PERSONAL COMPUTERS in the text window (6 spaces in).
Note that the background color was never set because the default is the desired color (black).
If the program is executed, it will print the Atari logo in the graphics window and the string expression in the text window as in Figure 9-3.
Graphie Modes and Connnands
51
aw
■
•1
Y-AXIS POINTS (ROWS)
•.• GA u
o \
Cle
n
x z0.91 z
52
Graphic Modes and Comtnands
2 <
'c-- e i-g eiD t,1 >.
Z o
P
ez
U
(.2
FIZ
Z
0
U
Q
Z
<
Z
E-1
Z
W
X cl) cu
GJ o
Cö
0
0
CU
5 z e
0
0
0
110
0 ct
(1)
"0
0
PZI
-
5 cu
-0
"C
Z z ,
0
-1--
■ 0
C15 bp
;....
C Q
U r...,
0
1 urza im
CU
"C
C-
■
0
-0
.4.-i-i-o-4 ■ 4-.0
U U 0 U S.
C13 CCS CO
Ct 110 cz cu czi ccs c..,
,-O
4 .4 4 cu uuu,c.)gcl o o o
UUU
''''' '.'" • ""
0
V)
0
•'-1 ni ns c,:, cr, s-. ;-. s-. . s-.
LDULD ic..7 bi)
.- -
U
Cö e ho
,- .
0
CCS e
0
V)
U
•1-.
0 a,
Cn
• 0
■ cr,
;-. , ct u
C.7 i 1 Ic..7
0
'1:5
0
Z1
3 cu
"0
Z ow co0 ru '2, m -c-d -ätt
,
0 ce ci) ,_ _0 m cu
4 ce • c --
,-zi tj o t Cr.; -4-
0 t +8'
0 —, s■
Tzi M
Ü U
CO
,-, r.,“,"D . 0
0
0 bt
,-- c‘I
..ID rn ce
0 .-.
8 3 cU c4-.
E ',25' up mj os ho
._.
.
ä CCd
2
e
0
0
V)
V)
0 U
P. -
0 cci ce L.
;-. u , 0
I
S...7 (...7 I M
IX
Ci
0 >,u=. C1J
E• 0
3 U 'El cn
e
cD .-1 c•2 cn 714
CD ex
-ci
r
.
c/D ce g >
0 4 0 c 4 z
-
0 ,--1 c9 cn e 0
■ ■ c \t on e
0 1-1 CN/ CO 0 0 1-1 r \/ Cr) e iii
-0
0
0 c' ;‹ in' i...
0
1-.1 r•-
■
0
Q cz z >
;-
■ n
0 ° 0
0 os >
_
ci)
0
0L)
d
4
4... z
Z 41
4-
■
^,
M
P4 ;4
4 4
M t4 C-3
E-4 <
:1 t=1
Z gq
4Z
P4 p_l
0 1:: 4
Z0 M CZ C-)
< r
_ „,4 `I
12P
U...7
722 2
Z 4
2 tz
4
ZC.D P:1 C-)
< E_, <
Z
P:1 n
F.0
LD
Z
<
0
L..)
<
PZ1
Z
4.1 4.1 g4
4 c O3
,_,
Z
0 < il 2
121
Graphie Modes and Command.s
53
XIO (X.)
SPECIAL FILL
APPLICATION
Format:
XIO 18, #aexp, aexpl, aexp2, filespec
Example:
100 XIO 18, #6, 0, 0, "S:"
This special application of the XIO statement fills an area on the screen between plotted points and lines with a non-zero color value. Dummy variables (0) are used for aexpl and aexp2.
The following steps illustrate the fill process:
1.
PLOT bottom right corner (point 1).
2.
DRAWTO upper right corner (point 2). This outlines the right edge of the area to be filled.
3.
DRAWTO upper left corner (point 3).
4.
POSITION cursor at lower left corner (point 4).
5.
POKE address 765 with the fill color data (1, 2, or 3).
6.
This method is used to fill each horizontal line from top to bottom of the specified area. The fill starts at the left and proceeds across the line to the right until it reaches a pixel which contains non
zero data (will wraparound if necessary). This means that fill cannot be used to change an area which has been filled in with a non-zero value, as the fill will stop. The fill commänd will go into an infinite loop if a fill with zero (0) data is attempted on a line which has no non-zero pixels.
BREAK
or
SYSTEM RESET
can be used to stop the fill if this happens.
The following program creates a shape and fills it with a data (color) of 3. Note that the XIO command draws in the lines of the left and bottom of the figure.
10 GRAPHICS 5÷16
20 COLOR 3
33 PLOT 70, 45
40 DRAWTO 50, 10
50 DRAWTO 30, 10
60 POSITION 113.45
70 POKE 765,
7
80 0 18, #6, 0, 0. "
90 GoTo
Figure 9-4. Example "FILL" Program
Assigning Colors To Characters In Text Modes 1 and 2
This procedure describes the method of assigning colors to the Atari character set. First, look up the character number in Table 9-6. Then, see Table 9-7 to get the conversion of that number required to assign a color register to it.
Example:
Assign SETCOLOR 0 to lower case "r" in mode 2 whose color is determined by register 0.
1.
In Table 9-6, find the column and number for "r" (114-column 4).
2.
Using Table 9-7, locate column 4. Conversion is the character'number minus
32 (114 - 32 = 82).
54
Graphic Modes und
COM171alldS
' X
VD -
1
-
1
Z >
>1
›-
N
—
IC V
Ah.
ei
E
Z
T u c9
,
OZ
, e
1-4
1-1
Lo
,4
,-4
CZ ,-0 C.) up
1-1
1-4
N
.-1
1-1 co
1-1
1-1
7:5 (1) 4-1
0-) x-4
1-1
0 c9
1-1
—I
79
'-'
IV) ,-.
•---. c-9 c9
Co
N
7t• c-9
.-i
In
C9
••--
E
(9
C9
N.
N o
4
*
Lo
0 oc)
0
0
0 o o
.-I
-4
0
.--
■ c9 o
.--4
CO
0
..-1 e
0
.--1
Li-D
0
,--4
Lo
0
,-,
N-
0
-1 co
0
-, o
-1
1-1
,-
•I
IM
U ce tt
E z o r4
:
0 co
.--
■ co r9 co
CO
Co
-:}4
Co in
Co
(9
Co
: t--
(20
Co
Co
0
Co o
0
8'
,-( cs) c-q
0
CO
0 e
0
LO
0
-/
N. lt>
N.
el 3 113 E
(9
N.
N
N
0
N.
10
(9
CO
(9
0
.
3
(9
0
N
1 -1
N-
C9
N
a
U
N
z
E z
0
G.7 et
r4 z
u
e
c•
'Zt 4
<
o
11
Z
T-4 li D
f2:1 z..)
tt c9
Cr)
C9
In co in e
In in in
(..0 irD
(Z1 P4 V.1-
■ co co
"el
CO in
CO
(0
CO CO c0
CO
Z
,....
■
-,
— -- —
N in oC
In
0")
In
0
•,
-1
< 1
CO
4
> Z 0
Cr)
CO
0 e
1
-
1 e
C9 e
Cr) e e e
In e cm ei
Z
E
:
U o
1-1 le
N.
,-,
u
,..› c g-i
tt
0
,--i c9
1
-1
0
.-1
("9
CO
4,
CO
•sti
0
N
1-4
N c•9
N
CO
N e
N
11-3
N
•En_ ,,f2
'4
1 in c.ID
LCD
cz
(9
..
t--- CC
_
N- c0
0
—
• •
• -
V c..0
N
N-
N
+
0 0
,.-1
,-(
,.-+ c-.1
1-4
-
I I A cs-.
Co
N
0
N
0
CO
,-
■
CO
1
CO
9-1
1
....,_
trp
1-1
Graphic Modes and Cominands
55
MODE 0
MODE 1
OR
MODE 2
TabIe 9.7—CHARACTER/COLOR ASSIGNMENT
Conversion 1 Conversion 2 Conversion 3 Conversion 4
2
SETCOLOR 2
11+32
# + 32
11-32
NONE
POKE 756,224
POKE 756,226
# + 32 11-32
SETCOLOR 0
SETCOLOR 1
-$32
NONE
11-32
11-64
# + 160
#+ 64
# + 160
NONE
11+96
SETCOLOR 2
SETCOLOR 3
# + 128 11+ 192
# + 96
# + 64
# +
128
2. Luminance controlled by SETCOLOR 1, 0, LUM.
3.
POKE the Character Base Address (CHBAS) with 226 to specify lower case letters or special graphics characters; e.g.,
POKE 756,226 or
CHBAS = 756
POKE CHBAS, 226
To return to upper case letters, numbers, and punctuation marks, POKE CHBAS with 224.
4.
A PRINTstatement using the converted number (82) assigns the lower case
"r" to SETCOLOR 0 in mode 2 (see Table 9-5).
Graphic Control Characters
These characters are produced when the
EZ3
key is pressed with the alphabetic keys shown on back cover. These characters can be used to draw design, pictures, etc., in mode 0 and in modes 1 and 2 if CHBAS is changed.
56 Graphic Modes and Conimands
10
SOUNDS AND GAME
CONTROLLERS
SOUND (SO.)
This section describes the statement used to generate musical notes and sounds through the audio System of the television monitor. Up to four different sounds can be "played" simultaneously creating harmony. This SOUND statement can also be used to simulate explosions, whistles, and other interesting sound effects. The other commands described in this section deal with the functions used to manipulate the keyboard, joystick, and paddle controllers. These functions allow these controllers to be plugged in and used in BASIC programs for games, etc.
The command and functions covered in this section are:
SOUND PADDLE
PTRIG
STICK
STRIG
Format:
SOUND aexpl, aexp2, aexp3, aexp4
Example:
100 SOUND 2, 204, 10, 12
The SOUND statement causes the specified note to begin playing as soon as the statement is executed. The note will continue playing until the program encounters another SOUND statement with the same aexpl or an END statement.
This command can be used in either Direct or Deferred modes.
The SOUND parameters are described as follows: aexpl =
Voice. Can be 0-3, but each voice requires a separate SOUND state- ment. aexp2 = Pitch. Can be any number between 0-255. The larger the number, the lower the pitch. Table 10-1 defines the pitch numbers for the various musical notes ranging from two octaves above middle C to one octave below middle C. aexp3 = Distortion. Can be even numbers between 0-14. Used in creating sound effects. A 10 is used to created a "pure" tone whereas a 12 gives an interesting buzzer sound. A buzzing sound (like engines at a race track) can be produced using two separate SOUND commands with the distortion value (aexp3) alternating between 0 and 1.
A value of 1 is used to force output to the speaker using the specified volume (see aexp4). The rest of the numbers are used for other special effects, noise generation, and experimental use. aexp4 =
Volume control. Can be between 1 and 15. Using a 1 creates a sound barely audible whereas a 15 is loud. A value of 8 is considered nor- mal. If more than 1 sound statement is being used, the total volume should not exceed 32. This will create an unpleasant "clipped" tone.
Sounds and Garne Controllers
57
58
Sound.s and Garne Controllers
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
C
B
A# or Bb
A
G# or Ab
G
F# or Gb
F
E
D# or E
D
C# or Db
C
B
A# or B
A
G# or Ab
G
F# or Gb
F
E
D# or El'
D
C# or Db
C
B
A# or Bb
A
G# or Ab
G
F# Gb
F
D
D# or El'
D
C# or Db
C
10 READ A
20 IF A=25.6 THEN END
30 SOUND 0, A, 12, 12
40 FÜR W=1 TO 400 NEXT W
50 PRINT A
60 GOTO 10
70 9'40
'30 DATA 29, 31,
.91 , 96 , 108, 121
45, 47, 53.. GO, 72, 81
90 DATA 128, 144, le2, 132, 193, 217, 247, 25(::
Figure 10-1. Musical Scale Program
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
Note that the DATA statement in line 80 ends with a 256, which is outside of the designated range. The 256 is used as an end-of-data marker.
GAME
Figure 10-2 is an illustration of the three controllers used with the Atari Per
CONTROLLER sonal Computers. The controllers cän be attached directly to the Atari Per- sonal Computer or to external mechanical devices so that outside events can be
FUNCTIONS fed directly to the computer for processing and control purposes.
PADDLE
PTRIG
STICK
Figure 10-2. Garne Controllers
Format:
PADDLE(aexp)
Example: PRINT PADDLE(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 between 1 and 228, with the number increasing in size as the knob on the controller 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 of 0 if the trigger button of the 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 len to right.
Controller 1 = STICK(0)
Controller 2 = STICK(1)
Controller 3 = STICK(2)
Controller 4 = STICK(3)
Figure 10-3 shows the numbers that will be returned when the joystick controller is moved in any direction.
Sounds and Game Controllers 59
14 -
11
7
STRIG
13
Figure 10-3. Joystick Controller Movement
Format:
STRIG(aexp)
Example:
100 IF STRIG(3)= 0 THEN PRINT "FIRE TORPEDO"
The STRIG function works the same way as the PTRIG function. lt can be used with both the joystick and keyboard controllers.
60
Sounds und Garne Controllers
ADVANCED PROGRAMMING
TECHNIQUES
This section includes hints on increasing programming efficiency, conserving memory, and combining machine language programs with Atari BASIC programs. This section does not include an instruction set for the 6502 microprocessor 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.
MEMORY
CONSERVATION
These hints give ways of conserving memory. Some of these methods make programs 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 (just 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 IP 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 Teclmiques
61
If you need to save memory, avoid programs like this:
19 X=Y+1
29 Y=Y+1
39 2=X+Y
40 PRINT Z
59 GOTO 50 and consolidate lines like this:
19 X=X+1:7
2.
141:Z=X+Y:PRINT Z:GOTO 19
This consolidation saves 12 bytes.
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:
19 PI=3.14159
20 PRINT "AREA OF A CIRCLE IS THE RADIUS
SQUARED TIMES ";PI
Literal strings require 2 bytes overhead and 1 byte for each character
(including all spaces) in the string.
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 of the 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 columns). Thus, a 25 row by 4 column matrix would require 15 + approximately 3 (for variable name) + approximately 10 (for the DIM statement) + 6 times 100 (the matrix size), or about 630 bytes.
62
Advanced Programming Techniques
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.
PROGRAMMING
Machine language is written entirely in binary code. The ATARI Personal Com
IN MACHINE
LANGUAGE
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 accumulator (PLA) instruction to remove the number (N) of input arguments off the stack. If this number is not 0, then all of the input arguments must be popped 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) instruction. 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 förmat to obtain the value returned by the USR function.
The .ADR function rnay 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 hexadecimal codes, converting 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
1. To use this program, first enter it. After entering it, save this program on disk or cassette for future use.
10 GRAPHICS 0:PRINT "HEXCODE LOADER PROG
RAM:PRINT
20 REM STORES DECIMAL EOUNALENTS IN ARR
AY A, OUTPUTS IN PRINTED 'ETA STATEMENT
S' AT
21 REM LINE NUMBER 1500.
30 REM USER TI-EN PLACES CURSOR ON PRINTE
D OUTPUT LINE, HITS "RETURN«, AND ENTERS
31 REM REST OF BASIC PROGRAM INCLUDING U
SR STATEMENT.
40
°IM A( 50 ) HEU( 5 >
50 REM INRUT,DONUERSION,STORAGE OF DATA.
60 N=0:PRINT "ENTER 1 HEX CODE. IF LAST
ONE IS IN, ENTER TONE'.";
70 INPUT HE:e
80 IF HEX$="00NE" THEN N=999:GOTO 130
90 FÜR I=1 TO LEN(HEX$)
100 IF HEXS(I,I)<="9" THEN N=N*16+UAL(HE e(I,I)):GOTO 120
110 N=N*16+ASC(HEX$(1,I))-ASC("A")+10
120 NEXT I
139 PRINT N:C=C+1
140 A(C)=N
150 IF N<>999 THEN GOTO 60
190 REH PRINT OUT DATA LINE AT 1500
299 GRAPHICS 0:PRINT "1500 DATA";
210 C=0
229 C=C+1
239 IF A(C)=999 THEN PRINT "999" STOP
249 PRINT A(C);",";
,
252 A(C)=0 •
260 GOTO 220
31e3 PRINT "PUT CORRECT NUMBER OF HEX ET
ES IN LINE 1000. STOP :REM TRAF LINE
999 REM ** EXECUT ION MODULE **
CLR :BYTES=0
1819 TRAF 300 : °IM EE 1::', E( INT( BYTES/6 )+1
1830 FÜR I=1 TO BYTES
1040 READ A:IF A>255 THEN GOTO 1060
1050 POKE ADR(ES)+LA
1060 NEXT I
1070 REM BASIC PART OF USER'S PROGRAM FO
LLOWS
Figure 11-1. Hexcode Loader Input Program
64
Advanced Programming Teelunanes
2.
Now add the BASIC language part of your program starting at line 1080 including the USR function that calls the machine language subroutine. (See example below.)
3.
Count the total number of hex codes to be entered and enter this number on line 1000 when requested. If another number is already entered, simply replace it.
4.
Run the program and enter the hexadecimal codes of the machine level subroutine pressing
RETURN
after each entry. After the last entry, type
DONE and press
RETURN .
Now the DATA line (1500) displays on the screen. lt will not be entered into the program until the cursor is moved to the
DATA li
RETURN
is pressed.
Add a program line 5 GOTO 1000 to bypass the hexcode loader (or delete the hexcode loader through line 260). Now save the completed program by using CSAVE or SAVE. lt is important to do this before executing the part of the program containing the USR call. A mistake in a machine language routine may cause the system to crash. If the System does hang up, press
SYSTEM RESET
.
If the system doesn't respond, turn power off and on again, reload the program, and correct it.
Note:
This method only works with relocatable machine language routines.
The follovving tvvo sample programs can each be entered into the Hexcode
Loader program. The first program prints NOTHING IS MOVING while the machine program changes the colors. The second sample program displays a
BASIC graphics design, then changes colors.
1980 GRAPHICS 1+16
1090 FOR 1=1
TO 6
1190 PRINT #6;"notkins is movins!"
1110 PRINT #6;"NOTHING IS MOUING!"
1120 PRINT #6»inoth1ns is ffiovins!"
1130 PRINT #6;"NOTHING IS MOUING!"
1140 NEXT I
1159 Q=USR(AOR(ES)+1)
1160 FOR
I=1 TO 25:NEXT I:GOTO 1150
After entering this program, check that line 1000 reads:
1000 CLR:BYTES = 21
Type RUN
RETURN .
Advanced Progrrunnüng Techniques
65
Now enter the hexadecimal codes as shown column by column.
68
A2
0
AC
C4
2
BD
C5
2
9D
C4
2
E8
E0
3
90
F5
8C
C7
2
60
BYTES = 21
When completed, type DONE and press
RETURN
.
Now place the cursor after the last entry (999) on the DATA line and press
RETURN .
Now run the program by typing GOTO has been added, type RUN
RETURN
.
1000 and pressing
RETURN
,
or if line 5
Press
BREAK
to stop program and delete line
5.
The second program, which follows, should be entered in place of the
NOTHING IS MOVING program.
Be sure to check the BYTES = count in line 1000. Follow steps 2 through 6.
1080 GRAPHICS 7+16
1090
sm:21_0R
9,9,4
1100 SETCOLOR 1,9,8
1110 SETCOLOR 2,9,4
1120 CR=1
1130 FÜR X=0 TO 159
1140 COLOR INT(CR)
1150 PLOT 80,0
1160 DRAWTO X,95
1170 CR=CR+0.125
1180 IF CR=4 THEN CR=1
1190 NEXT X
1200 X=USR(ADR(E$)+1)
1210 FÜR I=1 TO 15.NEXT I
1220 GOTO 1200
Type RUN
RETURN .
Enter the hexadecimal codes for this program column by column.
BD
C5
2
9D
C4
68
A2
0
AC
C4
2
2
E8
E0
2
90
F5
8C
C6
2
60
BYTES = 21
66
Advanced
Progrananing Tecludques
When completed, type DONE and press
RETURN
.
Now place the cursor after the last entry (999) on the DATA line and press
RETURN
.
Now run the program by typing GOTO 1000 and pressing
RETURN
,
or add line 5
GOTO 1000 and type RUN
RETURN
.
Press Cligto stop program and delete line
5.
Figure 11-2 illustrates an assembler subroutine used to rotate colors which might prove useful. lt is included here for the information of the user.
._..,
Address Object
Code
02C4
02C5
02C6
02C7
6000
6001
6003
6006
6009
600C
600D
600F
6011
6014
68
A200
ACC402
BDC502
9DC402
E8
E002
90F5
8CC602
60
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
Label Mnemonic
LOOP
*=
PLA
LDX
LDY
LDA
STA
INX
CPX
Data
$6000
#0
COLORO
COLOR1,X
COLORO,X
#3
0270
LOOP
0280
0290
BCC
STY
RTS
COLOR3
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
Machine program starting address*
Pop stack (See Chapter 4)
Zero the X register
Save COLOR 0
Increment the X register (add one)
Compare contents of X register vvith 2
Loop if X register contents are less than 2
Save COLOR 0 in COLOR 3
Return from machine level sub- routine
Assembler
Prints This
This Portion is Source Information Programmer Enters
Using Atari Assembler Cartridge
#
Indicates data (source)
* Routine is relocatable
$ Indicates a hexadecimal number
Figure 11-2. Assembler Subroutine To Rotate Colors
Advanced Pryeraniming Teehufanes
67
NOTES
68
Notes
APPENDIX A
ALPHABETICAL DIRECTORY
OF BASIC RESERVED WORDS
Note:
The period is mandatory after all abbreviated keywords.
RESERVED
WORD:
ABBREVIATION:
BRIEF SUMMARY
OF BASIC STATEMENT
ABS
ADR
AND
ASC
ATN
BYE
CLOAD
CHR$
CLOG
CLOSE
CLR
COLOR
COM
CONT
COS
CSAVE
B.
CLOA.
CL.
C.
CON.
Function returns absolute value (unsigned) of the variable or expression.
Function returns memory address of a string.
Logical Operator: Expression is true only if both subexpressions joined by
AND
are true.
String function returns the numeric value of a single string character.
Function returns the arctangent of a number or expression in radians or degrees.
Exit from BASIC and return to the resident system or console processor. operating
Loads data from Program Recorder into RAM.
String function returns a single string byte equivalent to a numeric value between 0 and 255 in ATASCII code.
Function returns the base 10 logarithm of an expression.
I/O statement used to close a flle at the conclusion of I/O operations.
The opposite of DIM: Undimensions all strings; matrices.
Chooses color register to be used in color graphics work.
Same as DIM.
Continue. Caus2s a program to restart execution on the next line following use of the
BREAK
key or encounter- ing a
STOP.
Function returns the cosine of the variable or expression
(degrees or radians).
Outputs data from RAM to the Program Recorder for tape storage.
Appendix
A-1
RESERVED
WORD:
DATA
ABBREVIATION:
D.
DEG
DIM
DOS
DRAWTO
END
ENTER
EXP
FOR
FRE
GET
GOSUB
GOTO
GRAPHICS
IF
INPUT
INT
LEN
DE.
DI.
DO.
DR.
E.
F.
GE.
GOS.
G.
GR.
I.
BRIEF SUMMARY
OF BASIC STATEMENT
Part of READ/DATA combination. Used to identify the succeeding items (which must be separated by commas) as individual data items.
Statement
DEG
teils computer to perform trigonometric functions in degrees instead of radians.
(Default in radians.)
Reserves the specified amount of memory for matrix, array, or string. All string variables, arrays, matrices must be dimensioned with a DIM statement.
Reserved word for disk operators. Causes the menu to be displayed. (See DOS Manual.)
Dravvs a straight line between a plotted point and specified point.
Stops program execution; closes files; turns off sounds.
Program may be restarted using CONT. (Note: END may be used more than once in a program.)
I/O command used to store data or programs in untokenized (source) form.
Function returns e (2.7182818) raised to the specified power.
Used with NEXT to establish FOR/NEXT loops. Introduces the range that the loop variable will operate in during the execution of loop.
Function returns the amount of remaining user memory (in bytes).
Used mostly with disk operations to input a single byte of data.
Branch to a subroutine beginning at the specified line number.
Unconditional branch to a specified line number.
Specifies which of the eight graphics modes is to be used. GR.0 may be used to clear screen.
Used to cause conditional branching or to execute another statement on the same line (only if the first expression is true).
Causes computer to ask for input from keyboard. Ex- ecution continues only when
RETURN
key is pressed after inputting data.
Function returns the next lowest whole integer below the specified value. Rounding is always downward, even when number is negative.
String function returns the length of the specified str- ing in bytes or characters (1 byte contains 1 character).
A
-
2
Appendix
RESERVED
WORD:
LET
LIST
LOAD
LOCATE
ABBREVIATION:
LE.
L.
LO.
LOC.
LOG
LPRINT
NEW
NEXT
LP.
N.
NOT
NOTE
ON
OPEN
OR
PADDLE
PEEK
PLOT
POINT
POKE
POP
POSITION
NO.
0.
PL.
P.
POK.
POS.
PR. or ?
BRIEF SUMMARY
OF BASIC STATEMENT
Assigns a value to a specific variable name. LET is optional in Atari BASIC, and may be simply omitted.
Display or otherwise output the program list.
Input from disk, etc. into the computer.
Graphics: Stores, in a specified variable, the value that controls a specified graphics point.
Function returns the natural logarithm of a number.
Command to line printer to print the specified message.
Erases all contents of user RAM.
Causes a FOR/NEXT loop to terminate or continue depending on the particular variables or expressions.
All loops are executed at least once.
A "1" is returned only if the expression is NOT true. If it is true, a "0" is returned.
See DOS/FMS Manual...used only in disk operations.
Used with GOTO or GOSUB for branching purposes.
Multiple branches to different line numbers are possible depending on the value of the ON variable or expression.
Opens the specified file for input of output operations.
Logical operator used between two expressions. If either one is true, a "1" is evaluated. A "0" results only if both are false.
Function returns position of the paddle game controller.
Function returns decimal form of contents of specified memory location (RAM or ROM).
Causes a single point to be plotted at the X,Y location specified.
Used with disk operations only.
Insert the specified byte into the specified mernory loca- tion. May be used only with RAM. Don't try to POKE
ROM or you'll get an error.
Removes the loop variable from the GOSUB stack. Used when departure from the loop is made in other than normal manner.
Sets the cursor to the specified screen position.
I/O command causes output from the computer to the specified output device.
Appendix A
-
3
PTRIG
PUT
RAD
READ
REM
RESTORE
RETURN
RND
RUN
SAVE
SETCOLOR
SGN
SIN
SOUND
SQR
STATUS
STEP
STICK
STRIG
STOP
RESERVED
WORD: ABBREVIATION:
BRIEF SUMMARY
OF BASIC STATEMENT
PU.
REA.
R.
or .
SPACE
RES.
RET.
RU.
S.
SE.
SO.
ST.
STO.
Function returns status of the trigger button on game controllers.
Causes output of a single byte of data from the computer to the specified device.
Specifies that information is in radians rather than degrees when using the trigonometric functions.
Default is to
RAD.
(See
DEG.)
.
Read the next items in the
DATA
list and assign to specified variables.
Remarks. This statement does nothing, but comments may be printed within the program list for future reference by the programmer. Statements on a line that starts with
REM
are not executed.
Allows
DATA
to be
read
more than once.
RETURN
from subroutine to the statement immediately following the one in which
GOSUB
appeared.
Function returns a random number between 0 and 1, but neyer 1.
Execute the program. Sets normal variables to 0, undims arrays and string.
I/O statement causes data or program to be recorded on disk under filespec proyided with
SAVE.
Store hue and luminance color data in a particular color register.
Function returns + 1 if value is positive, 0 if zero, - 1 if negative.
Function returns trigonometric sine of given value
(DEG
or
RAD).
Controls register, sound pitch, distortion, and volume of a tone or note.
Function returns the square root of the specified value.
Calls status routine for specified device.
Used with
FOR/NEXT.
Determines quality to be skipped between each pair of loop variable yalues.
Function returns position of stick game controller.
Function returns 1 if stick trigger button not pressed, 0 if pressed.
Causes execution to stop, but does not close files or turn off sounds.
A-4 Appelldia:
RESERVED
WORD: ABBREVIATION:
STR$
THEN
TO
TRAP
USR
VAL
XIO
T.
X.
BRIEF SUMMARY
OF BASIC STATEMENT
Function returns a character string equal to numeric value given. For example:
STR$(65)
returns 65 as a string.
Used with
IF:
If expression is true, the
THEN
statements are executed. If the expression is false, control passes to next line.
Used with
FOR
as in "FOR X = 1 TO 10". Separates the loop range expressions.
Takes control of program in case of an
INPUT
error and directs execution to a specified line number.
Function returns results of a subroutine.
machine-language
Function returns the equivalent numeric value of a string.
General I/O statement used with disk operations (see
DOS/FMS Manual) and in graphics work (Fill).
Appendix
A
-
5
NOTES
Notes
APPENDIX B
ERROR
MESSAGES
ERROR
CODE NO.
2
3
8
9
4
5
6
7
10
11
12
13
14
15
ERROR CODE MESSAGE
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 differed variable names is allowed.
(See Variable Name Limit.)
String Length Error: Attempted to store beyond the DIMensioned string 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/rnatrix or string has been already DIMensioned, 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 98 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.
Appendix
8-1
ERROR
CODE NO.
16
17
18
ERROR CODE MESSAGE
RETURN Error:
A RETURN was encountered without a matching GOSUB.
Garbage Error:
Execution of "garhage" (bad RAM bits) was attempted. This error code may indicate a hardware problem, but may also be the result of faulty use of
POKE. Try typing NEW or powering down, then re-enter the program without any POKE commands.
Invalid String Character:
String does not start with a valid character, or string in VAL statement is not a numeric string.
Note:
The following are INPUT/OUTPUT errors that result during the use of disk drives, printers, or other accessory devices. Further information is provided with the auxiliary hardware.
19
20
LOAD program Too Long:
Insufficient memory remains to complete LOAD.
Device Number Larger
than 7 or Eclual to 0.
21
128
129
130
LOAD File Error:
Attempted to LOAD a non-LOAD file.
BREAK
IOCB1
Abort:
User hit
BREAK
key during I/O operation.
already open.
131
132
133
134
135
136
137
138
139
140
141
Nonexistent Device
specified.
IOCB Write Only.
READ command to a write-only device (Printer).
Invalid Command:
The command is invalid for this device.
Device or File not Open:
No OPEN specified for the device.
Bad IOCB Number:
Illegal device number.
IOCB Read Only Error:
WRITE command to a read-only device.
EOF:
End of File read has been reached.
(NOTE:
This message may occur when using cassette files.)
Truncated Record:
Attempt to read a record longer than 256 characters.
Device Timeout.
Device doesn't respond.
Device NAK:
Garbage at serial port or bad disk drive.
Serial bus
input framing error.
Cursor out of range
for particular mode.
142 Serial bus data frame overrun.
lIOCB refers to Input/Output Control Block. The device number is the same as the IOCB number.
B
-
2
Appendix
145
146
147
160
165
166
167
168
169
170
161
162
163
164
171
ERROR
CODE NO. ERROR CODE MESSAGE
143
144
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 flies (no sector buffer available).
Disk full (no free sectors).
Unrecoverable System data I/O 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 flies).
File not found.
POINT invalid.
Appendix
B-3
APPENDIX C
ATASCII
CHARACTER SET
C)
0
-v
,...%..%? e
4
.e. ee)e4>
(
() ee
1 1 a
0
2
2J
.s,
4j;
-o'`'' c°
+
4,
c°
fr
, v
<s5'
A.e. c
4e3''c'
13 D
14
15
E
F
IM
ei
3
4
5
3
4
5
66
0
C1
eia
16
17
18
19
10
11
12
13
123
C
1:1
7
8
7
8 la
ri
20
21
14
15
C1
0
19
9
9
15
22 16
0111
10 A
11
12
B
C
Clil
WD
61
23
24
25
17
18
19
0
12
3
34
35
36
37
38
31
32
33
26
27
28
29
30
22
23
24
25
1C
1D
1E
1A
%)
,..."
, zo
e c
C
1B
1F
0 ei
0
1:1
Space 20
21 !
3 3
#
$
5
& 26
A ppendix
C-1
39
40
41
42
27
28
29
2A
3
(
)
*
31
32
33
34
35
36
2C
2D
2E
2F
30
44
45
46
47
48
51
52
49
50
53
54
1
4
5
2
3
6
•
/
0
7
-
60
61
62
63
64
69
' 70
65
66
67
68
41
42
43
44
45
46
3C
3D
3E
3F
40
55
56
57
58
37
38
39
3A
E
F
C
D
@
A
B
,
<
=
>
?
7
8
9
:
51
52
53
54
55
56
4B
4C
4D
4E
4F
50
47
48
49
4A
75
76
77
78
79
80
73
74
71
72
84
85
86
81
82
83
U
V
S
T
Q
R
L
0
P
M
N
I
J
G
H
K
---
"s-
0
v clr‚
449÷
.04 cp ei, e e
("ie 47(9 e,...'
87
57
W
88
58 X
89 59
Y
98
99
100
101
102
94
95
96
97
90
91
92
93
5A
5B
5C
5D
5E
5F
60
61
62
63
64
65
66
Z
[
106
107
108
\
]
A
_ d e f
113 a b c
109
, 110
111
112
113
114
115
116
117
118
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
ets*4 e9
09 i3". c›
103
104
105
67
68
69 j k
1 g h i
.4% e- v c> ei) e 4 c,°
119
77 e
? (e)
+ e e c, w x
120
121
78
79
122
7A
Y z
123
124
7B
7C u v s t o p m n q r
125
126
127
128
129
130
131
132
133
134
7D
7E
7F
80
81
82
83
84
85
86
10
I
Illi
4
111.
Appendix
C-3
0' c°
135
+4
.%,
,.,
+ c c* e
-%. e-
4
9
87
151 97
(OS' ce
136
88
152
98
137
89
153 99
138 8A
154
9A
139 8B
155
9B
(EOL)
RETURN
140
8C
156
9C t
141 8D
157 9D illr
142
8E
158 9E
143
8F
159 ih
144
90
160
AO
145 91
161
Al
146
92
162 A2
147 93
163
A3
148
94
164 A4
149 95
165 A5
150 96
166
A6
C-4
Appendix
177
178
179
180
181
182
4
4
' c°
167 v
..4
■
'
4
4 ,c
7 ce
+
,,.e
A7
168
169
170
A8
A9
AA
171
172
173
174
175
176
AB
AC
AD
AE
AF
BO
B1
B2
B3
B4
B5
B6
,e,
.c ,c
, c„.... e)'
ee
4
183 B7
c
,
Z9+
4 4 c
199
,y
c
, e e
4
4e
7
44+
e
4
c,
ei'
$ c9
4, i,
(9
4
e
›,c,
•j"(9 e•''
D7
C7
215
D8
184
B8
200
C8
216
D9
185
B9
201
. C9
217
186
187
BA
BB
202
203
CA
CB
218
219
DA bB
DC
188
BC
204 CC
220
221 DD
189
BD
205
CD
DE
190 BE
206 CE
222
DF
191 BF
207 CF
223
224 BO
192
CO
208 DO
El
193 Cl
209
D1
225
E2
194
C2
210 D2
226
E3
195 C3
211 D3
227
228 E4
196
C4
212 D4
229 E5
197 C5
213 D5
230 E6
198
C6
214 D6
Appendix
C-5
235
236
237
238
239 c›
.o
c
0 e
,...d•'- er4 e
+ e;9 04 e,
4
+
°c
,
231 E7 240
232 241 E8
E9
233
234 EA
242
243
EB
EC
ED
EE
EF
244
245
246
247
248 eff>9
F4
F5
F6
FO
Fl
F2
F3
F7
F8
, c5)
/y
,
,i4
-e
249
F9
250
FA
FB v ce
‘‘,
251
252
253
254
255
FC
FD
FE
FF
n
(Bu zzer)
1
I
(Delete character)
II,.
P
(Insert character)
See Appendix H for a user program that performs decimal/hexadecimal conversion.
Notes:
1. ATASCII stands for "ATARI ASCII". Letters and some of the special characters are different. numbers have the same values as those in ASCII, but
2.
Except as shown, characters from 128-255 are reverse colors of 1 to 127.
3.
Add 32 to upper case code to get lower case code for same letter.
4.
To get ATASCH code, teil computer (direct mode) to PRINT ASC (" character, or number of code. Must use the quotes!
") Fill blank with letter,
5.
On pages C-1 and C-3, the normal display keycaps are shown as white Symbols on a black background; on pages C-4 and C-6 inverse keycap symbols are shown as black on a white background.
C-6
Appendix
APPENDIX D
ATARI 400/800
MEMORY MAP
Decimal
ADDRESS
Hexadecimal
65535
57344
57343
55296
55295
53248
53247
49152
49151
40960
40959
32768
32767
FFFF
E000
DFFF
D800
D7FF
D000
CFFF
C000
BFFF
A000
9FFF
8000
7FFF
CONTENTS
31755
10880
10879
9856
9855
4864
_
7CIF
2A80
2A7F
2680
267F
1300
OPERATING SYSTEM ROM
FLOATING POINT ROM
HARDWARE REGISTERS
NOT USED
CARTRIDGE SLOT A
(may be RAM if no A or B cartridge)
CARTRIDGE SLOT B
(may be
RAM if no B cartridge)
4
RAMTOP (MSB)
(7FFF if 32K system)
DISPLAY DATA (size varies)
DISPLAY LIST (size varies)
« i OS MEMTOP
1
FREE RAM
(size varies)
Ag
BASIC MEMTOP
1
BASIC program, buffers, tables, run-time stack.
(2A80 if DOS, may vary)
1
OS MEMLO}
-
4---
,
4
BASIC LOMEM1
DISK OPERATING SYSTEM (2A7F-700)
DISK I/O BUFFERS (current DOS)
DISK OPERATING SYSTEM RAM (current DOS)
Appendix
D-1
..---,\
959
832
831
512
511
256
255
212
211
210
209
208
207
203
202
176
128
127
0
4863
1792
1791
1536
1535
1406
1405
1152
1151
1021
1020
1000
999
960
Decimal
ADDRESS
Hexadecimal
12FF
700
6FF
600
5FF
5;7E
57D
480
47F
3FD
3FC
3E8
3E7
3C0
3BF
340
33F
200
1FF
100
FF
D4
D3
D2
D1
DO
CF
CB
CA
BO
80
7F
0
CONTENTS
FILE MANAGEMENT SYSTEM RAM (current DOS)
F REE RAM
FLOATING POINT (used by BASIC)
BASIC CARTRIDGE
1 OPERATING SYSTEM RAM (47F
-
200)
CASSETTE BUFFER
R ESERVED
PRINTER BUFFER i IOCB's
1 MISCELLANEOUS OS VARIABLES
HARDWARE STACK
PAGE ZERO
FLOATING POINT (used by BASIC)
BASIC or CARTRIDGE PROGRAM
FREE BASIC RAM
FREE BASIC AND ASSEMBLER RAM
FREE ASSEMBLER RAM
ASSEMBLER ZERO PAGE
BASIC
ZERO PAGE
OPERATING SYSTEM RAM
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
,------\
APPENDIX E
DERIVED
FUNCTIONS
Derived Functions
Secant
Cosecant
Inverse Sine
Inverse Cosine
Inverse Secant
Inverse Cosecant
Inverse Cotangent
Hyperbolic Sine
Hyperbolic Cosine
Hyperbolic Tangent
Hyperbolic Secant
Hyperbolic Cosecant
Hyperbolic Cotangent
Inverse Hyperbolic Sine
Inverse Hyperbolic Cosine
Inverse Hyperbolic Tangent
Inverse Hyperbolic Secant
Inverse Hyperbolic Cosecant
Inverse Hyperbolic Cotangent
Derived Functions in Terms of Atari Functions
SEC(X)=1/COS(X)
CSC(X)=1/SIN(X)
ARCSIN(X)= ATN(X/SQR(-X*X+ 1))
ARCCOS(X) = - ATN(X/SQR( - X*X +1) + CONSTANT
ARSEC(X)=ATN(SQR(X*X-1))+(SGN(X-1)*CONSTANT
ARCCSC(X)=ATN(1/SQR(X*X-1))+(SGN(X-1)*CONSTANT
ARCCOT(X)= ATN(X)+ CONSTANT
SINH(X)= (EXP(X)-EXP(-X))12
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
Notes:
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.
Apperzdix
E-1
NOTES
Notes
APPENDIX F
PRINTED VERSIONS
OF CONTROL CHARACTERS
The cursor and screen control characters can be placed In a string in a program or used as a Direct mode statement by pressing- the
CM
key before entering the character from the keyboard. This causes the special symbols which are shown below to be displayed. (Refer to Section 1 -
im
Key.)
SEE THIS
PRESS PRESS
PRESS
III
11111
II
ei
OR
Cli
1111
DEUTE
SACK
an
SE
AB
PRESS AND
HOLD
PRESS
GED
13
GED
la
1313
GED
133
CID
CLEAR
<
CLEAR
<
III
D
D
113 al
11{11
Cl
33
13E3 az an
0 LE E
BAC
iNSERI
>
5
DEL
BACK S
,
133
NSER,
>
1312
.. s *
111111
EDA:
GED
la
Appendix
F-1
NOTES
Notes
APPENDIX G
GLOSSARY
Alphanumeric:
Array:
ATASCII:
BASIC:
Binary:
Bit:
Branch:
Bug:
Byte:
Central Processing
Uni t (CPU):
,
Code:
Command:
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 für Atari American Standard Code für Information Inter- change.
High level programming language. Acronym für Beginner's All- purpose Symbolic Intruction Code. BASIC is always written using all 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 twopossibility 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 execution sequence can be altered by the programrner, and the program 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 sequence 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 ATASCII character or a number in the range of 0 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 rnemory 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
DOS:
Editing:
Execute:
Expression:
Format:
Hard Copy:
G
-
2
Appendix
Computer:
Concatenation:
Control Characters:
CRT:
Cursor:
Data:
Debug:
Default:
Digital:
Diskette:
Any device that can receive and then follow instructions to manipulate information. Both the instructions and the information may be varied from moment to moment. The distinction between a computer and a programmable calculator lies in the computer's ability to manipulate text as well as numbers. Most calculators can only handle numbers.
The process of joining two or more strings together to form one longer string.
Characters produced by holding down the key labeled • while simultaneously pressing another key.
Abbreviation for "cathrode ray tube" (the tube used in a TV set). In practice, this is often used to describe the television receiver used to display computer output. Also called a "monitor".
A square displayed on the TV monitor that shows where the next typed character will be displayed.
Information of any kind.
The process of locating and correcting mistakes and errors in a pro- gram.
A mode or condition "assumed" by the computer until it is told to do something else. For example, it will "default" to screen and keyboard unless told to use other devices.
Information that can be represented by a collection of bits. Virtually all modern computers, especially microcomputers, use the digital approach.
A small disk. A record/playback medium like tape, but made in the shape of a flat disk that is placed inside a stiff envelope for protection.
The advantage of the disk over cassette or other tape for memory storage is that access to any part of the disk is virtually immediate.
The Atari 800 Personal Computer System can control up to 4 diskette drive peripherals simultaneously. In this manual, disk and diskette are used interchangeably.
Abbreviation for "disk operating system". The software or pro- grams which facilitate use of a disk-drive system. DOS is pronounced either "dee oh ess" or "doss".
Making corrections or changes in a program or data.
To do what a command or program specifies. To RUN a program or portion thereof.
A combination of variables, numbers, and operators (like +‚ -, etc.) that can be evaluated to a single quantity. The quantity may be a string or a number.
To specify the form in which something is to appear.
Printed output as opposed to temporary TV monitor display.
Hardware:
Increment:
Initialize:
Input:
Interactive:
Interface:
IOCB
I/O:
K:
Keyword:
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. Array 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 cluickly 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 lt needs to know for an I/O Operation.
Short for input/output, 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, the6502.
The television receiver used to display computer output.
A string consisting of no characters whatever.
Abbreviation for Operating System. This is actually a collection of programs to aid the user in controlling the computer. Pronounced
"oh ess".
See I/O.
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/O device. See I/O.
Appendix G-3
Pixel:
Precedence:
Program:
Prompt:
RAM:
Random Number
Generat on
Reserved Word:
ROM:
Save:
Screen:
Serial:
,
Software:
Special Character:
Statement:
String:
Subroutine:
Variable:
Window:
G-4
Appendix
Picture Element. One point on the screen display. Size depends on graphics mode being used.
Rules that determine the priority in which operations are conducted, especially with regard to the arithmetical/logical operators.
A sequence of instructions that describes a process. A program must be in the language that the particular computer can understand.
A symbol that appears on the monitor screen that indicates the computer is ready to accept keyboard input. In Atari BASIC, this takes the form of the word "READY". A "?" is also used to prompt a user to enter (input) information or take other appropriate action.
Random Access Memory. The main memory in most computers.
RAM is used to store both programs and data.
May be hardware (as is Atari's) or a program that provides a num- ber whose value is difficult to predict. Used primarily for decisionmaking in game programs, etc.
See Keyword.
Read Only Memory. In this type of solid-state electronic memory, in- formation is stored by the manufacturer and it cannot be changed by the user. Programs such as the BASIC interpreter and other car- tridges used with the Atari systems use ROM.
To copy a program or data into some location other than RAM (for example, diskette or tape).
The TV screen. In Atari BASIC, a particular I/O device codes "S:"
The opposite of parallel. Things happening only one at a time in sequence. Example: A serial interface.
As opposed to Hardware. Refers to programs and data.
A character that can be displayed by a computer but is neither a let- ter
nor a numeral. The Atari graphics symbols are special characters.
So are punctuation marks, etc.
An instruction to the
,
computer.
See also Command. While all com- mands may be considered statements, all statements are certainly not commands. A statement contains a line number (deferred mode), a keyword, the value to be operated on, and the
RETURN command.
A sequence of letters, numerals, and other characters. May be stored in a string variable. The string variable's name must end with a $.
A part of a
program that
can be executed by a special statement
(GOSUB) in BASIC: This effectively gives a
single statement
the power of a whole program. The subroutine is a very powerful construct.
A variable may be thought of as a box in which a value may be stored. Such values are typically numbers and strings.
A portion of the TV display devoted to a specific purpose such as for graphics or text.
-----\
APPENDIX H
USER
PROGRAMS
CHECKBOOK
BALANCER
This appendix contains programs and routines that demonstrate the diverse capabilities of the Atari Personal Computer System. Included in this appendix is a Decimal/Hexadecimal program for those users who write programs that reeire this type of conversion.
This is one of the "traditional" programs that every beginning computerist writes. lt allows entry of outstanding checks and uncredited deposits as well as cleared checks and credited deposits.
19 DIM A$(32),ISGe(40),MSG1$(30),MSG2$(3
0),MSG3$(30),MSG4$(39),MSG5$(30),MSG6$(3
0.) •
20 OUTSTAND=9 •
39 GRAPHICS 0:? ,? "
CHECKBOOK BALAN
CER".:?
40
? "You 4.121 make correctione at an me b9 enterine a neeative dollar value.
II
50
MSG14".."OLD CHECK -- STILL OUTSTANDING
II
69 MSG2$="OLD DEPOSIT -- NOT CREDITED
70 MSG3$="OLD CHECK -- JUST CLEARED
II
II
89 MSG4$="OLD DEPOSIT JUST CREDITED
. •
90 MSG5$="NEW CHECK UR SERVICE CHARGE)
II
190 MSGES="NEW DEPOSIT (OR INTEREST)
159 TRAF' . 150:? "Enter beeinnine balance from 9our.• . checkboökni:INPUT YOURBAL
160
TRAF' 160.? "Enter beeinnine balance frce
9our i.... __n BANKBAL
165 TRAP 40000
170 GOTO 190
189 CLOSE #1:? "PRINTER IS NOT OPERATION
185 ? "PLEASE CHECK CONNECTORS."
190 PERM=0
202 '? "Would
90U like a permanent record on the printer"J:INPUT AS
219 IF LEN(AS)=0 THEN 200
Appendix
H-1
H
-
2
Appendix
220 IF A$(1,1)="N"
THEN
400
230 IF A$( 1,1)<>"Y" THEN 200
240 TRAP 180
250 LPRINT
:REM
TEST PRINTER
260
PERM=1
290 LPRINT "YOUR BEGINNING BALANCE 12 $"
;YOURBAL
290 LPRINT
"BANK
STATEMENT BEGINNING EL
ANCE
IS
$";BANKEAL , LPRINT •
400 TRAP 400:? :? "ChooP onP of tkP fol lowire , "
410 •
"(1)
415 ? "(2)";MSG2$
11
420 • (3)
11
;M3G3$
425 ? "(4)
";MSG4$
43) ? "(5)
";MSG5$
435 ? "(6)
499 ?
500 INPUT
505 TRAF' 48000
N<1
OR
N>7
THEN
400
510 ON N GOSUB 1000,2000,3000,4000,5000,
6090,7000
520 MSG$="NEW
CHECKBOOK
BALANCE IS
":AMOUNT=YOURBAL:GOSUB
8000
539
MSG$="NEW BANK STATEMENT BALANCE
IS
":AMOUNT=BANKBAL:GOSUB
8000
549
MSG$="OUTSTANDING
CHECKS-DEPOSITS=
".AMOUNT=OUTSTAND ,
GOSUB 9000
545 IF PERM THEN LPRINT
559 GOTO 400
1000
REM
OLD
CHECK -- STILL
OUTSTANDING
1010 MSG$=MSG1$ ,
GOSUB
8100
1920
1030
OUTSTAND=OUTSTAND+AMOUNT
RETURN
2000 REM OLD DEPOGIT -- STILL NOT CREDIT
ED
2010
2020
M3G$=MSG2$:GOSUB
9100
OUTSTAND=OUTSTAND-AMOUNT
2030 RETURN
3000
3010
3020
3930
4090
REM
OLD CHECK -- JUST CLEARED
MSG$=MSG3$:GOSUB
8100
BANKBAL=BANKBAL-AMOUNT
RETURN
REM OLD DEPOSIT
JUST CREDITED
4010 MSG$=MSG4$:GOSUB
8100
4020
4030
BANKBAL=BANKBAL+AMOUNT
RETURN
5000
REM NEW
CHECK (OR
SERUICE
CHARGE) -
- JUST
CLEARED
5010 MSG$=MSG5$:GOSUB 9100
5920 YOURBAL=YOURBAL-AMOUNT
5030 ? "IS NEW CHECK STILL OUTSTANDING";
:INPUT A$
5040 IF LEN(A$)=0
5050 IF
5055
5857 IF
THEN 5930
A$(1,1)<>"N" ThEN 5060
BANKBAL=BANKBAL-AMOUNT
PERM THEN LPRINT "CHECK HAS CLEA
RED."
5858
RETURN
5860 IF A$(1,1)<>"Y" TEEN 5030
5970
OUTSTAND=OUTSTANDAMOUNT
5075 IF
PERWTHEN LPRINT "CHECK IS STILL
OUTSTANDING."
5980 RETURN
6890
REM
NEW DEPOSIT
ZOR INTEREST) -- JU
ST CREDITED
6010
MSGS=18G6$:GaSU8 8109
6020 YOURBAL=YOURBAL+AMOUNT
6930 ? "HAS YOUR NEW DEPOSIT BEEN
CREDIT
ED"i:INPUT A$
6040 IF LEN(A$)=0 THEN 6030
6050 IF
A$(1,1)(>"Y" THEN 6060
6952 BANKBAL=BANKBALAMOUNT
6053 IF
PERM THEN LPRINT "DEPOSIT HAS BE
EN CREDITED."
6855
RETURN
6960 IF
6870
A$(1,1)<>"N" TI-EN
6030
OUTSTAND=OUTSTANO-AMOUNT
6075 IF
PERM THEN LPRINT "DEPOSIT HAS NO
T BEEN CREDITED."
6880
RETURN
7990 REM DONE
7910 ? "
BANK'S BALANCE MINUS (OUTSTANDIN
G CHECKS-DEPOSITS) SHOULD NOW EQUAL
YOURCHECKBOOK BALANCE."
7920
DIF=YOURBAL-(BANKBAL-OUTSTAND)
7030 IF DIF<•0
7035 ? "IS
THEN 7040
$";BANKBAL;" THE ENDING BALAN
CE ON YOUR BANK STATEMENT"J:INPUT A$
7936 IF LEN(A$)=0 THEN 7035
7037 IF
A$(1,1)="Y" THEN ? "CONGRATULATI
ONS: YOUR CHECKBOOK
BALANCES!":ENO
7938 GOTO 7960
7040 IF
MFA THEN ? "YOUR CHECKBOOK TOT
AL
IS $";DIF;"
OVER YOUR BANK '5 TOTAL. n
:TO 7060
7950 ? "
YOUR CI-ECKBOOK TOTAL IS $';-DIFJ
" INDER YOUR BANK'S TOTAL."
7960 ? "WOULD
YOU LIKE TO MAKE CORRECTIO
NS?"
7070 ? "REMEMBER, YOU CAN ENTER A NEGATI
VE
DOLLAR UALUE TO MAKE A CORRECT ION.
Appendix
H-3
11-4
Appendix
7080 "ENTER Y OR N";:INPUT A$
7090 IF LEN(A$>=0 THEN Et)
7180 IF A$(1,1)="Y" THEN RETURN
7110 EMD
7999 REM MSG PRINTING ROUTINE
8000 MSG.;" $";AMOUNT
8018 IF PERM=1 THEN LPRINT MSG;" $";AMO
UNT
8020 RETURN
8100 REM MSG PRINT t INPUT ROUTINE
8110 TRAP 8110:1> "ENTER AMOUNT FÜR ";MSG
INPUT AMOUNT
8120 TRIP 40000
8130 IF PERM=1 THEN LPRINT MSGe.;" $";AMO
UNT
8140 RETURN
BUBBLE SORT
This program uses the string comparison operator "<=" that orders strings ac- cording to the ATASCII values of the various characters. Since Atari BASIC does not have arrays of strings, all the strings used in this program are actually substrings of one large string. A bubble sort, though relatively slow if there are a lot of items to be stored, is easy to write, fairly short, and simpler to understand than more complex sorts.
10 DIM BEI.)
20 GRAPHICS 9.? .? "
STR I NG SO
RT".?
39 TRAP. 30.? .? "Enter maximum strin9 le n9th";INPUT SLEN.SLEN1=SLEN-1
35 IF.SLEN<1 OR INT(SLENX>SLEN THEN ?'"
PLEASE ENTER A POSITIVE INTEGER > 0.".G0
T030
40 TRAF' 40:
7
.?
"Enter maximuM number of entries.".
41 ? "(EntrieS which are skorter Ulan th e maximum will be padded with blanks.)
42 INPUT BNTRIES
45 IF ENTRIES<2 OR INT(ENTRIESX>ENTRIES
THEN ? "PLEASE ENTER A POSITIVE INTEGER
> 1.".GOTO 40
47 TRAP 40000
•
50 DIM AESLEN*ENTRIES),TEMPESLEN)
60
1
:?
"Enter.strin9s one at a time."
79 ? "Enter emPt9 trin' w-en done (just hitRETURN)."
.
75 ? .? "PLEASE. STAND BY WHILE
TU STRIN
GS ARE BEING CLEARED..";
80 FÜR I=1 TO SLEMENTRIES.AVI,I)=" ".N
EXT I
85 • .?
90 I=1
- •
190 FÜR J=1 TO ENTRIES
119 ? "it";j;" ";.INPUT TEMPS •
120 IF LEN(TEMPS)=0 THEN ENTRIES=j-1.GOT
0 190
130' AVIA+SLEN1)=TEMP$
140 I=I+SLEN
159 NEXT J
.
199 ? .? .? "PLEASE STAND BY WHILE THE S
TRINGS ARE BEING SORTED...";
200
174
0SUB 1000:REM CALL SORT ROUTINE
292 ? .?
205 1=1
210 FÜR K=1 TO ENTRIES
220 ? "*";K;" "X I.
225 I=I+SLEN
230 NEXT K
240 TRAF' 390.? .? "WOULD YOU LIKE A PRIM
Appendix H-5
11
-
6
Appendix
TED
COPYlii:INPUT
B$
250 IF B$(1,1)="i"
THEN 400
300 ENO
400 I=1:LPRINT :FOR K=1 TO ENTRIES
420 LPRINT "*";K;" "Al$(.1,1+SLEN1)
430 I=I+SLEN:NEXT K:ENO
1000 REM STRING BUBBLE SORT ROUTINE
1010 REM INPUT: A$)SLEN,ENTRIES.
1015 REM TEMP$ MUST HAUE A DIMENSION OF
SLEN.
1020 SLEN1=SLEN-1:MAX=SLENUENTRIES-1)+1
1040 FÜR I=1 TO MAX STEP SLEN
1050 DONE=1
1060 FÜR K=1 TO
MAX-I-SLEN1 STEP SLEN
1070 KSLEN1=K+SLEN1:KSLEN=K+SLEN:KSLE4SL
EN1=KSLEN+SLEN1
1080 IF
AVK,KSLEN1)<=e(KSLENKSLENSLEN
I) THEN GOTO 1110
1090 DONE=0
1100 TEMPS=WK,KGLEN1):WK,KSLEN1)=AV
KSLEN,KSLENSLEN1) . AEKSLEN,KSLENSLEN1)=T
EMP$
1110 NEXT K
1120 IF DÜNE THEN RETURN
1130 NEXT I
1140 RETURN
TEXT MODES
This program prints the Atari characters in their default colors for text modes
0, 1, and 2. In entering this program, remember that the clear screen symbol
CHARACTER
"-.1" is printed as " ".
1 DIM A$(1)
5
1 ")".REM CLEAR SCREEN
19 ?
"GRAPHICS 9, 1, AND 2 (TEXT MODE
20 ? "DEMONSTRATION."
30 ? "DISPLAYS CHARACTER SETS FÜR LACH M
ODE."
60 WAIT=1000.REM SUBROUTINE LINE NUMBER
70 CHBAS=756.REM CHARACTER BASE ADDRESS
BO UPPER=224.REM DEFAULT FÜR CHBAS
90 LOWER=226.REM LOWER CASE LETTERS & GR
APHICS
95 GOSUB WAIT
100 FÜR L=0 TO 2
112 REM USE E. FÜR GRAPHICS 0
115 IF L=0 THEN OPEN #1,8,0,"E.".GOTO 11
8
116 REM USE 8. FÜR GRAPHICS 1 AND 2
117 OPEN #1,9,0,"S."
118 GRAPHICS L
120 PRINT "GRAPHICS ";L
130 FÜR J=9 TO 7.REM 8 LIMES
140 FÜR 1=0 TO 31:REM 32 CHARSsLINE
150 K=32*J+I
155
REM DON'T DISPLAY "CLEAR SCREEN" OR
"RETURN"
160 IF K=ASC(")") OR K=155 THEN 180
165 IF L=0 THEN PUT #1,ASC(" ").REM ESCA
PE
170 PUT #1,K.REM DISPLAY CHARS
180 NEXT I
190 PRINT - #1;" ".REM EMD OF LINE
200 IF L<>2 OR J<>3 THEN 240
210 REM SCREEN FULL
220 GOSUB WAIT
230 PRINT #1;")".REM CLEAR SCREEN
240 NEXT J
250 GOSUB WAIT
265 PRINT "LOWER CASE AND GRAPHICS"
270 IF L<>0 THEN POKE CHBAS,LOWER.GOSUB
WAIT
275 CLOSE #1
280 NEXT L
300 GRAPHICS 0.END
1000 REM WAIT FÜR "RETURN"
1010 PRINT "HIT RETURN TO CONTINUE";
1020 INPUT AS
1030 RETURN
Appendix
H
-
7
LIGHT SHOW This program demonstrates another aspect of Atari graphics. lt uses graphics mode 7 for high resolution and the PLOT and DRAWTO statements to draw the lines. In line 20, the title will be more effective if it is entered in inverse video
(use the Atari logo key).
19 FÜR $T=1 TO 8:GRAPHIC5 7
15 POKE 752,1
20 ? :? " •
Atari's Special Lieht Show
":SETCOLOP 2,0,0
39 SETCOLOR 1,2*ST,8:COLOR 2
40 FÜR DR=0 TO Si STEP ST
59 PLOT 0,0:DRAWTO 100,DR
60 NEXT OR:FOR N=1 TO 800:NEXT N:NEXT ST
70 FÜR N=1 TO 2000:NEXT WWTO 10
11-8
Appendix
UNITED STATES
This program involves switching colors to set up the stripes. lt uses graphics mode 7 plus 16 so that the display appears as a full-screen. Note the cor-
FLAG respondence of the COLOR staternents with the SETCOLOR statements. For fun and experimentation purposes, add a SOUND statement and use a READ/DATA combination to add "The Star Spangled Banner" after line 470. (Refer to Section
10.)
10 REM DRAW THE UNITED STATES FLAG
29 REM HIGH RESOLUTION 4-COLOR GRAPHICS,
NO TEXT WINDOW
30 GRAPHICS 7+16
40 REM SETCOLOR 0 CORP.ESFONDS TO COLOR 1
50
60
SETCOLOR 0,4,4
, RED=1
REM SETCOLOR 1 CORRESFONDS TO COLOR 2
79 SETCOLOR 1,0,14:WHITE=2
90 REM SETCOLOR 2 CORRESPONDS TO COLOR 3
90 BLUE=3:REM DEFAULTS TO BLUE
100 REM DRAW 13 RED 2, WHITE STRIPES
119 C=RED
120 FÜR I=0 TO 12
130 COLOR C
140 REM EACH STRIPE HAS SEUERAL HORIZONT
AL LINES
150 FÜR J=0 TO 6
160 PLOT 0,I*7+J
170 DRAWTO 159,I*7+J
190 NEXT J
190 REM SWITCH COLORS
209 C=C+1;IF C>WHITE THEN C=RED
210 NEXT I
300 REM DRAW BLUE RECTANGLE
310 COLOR BLUE
320 FOR 1=0 TO
48
330 PLOT 0,I
340 DRAWTO 79 , 1
350 NEXT I
360 REM DRAW 3 ROWS OF WHITE STARS
370 COLOR WHITE
380 K=0 , REM START WITH ROW OF 6 STARS
390 FÜR 1=0 TO 2
395 Y=4+1:!/5
400
FOR J=0 TO 4:REM 5 STARS IN A ROW
410 X=K+5+J14 GOstJB 1000
420 NEXT J
430 IF K(>0 THEN K=0 . GOTO 470
440 REM ADD GTH STAR EUEP7 OTHEF LINE
450 X=5+514:GO3UB 1000
460 K=7
470 NEXT I
500 REM IF KEY HIT THEN STOP
Appendix
H-9
H
-
10
Appendix
510 IF PEEK(764=255 THEN 510
515 REM OPEN TEXT WINDOW WITHOUT CLEARIN
G SCREEN
520 GRAPHICS 7+32
525 REM CHANCE COLORS BACi'
530 SETCOLOR 0 , 4,4 . SETWLCP 1,0,14
550 STOP
1090 REM DRAW 1 STAR CENTERED AT
XJ7
1910 PLOT X-1,Y:DRAWTO X+1,Y
1020 PLOT Y-1 PLOT X,V+1
1930 RETURN
SEAGULL OVER
OCEAN
This program combines graphics and sounds. The sounds are not "pure" sounds, but simulate the roar of the ocean and the gull's "tweet". The graphics symbols used to simulate the gull could not be printed on the line printer. Enter the following characters in line 20.
20 B1RD$ = "
"
To get these symbols, use
Ein
G,
Ein
F,
En
R, R.
10 DIM 8IRD$(4)
29 BIRD:$=u H
30
FLAG=1:ROW=10:COL=10
40
GRAPHICS 1:POKE 756,226:POKE 752,1
50 SETCOLOR 0,0,0:SETCOLOR 1,8,14
69 PRINT #6iu the ocean"
78
R=INT(RNO(ü)*11)
80 POSITION 17,17
99 FOR T=0 TO 10
100 SOUND 0,T,8,4
119 FOR A=1 TO 50:NEXT A
120 IF RNO(0)>0.8 THEN FOR 0=10 TO 5 STE
P -1 :SOUND 1,0,10,INT(RND(0)*10):NEXT D:
SOUND 1,9,0,0
130 GOSUB 200
149 NEXT T
150 FÜR T=10 TO 0 STEP -1
160 SOUND 0,T,8,4
170 FÜR A=1 TO 50:NEXT A
175 IF RND(0)>0.8 THEN FÜR 0=10 TO 5 STE
P -1 :SOUND 1,0,10,8:NEXT D:SOUND 1,0,0,0
180 FÜR H=1 TO 10:NEXT H
185 GOSUB 200
190 NEXT T
195 GOTO 70
200 GOSUB 300
219 POSITION COL,ROW
220 PRINT #65BIROEFLAG,FLAG+1)
230 FLAG=FLAG-1-2:IF FLAG=5 THEN FLAG=1
240 RETURN
300 IF RND(0)>0.5 THEN RETURN
310 POSITION COL,ROW
320 PRINT
*UI
H
330 A=INT(RNNOA3)-1
340 B=INT(RNE1(0)*3)-1
35e ROW=ROW+A
360 IF ROW=0 THEN ROW=1
379 IF ROW=20 THEN ROW=19
380 COL=COLe
390 IF COL=0 THEN 01=1
400 IF COL>18 THEN COL=18
419 RETURN
Appendix 11-11
VIDEO
GRAFFITTI
This program requires a Joystick Controller für each playert Each joystick has one color associated with it. By maneuvering the joystick, different patterns are created on the screen. Note the use of the STICK and STRIG commands.
1 GRAPHICS 0
2 ? "VIDEO GRAFFITI"
5 REM XY ARRAYS HOLD COORDINATES
6 REM FÜR UP TO 4 PLAYERS' POSITIONS.
7 REM COLR ARRAY HOLDS COLORS.
10 DIM AS( 1 )..X( 3 ), Y( 3 ), ULK 3 )
128 ? "USE JOYSTICKS TO DRAW PICTURES"
129 ? "PRESS BUTTONS TO CHANGE COLORS"
130 ? "INITIAL COLORS."
131 ? "JOYSTICK 1 IS RED"
132 ? "JOYSTICK 2 IS WHITE"
133 ? "JOYSTICK 3 IS BLUE"
134 ? "JOYSTICK 4 IS BLACK (BACKGROUND)"
135 ? "BLACK LOCATION IS INDICATE0 BY A
BRIEFFLASH OF RED."
136 ? "IN GRAPHICS 8, JOYSTICKS 1 AND 3
ARE WHITE AND 4 IS BLUE."
138 PRINT "HOW MANY PLAYERS (1-4)";
139 INPUT As.IF LEN(e)=0 THEN A$="1"
140 JOYMAX=UAL(A$)-1
145 IF JOYMAX<0 OR JOYMAX>=4 THEN 138
147 PRINT "GRAPHICS 3 (4024), 5 (80X48)
150 PRINT "7 (160X96), OR 8 (320X192)";
152 INPUT AS:1F LEN(A$)=0 THEN A$="3"
153 A=UAL(e)
154 IF A=3 THEN XMAX=40.YMAX=24.GOTO 159
155 IF A=5 THEN
)MAX=80:YMAX=48:GOTO
159
156 IF A=7 THEN XMAX=160.YMAX=96.GOTO 15
9
157 IF A=8 THEN XMAX=320.YMAX=192.GOTO 1
59
158 GOTO 147.REM A NOT VALID
159 GRAPHICS 11+16'
160 FÜR 1=0 TO
J01
MAX.X(I)=XMAX/2+I.Y(I)
=YMAX/2+I.NEXT IREM START NEAR CENTER 0
F SCREEN
161 IF A<>8 THEN
166
162 FÜR 1=0 TO 2.COLR(I)=1.NEXT I
163 SETCOLOR 1,9,14.REM LT. BLUE
165 GOTO 180
166 FÜR I=0 TO 2.COLR(I)=I+1.NEXT.I
167 SETCOLOR 0,4,6..REM RED
168 SETCOLOR 1,0,14.REM WHITE
180 COLR(3)=0
295 FÜR J=0 TO 3
.
H
-
12
Appendix
300 FÜR 1 20 TO JOYMAX:REM CHECK jOYSTICK
0
305 REM CHECK TRIGGER
310 IF STRIGKI) THEN 321
311 1F A<>8 THEN 320
312 COLR(I)=COLR(I)+1;IF COLR(I)=2 THEN
COLR(I)=0:REM 2-COLOR MODE
313 GOTO . 321
320 COLR(I)=COLR(I)+1:IF COLR(I)>=4 THEN
COLR(I)=0:REM 4-COLOR MODE
321 1F J>0 THEN COLOR COLR(I):GOTO 325
322 IF COLR(.1)=0 THEN COLOR 1:GOTO 325
323 COLOR 0:REM BLINK CURRENT SQUARE ON
AND OFF
325 MT X( I ), Y( I )
330 JOYIWSTICK(I):REM RED JOYSTICK
340 1F JOYIN=15 THEN 530:REM NO MOUEMENT
342 COLOR COLR(I).REM MAKE SURE COLOR IS
ON
344 PLOT X(I),Y(I)
350
1F JOYIN>=8 THEN 390
360 X(I)=X(I)+1:REM MOVE RIGHT
365 REM 1F OUT OF RANGE THEN WRAPAROUND
370 1F X(I)>=XMAX THEN X(1)=0
380 GOTO 430
390 IF JOYIN>=12 THEN 430
400 X(I)2X(I)-1:REM MOUE LEFT
410 IF WIXO
THEN X(I)=XMAX-1
430 IF
JoyiN<>5 ANn
JOYIN<>9
ANn
JOYIN<>
13 THEN 470 .
440 Y(I)=Y(I)+1:IF Y(i>>=YMAX THEN Y(1)=
0:REM M31JE DOWN
460 GOTO 500
470 IF JOYIN<>6 ANO JOYIN<>10 ANO JOYIN<
>14 THEN 500
480 *.i7, I . )=-Y( 1 )-1 IF `.« I >:::0 THEN 'A 1 =YMAX
-1 , REM MOVE UP
500 PLOT X(I),Y(I)
530 NEXT 1
535 NEXT J
540 GOTO 295
Appendix
11-13
KEYBOARD
CONTROLLER
This program alters registers on a chip called a PIA. To set these back to the default values in order to do further I/O, hit
SYSTEM RESET or POKE PACTL,60. If this program is to be loaded from disk, use LOAD, not RUN and wait for the busy light on the disk drive to go out. Do not execute the program before this light goes out, otherwise the disk will continue to spin.
1 GRAPHICS 0
5 PRINT :PRINT H KEYBOARD CONTROLLER
DEMO"
10 DIM ROW( 3 ), IS( 13 ), SUTTON$( 1 )
39 GOSUB 6000
49 FÜR CNT=1 TO 4
69 POSITION 2,CNT*245:PRINT "CONTROLLER
# ";CNT;":";
79 NEXT CNT
89 FÜR CNT=1 TO 4:GOSUB 7999:POSITION 19
,CNT+CNT+5:PRINT BUTTON$J:NEXT CNT
120 GOTO 80
6000 REM ** SET UP FÜR CONTROLLERS **
6010 PORTA=54016:PORTB.54017:PACTL=54018
.PBCTL=54019.
6020 POKE PACTL,48:POKE PORTA,255:POKE P
ACTL,52:POKE PORTA,221
6925 POKE PBCTLAS:POKE PORTS,235 , POKE P
BCTL,52:POKE PORT 221
6930 ROW(0)=238:ROW(1)=221:ROW(2)=187:RO
W(3)=119
6940 1$=" 123456789*0#"
6950 RETURN
R FOR BUTTON WHICH HAG EEEN PRESSEO ON C
ONTROLLER CNT (1-4). **
7001 REM
NOTE A 1 WILL BE RETURNED I
F NO CONTROLLER IS CZVECTED. **
7002 REM ** A SPACE WILL SE RETURNFO IF
THE CONTROLLER IS OONNEOTFO EUT NO KEY H
AS BEEN PRESSE°.
7993 PORT=PORTA:IF CNT>2 THEN PORT=PORTS
7995 P=1
7998 PAO=CNT+CNT-2
7910 FÜR J=0 TO 3
7920 POKE PORT,RO(j)
7930 FÜR I=1 TO 10.NEST I
7950 IF PADDLFJPAD+: Y>10 THEN F=j-i-JA-J+2.
GOTO 7090
7060 IF PADDLE(PAC»10 THE P=J+Ji-j4.72.:GO
TO 7090
7070 IF STRIG(CNT-1)=0
P=i4.--1-j+4 . J!
TO 7090
7080 NEXT J
7090 BUTTONS=IVP.P)
7095 RETURN
11
-
14 Appendix
TYPE-A-TUNE
This program assigns musical note values to the keys on the top row of the keyboard. Press only one key at a time.
KEY
MSERT
EMEll
0
9
8
7
6
5
4
3
2
1
MUSICAL VALUE
B
B 1
7
(or A#)
A
Ab ( or G#)
G
F# (or G l'.)
F
E
B
l' (or D#)
D
D1) ( or C#)
C
10 ['IM CHORD(37),TUNE(12)
29 GRAPHICS 0.7 :?
TYPE--TUNE
PROGRAM"
25 ? :? "PRESS KEYS 1-9,0,<,> TO PRODUCE
NOTES.";
27 ? "RELEASE ONE KEY BEFORE PRESS Ih TH
E
NEXT."
29 ? "OTHERWISE THERE MAY BE A DELAY. 11
39 FOR X=1 TO 37:READ -A:CHORD<X)=A:NEXT
49 FÜR X=1 TO 12:READ AJUN)=A:NEXT X
50 OPEN #1,4,0,"K"
55 OLDCHR=-1
69 A=PEEK(764) , IF A=255 THEN 60
63 IF A=OLDCHR THEN 100
65 OLDCHR=A
70 FÜR X=1 TO 12 , IF TUNE(.2.14 THEN SOUND
9,CHORD<X),10,9 , GOTn 100
89 NEXT X
100 I=INT(PEEK(53775).'4):IF (I/2)=INT(I/
2) THEN 60
119 POKE 764,255SOUND 0,0,0,0:nLDCHP=-1
:GOTO 60
2g0 DATA 243,230,217,204‘193,182 , 173 , 162
,151144,136,129,121,114,108,102 , 96 , 918
5,91,76,72,68,64,60
210 DATA 57,53,50.47 , 45,42,40,37,35 , 33 , 3
1,29
220 DATA 31,30,26,24,29 , 27,51,53,42 ,50,5
4,55
To play "Mary Had A Little Lamb" press the following keys:
5, 3, 1, 3, 5, 5, 5 3, 3, 3
5, 8, 8 5, 3, 1, 3, 5, 5 5, 5, 3, 3, 5, 3, 1
Appendix
H-15
COMPUTER
BLUES
This program generates random musical notes to "write" some very interesting melodies for the programmed bass.
1 GRAPHICS 0:? .? n
Sn:?
2 PTR=1
3 THNOT=1
5 CHORD=1
COMPUTER BLUE
6 PRINT 'TASS TEMPO (1=FA2T)nj
7. INPUT TEMPO
8 GRAPHIC.2416:GOSUB
'2
002
10 DIM BA3E(3,4
20 DIM LOW(7).
25 DIM LINE(16)
26 DIN JAM(3,7)
30 FOR X=1 TO 3
40 FOR'Y=1 TO 4
50 READ A:BASE(X,Y)=A
GO NEXT Y
70 NEXT X
80 FÜR X=1 TO 3:READ A:LOW(X)=A
90 NI---XT X
95 FÜR X=1 TO lfUEAD A.LINEM)=A.NEXT X
96 FÜR X=1 TO 3
97 FÜR Y=1 TO 7
98 READ A:JAM(X,Y)=A:NEXT Y:NEXT X
100 GOSUB 500
110 T=T+1
115 GOSUB 220
120 GOTO 100
200 REM r-- •r--
HIGH STUFE
205 IF R14D(0)<0.25 THEN RETURN
210 IF RND(0)<0.5 THEN 252
220 NT=NT+1
•
30 IF NT>7 THEN NT=7
242 GOTO 29
250 NT=NT-1
255 IF NT<1 THEN NT=1
260 SOUND 2 , JAM(CHORD,NT),10,NT*2
280 RETURN
500 REM PROCESS BASE STUFE
510 IF BASS=1 THEN 700
520 BDUR=BDUR+1
530 IF BOUn<>TEMPO THEN 535
531 BASS=1:EC2=0
535 SOUND 0,LOW(CHORfl>,10,4
54!.1
• e
•:..___•
BA:37
2
RETURN
:: cHop3..
700 souNo o,o
710 SOuND 1, 0, 0,
720 BOUR=BD:2+1
A
11
-
16
Appendix
730 IF BDUR(>1 THEN 200
742 BOUR=0:BA33.9
750 THNOT=THNOT+1
760 IF THNOT<>5 THEN BOO
765 TH40T=1
770 PTR=PTR+1
780 IF PTR=17 THEN PTR=1
790 CHORD=LINE(PTR)
800 RETURN
1000 DATA 162,144,136,144A21,108,192,12
8.. 108,96..91..96
1010 DATA 243,182,162
1020 DATA 1,1,1,1,21,1,1,1,3,2,1,
1
1030 DATA 60,50,47,42,40,33,29
1040 DATA 60, -A,45,42,40,33,2";
1059 DATA 81,68,64,57,53,45,49
2
002 PRINT *A:PRINT *A:PRINT *A
2005 PRINT *A;" Computer"
2004 PRINT *A
2010 PRINT *6"
2
070 RETURN
Blues"
Appendix
H-17
DECIMAL/
HEXADECIMAL
CDNVERSION
PROGRAM
This program can be typed in and used to convert hexadecimal numbers to decimal numbers and vice versa.
10
DIM A$(9),AD$(1)
20 GRAPHICS 0:7 :? " HEX NUMBER CONU
ERSIONS":?
39 7 :7 "Enter 'D' for DEC to HEX conver eion.":? "Enter 'H for HEX to DEC conve rsion.".INPUT A$
40 IF LEN<A$)=0 THEN 30
50 IF A$="H" THEN 300
60 IF e<>"0" THEN 30
98 TRAP 90
100 ? :? "ENTER A DECIMAL NUISER FROM 0
THROUGH 9999999999•"
110 ? "DEC:";:INPUT N
120 IF N<0 OR N>=1E+10 THEN GOTO 100
130 1=9
140 TEMP=N:N=INT(N/16)
150 TEMP=TEMP-N*16
160 IF TEMP(10 THEN WI,I)=STRETEMP>.G
OTO 180
170 W.I,I)=CHRETEMP-10+ASC("A"))
189 IF N<>0 THEN 11-1:GOTO 140
190 ? "HEX: "ie(I,9):?
200 GOTO 110
300 TRAP 309
310 ? .? "ENTER A HEX NUMBER FROM 0 THRO
UGH
FFFFFFFF."
320 ? "HEX:"; :INPUT A$
330 N=9
340 FÜR I=1 TO LEN(A$)
345 ADS=A$(1,1):IF ADE"0" THEN 380
350 IF AVI,IX="9" THEN N=U16+UAL(AD$)
.GOTO 370
355 JF D$< "A" THEN 300
357 IF AD$›"F" THEN 300
360 N=N*16+A3C(AD$)-A3C("A")+10
370 NEXT I
380 ? "DEC: ";N:?
390
GOTO 320
480 END
1148 Appendix
APPENDIX I
MEMORY
LOCATIONS
Note: Many of these locations are of primary interest to expert programmers and are included here as a convenience. The labels given are used by Atari programmers to make programs more readable.
LABEL
DECIMAL HEXADECIMAL
LOCATION LOCATION COMMENTS AND DESCRIPTION
APPMHI
RTCLOK
SOUNDR
14,15
1849,20
65
77
82,83
DE
12,13,14
41
52,53
Highest location used by BASIC (LSB, MSB)
TV frame counter (1/60 sec.) (LSB, NSB, MSB)
Noisy I/O Flag (0= cluiet)
Attract Mode Flag (128 = Attract mode)
Left, Right Margin (Defaults 2, 39) LMARGIN,
RIVIARGIN
ROWCRS
COLCRS
OLDROW
OLDCOL
NEWROW
84
85,86
90.
91,92
93
96
54
55,56
5A
5B
5C
Current cursor row (graphics window).
Current cursor column (graphics window).
Previous cursor row (graphics window).
Previous cursor column (graphics window).
Data under cursor (graphics window unless mode
0).
Cursor row to which DRAWTO will go.
NEWCOL
RAMTOP
LOMEM
MEMTOP
STOPLN
ERRSAV
PTABW
FRO
97,98
106
128,129
144,145
186,187
195
201
212,213
60
61,62
6A
80,81
90,91
BA,BB
C3
C9
D4,D5
Cursor column to which DRAWTO goes.
Actual top of memory (number of pages).
BASIC low memory pointer.
BASIC top of memory pointer.
Line number at which STOP or TRAP occurred
(2-byte binary number).
Error number.
Print tab width (defaults to 10)
Low and high bytes of value to be returned to
BASIC from USR function.
Appendix 1-1
LABEL
RADFLG
LPENH
LPENV
TXTROW
TXTCOL
COLORO
COLOR1
COLOR2
COLOR3
COLOR4
MEMTOP
MEMLO
CRSINH
CHACT
CHBAS
ATACHR
CH
FILDAT
DSPFLG
SSFLAG
HATABS
IOCB
CONSOL
* Future product.
DECIMAL HEXADECIMAL
LOCATION
LOCATION
251
564
565
656
657,658
708
709
710
711
712
741,742
FB
234
235
290
291,292
2C4
2C5
2C6
2C7
2C8
2E5,2E6
743,744
752
755
756
763
764
765
766
767
794
832
1664-1791
53279
2E7,2E8
2F0
2F3
2F4
2FB
2FC
2FD
2FE
2FF
31A
340
680-6FE
DO1F
COMMENTS AND DESCRIPTIONS
RAD/DEG flag (0= radians, 6= degrees).
Light Pen* Horizontal value.
Light Pen* Vertical value.
Cursor row (text window)
Cursor column (text window)
Color Register 0
Color Register 1
Color Register 2
Color Register 3
Color Register 4
OS top of available user memory pointer (LSB,
MSB)
OS low memory pointer
Cursor inhibit (0= cursor on, 1 = cursor off)
Character mode register (4 = vertical reflect; 2 — normal; 1= blank)
Character base register (defaults to 224) (224 = upper case, 226 = lower case characters)
Last ATASCII character.
Last, keyboard key pressed; internal code; (255 clears character).
Fill data for graphics Fill (XI0).
Display Flag (1 = display control character).
Start/Stop flag for paging (0= normal listing) Set by
Eal 1
.
Handler address table (3 bytes/handler)
I/O control blocks (16 bytes/IOCB)
Spare RAM
Console switches (bit 2 = Option; bit 1 = Select; bit
0 = Start. POKE 53279,
0 before reading. 0 = switch pressed.)
1-2
Appendix
LABEL
PORTA
PORTB
PACTL
PB TL
SKCTL
DECIMAL
HEXADECIMAL
LOCATION
LOCATION
54016
54017
54018
D300
D301
D302
54019
53775
D303
D2OF
COMMENTS AND DESCRIPTIONS
P.IA Port A Controller Jack I/O ports.
PIA Port B Initialized to hex 3C.
Port A Control Register (on Program Recorder 52
= ON, 60 = OFF).
Port B control register.
Serial Port confrol register. Bit 2=0 (last key still pressed).
Appendi_r
1-3
NOTES
,----,,\
Notes
INDEX
A
Abbreviations, 4-5
Commands in headings, 4
ABS, 33 adata, 5
ADR, 35,63 aexp, 4 aop, 4
Array, 3-4, 41
ASC, 37
ATASCII, 5, 40, C-1 through C-6
ATN, 34
Audio track of cassette, 23 avar, 4
B
BASIC, 1
Blanks (see Spaces)
Booting DOS, 25
Braces, 4
Brackets, 4
Branching,
Conditional Statements, 19
Unconditional Statements, 17
Brightness (see Luminance)
Bubble Sort Program, H-5
Buzzer, 14
Deferred Mode, F-1
Direct Mode, 14
BYE, 9
C
C-Scale Program, 58
Central Input/Output Subsystem, 23
Character
Assigning Color to, 54
ATASCII, C-1 through C-6
Display at specified locations, 46, 47
Set, internal, 55
Sizes in Text modes, 46
Chaining Programs, 30
Checkbook Balancer Program, H-1 through H-4
CHR$, 58
CIO
(see Central Input/Output Subsystem) 6
CLEAR key, 6 clear Screen,
Deferred mode, 5, 14, 46
Direct mode, 6, 46
CLOAD, 24
CLOG, 33
CLOSE, 27
CLR, 43
Codes,
Device, 23-24
Colons, 3, 61
COLOR, 48
Color
Assigning, 54
Changing, 50
Default, 46, 51
Registers, 50
COM
(see
DINO
Computer Blues Program, H-16 cmdno, 30
Comma, 26, 27
Command Strings, 1
Commands
BYE, 9
CONT, 9
END, 9
LET, 10
LIST, 10
NEW, 10
REM, 10
RUN, 11
STOP, 11
Conservation,
Memory, 61
Constant, 2
CONT, 9
Controllers,
Garne, 59
COS, 34
CSAVE, 24
Cursor, 9
Graphics, 49
Inhibit, 46
D
Decimal/Hexadecimal Conversion Program, H-18
Default colors, 46 disk drive, 24, 29 margins in Mode 0, 46 tab settings, 6
Deferred mode, 5
DEG, 35
Devices, 23-24
Delete line, 13
DIM, 41
Direct mode, 5
Disk Drive
Default number, 24, 29
Requirements
(see ATARI DOS Manual)
Disk file
Modification of BASIC program, 31
Display, split-screen override, 45, 47
Distortion, 57
DOS, 25
DRAWTO, 48
Index 117
E
Editing, screen, 13
Editor, Screen, 24
END, 9 before subroutine, 7
End of file, 14
Error messages, B-1 through B-3
Escape key, 5 with Control Graphics Symbols, F-1
EXP, 33 exp, 5
Exponentiation symbol, 6
Expression, 1
.Arithmetic
(see
aexp)
Logical
String
(see
lexp)
(see
sexp) filename, breakdown, 27 filespec, 5
Usage, 26, 27
Fill (XIO), 54
FOR/NEXT, 15 building arrays and matrices, 42
• vvith STEP, 15 vvithout STEP, 15
FRE, 35
Function, 1
Arithmetic
ABS, 33
• CLOG, 33
EXP, 33
INT, 33
LOG, 34
RND, 34
SGN, 34
SQR, 34
Built-in, 7
Derived, E-1
Library, 33
Special Purpose, 35
ADR, 35
FRE, 35
PEEK, 35
POKE, 35
USR, 36
Trigonometrie, 34
ATN, 34
COS, 34
DEG, 35
RAD, 35
SIN, 35
G
Garne controllers
Keyboard, 59
Joystick, 59
Paddle, 59
Video Graffitti program, H-12 through H-13
Garne controller commands
PADDLE, 59
•
PTRIG, 59 -
STICK, 59
STRIG, 60
GET, 28, 49
GOSUB/RETURN, 16, 21
GOTO, 17 with conditional branching, 17
GRAPHICS, 45
Graphics
Modes, 46-47
Statements, 48
COLOR, 48
DRAWTO, 49
GET, 45
GRAPHICS, 48
LOCATE, 48
PLOT, 49
POSITION, 49
PUT, 49
SETCOLOR, 50
.),(I0 (Fill), 54
Graphics Control Characters, 56
H
Harmony, 57
Hexadecimal
/Decimal Conversion Program, H-18
Hexcode Loader program, 64
I
INPUT, 25
Input/Output Commands, 23
CLOAD, 24
CLOSE, 27
CSA VE, 24
DATA, 28
DOS, 25
ENTER, 25
GET, 28
INPUT, 25
LOAD, 26
LPRINT, 26
NOTE, 26
OPEN, 26
POINT, 28
PRINT, 3, 5, 14, 26
PUT, 28
READ, 28
SAVE, 29
STATUS, 29
XIO, 29
Input/Output Devices
Disk Drives (D:), 24
Keyboard (K:), 23
Line Printer (L:), 23
Program Recorder (C:), 23
RS-232 Interface (R:), 24
Screen Editor (E:), 24
TV Monitor (5:), 24
INT, 33
Internal pointer for DATA, 21
Input/Output Control Block, 23
Inverse Key, 5
Invisible graphics cursor, 48-49
IOCB
(see
Input/Output Control Block) jr Joystick Controller, 59
K
Keyboard (K:), 23
Keyboard Controllers, 59
118
Inder
Keyboard Controller Program, H-14
Keys
Special Function
ATARI, 5
BACK SPACE, 6
BREAK, 6
CAPS/LOWR, 5
CLEAR, 6
DELETE, 6
ESCAPE, 5
INSERT, 6
RETUR.N, 6
SYSTEM RESET, 6
TAB, 6
Editing
CTRL (Control) Key, 13
SHIFT key, 13
Cursor Control, 14
Down arrow, 14
Left arrow, 14
Right arrow, 14
Up arrow, 14
Keywords
BASIC, A-1 through A-5
L
LEN, 38
LET, 2, 3, 10
Letters
Capital (upper case), 3
Lower case, 3, 47 lexp, 4
Light Show Program, H-8
Line
Format, 3
Logical, 2
Numbers,
3
Physical, 2 lineno, 5
LIST, 10
LOAD, 26
Load program from cassette tape, 24
LOCATE, 48
LOG, 34
Loops
Endless, 17
Nested, 15 lop, 4
LPRINT, 26 before CSAVE, 24
Luminance, 50
M
Mandatory # symbol, 26, 27
Margins
Changing, 36, 46
Default in mode 0, 46
Matrix, 41-42
Variable,
4
Memory Map, D-1 through D-2
Modes, graphics, 46, 47
Modes, operating
Deferred, 5
Direct, 5
Exectite, 5
Memo Pad, 5, 25
Modes, text, 46
Override split-screen, 47
Multiple commands
(see
Command Strings) mvar, 4
N
NEW, 10
Notations floating point, 39 in manual, 3
0
ON/GOSUB, 20
ON/GOTO, 20
OPEN, 26-28
Operators, 2
Arithmetic, 4, 6
Binary, 6, 7
Logical, 4, 6
RelatiOnal, 7
Unary, 6
Output devices, 23
Oversized programs
(see
Chaining Programs)
P
Paddle Controller, 59
Parentheses,
Usage, 7, 63
PEEK, 35
Peripheral devices
Pitch
Definition, 57
Values, 58
Pixel, 48
Size in modes, 47
PLA, 63
PLOT, 49
POINT, 28
(see
Input/Output Devices)
POKE, 35
POP, 20-21
POSITION, 49
Precedence, operator, 7
PRINT, 3, 5, 14, 26
Printer listing, 10
Program continuation, 11
Programs,
Machine language, 67
User, Appendix H with Hexcode Loader, 65, 66
PUT, 49
Q
Question mark as prompt, 25
Quotation marks, 2
R
RAD, 35
RAM (Random Access Memory), 23
Random Access to disk file, 28
READ, 28
Direct mode, 28
REM, 10
RESTORE, 21
RETURN Key, 6
Return, Abnormal
Rollbver,
Keyboard, 8
RND, 34
(see
POP)
Index
119
RS-232(R:), 24
RTS, 63
RUN, 11
S
SAVE, 29
Save programs on cassette tape, 24
Screen Display (see TV Monitor)
.
Screen Editor (E:), 24
Seagull Over Ocean Program, H-11
Semicolon, 28
SETCOLOR, 50-53 sexp, 5
SGN, 34
SIN, 35
SOUND, 57 terminating, 9, 57
Spaces, 61
SQR, 34
Stack, 16
GOSUB, 16
Hardware, 36 loop addresses, 16, 21
POP, 20
Statement,
Program, 15
FOR, 15
GOSUB, 16, 21
GOTO, 17
IF, 18
ON/GOSUB, 20
ON/GOTO, 20
POP, 20
RESTORE, 21
RETURN, 16
STEP, 15
THEN, 18
TO, 15
TRAP, 22
STEP, 15
STOP, 11
String
Comparison, 40
Concatenation, 39
Dimensioning, 37
Functions
ASC, 37
CHR$, 37
LEN, 38
STR$, 38
VAL, 38
Manipulation, 39
Sort, 40
Splitting, 39
Variable, 4
STR$, 38
Subroutine
Definition, 16
GOSUB, 16
Usage, 16 svar, 4
' T
Terminology, 1
Text rnodes, 46
120
Index
Text Modes Characters Program, H-7
Tokenized version, 3, 24
Tone, clipped, 57
TRAP, 22
Type-A-Tune Program, H-15
U
Untokenized version, 3
V
var, 4
Variable, 2 avoiding name limit, 2
Video Graffitti Program, H-12
Volume control, 57
Voice, 57
W
Window
Graphics, 47
Text, 47
Wraparound, 8
X
X-coordinate, 47
XIO, 29
XIO (Fill), 54
Y
Y-coordinate, 47
Z
Zero as Dummy Variable, 30, 34
/
TABLE OF MODES
AND SCREEN FORMATS
Gr.
Mode
4
5
6
7
8
0
1
2
3
Mode
Type
TEXT
TEXT
TEXT
GRAPHICS
GRAPHICS
GRAPHICS
GRAPHICS
GRAPHICS
GRAPHICS
Horiz.
(Columns)
40
20
20
40
80
80
160
160
320
Verl. (Rows)
Split
Screen
Verl. (Rows)
Full
Screen
-
20
10
20
40
40
80
80
160
24
24
12
24
48
48
96
96
192
ttOf
Colors
4
2
4
2
2
5
5
4
1/2
RAM
Required
(Bytes)
993
513
261
273
537
1017
2025
3945
7900
MODE, SET COLOR, COLOR TABLE
Default
Colors
LIGHT BLUE
DARK BLUE
BLACK
ORANGE
LIGHT GREEN
DARK BLUE
RED
BLACK
ORANGE
LIGHT GREEN
DARK BLUE
BLACK
ORANGE
BLACK
LIGHT GREEN
DARK BLUE
BLACK
Mode or
Condition
MODE 0 and
ALL TEXT
WINDOWS
MODES 1 and
2
(Text Modes)
MODES 3, 5, and 7
(Four-color modes)
MODES 4 and 6
(Two-color
Modes)
4
MODE 8
(1 Color
2 Luminances) o
1
2
3
4
0
1
2
3
4 o
1
2
3
4
SETCOLOR
(aexpl)
Color
Register No.
Color
(aexp)
COLOR data actually determines character to be plotted
COLOR data actually determines character to be
Plotted
1
2
3
0
0
1
2
• 3
0
0
1
2
3
4
-
1
0
1
-
-
DESCRIPTION AND COMMENTS
Character luminance (Same color as background)
Background
—
Border
Character
Character
Character
Character
Background, Border
Graphics point
Graphics point
Graphics point
Graphics point (background default), Border
Graphics point
—
—
Graphics point (background default), Border
—
Graphics point luminance (same color as background)
Graphics point (background default) -:
—
Border
r"
--
1
Download
Advertisement
Key features
BASIC language support
Graphics capabilities
Sound and game controllers
Screen wraparound
Keyboard rollover
Error message display
Peripheral device support
Built-in functions
Array and matrix manipulation
String manipulation
Frequently asked questions
Direct mode allows you to execute instructions immediately after pressing RETURN, without using line numbers. Deferred mode uses line numbers and delays execution of instructions until the RUN command is entered.
Pressing the BREAK key during program execution causes execution to stop. You can resume execution by typing CONT followed by pressing RETURN.
To clear the screen in Direct mode, type CLEAR and press RETURN. To clear the screen in Deferred mode, type PRINT " ", press ESC, then press CLEAR.