* * * * * * * **** *** *** ***** *** * * * * * * * * * * * * * * * * * * * **** ***** *** * * * * * * * * * * * * * * * * * * * * * **** * * *** ***** *** * * * * * * COPYRIGHT (c) 1977, 1978, 1979 PROCESSOR TECHNOLOGY CORP. * 7100 JOHNSON INDUSTRIAL DR. * PLEASANTON, CALIF. 94566 * * << ALL RIGHTS RESERVED >> * * * * * * THE GLOBAL PARAMETERS * * * ASSEMBLY PARAMETERS * SOLOS EQU 0 1==>SOLOS PRESENT, 0==>SOLOS NOT PRESENT PTDOS EQU 1 1==>PTDOS PRESENT, 0==>PTDOS NOT PRESENT M48K EQU 1 INDICATES MEMORY SIZE. ORG WILL BE 100H. M60K EQU 0 LOTS OF MEMORY. ORG AT D040H. RANFIX EQU 0 1==>RANDOM ACCESS FILES KNOW THEIR' REC SIZE RUNTIME EQU 0 0==>FULL BASIC, 1==>RUNTIME SUPPORT ONLY * TIMCONST EQU 802 TIME CONSTANT FOR PAUSE IF SOLOS ITIMCONST EQU 777 TIME CONSTANT FOR INPUT ENDF IF PTDOS ITIMCONST EQU 777 TIME CONSTANT FOR INPUT ENDF OFFSET EQU 45 THE KEYS TO THE FRONT DOOR * * * THE STACK * SSIZE EQU 150 STACK SIZE * * FLOATING POINT * * PRECISION MAY BE 6, 8, 10, 12, 14, OR 16 ONLY! * PRECISION EQU 16 NUMBER OF DIGITS OF PRECISION. FPSIZ EQU PRECISION/2+2 BYTES IN AN FP NUMBER FPBYT EQU FPSIZ-2 BYTES OF COEFFICIENT DIGIT EQU FPBYT DITTO FPNIB EQU FPBYT*2 NUMBER OF DIGITS IN FP NUMBER * * SET UP THE PRECISION INDICATORS * IF PRECISION IS NOT RIGHT FOR A PARTICULAR PAIR OF * EQUATES BELOW THEN 1 OF THE 2 DIVISIONS WILL BE 0 AND * THE MULTIPLY RESULT WILL BE 0. ELSE THE RESULT IS 1. * TMP6 EQU PRECISION/6 PX6 EQU 6/PRECISION*TMP6 * TMP8 EQU PRECISION/8 PX8 EQU 8/PRECISION*TMP8 * TMP10 EQU PRECISION/10 PX10 EQU 10/PRECISION*TMP10 * TMP12 EQU PRECISION/12 PX12 EQU 12/PRECISION*TMP12 * TMP14 EQU PRECISION/14 PX14 EQU 14/PRECISION*TMP14 * TMP16 EQU PRECISION/16 PX16 EQU 16/PRECISION*TMP16 * TMP40 EQU PRECISION/40 PX40 EQU 40/PRECISION*TMP40 * * * * I/O BUFFERS * LINMAX EQU 133 CHARACTERS PER INPUT RECORD * FOR WMAX, PREC/3 IS FOR COMMAS, 15 IS FOR EXP,SIGN,$,.,+ SOME WMAX EQU PRECISION/3+PRECISION+15 THE MAX WIDTH OF AN FP NUMBER * * CHARACTERS * CR EQU 00DH NULL EQU 000H BS EQU 07FH LF EQU 00AH ESC EQU 000H EOF EQU 001H KCAN EQU 018H KION EQU 017H KIOFF EQU 01AH KRIGHT EQU 013H KLEFT EQU 001H KLF EQU 00AH KESC EQU 01BH IF PTDOS COPY NPTDEFS/0 SYSIN EQU CONIN SYSTS EQU CONTST ENDF IF SOLOS SYSIN EQU 0C01FH SYSOT EQU 0C019H SYSTS EQU SYSIN AOUT EQU 0C01CH ENDF * * NTYPE EQU 0*16 STYPE EQU 1*16 NFTYPE EQU 2*16 SFTYPE EQU 3*16 MTYPE EQU 4*16 COMVD EQU 1*128 * * * THE CONTROL STACK (CS) * STESIZ EQU 2+FPSIZ FORSZ EQU FPSIZ*2+2+2+1 ETYPE EQU 0 FRTYPE EQU ETYPE+1 GTYPE EQU FRTYPE+1 ANTYPE EQU GTYPE+1 EFTYPE EQU ANTYPE+1 SBTYPE EQU EFTYPE+1 FNTYPE EQU NFTYPE FSTYPE EQU SFTYPE * * * ASCF 0 IF SOLOS ORG 0000H ENDF IF PTDOS IF M48K ORG 0100H NO MEMORY AT D000 ENDF IF M60K ORG 0D040H ORG PAST WHERE VDM DRIVER CLEARS. ENDF ENDF * * * * THE COMMAND INTERPRETER * * COPY BSM:CMDI/1 * * * THE PARSER * * COPY BSM:PARS/1 * * * THE INTERPRETER DRIVER * * COPY BSM:IDVR/1 * * * THE LINE EDITOR * * COPY BSM:EDIT/1 * * * THE COMMANDS * * COPY BSM:CMDS/1 * * * THE PROGRAM STORAGE COMMANDS * * COPY BSM:DPSS/1 * * * THE "BASIC" STATEMENTS * * COPY BSM:STM1/1 COPY BSM:STM2/1 COPY BSM:STM3/1 * * * THE FILE RELATED STATMENTS * * COPY BSM:FIL1/1 COPY BSM:FIL2/1 * * * THE EXPRESSION EVALUATOR * * COPY BSM:EXPR/1 * * * THE LOGICAL OPERATORS * * COPY BSM:LGIC/1 * * * THE MATH PACKAGE * * COPY BSM:MATH/1 * * * THE FUNCTIONS * * COPY BSM:FUN1/1 * * * THE VARRIABLE AND CONSTANT HANDLERS * * COPY BSM:VARC/1 * * * THE CONVERSION ROUTINES * * COPY BSM:CVT1/1 * IF M60K MUST SPLIT THE PROGRAM AT 0000 IF $+1/1000H-0FH IF $ IS > FFFE (SORT OF) THEN ERROR. AN ERROR! PROGRAM RUNS PAST FFFE! ENDF ORG 100H ENDF * COPY BSM:CVT2/1 * * * THE INPUT/OUTPUT HANDLERS * * COPY BSM:DIO/1 * * * THE ERROR PROCESSOR * * COPY BSM:ERR/1 * * * THE MISCELLANEOUS ROUTINES * * COPY BSM:MSCS/1 * * * THE USER'S PROGRAM SPACE * * BOFA DW XEND+1 BEGINING OF USER'S AREA EOFA DW XEND+1 END OF USER'S AREA MEMTOP DW 0000H LAST AVAILABLE WORD TO USER (SET BY INIT) * * * THE EXTENDED MATH FUNCTIONS * * XFUNS EQU $ COPY BSM:FUN2/1 * * XMAT EQU $ COPY BSM:MCT/1 COPY BSM:MCT3/1 * * THE END * XEND DB CR * * * THE INITIALIZATION CODE * * COPY BSM:INIT/1 * * * THE ONCE ONLY CODE * * COPY BSM:ONCE/1 * * END