[net.micro.atari16] TINY BASIC DOCUMENTATION

franco@iuvax.UUCP (03/11/86)

                        Documentation for
             Gordo's MC68000 Tiny BASIC version 1.0


     This  is  an adaptation of Li Chen Wang's  'Palo  Alto  Tiny 
BASIC' for the Motorola MC68000 microprocessor.  It includes more 
functions and program save and load. As distributed, it is set up 
for  a Motorola MEX68KECB Educational Computer Board connected to 
a  host  CP/M computer.  The source code should give  you  enough 
details to allow you to install it on a different system.  If you 
have any problems, you can write to me at:
     Gordon Brandly
     R.R. 2
     Fort Sask., AB, Canada
     T8L 2N8


     This version for the Atari 520 ST translated by :
     Kenneth L. Hurley
     1230 W 7th #3
     Eugene, OR  97402
     (503) 343-7285

                          The Language

Numbers

In  this Tiny BASIC,  all numbers are integers and must be in the 
range 2147483647 to -2147483648.


Variables

There are 26 variables denoted by the letters A through Z.  There 
is  also a single array @(I).  The dimension of this array (i.e., 
the  range of value of the index I) is set automatically to  make 
use  of all the memory space that is left unused by  the  program 
(i.e.,  0 through SIZE/4, see SIZE function below). All variables 
and array elements are 4 bytes long.


Functions

There are 4 functions:
     ABS(X) gives the absolute value of X.
     RND(X) gives a random number between 1 and X (inclusive).
     SIZE gives the number of bytes left unused by the program.
     PEEK(X) gives the value of the byte at memory location X.

Arithmetic and Compare Operators

     /    Divide. (Note that since we have integers only, 2/3=0)
     *    Multiply.
     -    Subtract.
     +    Add.
     >    Greater than. (comparison)
     <    Less than. (comparison)
     =    Equal to.  (comparison)   Note that to certain versions 
          of BASIC "LET A=B=0" means "set both A and B to 0".  To 
          this  version  of Tiny BASIC,  it means "set A  to  the 
          result of comparing B with 0".
     <>   Not equal to. (comparison)
     >=   Greater than or equal to. (comparison)
     <=   Less than or equal to. (comparison)

+,  -,  *,  and / operations result in values between -2147483647 
and 2147483647.  (-2147483648 is also allowed in some cases.) All 
compare operators result in a 1 if true and a 0 if not true.


Expressions

Expressions  are formed with numbers,  variables,  and  functions 
with arithmetic and compare operators between them. + and - signs 
can also be used at the beginning of an expression.  The value of 
an expression is evaluated from left to right,  except that * and 
/  are  always done first,  and then + and - ,  and then  compare 
operators.  Parentheses  can also be used to alter the  order  of 
evaluation.  Note  that  compare  operators can be  used  in  any 
expression. For example:

     10 LET A=(X>Y)*123+(X=Y)*456+(X<Y)*789
     20 IF (U=1)*(V<2)+(U>V)*(U<99)*(V>3) PRINT "Yes"
     30 LET R=RND(100), A=(R>3)+(R>15)+(R>56)+(R>98)

In line 10,  A will be set to 123 if X>Y,  to 456 if X=Y,  and to 
789 if X<Y. In line 20, the "*" operator acts like a logical AND, 
and the "+" operator acts like a logical OR.  In line 30,  A will 
be a random number between 0 and 4 with a prescribed  probability 
distribution of: 3% of being 0, 15-3=12% of being 1, 56-15=41% of 
being 2, 98-56=42% of being 3, and 100-98=2% of being 4.


Program Lines

A  Tiny BASIC line consists of a line number between 1 and  65534 
followed  by one or more commands.  Commands in the same line are 
separated by a colon ":".
     "GOTO",  "STOP",  and  "RETURN"  commands must be  the  last 
command on any given line.


Program

A Tiny BASIC program consists of one or more lines. When a direct 
command  "RUN"  is issued,  the line with the  lowest  number  is 
executed  first,  then the one with the next lowest line  number, 
etc.  However, the "GOTO", "GOSUB", "STOP", and "RETURN" commands 
can  alter  this normal sequence.  Within a  line,  execution  of 
commands  is from left to right.  The "IF" command can cause  the 
remaining commands on the same line to be skipped over.


Commands

