====================================== TASC DOCUMENTATION ENTERED BY: JUDIE MAC SYSTEM REQUIR:APPLE II OR APPLE II+ 48K RAM THE APPLESOFT COMPILER: TO EXTEND APPLESOFT LANGUAGE TO COMPLEMENT APPLESOFT INTERPRETER 1. INCREASE EXECUTION SPEED COMPILED WITH TASC = 2 TO 20 TIMES FASTER THAN W/INTERPRETER 2. INTER-PROGRAM COMMUNICATON=COMMUNICATE PGMS WITH EACH OTHER BY COMMON VARIABLES 3. TRUE INTEGER ARITHMETIC 4. SOURCE-CODE SECURITY=TASC CREATES MACHINE LANGUAGE EQUIVALENTS OF APPLESOFT BASIC PGMS 5. DISK-BASED COMPILATION CHAPTER 1- INTRODUCTION CHAPTER 2- DEMO RUN CHAPTER 3- INTRO TO COMPILATION CHAPTER 4- DEBUGGING W/THE/INTERPRETER CHAPTER 5- COMPILATION CHAPTER 6- EXECUTING A COMPILED PROGRAM CHAPTER 7- A COMPILER/INTERPRETER LANGUAGE COMPARISON CHAPTER 8- LANGUAGE ENHANCEMENTS CHAPTER 9- HOW THE COMPILER WORKS CHAPTER 10-ERROR MESSAGES & DEBUGGING APPENDICES: A - MOVING BINARY FILES W/ADR UTILITY- BLOAD AND BSAVE W/ADR UTILITY B - COPYING TASC & CONVERTING TO 3.3 C - CREATING A TURNKEY DISK D - NOTES ON APPLESOFT-INFO ON UNUSUAL APPLESOFT FEATURES E - RUNTIME MEMORY MAP - MEMORY USAGE ON COMPILED PGMS F - ZERO PAGE USAGE FILES ON DISK: 1 - TASC- APPLESOFT COMPILER 2 - PASS0,PASS1,PASS2- INTERNAL COMPONENTS OF TASC 3 - RUNTIME- LIBRARY OF MACHINE LANGUAGE ROUTINES 4 - ADR - UTILITY FOR BINARY FILES 5 - CREATE ADR - UTILITY FOR CREATING ADR ON OTHER DISKS 6 - BALL - DEMO PGM 2:DEMO RUN: TASC IS SIMPLE TO USE.TO INVOKE THE COMPILER, FIRST BOOT UP YOUR DISK AND THEN TYPE: ]RUN TASC THE NEXT TWO PROMPTS ASK YOU FOR THE NAMES OF THE SOURCE AND OBJECT FILES: ]SOURCE FILE BALL ]OBJECT CODE FILE: (DEFAULT BALL.OBJ) THE SOURCE FILE IS A APLSOFT PGM NAMED BALL THAT EXISTS ON THE DISK. THE OBJECT FILE IS THE MACHINE LANGUAGE BINARY FILE THAT IS CREATED BY THE COMPILER. THE OBJECT FILE NAME DEFAULTS TO THE ORIGINAL FILE NAME WITH THE EXTENSION .OBJ ADDED, SO THAT THE OBJECT FILE PRODUCED FOR THE BALL.OBJ. THE DEFAULT IS SPECIFIED BY ENTERING . THE SOURCE FILE IS ASSUMED TO BE LOCATED ON THE SAME DISK AS THE COMPILER UNLESS YOU SPECIFY OTHERWISE. THE OBJECT FILE DEFAULTS TO THE SAME DISK THAT THE SOURCE IS ON. DIFFERENT SLOTS OR DRIVES CAN BE SPECIFIED USING THE NORMAL ,S AND ,D SYNTAX. COMPILATION IS USUALLY SLIGHTLY FASTER IF ONLY ONE DRIVE IS USED. DISK COMMANDS CAN BE EXECUTED BY TYPING FOLLOWED BY THE COMMAND AND THE NEXT TWO PROMPTS ASK YOU WHETHER YOU WANT DEFAULT VALUES FOR ALL OTHER COMPILATION OPTIONS. SINCE MOST COMPILATIONS ARE PERFORMED WITH THE SAME SET OF OPTIONS, YOU SHOULD ENTER AFTER EACH PROMPT TO SPECIFY THE DEFAULT VALUES. MEMORY USAGE: DEFAULT CONFIGURATION OPTIONS: DEFAULT CONFIGURATION IF YOU HAD REFUSED THE DEFAULT CONFIGURATIONS ABOVE, YOU WOULD NEED TO EXPLICITLY SPECIFY THE VALUES OF SEVERAL COMPILATION OPTIONS. THE ACTUAL COMPILATION PROCESS STARTS WITHOUT FURTHER INPUT SINCE YOU HAVE SPECIFIED THE DEFAULTS ABOVE. WHEN COMPILATION BEGINS,THE DISK IS ACCESSED ALMOST CONSTANTLY TO EITHER READ THE SOURCE FILE OR TO WRITE THE OBJECT FILE. THE COMPILER LISTS THE SOURCE PROGRAM ON YOUR CONSOLE AS IT IS BEING COMPILED AND GENERATES APPROPRIATE MESSAGES IF IT ENCOUNTERS ANY ERRORS.THEN THE SOURCE STOPS LISTING,THE FIRST PARTS OF COMPILATION IS FINISHED, AND THE COMPILER PRINTS: *****BEGINNING PASS2 THE SECOND PART OF COMPILATION ALSO USED THE ???? EXTENSIVELY. TO INDICATE THAT IT IS STILL COMPILING, THE COMPILER PRINTS A PERIOD ON THE SCREEN EVERY FEW SECONDS. WHEN IS IS FINISHED, THE COMPILER PRINTS: *****CODE GENERATION COMPLETE AT THIS POINT,THE ACTUAL COMPILATION PROCESS IS COMPLETE.SO THAT YOU WILL RECEIVE A LISTING OF COMPILATION INFORMATION, ANSWER "Y" OR "YES" TO THE NEXT PROMPT: COMPILATION INFORMATION AND LINE NUMBER REFERENCE TABLE YES THIS INPUT ALSO ACCEPTS DISK COMMANDS. IF YOU WANT TO LIST THE COMPILATION INFORMATION ON A PRINTER, YOU CAN FIRST TURN ON YOUR PRINTER BY ENTERING: TASC PRINTS OUT THE DESIRED INFORMATION, DISPLAYS THE FOLLOWING MESSAGE, AND THEN RE-ENTERS THE INTERPRETER: *****COMPILATION COMPLETE ] THE INCREASE IN THE BALL PROGRAMS EXECUTION SPEED IS QUITE APPARENT WHEN COMPARED TO THE SAME PROGRAM RUNNING UNDER THE INTERPRETER. COMPARE SPEEDS BY FIRST RUNNING THE INTERPRETED PROGRAM: ]RUN BALL NEXT EXECUTE THE COMPILED PROGRAM BY ENTERING THE FOLLOWING DOS COMMANDS: ]BLOAD RUNTIME ]BRUN BALL.OBJ NOTE THAT THE RUNTIME LIBRARY MUST BE BLOADED IN MEMORY BEFORE BALL.OBJ AND CAN BE BRUN. YOU HAVE NOW SUCCESSFULLY COMPLETED THE DEMO RUN. COMPILATION ******VOCABULARY SOURCE FILE - THE APPLESOFT PROGRAM IS COMMONLY CALLED A SOURCE FILE BECAUSE IT IS THE SOURCE FROM WHICH AN EQUIVALENT MACHINE LANGUAGE FILE IS CREATED. THE SOURCE FILE IS THE INPUT FILE TO THE COMPILER. CATALOG LISTS THE NAMES OF APPLESOFT SOURCE FILES WITH THE LETTER "A" PRECEDING THE SIZE OF EACH FILE. OBJECT FILE - TASC TRANSLATES SOURCE FILES INTO MACHINE LANGUAGE OBJECT FILES. THE OBJECT FILE IS THE OUTPUT FILE CREATED BY THE COMPILER.THE OBJECT FILES IS AN EXECUTABLE BINARY FILE THAT IS THE MACHINE LANGUAGE EQUIVALENT OF THE SOURCE. CATALOG LISTS THE NAMES OF TASC OBJECT FILES WITH THE LETTER "B" PRECEDING THE SIZE OF THE FILE. COMPILETIME- THE TIME DURING WHICH THE COMPILER IS TRANSLATING A SOURCE FILE INTO AN OBJECT FILE. RUNTIME - THE TIME DURING WHICH A COMPILED PROGRAM IS EXECUTING. BY CONVENTION, RUNTIME REFERS TO THE EXECUTION TIME OF A COMPILED PROGRAM AND NOT TO THE EXECUTION TIME OF THE COMPILER. RUNTIME LIBRARY - A COLLECTION OF MACHINE LANGUAGE ROUTINES THAT ARE USED BY COMPILED OBJECT PROGRAMS. THESE ROUTINES ALL RESIDE IN THE FILE NAMES RUNTIME. RUN TIME MUST BE LOADED INTO MEMORY BEFORE AN OBJECT FILE CAN BE EXECUTED. COMPILATION VS INTERPRETATION: SINCE THE MICROPROCESSOR IN THE APPLE CAN EXECUTE ONLY ITS OWN MACHINE INSTRUCTIONS, IT DOES NOT EXECUTE APPLESOFT PROGRAM STATEMENTS DIRECTLY.INSTEAD,STATEMENTS MUST BE SIMULATED BY MACHINE LANGUAGE ROUTINES THAT PERFORM THE OPERATIONS SPECIFIED BY THE BASIC STATEMENT. INTERPRETATION: THE INTERPRETER TRANSLATES APPLESOFT SOURCE STATEMENTS LINE BY LINE AT RUNTIME. EACH TIME THE INTERPRETER EXECUTES AN APPLESOFT STATEMENT, IT MUST ANALYZE THE STATEMENT, CHECK FOR ERRORS AND CALL MACHINE LANGUAGE ROUTINES THAT PERFORM THE DESIRED FUNCTION. WHEN STATEMENTS MUST BE EXECUTED REPEATEDLY, AS MUST THOSE WITH A FOR/NEXT LOOP, THE TRANSLATION PROCESS MUST BE REPEATED EACH TIME THE STATEMENT IS EXECUTED. IN ADDITION,BASIC LINE NUMBERS ARE STORED IN A LIST. GOTO'S AND GOSUB'S FORCE THE INTERPRETER TO SEARCH THIS LIST TO FIND THE DESIRED LINE.THIS SEARCH IS QUITE SLOW WHEN THE NEEDED LINE IS NEAR THE END OF A LONG PROGRAM. THE INTERPRETER KEEPS TRACK OF VARIABLES USING A LIST,TOO. WHEN IT ENCOUNTERS A REFERENCE TO A VARIABLE, THE INTERPRETER SEARCHES FROM THE BEGINNING OF THE LIST TO FIND THE DESIRED VARIABLE. IF THE VARIABLE IS NOT PRESENT IN THE LIST, THE INTERPRETER MUST CREATE A NEW ENTRY FOR IT. THIS PROCEDURE ALSO SLOWS INTERPRETED PROGRAMS. COMPILATION: A COMPILER, ON THE OTHER HAND, TAKES A SOURCE PROGRAM AND TRANSLATES IT INTO A MACHINE LANGUAGE OBJECT FILE. THIS OBJECT FILE CONSISTS OF A LARGE NUMBER OF MACHINE LANGUAGE CALL'S TO ROUTINES IN THE RUNTIME LIBRARY AND TO ROUTINES IN THE APPLESOFT INTERPRETER, TASC ASSURES CLOSE LANGUAGE COMPATIBILITY WITH THE INTERPRETER. IN CONTRAST TO THE INTERPRETER, THE COMPILER ANALYZES ALL STATEMENTS BEFORE RUNTIME. IN ADDITION,ABSOLUTE MEMORY ADDRESSES ARE PROVIDED FOR VARIABLES AND PROGRAM LINES.THESE ADDRESSES ELIMINATE THE LIST SEARCHING THAT OCCURS WHILE AN INTERPRETED PROGRAM EXECUTES. TASC,UNLIKE THE INTERPRETER, IMPLEMENTS TRUE INTEGER ARITHMETIC AND INTEGER LOOP VARIABLES IN FOR/NEXT LOOPS.IN COMPARISON, THE APPLESOFT INTERPRETER CONVERTS ALL INTEGERS TO REAL NUMBERS BEFORE OPERATING ON THEM. THESE CONVERSIONS MAKE INTERPRETED INTEGER ARITHMETIC RELATIVELY INEFFICIENT. IN ADDITION,THE INTERPRETER FORBIDS USE OF INTEGERS AS LOOP CONTROLVARIABLES IN FOR/NEXT LOOPS. PROGRAM DEVELOPMENT 1 CREATE AND EDIT APPLESOFT SOURCE 2 RUN AND DEBUG SOURCE WITH THE INTERPRETER 3 COMPILE SOURCE,CREATING A BINARY OBJECT FILE 4 EXECUTE COMPILED OBJECT FILE DEBUGGING WITH THE APPLESOFT INTERPRETER***** DEBUGGING A PROGRAM INTENDED FOR COMPILATION IS A TWO STEP PROCESS THAT INVOLVES: 1.CREATING THE SOURCE PROGRAM,AND 2.RUNNING THE PROGRAM UNDER THE INTERPRETER TO CHECK FOR ERRORS. CREATING A SOURCE PROGRAM: AN APPLESOFT SOURCE PROGRAM REQUIRES THE USE OF THE EDITOR AVAILABLE WITHIN APPLESOFT. PROGRAMS ARE CREATED BY SIMPLY ENTERING APPLESOFT STATEMENTS FROM WITHIN APPLESOFT. ONCE A PROGRAM HAS BEEN CREATED, IT CAN BE SAVED TO DISK WITH SAVE. TASC CAN ONLY COMPILE APPLE SOFT DISK FILES. RUNNING A PROGRAM WITH APPLESOFT: PROGRAMS SHOULD BE DEBUGGED USING THE APPLESOFT INTERPRETER BEFORE BEING COMPILED. IF THE PROGRAM TO BE COMPILED USES TASC FEATURES THAT ARE NOT AVAILABLE IN THE INTERPRETER, IT MAY BE NECESSARY TO DEBUG THE PROGRAM WITH THE COMPILER. TASC IS HIGHLY COMPATIBLE WITH THE APPLESOFT INTERPRETER.THIS COMPATIBILITY ALLOWS THE APPLESOFT INTERPRETER TO FUNCTION AS THE PRIMARY DEBUGGING TOOL. THE INTERPRETER PROVIDES MUCH BETTER DEBUGGING FACILITIES THAN A COMPILER,SINCE IT INCLUDES FEATURES SUCH AS TRACE. THERE ARE SOME DRAWBACKS TO DEBUGGING WITH THE INTERPRETER: STATEMENTS THAT ARE ONLY EXECUTED UNDER SPECIAL CIRCUMSTANCES MAY NEVER BE EXAMINED, AND THE INTERPRETER HALTS EXECUTION WHEN IT ENCOUNTERS THE FIRST ERROR IN A PROGRAM. DEBUGGING WITH THE COMPILER DOES NOT SUFFER FROM THESE DRAWBACKS SINCE THE COMPILER EXAMINES EVERY STATEMENT IN A PROGRAM, AND CAN CONTINUE THE COMPILATION EVEN IF IT ENCOUNTERS ERRORS. IN GENERAL,COMPILING A PROGRAM IS AN EFFECTIVE WAY TO CHECK FOR SYNTAX ERRORS; HOWEVER,PROGRAM LOGIC ERRORS ARE MORE EASILY TRACKED DOWN WITH THE INTERPRETER. COMPILATION******** NOTE**** IF A COMPILED PROGRAM DOES NOT RUN CORRECTLY, SEE ERROR MESSAGES AND DEBUGGING FOR SOME POSSIBLE SOLUTIONS. OPTIONS: THE DEMO RUN SHOWED ONLY THE MOST BASIC TYPE OF COMPILATION. TASC INCLUDES SEVERAL OPTIONS THAT CAN BE USED TO CONTROL COMPILATION MORE CLOSELY.THE REQUESTED OPTIONS CONTROL MEMORY ALLOCATION AND COMPILATION.TO EXPLICITLY SPECIFY THE VALUES FOR THESE OPTIONS,SIMPLY ANSWER "NO" WHEN THE COMPILER OFFERS THE DEFAULT VALUES. MEMORY USAGE: THE MEMORY USED BY THE COMPILED CODE AT RUNTIME IS DIVIDED INTO THREE AREAS: 1.RUNTIME 1 LIBRARY 2.OBJECT PROGRAM 3.VARIABLES TASC ALLOWS THE LOCATION FOR EACH OF THESE BLOCKS TO BE SPECIFIED SEPARATELY. THE MEMORY ALLOCATION FEATURES CAN BE USED TO PROTECT MACHINE LANGUAGE PROGRAMS, SHAPE TABLES, THE HIRES SCREENS, OR ANY OTHER IMPORTANT PART OF MEMORY. THE DEFAULT ALLOCATIONS ORDER,LIBRARY, PROGRAM,VARIABLES.THE LIBRARY IS ALLOCATED LOWEST AND PROGRAM AND VARIABLES FOLLOW. THE LIBRARY BEGINS AT LOCATION 2051, OR $803. ALTERNATE ADDRESSES FO THE BLOCKS ARE SIMPLE TO SPECIFY. THE NEW LOCATION FOR THE LIBRARY IS ENTERED AS A NUMBER AND DEFAULTS TO $803. ADDRESSES CAN BE SPECIFIED IN EITHER HEXADECIMAL OR DECIMAL. HEX MUST HAVE ($) THE LIBRARY MUST BE BLOADED BEFORE A COMPILED PROGRAM CAN BE RUN. BY DEFAULT THE LIBRARY IS LOADED AT $803.WHEN A PROGRAM IS COMPILED TO EXPECT THE LIBRARY AT A DIFFERENT ADDRESS, THE LIBRARY MUST BE LOADED IN AT THE CORRECT ADDRESS BY USING "A" OPTION WITH THE BLOAD COMMAND. MOVING BINARY FILES, WITH ADR UTILITY. THE BEGINNING ADDRESS FOR THE OBJECT CODE MAY BE SPECIFIED WITH: 1. THE WORD HGR1 2. THE WORD HGR2 3. A DECIMAL OR HEX NUMBER 4. HGR1 AND HGR2 SET THE BEGINNING OF THE PROGRAM ABOVE THE APPROPRIATE HIRES SCREEN. THEN 4K RUNTIME LIBRARY DEFAULTS TO THE SPACE BELOW THE FIRST HIRES SCREEN. THIS DEFAULT LOCATIONS IS SUGGESTED FOR PGMS OF HIRES. VARIABLE SPACE MAY BE SPECIFIED EXPLICITLY OR ALLOWED TO DEFAULT. THE BEGINNING OF VARIABLE SPACE DEFAULTS TO THE END OF THE OBJECT CODE. COMPILED PGMS USE THE NORMAL HIMEM POINTER TO DETERMINE THE TOP OF AVAILABLE STRING SPACE, AND STRINGS GROW DOWNWARD FROM THERE. COMPILATION OPTIONS: COMPILATION LISTING YES PAUSE ON ERRORS YES INTEGER ARITHMETIC YES INTEGER CONSTANTS YES RESUME/DEBUG CODE NO ANSWERING "NO" OR "N" TO THE DEFAULT OPTION PROMPT PROVIDES A CHANGE TO TURN EACH OF THESE OPTIONS ON OR OFF. THE COMPILER NORMALLY LISTS THE SOURCE FILE. TURNING THE LISTING OPTION OFF SUPPRESSES THE LISTING. ERRORS, WARNING, AND SPECIAL MESSAGES ARE PRINTED AS USUAL. PAUSE ON ERRORS OPTION: ERRORS NORMALLY HALT COMPILATION AND ALLOW THE USER TO ABORT OR CONTINUE COMPILATION. TURNING THE PAUSE OPTION OFF SUPPRESSES THE PAUSE AFTER ANY ERROR MESSAGE ARE PRINTED. INTEGER ARITHMETIC OPTION: TASC INCLUDES A FULL INTEGER ARITHMETIC PACKAGE. TRUE INTEGER ARITHMETIC ALLOWS OPERATIONS ON INTEGERS TO BE PERFORMED IN ABOUT HALF THE NORMAL TIME.INCLUDING THE OPTION SUBSTANTIALLY INCREASES THE SPEED OF PGMS THAT USE INTEGERS. INTEGER CONSTANTS: CONSTANTS IN A COMPILED PROGRAM CAN BE TREATED AS INTEGERS OR FLOATING POINT NUMBERS. SELECTING THE INTEGER CONSTANTS OPTIONS ALLOWS CONSTANTS THAT ARE USED AS INTEGERS TO BE STORED IN INTEGER FORMAT. IF A CONSTANT IS NEEDED IN FP IT INCLUDES BOTH. INTEGER CONSTANTS TAKE UP TWO BYTES IN THE OBJECT FILE:FP TAKES FIVE.THE INTEGER CONSTANTS OPTION SHOULD NORMALLY BE LEFT ON. RESUME/DEBUG CODE OPTION: TURNING ON THE RESUME/DEBUG CODE OPTION CAUSES CODE TO HANDLE THE RESUME STATEMENT TO BE INCLUDED IN THE OBJECT PGM. THE RESUME IN APPLESOFT ALLOWS AN ERROR TRAPPING ROUTINE TO RESUME EXECUTION AT THE BEGINNING OF THE STATEMENT THAT CAUSED THE ERROR. TASC ALSO FULLY SUPPORTS ONERR GOTO. THE COMPILED VERSION OF ONERR GOTO TRAPS ALL RUNTIME ERRORS, INCLUDING THOSE THAT OCCUR WITHIN ROUTINES FROM THE APPLESOFT INTERPRETER. INCLUDING THE RESUME/DEBUG OPTION REQUIRES THE COMPILER TO GENERATE EXTRA CODE AT THE BEGINNING OF EACH STATEMENT THAT MAY GENERATE AN ERROR. SELECTING RESUME/DEBUG CODE OPTION CAUSES THE OBJECT CODE TO BE LARGER AND SOMEWHAT SLOWER. TURNING ON THE RESUME/DEBUG CODE OPTION HAS THE ADVANTAGE THAT ANY RUNTIME ERROR MESSAGES INCLUDE THE OBJECT CODE ADDRESS. NORMALLY, ONLY SOME OF THE ERRORS GENERATED BY THE RUNTIME LIBRARY INCLUDE AN OBJECT CODE ADDRESS. THE RESUME/DEBUG OPTION CAN BE USEFUL FOR DEBUGGING WITH THE COMPILER. HOWEVER, INCLUDING IT DOES DECREASE THE SPEED AND INCREASE THE LENGTH OF THE COMPILED CODE. THE RESUME/DEBUG OPTION SHOULD BE LEFT OFF UNLESS IT IS ABSOLUTELY NEEDED. IF THE OPTION IS TURNED OFF THE COMPILER WILL IGNORE ALL RESUME STATEMENTS.