HAMPSHIRE COLLEGE BASIC VERSION Z1.0 ======================= ============ PROCESSOR TECHNOLOGY 5K BASIC, ADAPTED FOR CP/M BY KEVIN JORDAN (BOX 588, HAMPSHIRE COLLEGE, AMHERST, MASS. 01002). WITH MODIFICATIONS BY JEFF ZURKOW. THIS IS PROC. TECH. 5K BASIC MODIFIED TO START AT 100H AND TO DO ITS I/O THROUGH CP/M. PROVISIONS HAVE BEEN ADDED TO ALLOW BASIC PROGRAMS TO BE SAVED AS CP/M FILES, OPERATION MADE FASTER FOR LARGE-MEMORY SYSTEMS, AND A NUMBER OF NEW STATEMENTS AND COMMANDS HAVE BEEN ADDED. CONTROL CHARACTERS ================== RUBOUT AND CTRL-U WORK AS IN CP/M. CTRL-C TAKES YOU BACK TO THE COMMAND LEVEL OF BASIC/5. CTRL-E AND CTRL-P ARE NOT IMPLEMENTED. TO GET BACK TO CP/M, USE THE COMMAND "SYSTEM". DISK FILES ========== IN THE COMMANDS THAT FOLLOW, DENOTES A FILE NAME OF UP TO 8 CHARACTERS, OPTIONALLY FOLLOWED BY A DOT (".") AND A FILE TYPE OF UP TO THREE CHARACTERS. IF THE FILE TYPE IS OMITTED, IT DEFAULTS TO "BSC". IF NAME AND TYPE ARE BOTH OMITTED, THE DEFAULT IS "PROGRAM.BSC". AS A SPECIAL CASE, THE QUERIES "NEW PROGRAM NAME" AND "OLD PROGRAM NAME" MAY BE ANSWERED WITH A CARRIAGE RETURN ALONE, OR WITH A FILE NAME AND NO TYPE, TO TAKE ADVANTAGE OF THE DEFAULT OPTIONS. THE FILE COMMANDS ARE: NAME TYPES THE CURRENT WORKSPACE NAME. NAME RENAMES THE CURRENT WORKSPACE TO THE SPECIFIED NAME AND TYPE. NEW RENAMES THE CURRENT WORKSPACE AND ERASES THE PROGRAM. OLD ERASES THE CURRENT PROGRAM AND LOADS THE SPECIFIED FILE FROM THE DISK. IF IS OMITTED, "OLD" (AND "NEW") WILL ASK FOR IT. UNSAVE ERASES THE SPECIFIED FILE FROM THE DISK. ERA SAME AS UNSAVE . SAVE SAVES THE CURRENT PROGRAM ON THE DISK UNDER THE CURRENT WORKSPACE NAME. IF A FILE WITH THIS NAME ALREADY EXISTS, IT IS DELETED FIRST. SAVE RENAMES THE WORKSPACE TO AND THEN DOES A SAVE. IF A FILE IS SPECIFIED WHEN BASIC IS INVOKED (IE. "BASIC/5 "), IT WILL BE LOADED AND BASIC WILL REFRAIN FROM ASKING "NEW OR OLD?". NOTE THAT FILES SAVED BY BASIC ARE IN AN INTERNAL FORMAT, NOT ASCII, SO THEY CANNOT BE EDITED WITH THE CP/M EDITOR. OTHER NEW COMMANDS: ================== SYSTEM RETURNS CONTROL TO CP/M WITH REBOOT. LLIST SYNTAX IS SAME AS NORMAL "LIST", BUT LISTS ON CP/M LIST DEVICE INSTEAD OF ON CONSOLE. LISTING IS PRECEEDED AND FOLLOWED BY 2 CRLF'S. THE FOLLOWING STATEMENTS HAVE BEEN ADDED: ======================================== WHERE BYTE VALUES ARE INDICATED, AN ARBITRARY EXPRESSION, EVALUATING TO A BYTE VALUE (8-BIT INTEGER) MAY BE USED. EXPRESSIONS EVALUATING TO 16-BIT INTEGERS MAY SIMILARLY BE USED FOR ADDRESS VALUES. OUT [,, . . . ,] THE BYTES B1, B2, . . . ,BN ARE OUTPUT TO THE SPECIFIED PORT. AN INDEFINITE NUMBER OF ADDITIONAL PORTS AND BYTE STRINGS MAY BE SPECIFIED, PRECEEDED BY COMMAS. EXAMPLE: OUT 2[27,109],5[44,10] POKE [,, . . . ,] PUTS THE BYTES B1 . . . BN IN MEMORY STARTING AT LOCATION (A 16-BIT VALUE). THE RIGHT BRACKET MAY BE FOLLOWED BY A COMMA AND ANOTHER ADDRESS AND BYTE STRING, AND SO ON. PUSH ,, . . . , THE ADDRESSES (16-BIT INTEGERS) THROUGH ARE PUSHED ON AN INTERNAL STACK WHICH BUILDS DOWNWARD FROM LOCATION "MACSTK" IN THE SOURCE TEXT. THERE IS CURRENTLY ROOM FOR 17 ENTRIES, AND STACK OVERFLOW CHECKING IS PROVIDED. THE LAST ADDRESS IN THE LIST WINDS UP ON THE STACK TOP (IE. IT WILL BE THE FIRST ENTRY REMOVED). "PUSH", AND THE CORRESPONDING "POP" ARE INTENDED TO PROVIDE A WAY OF PASSING MULTIPLE ARGUMENTS TO MACHINE- LANGUAGE SUBPROGRAMS. TRAP ,, . . . , THIS STATEMENT BEHAVES LIKE "PUSH", BUT REFERENCES A SEPARATE STACK. THE VALUES PUSHED ARE TREATED AS LINE NUMBERS. WHEN AN ERROR OCCURS IN BASIC, THE TOP VALUE WILL BE POPPED OFF THE TRAP STACK AND CONTROL WILL PASS TO THE STATEMENT IT SPECIFIES. IF THE STACK IS EMPTY, AN ERROR MESSAGE WILL BE PRINTED AS USUAL. INPUT "", THE QUOTED STRING IS OPTIONAL. IF INCLUDED, IT WILL BE PRINTED AS A PROMPT, IN PLACE OF THE QUESTION MARK THAT "INPUT" NORMALLY TYPES. OTHERWISE, THE SYNTAX IS IDENTICAL TO NORMAL "INPUT" STATEMENT. LPRINT THIS HAS THE SAME SYNTAX AS THE NORMAL "PRINT" STATEMENT, BUT OUTPUT GOES TO THE CP/M LIST DEVICE INSTEAD OF TO THE CONSOLE. BEAM X,Y DRAW X,Y THESE STATEMENTS ARE FOR USE WITH TEKTRONIX 4010-SERIES GRAPHICS TERMINALS. "BEAM" PUTS THE TERMINAL IN GRAPH MODE AND POSITIONS THE BEAM TO SCREEN COORDINATES X,Y. "DRAW" MOVES THE BEAM FROM ITS CURRENT LOCATION TO NEW LOCATION X,Y, DRAWING A LINE AS IT GOES. X AND Y MUST BE EXPRESSIONS EVALUATING TO 10-BIT INTEGERS, ALTHOUGH THE INTERPRETER ONLY CHECKS TO MAKE SURE THEY ARE VALID 16-BIT INTEGERS. OUTPUT TO THE TEKTRONIX TERMINAL IS NOT THROUGH CP/M (FOR SPEED), BUT RATHER THROUGH A SEPARATE HARDWARE DRIVER IN THE BASIC INTERPRETER. THE DRIVER ROUTINE IS NAMED "TPUT" IN THE SOURCE PROGRAM, AND IS CURRENTLY CONFIGURED FOR AN IMSAI SIO BOARD WITH THE TERMINAL ON PORTS 3 AND 2. NEW AND MODIFIED INTRINSIC FUNCTIONS: ======================================== INP(N) RETURNS VALUE READ FROM PORT N, WHERE N IS A BYTE VALUE. PEEK(N) RETURNS BYTE FROM MEMORY LOCATION N, WHERE N IS A 16-BIT INTEGER. POP(N) POPS N VALUES OFF THE STACK WHERE THEY WERE PUT BY "PUSH", AND RETURNS THE NTH OF THESE AS ITS VALUE. THE OTHERS ARE LOST. UNTRAP(N) LIKE "POP", BUT TAKES VALUES OFF TRAP STACK. ARG(N) ARGUMENT MUST BE 16-BIT INTEGER. ARG RETURNS ITS ARGUMENT AS ITS VALUE, BUT ALSO SAVES IT FOR USE BY "CALL". NOT MODIFIED, BUT DESCRIBED HERE FOR THE SAKE OF COMPLETENESS. CALL(N) LOADS REGISTER PAIR BC WITH THE VALUE MOST RECENTLY PASSED BY "ARG", AND EXECUTES A MACHINE-LANGUAGE "CALL" TO LOCATION N. IN ADDITION, REGISTER PAIR DE IS LOADED WITH A POINTER TO THE TOP OF THE "PUSH" STACK, FROM WHICH PREVIOUSLY "PUSH"ED VALUES CAN BE RETRIEVED. THE MACHINE-LANGUAGE ROUTINE CAN RETURN A 16-BIT VALUE BY PLACING ITS LOW BYTE IN A AND HIGH BYTE IN B. THIS VALUE IS CONVERTED TO FLOATING-POINT AND RETURNED AS THE VALUE OF THE BASIC "CALL". THE ARGUMENT STACK POINTER IS NOT PASSED BACK TO BASIC. PARAMETER PASSING IN THE CALL STATEMENT NOW CONFORMS TO PL/M CONVENTIONS.