Tiny BASIC commands are listed below with examples. Remember that 
multiple commands can be put on one line if colons separate them. 
In  order to store the line,  you must also have a line number at 
the beginning of the line.  (The line number and multiple-command 
lines aren't shown in the examples.


REM or REMARK Command

REM anything goes

This line will be ignored by Tiny BASIC.


LET Command

LET A=234-5*6, A=A/2, X=A-100, @(X+9)=A-1

Will  set  the variable A to the value of the expression  234-5*6 
(i.e.  204),  set  the  variable A (again) to the  value  of  the 
expression A/2 (i.e. 102), set the variable X to the value of the 
expression A-100 (i.e. 2), and then set the variable @(11) to 101 
(where 11 is the value of the expression X+9 and 101 is the value 
of the expression A-1).

LET U=A<>B, V=(A>B)*X+(A<B)*Y

Will  set the variable U to either 1 or 0 depending on whether  A 
is  not  equal  to or is equal to B;  and set the variable  V  to 
either  X,  Y or 0 depending on whether A is greater  than,  less 
than, or equal to B.


Print Command

PRINT

Will  cause  a carriage-return (CR) and a line-feed (LF)  on  the 
output device.

PRINT A*3+1, "abc 123 !@#", ' cba '

Will  print the value of the expression  A*3+1  (i.e.  307),  the 
string  of  characters "abc 123 !@#" and the string" cba  ",  and 
then  a CR-LF.  Note that either single or double quotes  can  be 
used to quote strings, but pairs must be matched.

PRINT A*3+1, "abc 123 !@#", ' cba ',

Will produce the same output as before,  except that there is  no 
CR-LF  after the last item printed.  This enables the program  to 
continue printing on the same line with another "PRINT".

PRINT A, B, #3, C, D, E, #10, F, G

Will  print the values of A and B in 11 spaces,  the values of C, 
D,  and E in 3 spaces, and the values of F and G in 10 spaces. If 
there  aren't  enough  spaces specified for a given value  to  be 
printed, the value will be printed in full anyway.

PRINT 'abc',_,'xxx'

Will  print the string "abc",  a CR without a LF,  and  then  the 
string "xxx" (over the "abc") followed by a CR-LF.


INPUT Command

INPUT A, B

When  this  command is executed,  Tiny BASIC will print "A:"  and 
wait to read in an expression from the input device. The variable 
A  will  be set to the value of this  expression,  then  "B:"  is 
printed and variable B is set to the value of the next expression 
read  from the input device.  Note that whole expressions as well 
as numbers can be entered.

INPUT 'What is the weight'A, "and size"B

This is the same as the command above,  except the prompt "A:" is 
replaced by "What is the weight:" and the prompt "B:" is replaced 
with  "and size:".  Again,  both single and double quotes can  be 
used as long as they are matched.

INPUT A, 'string',_, "another string", B

The strings and the "_" have the same effect as in "PRINT".


POKE Command

POKE 4000+X,Y

This  command puts the value produced by expression "Y" into  the 
byte memory location specified by the expression "4000+X".


CALL Command

CALL X

This  command  will  call a machine language  subroutine  at  the 
address  specified  by  the expression  "X".  All  of  the  CPU's 
registers   (except  the  stack  pointer)  can  be  used  in  the 
subroutine.


IF Command

IF A<B LET X=3: PRINT 'this string'

This will test the value of the expression A<B.  If it isn't zero 
(i.e.  if it is true), the rest of the commands on this line will 
be executed.  If the value of the expression is zero (i.e.  if it 
is  not  true),  the rest of this line will be skipped  over  and 
execution continues on the next line.  Note that the word  "THEN" 
is not used.


GOTO Command

GOTO 120

Will  cause execution to jump to line 120.  Note that the  "GOTO" 
command cannot be followed by a colon and other commands. It must 
be ended with a CR.

GOTO A*10+B

Will  cause  the execution to jump to a different line number  as 
computed from the value of the expression.


GOSUB and RETURN Commands

GOSUB 120

Will cause execution to jump to line 120.

GOSUB A*10+B

Will cause execution to jump to different lines as computed  from 
the value of the expression A*10+B.

RETURN

A  RETURN command must be the last command on a line and must  be 
followed by a CR.  When a RETURN command is encountered,  it will 
cause  execution  to jump back to the command following the  most 
recent GOSUB command.
     GOSUB's can be nested with a depth limited only by the stack 
space.


FOR and NEXT Commands

FOR X=A+1 TO 3*B STEP C-1

The  variable X is set to the value of the  expression  A+1.  The 
values  of  the expressions (not the expressions themselves)  3*B 
and  C-1 are remembered.  The name of the variable  X,  the  line 
number  and the position of this command within the line are also 
remembered.  Execution then continues the normal way until a NEXT 
command is encountered.
     The step can be positive,  negative or even zero.  The  word 
STEP  and  the  expression  following it can be  omitted  if  the 
desired step is +1.

NEXT X

The  name  of  the variable X is checked with that  of  the  most 
recent  FOR  command.  If they do not agree,  then  that  FOR  is 
terminated and the next recent FOR is checked,  etc. When a match 
is found, this variable will be set to its current value plus the 
value  of  the  step expression saved by  the  FOR  command.  The 
updated  value  is  then  compared  with  the  value  of  the  TO 
expression  also  saved by the FOR command.  If this  within  the 
limit,  execution will jump back to the command following the FOR 
command.  If  this  is  outside the  limit,  execution  continues 
following the NEXT command itself.
     FOR's  can also be nested with a depth limited only  by  the 
stack space.  If a new FOR command with the same control variable 
as that of an old FOR command is encountered, the old FOR will be 
terminated automatically.


STOP Command

STOP

This  command  stops  the execution of the  program  and  returns 
control  to direct commands from the console.  It can appear many 
times  in  a program but must be the last command  on  any  given 
line, i.e. it cannot be followed by a colon and other commands.


BYE Command

Will  return  you  to the resident monitor program  or  operating 
system.  (Tutor in the case of the ECB.)


Direct Commands

As defined earlier,  a line consists of a line number followed by 
commands.  If  the  line number is missing,  or if it is  0,  the 
commands  will be executed after you have typed the CR.  All  the 
commands  described above can be used as direct  commands.  There 
are  five  more commands that can be used as direct commands  but 
not as part of a program line:

RUN

Will  start  to  execute  the  program  starting  at  the  lowest 
line number.

LIST

Will print out all the lines in numerical order.

LIST 120

Will  print out all the lines in numerical order starting at line 
120.

NEW

Will delete the entire program.

SAVE

Will save the present program on the storage device you  provide. 
Details  on installing this device are given in the source  code. 
As  set  up for the MEX68KECB Educational  Computer  Board,  this 
command  will  send  the program out to the host computer  in  an 
easily-stored text form.  It isn't, however, pure program text as 
the line numbers are stored in hexadecimal.

LOAD

Will  delete  the program in memory and load in a file from  your 
storage device.


Stopping Program Execution

The  execution  of the program or listing of the program  can  be 
stopped   by   pressing  the  control-C  key  on   the   console. 
Additionally,  a listing can be paused by pressing control-S, and 
then pressing any key to continue.


Abbreviations and Blanks

You  may use blanks freely within a program except that  numbers, 
command  key  words,  and  function names  cannot  have  embedded 
blanks.
     You  may  truncate all command key words and function  names 
and follow each by a period.   "P.",  "PR.",  "PRI.", and "PRIN." 
all stand for "PRINT".  The word LET in LET commands may also  be 
omitted.  The shortest abbreviations for all the key words are as 
follows:
A.=ABS    C.=CALL   F.=FOR    GOS.=GOSUB     G.=GOTO
IF=IF     I.=INPUT  L.=LIST   LO.=LOAD       N.=NEW
N.=NEXT   P.=PEEK   PO.=POKE  P.=PRINT       REM=REMARK
R.=RETURN R.=RND    R.=RUN    S.=SAVE        S.=SIZE
S.=STEP   S.=STOP   TO=TO
no key word = LET


Error Reports

There  are  only three error conditions in Tiny BASIC.  The  line 
with  the error is printed out with a question mark  inserted  at 
the point where the error is detected.

(1) "What?" means it doesn't understand you.  For example:

What?
260 LET A=B+3, C=(3+4?. X=4

(2) "How?" means it understands you but doesn't know how to do it.

How?
210 P?TINT "This"   <- where PRINT is misspelled

How?
310 LET A=B*C?+2    <- where B*C is larger than 2147483647

How?
380 GOTO 412?       <- where 412 does not exist

(3)  "Sorry." means it understands you and knows how to do it but 
     there isn't enough memory to accomplish the task.


Error Corrections

If you notice an error in your entry before you press the CR, you 
can delete the last character with the backspace (control-H)  key 
or delete the entire line with control-X.  To correct a line, you 
can  retype the line number and the correct commands.  Tiny BASIC 
will  replace the old line with the new one.  To delete  a  line, 
type  the  line  number  and  a  CR  only.  You  can  verify  the 
corrections to line 'nnnn' by typing "LIST nnnn" and pressing the 
control-C key while the line is being printed.