OpenCores
URL https://opencores.org/ocsvn/cpu8080/cpu8080/trunk

Subversion Repositories cpu8080

[/] [cpu8080/] [trunk/] [project/] [tinybasic.txt] - Rev 33

Compare with Previous | Blame | View Log

                SHERRY BROTHERS TINY BASIC VERSION 3.1

THIS IS A COPY OF LICHEN WANG'S 'PALO ALTO TINY BASIC' WHICH HAS BEEN
MODIFIED TO INCLUUDE MORE FUNCTIONS, AND DISK SAVE AND LOAD.
IT SETS IT'S SIZE TO WHATEVER SIZE YOUR SYSTEM IS, SO IT DOES NOT NEED
TO BE REASSEMBLED FOR DIFFERENT SYSTEM SIZES.
IF YOU HAVE ANY PROBLEMS WITH IT GIVE ME A CALL OR WRITE ME AND I WILL
SEE WHAT I CAN DO. HERE IS MY ADDRESS AND PHONE:
        BRUCE SHERRY
        1054 BLUEBELL DR.
        LIVERMORE, CA. 94550
        TEL (415) 443-9288


                THE LANGUAGE

NUMBERS

IN TINY BASIC, ALL NUMBERS ARE INTEGERS AND MUST BE LESS THAN 32767.

VARIABLES

THERE ARE 26 VARIABLES DENOTED BY 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 PROGRA.  (I.E., 0 THROUGH SIZE/2,
SEE SIZE FINCTION BELOW.)

FINCTIONS

PRESENTLY THERE ARE 6 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.
                IT IS A TWO'S COMPLEMENT NUMBER SO IF IT IS 
                NEGATIVE IT IS ACTUALLY LARGER THAN 32767.
        INP(X) GIVES THE VALUE (0 TO 255) OF INPUT PORT X
        PEEK(X) GIVES THE VALUE OF MEMORY LOCATION X.  TWO'S COMPLEMENT
                AGAIN.
        USR(X<,Y>) CALLS THE MACHINE LANGUAGE SUBROUTINE AT LOCATION X.
                OPTIONAL PARAMETER Y IS PASSED IN H&L IF THERE AND THE
                VALUE OF THE FUNCTION IS RETURNED IN H&L.  THE PROGRAM
                SAVES ALL REGISTERS, SO YOU DON'T HAVE TO.

ARITHMETIC AND COMPARE OPERATORS

        /       DIVIDE.  NOTE THAT SINCE WE HAVE INTEGERS ONLY, 2/3=0.
        *       MULTIPLY.
        -       SUBTRACT.
        +       ADD.
        >       COMPARE IF GREATER THAN.
        <       COMPARE IF LESS THAN.
        =       COMPARE IF EQUAL TO.  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 MEAND "SET A TO THE 
                RESULT OF COMPARING B WITH 0".
        #       COMPARE IF NOT EQUAL TO.
        >=      COMPARE IF GREATER THAN OR EQUAL TO.
        <=      COMPARE IF LESS THAN OR EQUAL TO.

