FUTURE86 tm ...The language Unique in all the World... From... DEVELOPMENT ASSOCIATES 1520 S Lyon Santa Ana, CA 92705 (714) 835 9512 Compuserve 71460,1146 Copyright (C) 1987 by Development Associates and RIGY Corporation All rights reserved This FUTURE86 demonstration diskette is an actual application example. This diskette contains several files: DRIVER.FIF....source file for the demo program DRIVER.COM....execution or runtime file for the demo produced by the FUTURE86 compiler, FUT86.COM DRIVER.LST....listing file produced via the compiler DRIVER.SYM....Symbol file produced by the compiler DRIVER.ERR....Error file produced by the compiler (this file is empty...because there are no errors) DEMO.TXT....the actual text you are now viewing comes from this file SCRIPT.SCR....This is an output control file that contains coded character strings that control the formatting, attributes, placement, speed and other parameters of the text you are now viewing. This demonstration program furnishes information about FUTURE86 using actual FUTURE86 generated code. Further, you can look at the source code and listings, observe the code compactness and see the many advantages that FUTURE86 offers you. Welcome to FUTURE86 the world class programming environment that truly belongs to the future... FUTURE86 runs under MS\DOS, on IBM PC,AT or compatibles and generates compact executable object programs and highly readable compilation lists with a minimum of programming effort. FUTURE86 is a variable level language that compiles directly to machine code. The language is inherently rommable, reentrant and recursive. Unique among existing languages, you may freely mix assembly language and high level statements within procedures. FUTURE86 is an "environment natural" language. You are free to choose procedure names that relate to your application needs. Additionally, FUTURE86 is extensible, allowing you to extend the language into one that is application specific. FUTURE86 program listings produce highly readable code both at high and low levels. This is especially valuable when debugging real time control applications. Writing programs in FUTURE86 is intuitively much easier than with other languages because its syntax is so simple, consisting of just tokens and spaces. FUTURE86 compilation is almost trivial. You can concentrate on developing your algorithms instead of being involved in detailed syntax requirements. FUTURE86's fast, two pass compiler, inherently supports: ** structured programs ** forward referencing ** XENIX-like file access ** MS\DOS INT processes ** software and 8087 floating point ** application romming ** arrays ** .COM or .HEX files ** interrupt driven architectures. ** conditional compilation and linkage ** "include" files ** 8086/88 and 80186/8 instructions. ** high level listings that detail the object level ** high level direct register access Full support is provided for local and global labels and named procedures. In addition to increasing code readability, this feature allows full symbolic debugging. An important part of the FUTURE86 environment is the integrated, variable level debugging module, FDT86. This module allows debugging at either machine or high levels in a symbolic, interactive way. FUTURE86 generated code is fast making it suitable for real time control applications. It is also ideal for applications such as AI, CASE, expert systems, business, engineering analysis, modeling, etc.. FUTURE86 has the following inherent properties: * Naturally "structured" * Debugging resources integrated into programming environment. * Produces compact code. * Extensible. You actually enlarge the language for your application. * Run time or size optimizing is completely under your control * Write code at either an arbitrarily abstract high level or in assembly language within the same procedure depending on your needs with no complex context switching. High and low level expressions can be freely mixed. * FUTURE86 is fast. No runtime interpreters like BASIC, FORTH or LISP. ***Its easy to see why FUTURE86 obsoletes other programming languages*** Anyone can learn FUTURE86 quickly because of its remarkably simple and logical concepts. FUTURE86 is a mature World Class language with thousands of users, hard at work in many diverse applications... and it is still being extended... In addition to a complete set of low level assembler instructions and compiler directives, FUTURE86 supplies hundreds of powerful, natural language, extensible, high level procedures that give you programming power unmatched by other languages. FUTURE86 puts you in command! You can customize FUTURE86 to minimize the size of your application's .COM files and make MS\DOS environment independent applications such as ROM/RAM based systems. You can also extend FUTURE86. FUTURE86 will revise your thinking about what constitutes a modern programming language. Instead of a complex, difficult to understand language, FUTURE86 is elegantly simple. Programs in FUTURE86 are expressed as a collection of tokens, each of which represent a procedure that the computer sequentially executes. These tokens can be referred to as "words" and they include the hundreds supplied with FUTURE86 and the ones you will create in writing your program or application. A FUTURE86 word is written as follows: : NAME processa porcessb processc .... ; The colon starts a word definition. NAME is the name of the procedure such as BANANA, GORILLA, SORT, etc. You can choose names that relate to your needs. Processa, processb, etc.. are the names of previously defined (although FUTURE86 allows forward referencing ) FUTURE86 words that are to be sequentially executed. The last portion of the definition is the semicolon which signals the compiler that the definition is now complete. FUTURE86 source files have a .FIF extension which is symbolic for "FUTURE INFORMATION FILE". Your source program can be this simple: : SEE_COUNT 10 DO I 48 + CO LOOP ; END SEE_COUNT After this source program has been compiled by the FUTURE86 compiler, and the resulting .COM file executed, the screen will display: 0123456789 and then return to the MS\DOS prompt. The compilation procedure used is: FUT86 COUNT KERNEL Where FUT86 is the FUTURE86 compiler, COUNT is our program's name and KERNEL is the file that contains the high level FUTURE86 words that we are referencing in our program. Let us now explore the details of the source program. First, we have the definition itself that starts with a colon to signal the compiler that we are now defining a high level procedure. Then, the name of the procedure, SEE_COUNT (we are free to use any names for procedures) is placed and is followed by the procedures which are: 10---number of times (decimal) we wish the loop construct to execute. DO---start of the loop construct I---places the loop index or the loop count value on the top of the data stack. 48--number 48 (decimal) is placed on top of the data stack. This is used to convert the loop number to an ASCII value suitable for outputing to the screen. +---top two numbers on the data stack are added together to form the desired ASCII digits value. Note: this is RPN notation. FUTURE86 generally employs this type of number manipulation. CO--top of data stack value (an ASCII value) is sent to the output device. This procedure means "console out". LOOP--end statement of the loop construct. The procedure exits this point after reaching a loop count of one less than the loop index (the 10). The count therefore starts at 0. ;---signal to the compiler that we have now completed our high level FUTURE86 definition. END is a required statement at the conclusion of every FUTURE86 source file. FUTURE86 provides you with a set of basic tools (procedures) and its compiler has the important responsibility of correctly compiling your source programs that are built with these tools. FUTURE86 also has the responsibility of providing you with a complete and powerful debugging resource that allows you to completely debug your algorithms. Because FUTURE86 source syntax is so simple, compilation is almost a trivial matter. This is usually a major problem in most other languages. FUTURE86 language syntax and internal structure encourage program modularization. Achieving structured programs is straightforward without being restrictive and eliminates the "GOTO" concept that can make program reading and maintenance so difficult. This is an important characteristic of a powerful programming language. FUTURE86 contains a rich set of string procedures. FUTURE86 exploits a concept of string parameters that is unique to FUTURE86 and is not found in other languages. This will make your programs much more powerful. This short core dump program should give you some insite as to the simplicity and power that FUTURE86 can give you. : DUMP_1LINE \address, count --- outputline OVER SWAW PRW \display line seg. addr ':' CO \output colon OVER PRW 2 SPACES \output 2 spaces BEGIN CGET PRB \get 1 byte and output it in hex SPACE \output a space ?NULL \is string access finished? UNTIL \go back to BEGIN till finished CRLF ; \output a cr and lf : DUMP \address, count --- outputrange BEGIN 16 SSPLIT \get 16 bytes from memory DUMP_1LINE \output one line of data ?NULL \are we done? UNTIL ; Labels are an important FUTURE86 resource. Labeled procedure names, when properly selected, convey information about the procedure that the label references. The use of labels in your source code enable symbolic debugging. FUTURE86 produces highly readable compilation listings that are tightly coupled to the machine level. You can read the high level coding with its abstract and application oriented syntax for maximum comprehension and at the same time the code generated can be tracked down to its actual byte level roots. Lets see what the following code example produces. ESCAPE EQU 1BH : PRINTMODE ESCAPE 2 DO LO LOOP ; When this source code is compiled the listing becomes: 1B80/ : PRINTMODE 1B80/E8A3E5 1B ESCAPE 1B84/E89FE5 02 2 1B88/E82AE6 DO 1B8B/E8CBF5 LO 1B8E/E833E6 E9F7FF LOOP 1B94/C3 ; If this code is carefully disassembled, we will see something like: 1B80 E8A3E5 CALL 0126 \CONSTANT PROCEDURE 1B83 1B \ASCII CONSTANT--ESCAPE 1B84 E89FE5 CALL 0126 \CALL CONSTANT PROCEDURE AGAIN 1B87 02 \THE CONSTANT 1B88 E82AE6 CALL 01B5 \CALL THE DO PROCEDURE 1B8B E8CBF5 CALL 1159 \CALL THE LO PROCEDURE 1B8E E833E6 CALL 01C4 \CALL THE LOOP PROCEDURE 1B91 E9F7FF JMP 1B8B \IF MORE LOOPS REQUIRED JMP BACK 1B94 C3 RET \PROCEDURE IS FINISHED--RETURN As you can see, most FUTURE86 high level words function as machine code subroutines. The expansion of a FUTURE86 procedure can be viewed as a series of CALL instructions to other defined procedures. Simplicity is elegance. FUTURE86 provides complete flow control procedures including: IF(-IF)..ELSE..THEN BEGIN..UNTIL CASE..ENDCASE SELECT..ENDSELECT BEGIN..IF(-IF)..REPEAT DO..LOOP BEGIN..BREAK..UNTIL BEGIN...AGAIN The FUTURE86 assembler can be used to generate named procedures in a manner similar to high level FUTURE86. For example, THE FUTURE86 procedure, ROT, that rotates the third stack element to the top of the data stack is written completely in assembler as follows: : ROT \LOW WORD\ LDS AX,[BP] XCHG AX,[BP + 4] XCHG AX,[BP + 8] MOV [BP],AX \HI WORD\ MOV AX,DS XCHG AX,[BP + 6] XCHG AX,[BP + 10] MOV [BP + 2],AX ; Writing in FUTURE86 assembly language is almost exactly the same as writing in high level FUTURE86. In fact, you can directly intermix assembly language and high level FUTURE86 within the same procedure with no restrictions. :MIXED \MIXED HIGH/LOW LEVEL PROCEDURES MOV AH,3 \OPERATION TYPE MOV BH,BYTE CS:PAGE# \SELECT PAGE NO. IVDOS \VIDEO BIOS--HIGH LEVEL CMP DH,23 \ROW LIMIT? JL _OUTPUT \COND. JMP TO LOCAL LABEL SCROLL_UP_ONE_LINE \HI-LEVEL SCROLL 22 0 PUT_CURS \ADJ CURS POS _OUTPUT: WRITE_ATR \PUT CHAR ATTR CO ; \WRITE THE CHAR AND END FUTURE86 has complete provision for macros. CODEMACRO macroname assembly statement assembly statement | | | assembly statement ENDM FUTURE86 provides for decimal, binary, and hex number bases and for character and character string constants. FUTURE86 provides a simple mechanism for conditional compilation of source programs via use of the word [CC : [CC formula ..FUTURE86 routine CC] FUTURE86 code is very readable. For example, the following sequence: START 3 TURN_RIGHT PICK STOP relates to the driving program for a robotic application and expresses the starting motion, turning clock-wise by three steps, pick up an item and then stop. A natural syntax for FUTURE86. The FUTURE86 debugger (FDT86) provides an interactive debugger for testing your FUTURE86 programs in a fast, efficient manner. FDT86 is also very useful for program prototyping and as a FUTURE86 learning environment. FDT86 has a complete symbolic, interactive environment to give you the power you need. You can execute any words that are resident, set and execute breakpoints, investigate procedure stack behavior, define and execute new FUTURE86 words and perform other useful debugging tasks such as examine ports, memory, etc.. These FDT86 commands are available: A -- Change map/set arguments C -- Call subroutine D -- Dump memory E -- Erase FDT generated definitions F -- Fill/FUTURE mode G -- Go execute user program H -- 16 bit add/subtract L -- reList FDT generated definitions M -- Move memory block O -- Set origin address P -- Display parameter stack Q -- Quit QC -- Quit and stay resident R -- Read file S -- Change memory (byte) U -- Upload program/data/source code V -- Display label value W -- Change memory (word) X -- Change register Z -- Display program position information .. -- retain data stack info da-- down arrow. Repeat last command. _ -- set break point at addr or label Other -- Any available high level FUTURE86 procedures. The FDT86 environment is also excellent for developing simple utility words or procedures since you can easily save your work, in the form of source code. The ability to execute virtually any FUTURE86 words from within FDT86 in an immediate environment is very powerful. Additionally, the high level breakpoint resources allow you to really focus on performance details of any portion of your program. Executing and debugging your application code that was compiled with the FUTURE86 compiler FDT86 offers powerful debugging resources, both at high and low levels. This capability will really help you successfully debug your applications in an efficient manner. More than 250 pages of documentation are furnished with FUTURE86 which includes a detailed description of the language, programming techniques, and complete procedure glossaries that enable you to quickly learn and become proficient at writing successful programs. The manual includes the following sections: PART I...FUTURE86 RESOURCES, LANGUAGE AND COMPILER INTRODUCTION FUTURE86 ADVANTAGES FUTURE86 RESOURCES FUTURE86 COMPILER/ASSEMBLER (FUT86) FUTURE86 DEBUGGER (FDT86) OTHER FILES THE FIRST THING TO DO MAKING WORKING SYSTEM FILES RAM DISK OPERATION STARTING FUTURE86 FUTURE86 COMPILER COMPILER MESSAGES COMPILER ERROR MESSAGES KERNEL COMPILATION PROGRAM EXECUTION EXAMPLE FUTURE86, THE LANGUAGE LIST FILE PRINTING D CHARTS-STRUCTURED FLOW CHARTS PROGRAM WRITING STYLE FUTURE86 STRING PROCESSING LABELS LINKAGE MECHANISM REVERSE POLISH NOTATION AND STACKS DATA STACK RETURN STACK OBJECT READABILITY STACK PROCESSING BRANCHING--FLOW CONTROL ARRAYS SOURCE PROGRAM STRUCTURE PSEUDO INSTRUCTIONS FUTURE86 ASSEMBLER STRUCTURE MIXING ASSEMBLER AND HIGH LEVEL CODE MACROS EXAMPLES WHEN TO USE ASSEMBLY PROCEDURES FUTURE86 NUMBER PROCESSING CHARACTER CONSTANTS CHARACTER STRING CONSTANTS SPECIAL CHARACTER CONSTANT RESOURCE PROGRAM AND DATA LOCATIONS COMPUTATION SEQUENCE--ASSEMBLER COMPUTATION SEQUENCE--HIGH LEVEL FUTURE86 ROM APPLICATIONS CONDITIONAL COMPILATION SOURCE READABILITY AND CODING STYLE PROCEDURE NAME ALIASING DIRECT REGISTER ACCESS WORDS PART II...FDT86--FUTURE86 DEBUGGER FDT86 DEBUGGER ASSEMBLER MODE COMMANDS FUTURE MODE DEBUG ENVIRONMENT FDT HIGH LEVEL BREAKPOINTS FDT ALIASING PROPERTIES FDT ERROR MESSAGES USING FDT FOR YOUR PROGRAM DEVELOPMENT PART III...FUTURE86 GLOSSARY PART IV...SYSTEM GLOSSARY APPENDICES FUTURE86 QUICK REFERENCE GUIDE A complete FUTURE86 environment consists of the compiler, kernel library, FDT86, a text editor, specialized printing utility and various demo and utility files. Documentation consists of a comprehensive tutorial style manual complete with procedure glossaries. Optional libraries available include: Software and 8087 floating point, RS-232, Modem and GENHEX, a .COM to Intel Hex file converter. This demonstration can only give you a brief sense of the power that awaits you within FUTURE86... Thank you for using this demo... If you are serious about software development shouldn't you be using FUTURE86 ? FUTURE86 is a fully supported professional language intended for serious applications. To order or for additional information write or call: DEVELOPMENT ASSOCIATES 1520 S Lyon Santa Ana, CA. 92705 USA (714) 835 9512 Do it today....and brighten your future!