8086 TINY BASIC USER'S GUIDE INTRODUCTION The TINY BASIC language originated in the pages of Dr. DOBB'S JOURNAL and PEOPLE'S COMPUTER COMPANY in late 1975 and early 1976. Fed by the enthusiasm of early computer hobbyists and by the challenges and oportunities created by the early microcomputer chips, the idea of a tiny basic interpreter quickly gained popularity and acceptance. The language was a stripped down version of the ever-popular Dartmouth BASIC with the proviso that it be "useful" with a minimum of then very expensive memory. Additionally, TINY BASIC had to be ROMable since mass storage at that time consisted of reels of teletype punch paper tape, often punched at the unbearably slow rate of ten characters per second. The TINY BASIC language supports a very limited subset of the Dartmouth BASIC language. It does not compare at all with the large floating point BASIC's that have been released for almost all eight bit microcomputer chips. It does not support strings. Then, why 8086 TINY BASIC? Well, the size is still small (2700 bytes), it is efficient and easy to learn, and it is still ROMable. All of this implies that the language is still useful in at least two important applications: education and dedicated control. The present version of TINY BASIC is based on Li-Chen Wang's Palo Alto 8080 TINY BASIC as published in the May 1976 issue of DR. DOBB'S JOURNAL. Dr. Wang's version of TINY BASIC was chosen for its remarkable resiliance and simplicity. It has been optimized for the 8086 and it takes advantage of the hardware multiply and divide that the 8086 affords. Other enhancements include the use of the host operating system's line editing facilities and the LOAD and SAVE facilities, which, in the 8080 version, are due to unknown authors. The 8086 implementation is due to Michael E. Sullivan of Financial Software, 54 Grove Street, Haddonfield, NJ, 08033. THE LANGUAGE Numbers In TINY BASIC, all number are integers and must be within the range of -32767 .. 32767. 1 Variables There are 26 scalar variables donoted by the letters A through Z. The one array variable is denoted by '@(I)'. Its dimension is limited by the size of the TINY BASIC program. See the description of the SIZE function. Functions There are five functions in TINY BASIC. ABS(X) - Returns the absolute vaulue of the variable X. INP(X) - Returns data read from input port X. (0<=X<=255) PEEK(X)- Returns the contents of memory location X. (-32767<=X<=32767) RND(X) - Returns a random number between 1 and X (inclusive). SIZE - Returns the number of bytes left unused by the program. Arithmetic and Comparison Operators The following operators are supported: / - integer divide (fractional results not returned) * - integer multiply - - subtract + - add > - compare if greater than < - compare if less than = - compare if equal to NOTE: multiple assignment statements are not supported, i.e., "LET A=B=O" is interpreted by TINY BASIC as meaning "set A to the result of comparing B with O". # - compare if not equal to >= - compare if greater than or equal to <= - compare if less than or equal to The +,-,*, and / operations return a value within the range -32767 .. 32767. TINY BASIC works exclusively with decimal numbers. In order to represent the full range of numbers between 0 and 0FFFFH the 2 properties of two's complement arithemtic should be understood. For example, in order to PEEK at memory location 0FFFFH, the parameter -0 should be used as the PEEK function argument. Notice that the PEEK operation (as well as other address referenced operations) are all relative to the current data segment, which should be the same as the code segment. All compare operations result in a 1 if the comparison is true and a 0 if it is false. 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 the * and / operators are always given precedence, with + and -, and then the compare operators following, in that order. Parentheses can be used to alter the order of evaluation in the standard algabraic sense. Statements A TINY BASIC statement consists of a statement number between 1 and 32767 followed by one or more commands (see Commands below). Commands in the same statement are seperated by a semi-colon ";".If the "GOTO", "STOP", and "RETURN" commands are used then they must be the last command in that statement. Program A TINY BASIC program consists of one or more statements. When the direct command (see Direct Commands below) "RUN" is issued, the statement with the lowest statement number is executed first, then the one with the next lowest statement number, etc. The "GOTO", "GOSUB", "STOP", and "RETURN" commands can alter this normal sequence. Within any statement the execution takes place from left to right. The "IF" command can cause remaining commands within the same statement to be skipped. Abbreviations and Blanks TINY BASIC statements and commands may use blanks freely, except that numbers, command key words, and function names may not have embedded blanks. All TINY BASIC command key words and function names may be abbreviated by following the abbreviation with a period. For example, "PR.", "PRI.", and "PRIN." all stand for "PRINT". The word "LET" in the LET command may be ommited. 3 Editor TINY BASIC contains a useful text editor for entering and correcting TINY BASIC programs. All of the line editing features of the host operating system are used. In order to correct an existing TINY BASIC statement, that statement must be re-entered. Statements may be deleted by simply typing their statement number, followed by a CR. Corrections may be verified by typing LIST nnnn and striking the control-X key to terminate the LIST process. ERROR MESSAGES There are only three error messages in TINY BASIC. When an error is encountered the error message itself is printed, followed by the statement causing the program error with a "?" inserted at the point where the error is detected. Control is then passed to the TINY BASIC monitor. A synopsis of the three error conditions follow. -- WHAT? WHAT? 210 P?TINT "THIS" WHAT? indicates that TINY BASIC did not understand the statement or command. In the example above, the command PRINT was mistyped on statement number 210. -- HOW? HOW? 260 LET A=32000+5000? HOW? indicates that TINY BASIC understands but cannot execute the statement or command. In the example above, the sum of the numbers exceeds 32767. -- SORRY SORRY SORRY indicates that TINY BASIC understand but cannot execute the statement or command due to insufficient memory. One cure is to rephrase the TINY BASIC program in acceptable abbreviations. 4 STATEMENT COMMANDS TINY BASIC statement commands are listed below with examples. Remember that commands can be concatenated with semi-colons. In order to store any given statement, you must precede that statement with a statement number between 1 and 32767. Statement numbers are NOT shown in the examples. LET command LET A=234-5*6;A=A/2;X=A-100;@(X+9)=A-1 The LET command assigns the value of an expression to the specified variable. In the example above, the variable "A" assumes the value of the expression "234-5*6", or "204". Then the variable "A" assumes the value "102". Next, the variable "X" is set to the value of the expression "A-100", or "2". The last command assigns the value "101" to the array variable "@(11)". The "LET" portion of the LET command is optional, i.e., the following examples are true: A=10 C=5*3/5;C=C*5 REM Command REM ANYTHING CAN BE WRITTEN AFTER "REM" The REM command is ignored by TINY BASIC. It is used by experienced programmers to comment BASIC programs. A program comment is used by programmers to remind themselves of the logic of a program section. All good programs are invariably commented. PRINT Command PRINT PRINT will cause a carriage-return (CR) and a line-feed (LF) on the output device. PRINT A*3+1,"ABC" This form of the PRINT command will print the value of the expression A*3+1 on the output device, followed by the string ABC on the same line. Note that single (') or double quotes (") may be used to denote character strings, but that pairs must be mached. PRINT A*3+1,"ABC", This form of the PRINT command will produce the same results as the previous example except that the normal CR-LF is inhibited by the trailing comma at the end of the statement. This allows other PRINT 5 commands to print on the same line. PRINT A,B,#3,C,D,E,#10,F,G This form of the PRINT command demonstrates format control. The format character # is used to indicate the number of leading spaces to be printed before a number. The default number is 6. Once the # format is invoked it is active for the remainder of the statement unless overridden by a subsequent format specifier, as in the example. PRINT 'ABC',\,'XXX' The back-slash (\) character is used to cause a CR without a LF. In this example, the string ABC is printed followed by the string XXX on top of the original ABC. INPUT Command INPUT A,B The INPUT statement is used to acquire input data during program execution. In the example above, TINY BASIC will print A: and wait for a number to be typed at the console terminal. Next, TINY BASIC will print B: and wait for another number to be typed at the console terminal. In this example the variables A and B will assume the values of the appropiate input values. The INPUT statement will accept expressions as well as numbers as input. INPUT 'WHAT IS THE WEIGHT'A,"AND SIZE"B In this example TINY BASIC will print the string WHAT IS THE WEIGHT: and wait for operator input. Next, the string AND SIZE: will be printed, on the same line, and TINY BASIC will wait for operator input. INPUT A,'STRING',\,"ANOTHER STRING",B TINY BASIC will react to the back-slash character (\) in this example in the same fashion as in the PRINT command. The second string will overwrite the first string STRING. IF Command IF A' prompt). All statement commands (those listed above) can be invoked while in command mode. Typing a control-C while in command or monitor mode will cause TINY BASIC to terminate. Control is then passed to the host operating system monitor. Recall that a statment consists of a statement number followed by one or more commands. If the statement number is missing, or if it is 0, the command will be executed immediatly after typing the 9 terminating CR. The following commands can be used as direct commands; they CANNOT be used as part of a TINY BASIC statement. RUN Command RUN The RUN command causes execution of the stored TINY BASIC program. Execution will commence at the lowest numbered statement and continue until there are either no more statements to execute or a STOP command is found. A long TINY BASIC program may be terminated by typing control-X at the console. This passes control the the TINY BASIC monitor. A control-C may be typed at any time also, then TINY BASIC is terminated and control is passed to the host operating system. LIST Command LIST The LIST command is used to display the current TINY BASIC program on the operator's console. The statements will be listed in numerical order. If LIST is followed by an expression (e.g. LIST 200) the listing will commence with statements following the specified statement, inclusive. NEW Command NEW The NEW command deletes the current program from TINY BASIC's memory. SAVE Command SAVE FILENAME The SAVE command saves the current TINY BASIC program on the logged in disk with the specified filename FILENAME. The default filetype is ".TBI". If there is insufficient room on the disk, the SAVE command responds with "HOW?". LOAD Command LOAD FILENAME The LOAD command loads the specified TINY BASIC program from the logged in disk into the program area. Any program residing within TINY BASIC prior to the LOAD operation is lost. If the specified program is not found on the disk, or if there is insufficient room for the 10 program, LOAD responds with "HOW?". The filetype is assumed to be ".TBI". BYE Command BYE The BYE command terminates TINY BASIC. Control is passed back to the host operating system. TINY BASIC OPERATION TINY BASIC is initiated from the host operating system's command mode like any other transient command. TINY BASIC will sign-on, announce 'OK', and then prompt '>' awaiting operator interaction. An example follows: A:TBASIC 8086 TINY BASIC V1.0 OK > In the example above the program 'TBASIC.COM' was found on the logged-in disk ('A' in the example). TINY BASIC then commenced execution by first announcing itself and then prompting '>' for operator input. TINY BASIC utilizes all of the host operating system's line editing facilities. For example, if an operator wished to cancel a line typed to TINY BASIC, he need only type a control-X, etc. If hard copy of a TINY BASIC session is desired, control-P and control-N will toggle the printer, if it exists. At present, saved TINY BASIC programs can be edited only with the internal TINY BASIC editor. Programs prepared by an external editor can not be read by TINY BASIC. 11 supported: / - i