+, -, *, AND / OPERATIONS RESULT IN A VALUE OF BETWEEN -32767 AND
32767.  (-32768 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.

STATEMENTS

A TINY BASIC STATEMENT CONSISTS OF A STATEMENT NUMBER BETWEEN 1 AND
32767 FOLLOWED BY ONE OR MORE COMMANDS.  COMMANDS IN THE SAME STATEMENT
ARE SEPARATED BY A SEMI-COLON ";".  "GOTO", "STOP", AND "RETURN" COMMANDS
MUST BE THE LAST COMMAND IN ANY GIVEN STATEMENT.

PROGRAM

A TINY BASIC PROGRAM CONSISTS OF ONE OR MORE STATEMENTS.  WHEN A DIRECT
COMMAND "RUN" IS ISSUED, THE STATEMENT WITH THE LOWEST STATEMENT NUMBER
IS EXECUTED FORST, THE THE ONE WITH THE NEXT LOWEST STATEMENT NUMBER, ETC.
HOWEVER, THE "GOTO", "GOSUB", "STOP", AND "RETURN" COMMANDS CAN ALTER
THIS NORMAL SEQUENCE.  WITHIN THE STATEMENT, EXECUTION OF COMMANDS IS
FROM LEFT TO RIGHT.  THE "IF" COMMAND CAN CAUSE THE EXECUTION OF ALL THE
COMMANDS TO ITS RIGHT IN THE SAME STATEMENT TO BE SKIPPED OVER.

COMMANDS

TINY BASIC COMMANDS ARE LISTED BELOW WITH EXAMPLES.  REMEMBER THAT
COMMANDS CAN BE CONCATENATED WITH SEMI-COLONS.  IN ORDER TO STORE THE
STATEMENT, YOU MUST ALSO HAVE A STATEMENT NUMBER IN FRONT OF THE 
COMMANDS.  THE STATEMENT NUMBER AND THE CONCATENATION ARE NOT SHOWN
IN THE EXAMPLES.

REM OR REMARK COMMAND

REM ANYTHING GOES

THIS LINE WILL BE IGNORED BY TBI.

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 AX+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 IS 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 6 SPACES, THE VALUES OF C, D, AND
E IN 3 SPACES, AND THE VALUES OF A AND G IN 10 SPACES.  IF THERE ARE
NOT ENOUGH SPACES SPECIFIED FOR A GIVEN VALUE TO BE PRINTED, THE VALUE
WILL BE PRINTED WITH ENOUGH SPACES 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 THES 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 THES EXPRESSION.  THEN "B:" IS PRINTED AND VARIABLE
B IS SET TO THE VALUE OF THE NEXT EXPRESSION READ FROM THE INPUT DEVICE.
NOTE THAT NOT ONLY NUMBERS, BUT ALSO EXPRESSIONS CAN BE READ AS INPUT.

INPUT 'WHAT IS THE WEIGHT'A, "AND SIZE"B
THIS IS THE SAVE 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 SRINGS AND THE "_" HAVE THE SAVE EFFECT AS IN "PRINT".

OUT COMMAND

OUT 2, A+5, 6, B/7

WILL CAUSE THE LEAST SIGNIFICANT BYTE OF THE EXPRISSION "A+5" TO BE
OUTPUT TO PORT 2, AND THEN THE LEAST SIGNIFICANT BYTE OF THE EXPRESSION
"B/7" WILL BE OUTPUT TO PORT 6.

OUT X+Y,Z

THIS OUTPUTS THE VALUE OF Z (L.S. BYTE) TO THE PORT SPECIFIED BY THE
EXPRESSION "X+Y"

WAIT COMMAND

WAIT I,J

THIS READS THE STATUS OF PORT "I" AND MASKS THIS WITH "J" BY WAY OF A
"LOGICAL AND".  IT WILL CONTINUE READING UNTIL THE RESULT OF THE "AND"
IS NOT EQUAL TO ZERO.

WAIT I,J,K

THIS IS THE SAME AS BEFORE EXCEPT THAT THE STATUS IS LOGICALLY EXCLUSIVE
OR'ED WITH "K" BEFORE THE MASK TO INVERT BITS IF NECCESSARY.

POKE COMMAND

POKE 4000+X,Y

THIS COMMAND WORKS JUST LIKE OUT, EXCEPT THAT EXPRESSION "Y" IS WRITTEN
INTO MEMORY LOCATION SPECIFIED BY THE EXPRESSION "4000+X".

IF COMMAND

IF A<B LET X=3; PRINT 'THIS STRING'

WILL THES THE VALUE OF THE EXPRESSION A<B.  IF IT IS NOT ZERO (I.E. IF IT
IS TRUE), THE COMMANDS IN THE REST OF THIS STATEMENT WILL BE EXECUTED.
IF THE VALUE OF THE EXPRESSION IS ZERO (I.E. IF IT IS NOT TRUE), THE REST
OF THIS STATEMENT WILL BE SKIPPED OVER AND EXECUTION CONTINUES AT THE
NEXT STATEMENT.  NOTE THAT THE WORD "THEN" IS NOT USED.

GOTO COMMAND

GOTO 120

WILL CAUSE THE EXECUTION TO JUMP TO STATEMENT 120.  NOTE THAT "GOTO"
COMMAND CANNOT BE FOLLOWED BY A SEMI-COLON AND OTHER COMMANDS.
IT MUST BE ENDED WITH A CR.

GOTO A*10+B

WILL CAUSE THE EXECUTION TO JUMP TO A DIFFERENT STATEMENT NUMBER AS
COMPUTED FROM THE VALUE OF THE EXPRESSION.

GOSUB AND RETURN COMMANDS

GOSUB 120

WILL CAUSE THE EXECUTION TO JUMP TO STATEMENT 120.

GOSUB A*10+B

WILL CAUSE THE EXECUTION TO JUMP TO DIFFERENT STATEMENTS AS COMPUTED
FROM THE VALUE OF THE EXPRESSION A*10+B.

RETURN

A RETURN COMMAND MUST BE THE LAST COMMAND IN A STATEMENT AND BE FOLLOWED
BY A CR.  WHEN A RETURN COMMAND IS ENCOUNTERED, IT WILL CAUSE THE EXECUTION
TO JUMP BACK TO THE COMMAND FOLLOWING THE MOST RECENT GOSUB COMMAND.

GOSUB CAN BE NESTED. THE DEPTH OF NESTING IS 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 REM-
BERED.  THE NAME OF THE VARIABLE X, THE STATEMENT NUMBER AND THE 
POSITION OF THIS COMMAND WITHIN THE STATEMENT 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, 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 CAN BE NEXTED.  THE DEPTH OF NESTING IS LINITED 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 AUTOMATIC-
ALLY.

STOP COMMAND

STOP

THIS COMMAND STOPS THE EXECUTION OF THE PROGRAM AND RETURNS CONTROL TO
DIRECT COMMANDS FROM THE INPUT DEVICE.  IT CAN APPEAR MANY TIMES IN A
PROGRAM BUT MUST BE THE LAST COMMAND IN ANY GIVEN STATEMENT.  I.E. IT
CANNOT BE FOLLOWED BY A SEMI-COLON AND OTHER COMMANDS.

DIRECT COMMANDS

AS DEFINED EARLIER, A STATEMENT CONSISTS OF A STATEMENT NUMBER FOLLWOED
BY COMMANDS.  IF THE STATEMENT NUMBER IS MISSING, OR IF IT IS 0, THE
COMMANDS WILL BE EXECUTED AFTER YOU HAVE YPED THE CR.  ALL THE COMMANDS
DESCRIBED ABOVE CAN BE USED AS DIRECT COMMANDS.  THERE ARE SIX MORE 
COMMANDS THAT CAN BE USED AS DIRECT COMMANDS BUT NOT AS PART OF A 
STATEMENT.

RUN

WILL START TO EXECUTE THE PROGRAM STARTING AT THE LOWEST STATEMENT
NUMBER.

LIST

WILL PRINT OUT ALL THE STATEMENTS IN NUMERICAL ORDER.

LIST 120

WILL PRINT OUT ALL THE STATEMENTS IN NUMERICAL ORDER STARTING AT
STATEMENT 120.

NEW

WILL DELETE ALL THE STATEMENTS.

SAVE STARTREK

WILL SAVE THE PRESENT PROGRAM ON DISK BY WAY OF THE CPM OPERATING 
SYSTEM.  IT WILL BE SAVED AS A FILE NAMED "STARTREK.TBI".  THIS
IS NOT A PURE ASCII FILE AS THE LINE NUMBERS ARE STORED IN BINARY.

LOAD STARTREK

WILL DELETE ANY PROGRAM IN MEMORY AND WILL LOAD IN A FILE FROM DISK
CALLED "STARTREK.TBI", IF IT EXISTS.

BYE

WILL RETURN YOU TO THE CPM OPERATING SYSTEM.

STOPPING THE EXECUTION

THE EXECUTION OF PROGRAM OR LISTION OF PROGRAM CAN BE STOPPED BY THE
CONTROL-C KEY ON THE INPUT DEVICE.

ABBREVIATION AND BLANKS

YOU MAY USE BLANKS FREELY, EXCEPT THAT NUMBERS, COMMAND KEY WORDS, AND
FUNCTION NAMES CANNOT HAVE EMBEDDED BLANKS.

YOU CAN TRUNCATE ALL COMMAND KEY WORDS AND FUNCTION NAMES AND FOLLOW
EACH BY A PERIOD.  "PR.", "PRI.", "PRIN." ALL STAND FOR "PRINT".
ALSO THE WORD LET IN LET COMMANDS MAY BE OMITTED.  THE "SHORTEST"
ABBREVIATION FOR ALL THE KEY WORDS ARE AS FOLLOWS:
A.=ABS          F.=FOR          GOS.=GOSUB      G.=GOTO
IF=IF           I.=INP          IN.=INPUT       L.=LIST
LO.=LOAD        N.=NEW          N.=NEXT         O.=OUTPUT
P.=PEEK         P.=POKE         PR.=PRINT       REM=REMARK
R.=RETURN       R.=RND          R.=RUN          S.=SAVE
S.=SIZE         S.=STEP         S.=STOP         TO=TO
U.=USR          W.=WAIT
NULL AND NONE-OF-THE-ABOVE = LET

ERROR REPORT

THERE ARE ONLY THREE ERROR CONDITIONS IN TINY BASIC.  THE STATEMENT WITH
THE ERROR IS PRINTED OUT WITH A QUESTION MARK INSERTED AT THE POINT
WHERE THE ERROR IS DETECTED.

(1) WHAT? MEANS IT DOES NOT UNDERSTAND YOU.  EXAMPLE:

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

HOW?
210 P?TINT "THIS"        WHERE PRINT IS MISSTYPED

(2) HOW? MEANS IT UNDERSTANDS YOU BUT DOES NOT KNOW HOW TO DO IT.

HOW?
310 LET A=B*C?+2           WHERE B*C IS LARGER THAN 32767

HOW?
380 GOTO 412?              WHERE 412 DOES NOT EXIST

(3) SORRY? MEANS IT UNDERSTANDS YOU AND KNOWS HOW TO DO IT BUT THERE
IS NOT ENOUGH MEMORY TO DO IT.

ERROR CORRECTIONS

IF YOU NOTICE AN ERROR IN TYPEIN BEFORE YOU HIT THE CR, YOU CAN DELETE
THE LAST CHARACTER BY THE RUB-OUT KEY OR DELETE THE ENTIRE LINE BY THE
"\" KEY.  TINY BASIC WILL ECHO A BACK ARROW "_" FOR EACH RUB-OUT.
ECHO FOR BACK-SLASH CONSISTS OF A LF, A CR, AND AN UP ARROW.

TO CORRECT A STATEMENT, YOU CAN RETYPE THE STATEMENT NUMBER AND THE
CORRECT COMMANDS.  TINY BASIC WILL TRPLACE THE OLD STATEMENT WITH THE NEW
ONE.

TO DELETE A STATEMENT, TYPE THE STATEMENT NUMBER AND A CR ONLY.

VERIVY THE CORRECTIONS BY "LIST NNNN" AND HIT THE CONTROL-C KEY WHILE
THE LINE IS BEING PRINTED.

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.