File F4.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/4 OS/8 FORTRAN  (PASS ONE)
/
/ VERSION 4A  PT  16-MAY-77
/
/	OS/8 FORTRAN COMPILER - PASS 1
/
/	BY:  HANK MAURER
/	UPDATED BY: R.LARY + M. HURLEY
/
/
/COPYRIGHT  (C)  1974,1975 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
VERSON=4

/CHANGES FOR MAINTENANCE RELEASE (S.R.): /1. BUMPED VERSION NUMBER TO 304 /2. INCLUDED PATCH SEQ #4 (OCT DSN) FOR SF ERROR FIX /3. INCLUDED PATCH SEQ #6 (TEMP VARS IN ASF) /4. FIXED PROBLEM IN DATA STATEMENT /5. STOPPED HALT AFTER OT ERROR BY CONVERTING LOGICAL / VARS TO INTEGER IN ARITHMETIC IF STATEMENT /6. FIXED BUG RE /A AND .RA EXTENSION /LAST MINUTE CHANGES: /7. ALLOWED PARITY INPUT /8. IGNORE NULLS ON INPUT /9. FIXED BUG RE IGNORING LAST LINE IF IN ERROR / OR IN FACT IGNORING ANY LAST LINE IF NO END STATEMENT /10. ALLOW MULTIPLE INPUT FILES / / /CHANGES FOR OS/8 V3D AND OS/78 BY P.T. / .PATCH LEVEL NOW CONTAINED IN LOCATION 1130
*7 LINENO, 1 /2.01/ LINE NUMBER X10, 0 /AUTO INDEX REGISTERS X11, 0 X12, 0 NEXT, FREE-1 /FREE SPACE POINTER STACK, STACKS-1 /STACK POINTER CHRPTR, 0 /INPUT BUFFER POINTER X16, 0 X17, 0 STKLVL, STACKS-1 /STACK BASE LEVEL BUCKET, 0 /FIRST CHAR OF NAME WORD1, 0 /SIX WORD LITERAL BUFFER WORD2, 0 WORD3, 0 WORD4, 0 WORD5, 0 WORD6, 0 ACO, 0 /FLOATING AC OVERFLOW WORD OP1, 0 /SEVEN WORD OPERAND FOR "NUMBER" OP2, 0 OP3, 0 OP4, 0 OP5, 0 OP6, 0 OPO, 0 CHAR, 0 /ICHAR PUTS CHARACTER HERE NOCODE, 0 /IS 1 IF CODE GENERATION OFF NCHARS, 0 /SIZE OF INPUT LINE NUMELM, 0 /NUMBER OF VARS IN TYPED LIST TEMP, 0 TEMP2, 0 DECPT, 0 /SET 1 IF NUMBER CONTAINED . ESWIT, 0 /1 FOR E 0 FOR D NDIGIT, 0 /NUMBER OF DIGITS TO RIGHT OF . HCHAR, HCOUNT /HOLLERITH GETTER ROUTINE SNUM, 0 /POINTER TO ST ENTRY FOR STMT NUMBER IFSWIT, 0 /=1 IF INSIDE LOGICAL IF EXPON, 0 /HOLDS EXPONENT FOR CONVERSION TMPFIL, 0617;2224;2216;2415 /PASS1 OUTPUT FILE 0;0;0;0 /PASS2 OUTPUT FILE DOEND, 0 /SET 1 IF THIS STMT WAS A IF, /GOTO, RETURN, PAUSE, OR STOP THSNUM, 0 /CURRENT STATEMENT NUMBER DIMNUM, 0 /LINEARIZED SS FOR EQ DPRDCT, 0 /HOLDS DIMENSION PRODUCT EQTEMP, 0 /TEMP FOR EQUIVALENCE MQ, 0 /MQ FOR 12 BIT MULTIPLY MASTER, 0 /POINTER TO MASTER IN EQUIV GROUP MNUM, 0 /LINEARIZED SS FOR MASTER NSLAVE, 0 /NUMBER OF SLAVES IN GROUP PASS2O, 0 /START OF PASS 2 OVERLAY SECTION OUFILE, 0 /START OF PASS1 OUTPUT FILE DSERES, 0 /MAGIC NUMBER PROGNM, MAIN /POINTER TO PROG NAME ARGLST, 0 /POINTER TO ARG LIST FUNCTN, 0 /0=MAIN, 1=FUNCTION, -2=SUBROUTINE SETBIT, 0 /TEMPS FOR DECLARATION SCANNER BADBIT, 0 DOINDX, 0 /POINTER TO DO INDEX FOR DO LOOPS TLTEMP, 0 /TEMP FOR TYPE ROUTINE OWTEMP, 0 /TEMP FOR OUTWRD CNT72, -102 /72 COLUMN COUNTER DPUSED, 0 /=1 IF DOUBLE HARDWARE USED VERS, VERSON /VERSION NUMBER M211, -211 P211, 211 P240, 240 IXLNP5, LINE+5 /** IXLINE, LINE IXLINM, LINE-1 STMJMP, 0 /FOR DEFINE FILE
/ OPCODES AND EQUS MAXHOL=100 /MAXIMUM HOLLERITH LITERAL COMREG=4600 /INTER-PASS COMMUNICATION REGION STACKS=4700 /STACK AREA NAME1=6200 /NAME AND HOLLERITH BUFFER (WAS 6400)** LINE=6300 /LINE BUFFER (WAS 6500)** INBUF=6600 /INPUT BUFFER (FIELD 1) OUBUF=7200 /OUTPUT BUFFER (DITTO) INDEVH=7200 /INPUT DEVICE HANDLER (WAS 7400)** PAUSOP=22 DPUSH=PAUSOP+1 BINRD1=DPUSH+1 /OPCODE DEFINITIONS FMTRD1=BINRD1+1 RCLOSE=FMTRD1+1 DARD1=RCLOSE+1 BINWR1=DARD1+1 FMTWR1=BINWR1+1 WCLOSE=FMTWR1+1 DAWR1=WCLOSE+1 DEFFIL=DAWR1+1 ASFDEF=DEFFIL+1 ARGSOP=ASFDEF+1 EOLCOD=ARGSOP+1 ERRCOD=EOLCOD+1 RETOPR=ERRCOD+1 REWOPR=RETOPR+1 STOROP=REWOPR+1 ENDOPR=STOROP+1 DEFLBL=ENDOPR+1 DOFINI=DEFLBL+1 ARTHIF=DOFINI+1 LIFBGN=ARTHIF+1 DOBEGN=LIFBGN+1 ENDFOP=DOBEGN+1 STOPOP=ENDFOP+1 ASNOPR=STOPOP+1 BAKOPR=ASNOPR+1 FMTOPR=BAKOPR+1 GO2OPR=FMTOPR+1 CGO2OP=GO2OPR+1 AGO2OP=CGO2OP+1 IOLMNT=AGO2OP+1 DATELM=IOLMNT+1 DREPTC=DATELM+1 DATAST=DREPTC+1 ENDELM=DATAST+1 PRGSTK=ENDELM+1 DOSTOR=PRGSTK+1 / ASSEMBLE STATEMENT PAGE RDLOOP, CIF 10 /FOR OS/8 2 PG HANDLERS** JMS I [ICHAR /GET CHAR FROM INPUT FILE JMP ENDLIN /END LINE OR CR TAD M211 /CHECK FOR TAB** SNA TAD (240-211 /CONVERT TO BLANK TAD P211 /** DCA I CHRPTR /SAVE CHAR ISZ CNT72 /PAST COLUMN 72 ? SKP JMP SKPLIN /SKIP 73 TO 80 TAD CHRPTR CIA CLL TAD (LINE+670 SZL CLA /TEST FOR TOO MANY CONTINUATIONS JMP RDLOOP JMS I [ERMSG /LINE TOO LONG 1424 SKPCOM, TAD X16 /RESTORE CHRPTR DCA CHRPTR SKPLIN, CIF 10 /** JMS I [ICHAR /SKIP REST OF LINE JMP ENDLIN CLA JMP SKPLIN ENDLIN, TAD CHRPTR /SAVE CHAR POSITION DCA X16 TAD CHRPTR DCA X10 /SAVE POSITION FOR COMMENT CHECK TAD (-102 /SET COLUMN COUNT DCA CNT72 TAD M6 DCA NCHARS GET6, CIF 10 /** JMS I [ICHAR /GET FIRST 6 CHARS JMP SHORTL /IGNORE SHORT LINES TAD M211 /IS CHAR A TAB ? ** SZA CLA JMP NOTAB /NO TAD P240 /TREAT FIRST TAB AS SIX BLANKS DCA I CHRPTR ISZ NCHARS JMP .-3 TAD P240 /FAKE CONTINUATION CHECK DCA CHAR JMP CCHECK /GO TO COMMENT CHECK SHORTL, TAD X16 /RESET CHAR POINTER DCA CHRPTR /TO IGNORE SHORT LINES JMP ENDLIN NOTAB, TAD CHAR DCA I CHRPTR ISZ NCHARS JMP GET6 /LOOP CCHECK, TAD I X10 /IS IT A COMMENT ? TAD (-303 SNA CLA JMP SKPCOM /COMMENT, SKIP REST NOCMNT, TAD CHAR /WAS SIXTH CHAR A BLANK ? TAD MMM240 SNA CLA JMP GOTLIN /YES, NO MORE CONTINUATIONS CCARD, TAD X16 /IGNORE THESE SIX CHARACTERS DCA CHRPTR JMP RDLOOP /CONTINUE WITH THIS LINE GOTLIN, TAD CHRPTR /COMPUTE -NCHARS-1 CIA TAD (LINE+4 DCA NCHARS TAD [LINE-1 /RESET CHAR POINTER DCA CHRPTR JMS I [CKCTLC /CHECK FOR CONTROL C LINE1, DCA THSNUM /ZERO CURRENT STMT NUMBER CLL CML RAR /SET LABEL DEFINE BIT JMS I [STMNUM /GO LOOK FOR LABEL JMP COMPIL /NONE THERE TAD SNUM /SAVE STATEMENT NUMBER DCA THSNUM TAD (DEFLBL /OUTPUT DEFINITION FOR THIS LABEL JMS I [OUTWRD TAD SNUM JMS I [OUTWRD /FOLLOWED BY THE LABEL ADDRESS COMPIL, JMS I [SAVECP ISZ LINENO /2.01/ PUT LINE NUMBER TAD LINENO /2.01/ INTO MQ 7421 /2.01/ CLA IAC DCA NOCODE /SET NOCODE SWITCH JMS I [ERMSG /SET UP DEFAULT ERROR MESSAGE 1513 JMS I [LEXPR /IS IT ARITHMETIC ? JMP NOTAR /NO JMS I [GETC /LOOK FOR = JMP NOTAR /NOT ARITHMETIC TAD MMM275 /= SNA CLA JMS I [EXPR /SCAN LEFT PART JMP NOTAR JMS I [ERMSG /SET MESSAGE TO ILLEGAL OPERATOR 1720 ISZ NCHARS /SHOULD BE NOTHING LEFT JMP NOTAR /IF THERE IS, ITS NOT ARITHMETIC ITSAR, JMS I [RESTCP /RESTORE TO START OF LINE DCA NOCODE /ALLON CODE JMS I [LEXPR /GET LEFT SIDE M6, -6 /V3C MUST BE HERE JMS I [GETC /SKIP = MMM240, -240 /SHOULD NEVER GET HERE CLA JMS I [EXPR /GET RIGHT SIDE MMM275, -275 /SHOULD NEVER GET HERE TAD (STOROP /OUTPUT STORE JMS I [OUTWRD JMP I [NEXTST /DO NEXT LINE NOTAR, JMS I [RESTCP /RESTART LINE DCA NOCODE JMS I [SAVECP /RESAVE CHAR POSITION TAD (CMDLST-1 DCA X10 JMP I (CMDLUP /GO SEARCH FOR KEYWORD
/ KEYWORD SEARCH PAGE CMDLUP, CDF 10 /TABLE IN FIELD ONE TAD I X10 /GET NEXT 2 CHARS OF KEYWORD SZA JMP CMDLP2 /NOT DONE YET CLL CMA RAL /REMOVE CHAR POS FROM STACK TAD STACK DCA STACK TAD I X10 /GET ROUTINE ADDRESS CDF DCA STMJMP JMP I STMJMP /JUMP TO THE ROUTINE CMDLP2, DCA TEMP /SAVE THE TWO CHARS CDF JMS I [GET2C /GET TWO CHARS FROM THE INPUT JMP .+4 /NOT ENOUGH CHARS, CAN'T BE THIS ONE TAD TEMP /COMPARE SNA CLA JMP CMDLUP /MATCHES, KEEP GOING JMS I [RESTCP /RESTORE CHAR POS ISZ STACK ISZ STACK /AND SAVE IT AGAIN CDF 10 TAD I X10 /FIND END OF THIS COMMAND SZA CLA JMP .-2 ISZ X10 /SKIP ROUTINE ADDRESS TAD I X10 /IS THE LIST EXHAUSTED ? SZA JMP CMDLP2 /NO, GO AGAIN BADCMD, JMS I [ERMSG /TREAT AS BAD ARITHMETIC STMT ERCODE, 0
/ END OF STMT PROC NEXTLN, NEXTST, DOENDR, TAD STKLVL /RESET STACK POINTER DCA STACK JMS I [POP /LOOK FOR DO END CIA TAD THSNUM /DOES THIS LINE END A DO LOOP ? SZA CLA JMP NODOND /NO, REPLACE STACK AND COMPILE STMT TAD (DOFINI JMS I [OUTWRD /OUTPUT DO END COMMAND JMS I [POP /GET INDEX VARIABLE JMS I [OUTWRD TAD STACK /RESET STACK BASE LEVEL DCA STKLVL TAD DOEND /WAS THIS A LEGAL ENDING STMT ? SZA CLA JMS I [ERMSG 0504 /DO END ERROR DCA DOEND /KILL SWITCH JMP DOENDR NODOND, ISZ STACK /REPLACE STACK ENTRY DCA DOEND /KILL SWITCH TAD (EOLCOD /OUTPUT EOL CODE JMS I [OUTWRD DCA ERCODE /RESET ERROR CODE DCA IFSWIT /KILL IF SWITCH TAD (-6 /MOVE FIRST 6 CHARS DCA NCHARS TAD [LINE-1 /INTO START OF BUFFER DCA CHRPTR TAD I X16 DCA I CHRPTR ISZ NCHARS JMP .-3 JMP I (RDLOOP
/ GOTO'S GOTO, ISZ DOEND /DO END ILLEGAL JMS I [STMNUM /IS IT A SIMPLE GOTO ? JMP CMPGO2 /NO, SEE IF ITS A COMPUTED ONE TAD (GO2OPR /OUTPUT GOTO OPERATOR JMS I [OUTWRD TAD SNUM /FOLLOWED BY STMT NUMBER JMS I [OUTWRD JMP I [NEXTST CMPGO2, JMS I [GETC /LOOK FOR ( JMP BADGO2 /BAD GOTO TAD (-250 SZA CLA JMP ASNGO2 /NOT ( , MAYBE ITS AN ASSIGNED GOTO TAD STACK /SAVE STACK POSITION DCA X12 DCA TEMP /ZERO BRANCH COUNTER GO2LUP, JMS I [STMNUM /GET NEXT STMT NUMBER JMP BADGO2 /MUST BE THERE TAD SNUM JMS I [PUSH /SAVE IT TEMPORARILY ISZ TEMP /BUMP BRANCH COUNT JMS I [COMARP /LOOK FOR COMMA OR RIGHT PAREN JMP BADGO2 /NEITHER JMP GO2LUP /COMMA, GO GET NEXT LABEL JMS I [GETC /SKIP NEXT CHAR (ITS A COMMA) JMP BADGO2 CLA TAD TEMP /SAVE COUNT JMS I [PUSH /ON STACK JMS I [EXPR /COMPILE INDEX EXPR JMP I [NEXTST TAD (CGO2OP /OUTPUT COMPUTED GOTO OPERATOR JMS I [OUTWRD JMS I [POP /GET COUNT CIA DCA TEMP /SAVE COMPLEMENT TAD TEMP CIA JMS I [OUTWRD /OUTPUT COUNT TAD X12 /RESTORE STACK POINTER DCA STACK TAD I X12 /MOVE STMT NUMBERS TO OUTPUT JMS I [OUTWRD ISZ TEMP JMP .-3 JMP I [NEXTST ASNGO2, JMS I [BACK1 /PUT BACK NON ( JMS I [LEXPR /GET ASSIGN VAR JMP BADGO2 TAD (AGO2OP /OUTPUT GOTO OPERATOR JMS I [OUTWRD JMP I [NEXTST BADGO2, JMS I [ERMSG 0724 JMP I [NEXTST
/ I/O STATEMENTS PAGE RDWR, 0 /SUBR FOR IO STATEMENTS JMS I [CHECKC /LOOK FOR ( M250, -250 JMP BADRD JMS I [EXPR /COMPILE UNIT JMP I [BADCMD JMS I [COMARP JMP DAQUOT /LOOK FOR ' (DIRECT ACCESS I/O) JMP RDFMT /, TAD (BINRD1 /FORMATLESS READ/WRITE IOSTRT, TAD I RDWR /ADD ADJUSTOR JMS I [OUTWRD /OUTPUT BINARY READ IOLIST, JMS I [PUSH /MARK STACK JMS I [GETC /IS IT AN IMPLIED DO ? JMP ENDIOL /NO, END OF LIST TAD M250 SZA CLA JMP TRYIOE /NO, LOOK FOR IO ELEMENT JMS I [SAVECP /SAVE CHAR POS AT START OF IDO DCA IDOPAR /ZERO PAREN COUNTER FINDND, JMS I [GETNAM /GET A NAME IF THERE IS ONE XPURGE, PRGSTK /DON'T WORRY ITS A NOP JMS I [GETC /GET A CHAR JMP ENDIOL TAD M251 /IS IT A ) ? SNA JMP RPIOL /YES IAC /IS IT ( ? SNA JMP LPIOL /YES TAD (250-275 /IS IT = ? SZA CLA JMP FINDND /NONE OF THESE TAD IDOPAR /IS PAREN COUNT 0 ? SZA CLA JMP FINDND /NO, ITS FROM AN INNER LOOP JMS I [LOOKUP /THIS ELEMENT IS THE DO INDEX DCA DOINDX JMS I (DOSTUF /COMPILE THE LOOP JMP BADIOL /ERROR IN DO PARMS JMS I [CHECKC /MUST HAVE ) -251 JMP BADIOL TAD CHRPTR /SAVE CHAR POSITION DCA TEMP TAD NCHARS DCA TEMP2 JMS I [RESTCP /RESTORE TO START OF IMPLIED LOOP TAD TEMP2 /NOW SAVE POS AFTER LOOP JMS I [PUSH TAD TEMP JMS I [PUSH TAD DOINDX /AND DO INDEX JMP IOLIST LPIOL, ISZ IDOPAR /( INCREASES COUNT JMP FINDND RPIOL, CMA /) DECREASES COUNT TAD IDOPAR SMA JMP FINDND-1 CLA BADIOL, BADRD, JMS I [ERMSG /BAD IO STMT 2227 JMP I [NEXTST TRYIOE, JMS I [BACK1 /PUT BACK NON ( JMS I [LEXPR /GET IOLIST ELEMENT JMP BADRD /NOT THERE, ERROR JMS I [GETC /LOOK FOR A COMMA JMP .+4 /EOL TAD (-254 SZA JMP NOTIOL /NOT AN ELEMENT TAD (IOLMNT /OUTPUT OPCODE JMS I [OUTWRD JMP IOLIST+1 NOTIOL, TAD (254-275 /IS IT AN = (END OF IDO) SZA CLA JMP BADIOL /NO, BAD JMS I [POP /GET STUFF FROM THE STACK SNA JMP BADIOL /ZERO IS BAD DCA DOINDX /THIS IS THE INDEX JMS I [RESTCP /GET THE CHAR POSITION TAD XPURGE /OUTPUT PURGE OPERATOR JMS I [OUTWRD /BECAUSE AN EXTRA IS ON THE STK TAD (DOFINI /END LOOP JMS I [OUTWRD TAD DOINDX JMS I [OUTWRD JMS I [GETC /END OF LIST ? JMP ENDIOL TAD (-254 SZA CLA JMP BADIOL /MUST BE A COMMA JMP IOLIST+1 IDOPAR, 0 ENDIOL, JMS I [POP /IS THE MARK THERE ? SZA CLA JMP BADRD /NO, ERROR TAD I RDWR TAD (RCLOSE /END OF IO OPERATION JMS I [OUTWRD JMP I [NEXTST RDFMT, JMS I [STMNUM /LOOK FOR FMT LINE NUMBER JMP RTFMT JMS I [OUTWRD /OUTPUT PUSH COMMAND TAD SNUM /OUTPUT STMT NUMBER OF FORMAT JMS I [OUTWRD RDLIST, TAD (FMTRD1 /START OF FORMATTED READ TAD I RDWR /ADD ADJUSTOR JMS I [OUTWRD JMS I [CHECKC /LOOK FOR ) M251, -251 JMP BADRD JMP IOLIST /GO GET IO LIST RTFMT, JMS I [LEXPR /GET R.T. FORMAT JMP BADRD JMP RDLIST /GET LIST
/DIRECT ACCESS I/O PAGE DAQUOT, JMS I [BACK1 JMS I [CHECKC /LOOK FOR ' -247 JMP BADRD /SYNTAX IS NO GOOD JMS I [EXPR /GET RECORD NUMBER EXPR JMP BADRD JMS I [CHECKC /LOOK FOR ) -251 JMP BADRD TAD (DARD1 /DIRECT ACCESS OPEN JMP IOSTRT FIND, JMP I [NEXTST /COOL ISN'T IT ? DFINFL, JMS I [EXPR /COMPILE UNIT JMP BADDEF /BAD DEFINE STMT DCA STMJMP /PERMIT VARIABLE FOR LOG UNIT JMS I [CHECKC /( -250 JMP BADDEF JMS I [EXPR /NUMBER OF RECORDS JMP BADDEF JMS I [CHECKC /, -254 JMP BADDEF JMS I [EXPR /RECORD SIZE JMP BADDEF JMS I [CHECKC /, -254 JMP BADDEF JMS I [CHECKC /U -325 JMP BADDEF JMS I [CHECKC /, MCOMA, -254 JMP BADDEF JMS I [GETNAM /GET INDEX VARIABLE JMP BADDEF JMS I [OUTWRD JMS I [LOOKUP JMS I [OUTWRD /OUTPUT INDEX VAR TAD (DEFFIL /OUTPUT DEFINE OPERATOR JMS I [OUTWRD JMS I [CHECKC /) -251 JMP BADDEF JMS I [GETC /ANOTHER DEFINE ? JMP I [NEXTST TAD MCOMA /, ? SNA CLA JMP DFINFL /YES, ANOTHER FILE BADDEF, JMS I [ERMSG /BAD DEFINE FILE STMT 0406 JMP I [NEXTST RESTCP, 0 /RESTORE CHAR POSITION FROM STACK JMS I [POP DCA CHRPTR JMS I [POP DCA NCHARS JMP I RESTCP INTEGE, JMS I [CHECKC /INTEGER STMT -322 JMP I [BADCMD JMS I [TYPLST 0101 0100 NOP JMP I [NEXTST PAUZE, JMS I [CHECKC /LOOK FOR E -305 JMP I [BADCMD JMS I [GETC /ANY EXPR ? JMP NOARGP /MAKE IT PAUSE 1 JMS I [BACK1 /PUT IT BACK JMS I [EXPR /GET PAUSE NUMBER XPAUZ, PAUSOP OPAUZ, TAD XPAUZ /OUTPUT PAUSE OPERATOR JMS I [OUTWRD JMP I [NEXTST NOARGP, JMS I [OUTWRD /PUSH 1.0 TAD [ONE JMS I [OUTWRD JMP OPAUZ /GO PUT OPERATOR READ, JMS I (RDWR /COMPILE READ STMT 0 WRITE, JMS I [CHECKC /LOOK FOR E -305 JMP I [BADCMD JMS I (RDWR /COMPILE WRITE BINWR1-BINRD1 CKCTLC, 6401 /CHECK FOR CONTROL C TAD (7600 KRS TAD (-7603 /^C SNA CLA KSF JMP I CKCTLC JMP I (7600 XOCTAL, DCA WORD1 /** DCA WORD2 DCA WORD3 /STATEMENT NUM LEFT THERE** DCA WORD5 DCA WORD6 XCTAL1, DCA WORD4 JMS I [DIGIT /GET NEXT DIGIT JMP ENDOXT /NO DIGITS LEFT AND [7 /THROW AWAY SOME BITS DCA TEMP JMS I (AL1 /MOVE WORD LEFT THREE JMS I (AL1 JMS I (AL1 TAD WORD4 /ADD DIGIT TO WORD4 TAD TEMP JMP XCTAL1 /LOOP ENDOXT, TAD WORD2 /PUT WORDS INTO THE LEFT PLACE DCA WORD1 TAD WORD3 DCA WORD2 TAD WORD4 DCA WORD3 JMP DATAFP /GO STUFF IT AWAY
/ DIMENSION, COMMON, REAL PAGE DIMENS, JMS I [IFCHEK JMS I [CHECKC /CHECK FOR "N" -316 JMP I [BADCMD /NO GOOD JMS I [TYPLST /PROCESS LIST 0000 /DIMENSION IS THE SIMPLEST CASE 0000 NOP /ERROR RETURN JMP I [NEXTST REAL, JMS I [IFCHEK /CHECK FOR INSIDE IF JMS I [TYPLST /PROCESS LIST 0102 /TYPE-REAL 0100 NOP JMP I [NEXTST COMPLE, JMS I [CHECKC /CHECK FOR "X" -330 JMP I [BADCMD JMS I [IFCHEK JMS I [TYPLST /PROCESS COMPLEX LIST 0103 0100 NOP CLA IAC /SET DP SWITCH DCA DPUSED JMP I [NEXTST COMMON, JMS I [IFCHEK /BAD INSIDE LOGICAL IF JMS I [GETC /CHECK FOR SLASH JMP I [BADCMD TAD M257 SZA CLA JMP BLANKC /MUST BE BLANK COMMON JMS I [GETNAM /GET NAME OF COMMON JMP DBLSLS /MIGHT BE // JMS I [CHECKC /LOOK FOR / M257, -257 JMP BADCOM JMS I [LOOKUP /LOOKUP COMMON NAME IAC DCA COMNAM /SAVE ADDR OF TYPE WORD CDF 10 TAD I COMNAM /LOOK AT TYPE SZA TAD (-111 /MUST BE COMMON OR UNDEF. SZA CLA JMP BADCOM TAD (111 /SET CORRECT BITS DCA I COMNAM CDF DOCOMN, JMS I [TYPLST /HANDLE LIST 4000 5460 JMP I [NEXTST TAD X12 DCA STACK /RESET STACK CDF 10 ISZ COMNAM /POINTER TO COMMON INFO DCA I NEXT /ZERO NEXT PTR WORD TAD I COMNAM /LOOK FOR END OF LIST SNA JMP EOCL /THIS IS IT DCA COMNAM /PROCEED DOWN LIST JMP .-4 EOCL, TAD NEXT /HOOK IN NEXT PART DCA I COMNAM TAD NUMELM DCA I NEXT /NUMBER IN THIS PART TAD NUMELM CIA DCA NUMELM CDF TAD I X12 /MOVE VARIABLE PTRS CDF 10 DCA I NEXT ISZ NUMELM JMP .-5 CDF JMS I [GETC /ANOTHER BLOCK ? JMP I [NEXTST /NO JMP COMMON+3 /MAYBE DBLSLS, JMS I [CHECKC /LOOK FOR SECOND SLASH -257 JMP BADCOM SKP BLANKC, JMS I [BACK1 /PUT BACK NON SLASH TAD (BLNKCN /USE BLANK COMMON DCA COMNAM JMP DOCOMN BADCOM, JMS I [ERMSG /ERROR IN COMMON STMT 0317 JMP I [NEXTST COMNAM, 0
/ EXTERNAL, FORMAT, BACKSPACE EXTERN, JMS I [TYPLST /PROCESS LIST 1000 6660 NOP JMP I [NEXTST FORMAT, TAD (FMTOPR /OUTPUT FORMAT OPERATOR JMS I [OUTWRD TAD NCHARS /GET NUMBER OF WORDS CIA CLL RAR /NWORDS=(NCHARS+1)/2 FMTLUP, JMS I [OUTWRD /OUTPUT IT JMS I [GETCWB /GET THE CHARS JMP I [NEXTST /NO MORE AND [77 CLL RTL /SHIFT LEFT 6 RTL RTL DCA TEMP JMS I [GETCWB /GET OTHER HALF NOP /IGNORE END OF LINE AND [77 TAD TEMP /PUT THEM TOGETHER JMP FMTLUP /LOOP /NOTE : THE ENTIRE FORMAT INCLUDING PARENTHESIS () / IS PASSED TO THE CODE BACKSP, JMS I [CHECKC /CHECK FOR "E" -305 JMP I [BADCMD JMS I [EXPR /COMPILE UNIT EXPR JMP I [BADCMD TAD (BAKOPR /OUTPUT BACKSPACE OPERATOR JMS I [OUTWRD JMP I [NEXTST
/ OUTPUT ROUTINE PAGE OUPTR, OUBUF OCOUNT, -401 OUTWRD, 0 /OUTPUT ROUTINE DCA OWTEMP /SAVE WORD TAD NOCODE SZA CLA JMP I OUTWRD /COOL IT IF NOCODE ISZ OCOUNT /TEST FOR BUFFER FULL JMP NOWRIT /STILL SOME ROOM JMS OUDUMP /DUMP THE BUFFER TAD OUBLOK-1 /RESET BUFFER PARAMETERS DCA OUPTR TAD (-400 DCA OCOUNT NOWRIT, TAD OWTEMP /PUT WORD CDF 10 DCA I OUPTR /INTO BUFFER CDF ISZ OUPTR /MOVE POINTER JMP I OUTWRD OULEN, 0 /NUMBER OF BLOCKS LEFT IN HOLE OUDUMP, 0 /DUMP OUT BUFFER TAD OULEN /ANY ROOM LEFT ? SNA JMP OUERR IAC DCA OULEN JMS I (7607 /CALL SYSTEM HANDLER 4210 OUBUF OUBLOK, 0 JMP OUERR ISZ OUBLOK /INCREMENT BLOCK NUMBER ISZ FILSIZ /ALSO SIZE OF FILE JMP I OUDUMP OUERR, JMS I [MESSAG /ERROR IN WRITING OR OPENING FILE 317 306
/ END PASS ONE XEND, JMS I [CHECKC /LOOK FOR "D" -304 JMP I [BADCMD JMS I [GETC /END MUST BE ALL JMP ENDX L7700, SMA CLA /NEVER SKIPS JMP I [BADCMD ENDX, CDF 0 TAD (ENDOPR /OUTPUT END OF FILE JMS I [OUTWRD JMS OUDUMP /DUMP BUFFER CIF 10 JMS I L7700 /LOCK MONITOR IN 10 CIF 10 CLA IAC JMS I L200 /CLOSE TEMP FILE 4 TMPFIL FILSIZ, 0 JMP OUERR CIF 10 CLA IAC JMS I L200 /OPEN PASS 2 OUTPUT FILE L3, 3 OBLK, TMPFIL+4 /STARTING BLOCK 0 /SIZE JMP OUERR /ERROR TAD (COMREG-1 /SAVE IMPORTANT STUFF DCA X10 TAD NEXT /ADDR OF FREE SPACE DCA I X10 TAD STKLVL /STACK LEVEL DCA I X10 TAD OUFILE /START OF PASS1 OUTPUT FILE DCA I X10 TAD FILSIZ /ALSO THE SIZE DCA I X10 TAD PASS2O /START OF PASS2 OVERLAY DCA I X10 TAD OBLK /START OF PASS2 OUTPUT FILE DCA I X10 TAD OBLK+1 /AND MAX SIZE DCA I X10 TAD PROGNM /POINTER TO PROG NAME DCA I X10 TAD ARGLST /AND ARG LIST DCA I X10 TAD FUNCTN /AND PROG SWITCH DCA I X10 TAD DPUSED /STORE THE DP SWITCH DCA I X10 TAD VERS /AND THE VERSION NUMBER DCA I X10 CIF 10 JMS I L200 /CHAIN TO PASS TWO 6 PASS2B, 0 /FILLED BY ONCE ONLY CODE FOR PASS 1 RETURN, TAD (RETOPR /OUTPUT RETURN CODE JMS I [OUTWRD ISZ DOEND /DO END ILLEGAL HERE JMP I [NEXTST COMARP, 0 /LOOK FOR COMMA OR RIGHT PAREN JMS I [GETC JMP I COMARP TAD [-254 /COMMA ? SNA JMP .+5 TAD L3 /RIGHT PAREN ? SZA CLA JMP I COMARP ISZ COMARP ISZ COMARP /COMMA INCR ONCE JMP I COMARP LOGICA, JMS I [CHECKC /LOOK FOR L -314 JMP I [BADCMD /NO GOOD JMS I [TYPLST /PROCESS LIST 0105 0100 L200, 0200 /NOP JMP I [NEXTST
/ EQUIVALENCE (UGH!) PAGE EQUIV, JMS I [IFCHEK /BAD WITH IF JMS I [CHECKC /LOOK FOR "E" -305 JMP I [BADCMD EQVLUP, JMS I [CHECKC /LOOK FOR ( -250 JMP BADEQU TAD STACK /SAVE STACK POS DCA X17 DCA NSLAVE /NUMBER OF SLAVES = 0 JMS I [GETSS /GET THE MASTER JMP BADEQU SVMSTR, CDF 10 /1.03/ CHECK FOR ALREADY EQUIVALENCED TAD I TEMP2 /1.03/ CDF /1.03/ AND (200 /1.03/ (AS A SLAVE) SZA CLA /1.03/ JMP DOFUNY /3.01/BACK UP TO ITS MASTER TAD TEMP2 /SAVE THE MASTER TYPE ADDRESS DCA MASTER DCA SFUDGE /3.01/CLEAR OFFSET FUDGE TAD DIMNUM /SAVE THE MASTER SUBSCRIPT DCA MNUM GETSLV, JMS I [COMARP /LOOK FOR , OR ) JMP BADEQU JMP DOSLAV /, TAD NSLAVE /COMPLEMENT THE NUMBER OF SLAVES SNA JMP ENDGRP /NO SLAVES CIA DCA NSLAVE TAD X17 /RESTACK THE STORE DCA STACK EQLOOP, TAD I X17 /GET NEXT SUBSCRIPT NUMBER DCA TEMP TAD I X17 /AND NEXT TYPE WORD ADDRESS DCA TEMP2 CDF 10 TAD I TEMP2 /LOOK AT TYPE WORD TAD (200 /SET EQUIVALENCE BIT DCA I TEMP2 ISZ TEMP2 /MOVE TO EQUIVALENCE/DIMENSION PTR TAD I TEMP2 /PROPAGATE DIMENSION POINTER DCA I NEXT /TO EQUIVALENCE INFO BLOCK TAD NEXT /NOW STORE EQ INFO BLK ADDRESS DCA I TEMP2 /INTO EQ-DIM POINTER WORD CLA CMA TAD MASTER /STORE S.T. ADDR OF MASTER DCA I NEXT /INTO THE EQUIVALENCE BLOCK TAD MNUM /OUTPUT NUMBERS DCA I NEXT TAD TEMP DCA I NEXT CDF ISZ NSLAVE /ANY MORE SLAVES ? JMP EQLOOP /YES, EQUIVALENCE NOT YET ATTAINED ENDGRP, JMS I [GETC /FINI, ALL VARIABLES ARE CREATED JMP I [NEXTST /EQUIVALENCED TAD (-254 /IS NEXT CHAR A COMMA ? SNA CLA JMP EQVLUP /IF YES, DO NEXT GROUP BADEQU, JMS I [ERMSG /SYNTAX ERROR IN EQUIVALENCE 2123 JMP I [NEXTST EQUCOM, JMS I [ERMSG /MULTIPLE LEVELS OF EQUIVALENCE OR 2114 /MORE THAN ONE COMMON VARIABLE JMP I [NEXTST DOSLAV, ISZ NSLAVE /ANOTHER SLAVE VARIABLE JMS I [GETSS /GET THE GOODS JMP BADEQU CDF 10 TAD I TEMP2 /LOOK AT THE TYPE SMA CLA JMP SVSLAV /IT ISN'T IN COMMON TAD I MASTER /LOOK AT THE MASTERS TYPE SPA CLA JMP EQUCOM /MASTER IS IN COMMON TOO .. BAD CDF TAD MNUM /SAVE THE MAGIC NUMBER JMS I [PUSH TAD MASTER JMS I [PUSH /AND THE S.T. ADDRESS JMP SVMSTR /NOW GO MAKE THE NEW ONE MASTER SVSLAV, TAD I TEMP2 /1.03/ PREVIOUSLY EQUIVALENCED ? AND (200 /1.03/ SZA CLA /1.03/ JMP EQUCOM /1.03/ YES, ERROR TAD DIMNUM /SAVE THE NEW SLAVE TAD SFUDGE /3.01/ADD OFFSET FUDGE CDF JMS I [PUSH TAD TEMP2 JMS I [PUSH JMP GETSLV /AND GO GET THE NEXT SLAVE SFUDGE, 0
/ROUTINE TO HANDLE TRIVIAL CASES OF EQUIVALENCE CHAINING /THIS WHOLE PAGE IS 3.01 DOFUNY, CLA IAC TAD TEMP2 DCA MASTER /GET POINTER TO EQUIVALENCE BLOCK CDF 10 TAD I MASTER DCA X12 CLA IAC TAD I X12 /GET ADDRESS OF "REAL" MASTER'S DCA MASTER /TYPE WORD TAD I X12 TAD DIMNUM DCA MNUM /OFFSETS ARE ADDITIVE TAD I X12 DCA SFUDGE /SAVE OTHER HALF OF OFFSET TO ADD CDF /TO SLAVES JMP GETSLV / (PRAY) PAGE
/ EQUIVALENCE (UGH!) O1420, 1420 /1.03/ MUST BE FIRST ON PAGE GETSS, 0 /GET THE LINEARIZED SUBSCRIPT DCA DIMNUM JMS I [GETNAM /GET THE VARIABLE JMP I GETSS JMS I [LOOKUP IAC /ADDRESS OF TYPE WORD DCA TEMP2 CDF 10 TAD I TEMP2 CDF O200, AND O1420 /1.03/ EXT, STMTFUN, SUBARG ? SZA CLA JMP I GETSS TAD STACK DCA X12 /SAVE STACK POSITION DCA TEMP /ZERO NUMBER OF DIMENSIONS TAD TEMP2 IAC DCA EQTEMP /ADDRESS OF EQ-DIM POINTER JMS I [GETC JMP I GETSS TAD (-250 /LOOK FOR ( SNA CLA JMP DIMGET-1 /OK JMS I [BACK1 JMP RGETSS DCA DIMNUM /DATA CALLS GETSS WITH AC = 7777 DIMGET, JMS I (SMLNUM /GET A SUBSCRIPT CLA CMA TAD EXPON /SS-1 JMS I [PUSH /SAVE SS ISZ TEMP /BUMP COUNT OF SS JMS I [COMARP /LOOK FOR , OR ) JMP I GETSS JMP DIMGET /, CLA IAC /) DCA DPRDCT /SET DIMENSION PRODUCT TO 1 TAD X12 /RESTORE STACK POSITION DCA STACK TAD TEMP /COMPLEMENT NUMBER OF SS CIA DCA TEMP CDF 10 CLL CML RTR /2000 AND I TEMP2 /HAS VARIABLE BEEN DIMENSIONED ? SNA CLA JMP I GETSS /NO, THATS BAD TAD I EQTEMP /GET ADDRESS OF DIMENSION BLOCK DCA EQTEMP TAD I EQTEMP /IS NUMBER OF DIMENSIONS TAD TEMP /EQUAL TO NUMBER OF SUBSCRIPTS ? SZA CLA JMP TRY1SS /1.03/ SEE IF ITS ONE SUBSCRIPT CLA CLL IAC /+1 V3C TAD I EQTEMP /+ NUMBER OF DIMENSIONS TAD EQTEMP /+ ADDRESS OF COUNT WORD DCA EQTEMP /GIVES ADDRESS OF NEXT TO LAST DIMENSION LINEAR, CDF TAD I X12 /GET NEXT SS - 1 DCA MQ TAD DPRDCT /MULTIPLY BY THE DIMENSION PRODUCT JMS MUL12 /WHERE D.P. = 1,D1,D1D2,D1D2D3,... TAD DIMNUM /ACCUMULATE THE SUM DCA DIMNUM CDF 10 TAD I EQTEMP /ADDR OF LITERAL IAC DCA X11 /WORKING POINTER TO VALUE TAD I X11 /GET DIMENSION INTO FAC DCA WORD1 TAD I X11 DCA WORD2 TAD I X11 DCA WORD3 CDF JMS I [FIXNUM /GO FIX IT DCA MQ TAD DPRDCT /OF THE D.P. SERIES (ABOVE) JMS MUL12 DCA DPRDCT CLA IAC /V3C BUMP POSITION POINTER TAD EQTEMP DCA EQTEMP ISZ TEMP /ANY MORE SS ? JMP LINEAR /YES RGETSS, ISZ GETSS JMP I GETSS TRY1SS, CLA IAC /1.03/ TAD TEMP /1.03/ ONLY ONE SS ? SZA CLA /1.03/ JMP I GETSS /1.03/ MORE, THATS NO GOOD CDF /1.03/ TAD I X12 /1.03/ GET THE SUBSCRIPT DCA DIMNUM /1.03/ AND RETURN IT JMP RGETSS /1.03/ MUL12, 0 /12 BIT UNSIGNED MULTIPLY DCA OP2 /SAVE OPERAND TAD (-15 /SET SHIFT COUNT DCA SC JMP STMUL M12LUP, TAD AC SNL JMP .+3 CLL TAD OP2 RAR STMUL, DCA AC TAD MQ RAR DCA MQ ISZ SC JMP M12LUP TAD MQ /RETURN VALUE JMP I MUL12 AC=OP3 SC=OP4
/ IF STATEMENTS PAGE IF, JMS I [EXPR /COMPILE CONDITION EXPRESSION JMP I [BADCMD JMS I [STMNUM /IS IT ARITHMETIC IF ? JMP LOGIF TAD (ARTHIF /START IF COMMAND JMS I [OUTWRD CLL CMA RTL DCA TEMP ISZ DOEND /DO END ILLEGAL HERE JMP IFLABL /GET IF LABELS IFLOOP, JMS I [CHECKC /LOOK FOR , -254 JMP I [NEXTST JMS I [STMNUM /GET NEXT STMT NUMBER JMP BADIF IFLABL, TAD SNUM /OUTPUT LABEL JMS I [OUTWRD ISZ TEMP JMP IFLOOP JMP I [NEXTST LOGIF, JMS IFCHEK /IF()IF()... NOT LEGAL ISZ IFSWIT /CLEAR IF SWITCH TAD (LIFBGN /START LOGICAL IF JMS I [OUTWRD JMP I (COMPIL /COMPILE THE STATEMENT DOSWT, IFCHEK, 0 /CHECK IF SWITCH TAD IFSWIT SNA CLA JMP I IFCHEK BADIF, JMS I [ERMSG 1111 JMP I [NEXTST
/ CALL STMT CALL, JMS I [SAVECP /SAVE CHAR POS JMS I [GETNAM /GET SUBROUTINE NAME JMP BADCAL /NO NAME HERE IS BAD JMS I [LOOKUP /GET ADDRESS OF TYPE WORD IAC DCA TEMP CDF 10 TAD I TEMP /LOOK AT TYPE AND (6640 /ANYTHING BUT EXT OR ARG ? SZA CLA JMP BADCAL /YES, BAD TAD I TEMP /SET EXT BIT AND (137 /LEAVE TYPE AND ARG BITS TAD (1000 DCA I TEMP CDF JMS I [RESTCP /RESTORE CHAR POS CLA IAC /SIGNAL THAT THIS IS A CALL JMS I [LEXPR /COMPILE IT XSTORE, DOSTOR /DON'T WORRY VIRGINIA, ITS A NOP TAD OWTEMP /WHAT WAS THE LAST THING OUT ? CLL TAD (-63 /IF LESS THAN 63 SNL CLA JMP I [NEXTST /IT WAS AN ARG COUNT TAD [ARGSOP /OTHERWISE IT WAS AN ARG LESS CALL JMS I [OUTWRD /SO TELL PASS 2 ABOUT IT JMS I [OUTWRD JMP I [NEXTST BADCAL, JMS I [ERMSG 2316 JMP I [NEXTST
/ DO DAH, DO DAH DO, JMS I [IFCHEK /IF(...)DO IS ILLEGAL JMS I [STMNUM /LOOK FOR ENDING STMT NUMBER JMP I [BADCMD JMS I [GETNAM /LOOKUP INDEX VARIABLE JMP I [BADCMD JMS I [LOOKUP DCA DOINDX JMS I [CHECKC /LOOK FOR = -275 JMP I [BADCMD ISZ DOEND /CAN'T END DO LOOP ON A DO JMS DOSTUF /GET DO PARAMETERS JMP BADDO TAD DOINDX /PUSH DO INDEX JMS I [PUSH TAD SNUM /PUSH ENDING STMT NUMBER JMS I [PUSH TAD STACK DCA STKLVL /SAVE NEW STACK BASE JMP I [NEXTST DOSTUF, 0 /SUBR FOR DO LOOP STUFF JMS I [OUTWRD /OUTPUT DO INDEX TAD DOINDX JMS I [OUTWRD JMS I [EXPR /GET EXPR FOR INITIAL VALUE JMP I DOSTUF TAD XSTORE /YES JMS I [OUTWRD JMS I [CHECKC /LOOK FOR COMMA N254, -254 JMP I DOSTUF JMS I [EXPR /GET EXPR FOR FINAL VALUE JMP I DOSTUF JMS I [GETC /LOOK FOR A COMMA JMP STEP1 /USE STEP OF 1 TAD N254 SZA CLA JMP STEP1-1 JMS I [EXPR /GET EXPR FOR STEP JMP I DOSTUF DORET, ISZ DOSTUF TAD (DOBEGN /DO BEGIN OPERATOR JMS I [OUTWRD JMP I DOSTUF JMS I [BACK1 /PUT BACK NON , (OFFICER BELOW LT.) STEP1, JMS I [OUTWRD /OUTPUT A PUSH 1.0 TAD (ONE JMS I [OUTWRD JMP DORET /FINISH DO STUFF BADDO, JMS I [ERMSG /BAD DO COMMAND 0417 JMP I [NEXTST BDERR, JMS I [ERMSG /ILLEGAL IN BLOCK DATA 0223 JMP I [NEXTST
/ TYPE STATEMENT SUBROUTINE PAGE TYPLST, 0 /HANDLE LIST FOR TYPE DELL TAD STACK DCA X12 /SAVE STACK POINTER DCA NUMELM TAD I TYPLST /GET SET BITS DCA SETBIT ISZ TYPLST TAD I TYPLST /AND ILLEGAL BITS DCA BADBIT ISZ TYPLST LSTLUP, JMS I [GETNAM /GET VARIABLE JMP BADLST JMS I [LOOKUP /S.T. SEARCH DCA TLTEMP /SAVE VAR ADDRESS TAD TLTEMP /PUT IT ON THE STACK ISZ TLTEMP /NOW POINT TO TYPE WORD JMS I [PUSH /INCREMENT NUMBER ISZ NUMELM /INCREMENT NUMBER CDF 10 TAD I TLTEMP /COMPARE TYPES AND BADBIT /CHECK FOR ILLEGAL BITS SZA CLA JMP TYPAGN /ATTEMPT TO RE-TYPE TAD SETBIT /GET SET BITS CMA /GENERATE MASK AND I TLTEMP TAD SETBIT /DO THE SET DCA I TLTEMP /BUT NOT DIMENSION BIT CDF GETDIM, JMS I [GETC JMP EOL TAD (-250 /LOOK FOR ( SZA JMP NOTDIM /NOT DIMENSIONED CLA IAC /INITIALIZE MAGIC NUMBER DCA DSERES CLA IAC DCA DPRDCT /AND DIMENSION PRODUCT TAD STACK DCA X17 /SAVE STACK POINTER DCA TEMP2 /DIMENSION COUNT=0 JMP I (DIMLUP /GET DIMENSIONS PUTDIM, TAD X17 DCA STACK /RESTORE STACK CDF 10 TAD (3400 /DIM, EXT, SF ? AND I TLTEMP SZA CLA JMP DIMAGN /ATTEMPT TP RE-DIMENSION CLL CML RTR TAD I TLTEMP /SET DIMENSION BIT DCA I TLTEMP ISZ TLTEMP TAD TEMP2 /NUMBER OF DIMS. DCA I NEXT TAD I TLTEMP /GET EQUIVALENCE POINTER SZA DCA TLTEMP TAD NEXT /STORE POINTER TO DCA I TLTEMP /DIMENSION INFORMATION TAD DPRDCT /SAVE DIM PRODUCT DCA I NEXT TAD DSERES /AND MAGIC NUMBER DCA I NEXT DCA I NEXT /ZERO MAGIC LITERAL POINTER TAD TEMP2 CIA DCA TEMP2 /LEAVE LAST DIM CDF MOVDIM, TAD I X17 /1.03/ GET THE DIMENSION CDF 10 /1.03/ DCA I NEXT /1.03/ INTO THE DIMENSION INFO BLOCK CDF /1.03/ ISZ TEMP2 /1.03/ JMP MOVDIM /1.03/ NEXTEL, JMS I [GETC /LOOK FOR , JMP TLRETN TAD (-254 SNA CLA JMP LSTLUP /OK, GET NEXT MEMBER ENDLST, JMS I [BACK1 ISZ TYPLST JMP I TYPLST BADDIM, JMS I [ERMSG /DIMENSION ERROR 0204 JMP I TYPLST BADLST, JMS I [ERMSG /ERROR IN LIST 2404 JMP I TYPLST TYPAGN, JMS I [ERMSG 2224 /RE-TYPE JMP GETDIM DIMAGN, JMS I [ERMSG /ATTEMPT TO RE DIMENSION 2204 JMP NEXTEL NOTDIM, TAD (250-254 /IS IT A COMMA? SZA CLA JMP ENDLST JMP LSTLUP /GET NEXT ELEMENT EOL, TLRETN, ISZ TYPLST JMP I TYPLST /TAKE OK EXIT ENDFIL, JMS I [CHECKC /LOOK FOR "E" -305 JMP I [BADCMD JMS I [EXPR /COMPILE UNIT JMP I [BADCMD TAD (ENDFOP /OUTPUT ENDFILE OPERATOR JMS I [OUTWRD JMP I [NEXTST DOUBLE, JMS I [CHECKC /LOOK FOR N -316 JMP I [BADCMD JMS I [IFCHEK /NOT ON AN IF JMS I [TYPLST /PROCESS LIST 0104 0100 NOP CLA IAC /SET THE DP SWITCH DCA DPUSED JMP I [NEXTST
/ SYMBOL TABLE LOOKERUPPER PAGE LOOKUP, 0 /SYMBOL TABLE LOOKUP FOR VARIABLE ENTRY TAD NOCODE /IS THIS IN NOCODE MODE ? SZA CLA JMP I LOOKUP /YES, DO NOTHING TAD BUCKET TAD (ALIST-1 /GET START OF CORRECT BUCKET CDF 10 LOOK, DCA OLDN3 /SAVE ADDR OF PREVIOUS ENTRY TAD I OLDN3 /GET ADDR OF NEXT ENTRY SNA JMP HOOKIN /NO NEXT ENTRY, ATTACH NEW ENTRY TAD (2 /SKIP OVER TYPE AND DIM POINTER DCA X10 TAD (NAME1 DCA PNAME /SETUP POINTER TO NAME CDF CHKNAM, TAD I PNAME /GET WORD NAME CIA CLL CDF 10 TAD I X10 /COMPARE WITH THIS ENTRY SZA CLA JMP NOTSAM /DIFFERENT CDF TAD I PNAME AND [77 /WAS THIS THE END OF NAME? ISZ PNAME SZA CLA JMP CHKNAM /NO, KEEP COMPARING CDF 10 RLOOKU, TAD I OLDN3 /GET ADDR OF START OF ENTRY CDF /AND RETURN IT IN THE AC JMP I LOOKUP /RETURN ADDR OF SYMBOL NOTSAM, SZL JMP HOOKIN /NEW SYMBOL <CURRENT ONE TAD I OLDN3 JMP LOOK /CONTINUE SEARCH HOOKIN, TAD I OLDN3 /HOOK NEW ENTRY INTO LIST DCA I NEXT TAD NEXT DCA I OLDN3 DCA I NEXT /ZERO TYPE WORD DCA I NEXT /ZERO EQUIVALENCE/DIMENSION POINTER TAD (NAME1 /PREPARE TO STICK IN THE NAME DCA PNAME CDF ENTERN, TAD I PNAME /MOVE NAME INTO S.T. CDF 10 DCA I NEXT CDF TAD I PNAME ISZ PNAME /END OF NAME? AND [77 SZA CLA JMP ENTERN /NO, KEEP GOING CDF 10 STCHEK, TAD NEXT /CHECK FOR S.T. OVERFLOW CIA CLL TAD (4740 /5000 STARTS PASS2 SKELETON TABLES SZL CLA JMP RLOOKU CDF JMS I [ERMSG /S.T. FULL 2324 JMP I (ENDX /TREAT AS END OF INPUT OLDN3, 0 /ADDR OF PREVIOUS ENTRY N3SIZE, 0 /SIZE OF ENTRY LTEMP, PNAME, /POINTER TO NAME BUFFER LUKUP2, 0 /LOOKUP FOR FIXED LENGTH SYMBOLS TAD I LUKUP2 /GET THE BUCKET START DCA OLDN3 /SAVE IT AS THE PREVIOUS ENTRY ISZ LUKUP2 TAD I LUKUP2 /GET THE ENTRY SIZE ISZ LUKUP2 DCA N3SIZE TAD LUKUP2 /SAVE RETURN ADDR DCA LOOKUP TAD NOCODE /IS CODE GENERATION OFF ? SZA CLA JMP I LOOKUP /YES, JUST RETURN CDF 10 LOOK2, TAD I OLDN3 /GET ADDR OF NEXT ENTRY SNA JMP HOKIN2 /IF 0 ITS END OF LIST IAC DCA X10 /START OF VALUE INFO TAD (WORD1-1 /SETUP POINTER TO PROTOTYPE DCA X11 TAD N3SIZE /AND TEMP OF ENTRY SIZE DCA LTEMP CHKVAL, CDF TAD I X11 CIA CLL /COMPARE THIS WORD OF THE VALUE CDF 10 TAD I X10 SZA CLA JMP NOTSM2 /NOT THIS ONE ISZ LTEMP /INCR SIZE COUNT JMP CHKVAL /MORE STUFF JMP RLOOKU /RETURN WITH THE GOODS NOTSM2, SZL JMP HOKIN2 /NEW SYMBOL < CURRENT ONE TAD I OLDN3 /CONTINUE SEARCH DCA OLDN3 JMP LOOK2 HOKIN2, TAD I OLDN3 /HOOK NEW ENTRY INTO LIST DCA I NEXT TAD NEXT DCA I OLDN3 TAD (WORD1-1 /PREPARE TO STICK IN THE VALUE DCA X11 DCA I NEXT /ZERO TYPE WORD CDF ENTERV, TAD I X11 /MOVE VALUE INTO S.T. CDF 10 DCA I NEXT ISZ N3SIZE /INCR SIZE COUNT JMP ENTERV-1 JMP STCHEK /STORE TYPE AND CHECK FOR OVERFLOW STOP, TAD (STOPOP /OUTPUT STOP OPERATOR JMS I [OUTWRD ISZ DOEND /DO ILLEGAL ON STOP JMP I [NEXTST
/ EXPRESSION ANALYZER PAGE EXPR, 0 /POLISHIZE EXPRESSION TAD EXPR JMS I [PUSH /SAVE RETURN ADDR JMS I [PUSH /MARK STACK UNOPR, JMS I [GETC /LOOK FOR UNARY OPERATOR JMP MISARG /THERE HAS TO BE AN OPERAND TAD (-253 /UNARY+(NOP) SNA JMP UNOPR TAD (253-255 /UNARY- SNA JMP UMINUS TAD (255-256 /.NOT. SZA CLA JMP OPRAND DCA BUCKET /FOR CKNOT JMS I (TRUFAL /.TRUE. OR .FALSE. ? JMP CKNOT /NEITHER, IS IT >.NOT. JMP .+3 /.TRUE. TAD (NOTOPR /FALSE=.NOT.TRUE JMS I [PUSH JMS I [OUTWRD TAD (TRUE JMS I [OUTWRD JMP I (NOSS CKNOT, TAD BUCKET TAD (-16 SZA CLA JMP OPRAND /MIGHT BE LITERAL .XXXXXX TAD (NOTOPR /PUSH .NOT. OPERATOR JMS I [PUSH JMP UNOPR UMINUS, TAD (UMOPR /PUSH UNARY MINUS JMS I [PUSH JMP UNOPR OPRAND, JMS I [BACK1 /PUT BACK NON UNARY OPERATOR JMS I [GETNAM /LOOK FOR VARIABLE REFERENCE JMP NOTVAR /NOPE. JMS I [LOOKUP /SYMBOL TABLE SEARCH JMP I [OPR8R /GO OUTPUT PUSH-VAR NOTVAR, JMS I [NUMBER /LOOK FOR A LITERAL JMP NOTNUM /NO KIND OF NUMBER JMP HOLCHK /INTEGER JMP DPLIT /DOUBLE PRECISION FPLIT, JMS I [LUKUP2 /FLOATING, ENTER INTO TABLE FPLIST -3 JMP I [OPR8RL /PUSH VARIABLE, NO SUBSCRIPTS DPLIT, JMS I [LUKUP2 /DOUBLE-PREC., ENTER IN TABLE DPLIST -6 JMP I [OPR8RL HOLCHK, JMS I [GETC /IS THIS HOLLERITH? JMP .+5 TAD (-310 SNA CLA JMP I (HFIELD /YES JMS I [BACK1 JMS I [LUKUP2 /FIND THE ENTRY INTLST -3 JMP I [OPR8RL NOTNUM, JMS I [GETC /LOOK FOR COMPLEX LITERAL JMP MISARG /MISSING OPERAND TAD (-250 /OPEN PAREN? SZA JMP QUOTE /GO LOOK FOR A STRING JMS I [SAVECP /SAVE CHAR POSITION JMS I [NUMBER /GET REAL PART JMP I (NCMPLX /NO NUMBER SKP /INTEGER-OK JMP I (NCMPLX /DOUBLE-NOT LEGAL FOR COMPLEX JMS I [CHECKC /LOOK FOR , -254 JMP I (NCMPLX /NO, CAN'T BE COMPLEX LIT. TAD WORD1 /SAVE REAL PART DCA TEMP TAD WORD2 DCA TEMP2 TAD WORD3 DCA CHAR JMS I [NUMBER /GET IMAGINARY PART JMP BADCL /NOT THERE, BAD SKP /I JMP BADCL /D-BAD JMS I [CHECKC /LOOK FOR ) -251 JMP BADCL /NO ) BAD TAD WORD1 /PUT IMAGINARY PART DCA WORD4 TAD WORD2 /INTO SECOND AHLF DCA WORD5 TAD WORD3 /OF COMPLEX LITERAL DCA WORD6 TAD TEMP /NOW RESTORE REAL PART DCA WORD1 TAD TEMP2 DCA WORD2 TAD CHAR DCA WORD3 CLL CMA RAL /REMOVE CHAR POS FROM STACK TAD STACK /SINCE OTHERWISE IT GOES OUT DCA STACK /AS CODE JMS I [LUKUP2 /WHICH WE WILL NOW SEARCH CMPLST /USE COMPLEX LIST -6 JMP I [OPR8RL BADCL, JMS I [ERMSG /BAD COMPLEX LITERAL 0314 JMP I [BADEXP MISARG, JMS I [ERMSG /MISSING OPERAND 1517 JMP I [BADEXP
/ EXPRESSION ANALYZER PAGE HQUOTE, 0 /SUBR FOR QUOTE STRINGS JMS I [GETCWB /GET CHAR JMP BADH TAD [-247 /IS IT ' SZA JMP NOTQ2 /NO JMS I [GETCWB JMP LUHOL TAD [-247 /LOOK FOR '' SNA CLA JMP NOTQ2 /REPLACE '' BY ' JMS I [BACK1 /ITS END OF STRING JMP LUHOL NOTQ2, TAD [247 /RESTORE CHAR AND [77 JMP I HQUOTE HFIELD, JMS I [FIXNUM /INTEGERIZE NUMBER SNA JMP BADH /ZERO IS BAD CMA CLL DCA TEMP TAD (HCOUNT /SET SUBR POINTER DOHOL, DCA HCHAR TAD (-MAXHOL /SET COUNTER FOR MAX DCA HOLCTR TAD (NAME1 /SET UP NAME POINTER DCA TEMP2 PAKHOL, DCA I TEMP2 /PACK HOLLERITH STRING JMS I HCHAR CLL RTL RTL RTL DCA I TEMP2 JMS I HCHAR TAD I TEMP2 DCA I TEMP2 ISZ TEMP2 ISZ HOLCTR /CHECK FOR TOO MANY JMP PAKHOL BADH, JMS I [ERMSG /BAD OR TOO BIG HOLLERITH FIELD 1017 JMP I [BADEXP LUHOL, TAD (33 /LOOK UP THIS LITERAL DCA BUCKET JMS I [LOOKUP JMP I [OPR8RL HCOUNT, 0 ISZ TEMP /CHECK COUNT SKP JMP LUHOL /EXPIRED JMS I [GETCWB /GET CHAR JMP BADH AND [77 /6-BIT IZE IT JMP I HCOUNT HOLCTR, 0 /COUNTER FOR HOLLERITH FIELDS NCMPLX, JMS I [RESTCP /NOT COMPLEX LITERAL JMS I [EXPR /MUST BE SUB EXPRESSION JMP BADEXP JMS I [GETC /LOOK FOR ) JMP PARMM TAD (-251 SNA CLA JMP I (NOSS /NO SUBSCRIPT LEGAL AFTER SUB EXPR PARMM, JMS I [ERMSG /MISSING ) 1515 BADEXP, JMS I [POP /BAD EXPRESSION, SZA CLA JMP BADEXP /LOOK FOR STACK MARKER JMS I [POP DCA TEMP /RETURN ADDR. JMP I TEMP JMS I [BACK1 /PUT BACK TEMINAL CHAR ENDEXP, JMS I [POP /GET NEXT THING FROM STACK SNA JMP EXPDUN /IF ZERO, FINISH IAC /GET ADDR OF OPERATION NUMBER DCA TEMP TAD I TEMP /GET OPERATOR VALUE JMS I [OUTWRD /OUTPUT OPERATOR XXXXXX JMP ENDEXP /LOOP EXPDUN, JMS I [POP /GET RETURN ADDR IAC DCA TEMP JMP I TEMP LETTER, 0 /GET A LETTER JMS I [GETC JMP I LETTER TAD (-301 SPA JMP NLETR TAD (301-333 SMA JMP NLETR TAD (33 ISZ LETTER JMP I LETTER NLETR, JMS I [BACK1 JMP I LETTER QUOTE, TAD (250-247 /IS IT ' SZA JMP MISARG /NO, OPERAND IS MISSING TAD (HQUOTE /SET SUBR POINTER JMP DOHOL CHECKC, 0 /CHECK FOR A SINGLE CHAR TAD I CHECKC /GET THE CHAR DCA CCTEMP ISZ CHECKC /SKIP PAST THE CHAR JMS I [GETC /GET CHAR FROM INPUT JMP I CHECKC /DIDN'T MAKE IT TAD CCTEMP /IS THIS IT ? SNA CLA ISZ CHECKC /YES JMP I CHECKC CCTEMP, 0
/ EXPRESSION ANALYZER PAGE BADFSS, JMS I [ERMSG 2323 JMP I [BADEXP OPR8R, DCA TEMP JMS I [OUTWRD /PUSH TAD TEMP JMS I [OUTWRD /OUTPUT OPERAND PTR JMS I [GETC JMP I [ENDEXP TAD (-250 /IS IT S.S. OR FUNCTION SZA JMP NOTFSS TAD STMJMP TAD (-DFINFL SNA CLA /FOR D.F.,PERMIT VARPARENS JMP NOTFSS ISZ TEMP /LOOK AT TYPE CDF 10 TAD (3420 /DIM, EXT, SF, OR ARG ? AND I TEMP SZA CLA JMP NOTFUN /NOT A FUNCTION REFERENCE TAD I TEMP TAD (1000 /SET EXT BIT DCA I TEMP NOTFUN, CDF SKP JMS I [POP /PUT COUNT INTO AC SSFUN, IAC /INCREMENT ARG COUNT JMS I [PUSH /SAVE IT ON THE STACK JMS I [EXPR /GET ARG (OR S.S.) JMP I [BADEXP JMS I [COMARP /LOOK FOR , OR ) JMP BADFSS /NEITHER JMP SSFUN-1 /, GET NEXT ARG (SUBSCRIPT?) TAD (ARGSOP /YES, OUTPUT ARGLIST OPER JMS I [OUTWRD JMS I [POP /AND THE COUNT JMS I [OUTWRD NOSS, JMS I [GETC /GET NEXT CHAR JMP I [ENDEXP TAD (-253 /PREPARE IT JMP NOTFSS+1 OPR8RL, DCA TEMP /SAVE ADDR OF LITERAL JMS I [OUTWRD TAD TEMP JMS I [OUTWRD JMP NOSS
/ TYPLST PART TWO DIMLUP, JMS I [NUMBER /GET DIMENSION JMP VARDIM /MAYBE ITS VAR DIM ? JMP .+3 /OK, INTEGER JMP BADDIM JMP BADDIM /DP AND FP ARE BAD JMS I [FIXNUM /FIX IT FOR SOME STUFF DCA MQ TAD DPRDCT /GET NEW DIMENSION PRODUCT JMS I [MUL12 DCA DPRDCT ISZ TEMP2 /INCREMENT DIM COUNT TAD WORD2 /IF WORD2 OR AC NON ZERO TAD AC /DIM IS TOO BIG SZA CLA /1.03/ JMP BADDIM /1.03/ JMS I (ANORM /1.03/ RENORMALIZE THE NUMBER JMS I [LUKUP2 /1.03/ ENTER IT INTO LITERAL LIST INTLST /1.03/ -3 /1.03/ PSHDIM, JMS I [PUSH /1.03/ AND SAVE ON THE STACK JMS I [COMARP /LOOK FOR , OR ) JMP BADDIM SKP /COMMA MEANS ANOTHER DIM FOLLOWS JMP PUTDIM /) MEANS END OF DIMS TAD DSERES /FORM NEXT VALUE OF MAGIC NUMBER TAD DPRDCT DCA DSERES JMP DIMLUP /NOW LOOP FOR NEXT DIM VDTEMP, 0 VARDIM, CDF 10 /IS ARRAY AN ARG ? TAD I TLTEMP CDF AND (20 SNA CLA JMP BADDIM /NO, BAD DIMENSION JMS I [GETNAM /OK, GET DIMENSION JMP BADDIM JMS I [LOOKUP IAC DCA VDTEMP /ADDR OF TYPE WORD CDF 10 /IS THA VARIABLE AN ARG ? TAD I VDTEMP AND (20 CDF SNA CLA JMP BADDIM /NO, THATS BAD DCA DPRDCT /3.02 ZERO DIM PRODUCT ISZ TEMP2 /INCREMENT DIM COUNT CMA /1.03/ TAD VDTEMP /1.03/ SAVE DIMENSION VARIABLE JMP PSHDIM /3.02 SAVE DIM ON STACK MESSAG, 0 /PRINT PASS1 IMMEDIATE ERROR TAD I MESSAG /GET CHAR ONE ISZ MESSAG JMS I (TTYOUT TAD I MESSAG /GET CHAR TWO JMS I (TTYOUT TAD (215 /CR JMS I (TTYOUT TAD (212 /LF JMS I (TTYOUT JMP I (7605 /EXIT TO MONITOR
/ EXPRESSION ANALYZER REVISITED PAGE NOTFSS, TAD (250-253 /IS IT + SZA JMP .+3 TAD (ADDOPR /YES JMP GOTOPR TAD (253-255 /IS IT - SZA JMP .+3 TAD (SUBOPR /YES JMP GOTOPR TAD (255-252 /IS IT * SZA JMP NOTMUL /NO JMS I [GETC JMP NOTEXP TAD (-252 /IS IT ** SZA CLA JMP .+3 TAD (EXPOPR /YES JMP GOTOPR JMS I [BACK1 NOTEXP, TAD (MULOPR /IT WAS * JMP GOTOPR NOTMUL, TAD (252-257 /IS IT / SZA JMP .+3 TAD (DIVOPR /YES JMP GOTOPR IAC /IS IT . SZA CLA JMP I (ENDEXP-1 /NO, END OF EXPR JMS CKEOPR /LOOK FOR EXTENDED OPERATOR JMP BADOPR /NONE THERE JMS I [CHECKC /CHECK FOR CLOSING . -256 JMP BADOPR /NOT THERE CDF 10 /3.01/ TAD I X10 /GET OPERATOR POINTER CDF JMP GOTOPR CKEOPR, 0 /CHECK FOR EXTENDED OPERATOR JMS I [GETNAM /GET NAME JMP I CKEOPR /NONE TAD (OPRLST-1 /PTR TO LIST DCA X10 OPRLUP, CDF 10 /3.01/ TAD I X10 /COMPARE FIRST CHAR CDF 0 SNA JMP I CKEOPR /END OF LIST TAD BUCKET SZA CLA JMP NOTHIS /NOT THIS ONE CDF 10 /3.01/ TAD I X10 CDF TAD I (NAME1 /COMPARE 2ND AND 3RD SZA CLA JMP NOTHIS+1 /NOT THIS ONE ISZ CKEOPR /BUMP RETURN JMP I CKEOPR NOTHIS, ISZ X10 /BUMP LIST PTR ISZ X10 /AGAIN JMP OPRLUP /KEEP GOING BADOPR, JMS I [ERMSG /NOT LEGAL EXT. OPER. 1720 JMP I [BADEXP GOTOPR, DCA NEWOP /SAVE NEWEST OPER. JMS I [POP /GET STACK TOP SNA JMP PUSH2 /EMPTY DCA OLDOP TAD I OLDOP /COMPARE PREC. CIA TAD I NEWOP /NEW-OLD SPA SNA CLA JMP OUTOLD /OLD>NEW TAD OLDOP PUSH2, JMS I [PUSH /OLD < NEW TAD NEWOP /GO PUSH BOTH JMS I [PUSH JMP I (UNOPR /GO LOOK FOR NEXT OPERAND OUTOLD, ISZ OLDOP /OUTPUT OPERATOR TAD I OLDOP JMS I [OUTWRD JMP GOTOPR+1 /TRY NEXT STACK ELEMENT NEWOP=WORD1 OLDOP=WORD2
/ UTILITIES GETCWB, 0 /GET A CHARACTER (PRESERVE BLANKS) ISZ NCHARS JMP .+4 CLA CMA DCA NCHARS /RESET NCHARS JMP I GETCWB ISZ GETCWB TAD I CHRPTR /GET THE CHAR JMP I GETCWB SAVECP, 0 /SAVE CHAR POSITION TAD NCHARS JMS I [PUSH TAD CHRPTR JMS I [PUSH JMP I SAVECP FIXNUM, 0 /FIX FAC (I'M MOVING IT AGAIN) TAD WORD1 /IS IT FIXED ? TAD (-27 SNA JMP RETFN /YES, EXPONENT IS 23 SMA CLA JMP I FIXNUM /BAD IF EXP IS >23 JMS I (AR1 /RIGHT SHIFT ONE JMP FIXNUM+1 /TEST AGAIN RETFN, TAD WORD3 /RETURN LOWEST 12 BITS JMP I FIXNUM
/ UTILITIES PAGE GETC, 0 /GET A CHARACTER (IGNORING BLANKS) ISZ NCHARS JMP .+4 CLA CMA DCA NCHARS JMP I GETC TAD I CHRPTR TAD (-240 /IS IT A BLANK SNA JMP GETC+1 /YES IGNORE IT TAD (240 /FIX CHAR ISZ GETC JMP I GETC ERMSG, 0 /ERROR MESSAGE HANDLER CDF TAD NOCODE /IS CODE GENERATION ON ? SZA CLA JMP NOTOUT /NO TAD (ERRCOD /ERROR CODE TO OUTPUT FILE JMS I [OUTWRD TAD I ERMSG ISZ ERMSG JMS I [OUTWRD JMP I ERMSG /RETURN NOTOUT, TAD I ERMSG /SAVE THE ERROR CODE ISZ ERMSG DCA ERCODE JMP I ERMSG POP, 0 /PUT TOP OF STACK INTO AC TAD STACK DCA ERMSG CLA CMA TAD STACK DCA STACK /DECREMENT STACK POINTER TAD I ERMSG JMP I POP TRUFAL, 0 /CHECK FOR LOGICAL LITERALS JMS I [GETNAM JMP I TRUFAL JMS I [CHECKC /LOOK FOR TERMINAL . -256 JMP I TRUFAL TAD BUCKET /LOOK AT FIRST CHAR TAD (-24 SNA JMP .+5 /ITS "T" TAD (24-6 SZA CLA JMP I TRUFAL /ITS NEITHER ISZ TRUFAL /ITS "F" ISZ TRUFAL JMP I TRUFAL
/ LEFT HALF EXPRESSION ANALYZER LEXPR, 0 /GET LEFT HAND EXPRESSION DCA LETEMP /SAVE CALL SWITCH JMS I [GETNAM /LOOK FOR VAR NAME JMP MSNGOP /MUST BE THERE JMS I [OUTWRD /OUTPUT A ZERO (PUSH) JMS I [LOOKUP /SEEK OUT ENTRY FOR THIS VAR DCA TEMP TAD TEMP JMS I [OUTWRD JMS I [GETC /LOOK FOR DIMENSIONS JMP LEXPOK /NO ( TAD (-250 SZA CLA JMP LEXPOK-1 /NO ( ISZ TEMP /LOOK AT TYPE CDF 10 CLL CML RTR /DIMENSIONED ? AND I TEMP TAD LETEMP /OR A CALL ? TAD NOCODE /OR CODE OFF ? SZA CLA JMP NOTSF /YES, NOT AN ARITHMETIC S.F. TAD I TEMP AND (1420 /EXT, SF, OR ARG ? SNA CLA /V3C TAD [-M6 /SEE IF CALLED FROM SPECIAL PLACE TAD LEXPR /V3C COMPARE WITH ENTRY PT SZA CLA JMP ASFERR /THIS IS BAD IF SO TAD I TEMP TAD (400 DCA I TEMP /SET A.S.F. BIT CDF TAD (ASFDEF /DEFINE ASF JMS I [OUTWRD NOTSF, CDF SKP JMS I [POP /ARG COUNT TO AC SSLOOP, IAC /INCREMENT SS COUNT JMS I [PUSH /SAVE ON THE STACK JMS I [EXPR /COMPILE SUBSCRIPT JMP FSSBAD+2 /ERROR WITHIN SS JMS I [COMARP /LOOK FOR , OR ) JMP FSSBAD /NEITHER (THERE WAS A BUG HERE) JMP SSLOOP-1 /, GET NEXT ARG/SS TAD (ARGSOP /OUTPUT SS OPERATOR JMS I [OUTWRD JMS I [POP /THEN COUNT JMS I [OUTWRD SKP JMS I [BACK1 /PUT BACK A CHARACTER LEXPOK, ISZ LEXPR JMP I LEXPR /RETURN MSNGOP, JMS I [ERMSG /MISSING OPERAND 1517 JMP I LEXPR FSSBAD, JMS I [ERMSG /MISSING COMMA OR CLOSE PARENTHESIS 2323 JMS I [POP /GET ARG COUNT OFF STACK CLA JMP I LEXPR ASFERR, JMS I [ERMSG /BAD ARITHMETIC STMT FUNCTION 2306 JMP NOTSF /DO THE REST OF THE ASF DEF LETEMP, 0
/UTILITIES PAGE G2CTMP, PUSH, 0 /PUT AC ONTO STACK DCA I STACK /STORE TAD (STACKS+100 /CHECK FOR STACK OVERFLOW CIA CLL TAD STACK SNL CLA JMP I PUSH /OK, RETURN DCA NOCODE /SET CODE GENERATION ON JMS I [ERMSG 2004 JMP I [NEXTST GET2C, 0 /GET 2 SIX BIT CHARS INTO ONE WPRD JMS I [GETC /GET FIRST CHAR JMP I GET2C AND [77 CLL RTL RTL RTL DCA G2CTMP JMS I [GETC /GET SECOND CHAR JMP I GET2C ISZ GET2C /FIX RETURN ADDR AND [77 TAD G2CTMP JMP I GET2C STMNUM, 0 /PICK UP STATEMENT NUMBER DCA WORD4 /SAVE DEFINED BIT (IF ANY) DCA WORD2 /ZERO SOME STUFF DCA WORD3 JMS DIGIT /GET A DIGIT JMP I STMNUM /NONE THERE, NO STMT NUMBER TAD (-60 /IS IT A LEADING 0 ? SNA JMP .-4 /YES, IGNORE IT TAD (60 CLL RTL RTL RTL DCA WORD1 JMS DIGIT /GET SECOND DIGIT JMP ENDNUM /END OF NUMBER TAD WORD1 DCA WORD1 /COMBINE FIRST AND SECOND JMS DIGIT JMP ENDNUM CLL RTL RTL RTL DCA WORD2 JMS DIGIT JMP ENDNUM /COMBINE THIRD AND FOURTH TAD WORD2 DCA WORD2 JMS DIGIT /GET FIFTH DIGIT JMP ENDNUM CLL RTL RTL RTL DCA WORD3 ENDNUM, JMS I [LUKUP2 /LOOK UP IN S.T. SNLIST /STMT NUMBER LIST -3 ISZ STMNUM DCA SNUM /SAVE S.T. ADDRESS OF LABEL CDF 10 /SET TYPE WORD TAD SNUM /GET ADDR OF TYPE IAC DCA SNTEMP TAD I SNTEMP /GET TYPE WORD CLL TAD WORD4 /PUT IN THE DEFINITION BIT SNL DCA I SNTEMP /RESTORE IT IF NOT MULTIPLE DEFN CDF SNL CLA JMP I STMNUM JMS I [ERMSG 1514 JMP I STMNUM SNTEMP, DIGIT, 0 /GET A DIGIT JMS I [GETC /GET A CHAR JMP I DIGIT TAD (-272 /IS IT > 271 (9) SMA JMP NODIGT /YES, ITS GREATER TAD (272-260 /IS IT < 260 (0) SPA JMP NODIGT /YES, ITS LESS TAD (60 ISZ DIGIT JMP I DIGIT /TAKE SUCCESSFUL RETURN NODIGT, JMS I [BACK1 /RESTORE NON DIGIT JMP I DIGIT ASSIGN, JMS I [STMNUM /GET STMT NUMBER JMP BADASN JMS I [GET2C /LOOK FOR "TO" JMP BADASN TAD (-2417 SNA CLA JMS I [LEXPR /GET ASSIGN VARIABLE JMP BADASN TAD (ASNOPR /OUTPUT ASSIGN OPERATOR JMS I [OUTWRD TAD SNUM /NOW STMT NUMBER JMS I [OUTWRD JMP I [NEXTST BADASN, JMS I [ERMSG 0123 JMP I [NEXTST TTYOUT, 0 /TTY OUTPUT ROUTINE TLS TSF JMP .-1 CLA JMP I TTYOUT
/ PRECEDENCE TABLE PAGE ADDOPR, 100 1 SUBOPR, 100 2 MULOPR, 200 3 DIVOPR, 200 4 EXPOPR, 500 5 NOTOPR, 30 6 UMOPR, 400 7 EQOPR, 40 16 NEOPR, 40 17 GEOPR, 40 10 GTOPR, 40 11 LEOPR, 40 12 LTOPR, 40 13 ANDOPR, 20 14 OROPR, 10 15 XOROPR, 7 20 EQVOPR, 7 21
/ UTILITY ROUTINES BACK1, 0 /BACK UP ONE CHAR CLA CMA TAD NCHARS DCA NCHARS CLA CMA TAD CHRPTR DCA CHRPTR JMP I BACK1 OADD, 0 /ADD OPERAND TO FAC CLL TAD OPO TAD ACO DCA ACO RAL TAD OP6 TAD WORD6 DCA WORD6 RAL TAD OP5 TAD WORD5 DCA WORD5 RAL TAD OP4 TAD WORD4 DCA WORD4 RAL TAD OP3 TAD WORD3 DCA WORD3 RAL TAD OP2 TAD WORD2 DCA WORD2 JMP I OADD
/ FLOATING POINT DIVIDE ROUTINE PAGE FPDIV, 0 JMS I DAR1 /UNNORMALIZE AC BY ONE TAD OP1 /COMPUTE FINAL EXPONENT CIA TAD WORD1 DCA OP1 /AND SAVE IT TAD DM74 /SET ITERATION COUNTER DCA DITCNT TAD WORD2 RAL /INITIALIZE LINK FPDVLP, CLA RAR /COMPARE SIGNS TAD OP2 SPA CLA JMP .+3 TAD OPMAC /NEGATE OPERAND JMS I DFNEG JMS I DOADD /ADD OPERAND AND FAC TAD D6 /RIGHT SHIFT QUOTIENT RAL /PRESERVING ADD OVERFLOW BIT DCA D6 TAD D5 RAL DCA D5 TAD D4 RAL DCA D4 TAD D3 RAL DCA D3 TAD D2 RAL DCA D2 JMS I DAL1 /LEFT SHIFT FAC ONE ISZ DITCNT /TEST ITERATION COUNT JMP FPDVLP TAD OP1 /PUT QUOTIENT INTO FAC DCA WORD1 TAD D2 DCA WORD2 TAD D3 DCA WORD3 TAD D4 DCA WORD4 TAD D5 DCA WORD5 TAD D6 DCA WORD6 DCA ACO JMS I DNORM /NORMALIZE JMP I FPDIV D2, 0 D3, 0 D4, 0 D5, 0 D6, 0 DITCNT, 0 DAR1, AR1 DAL1, AL1 DM74, -74 OPMAC, OPO-ACO DFNEG, NEGFAC DOADD, OADD DNORM, ANORM *STACKS-1 -1 /TO PREVENT SPURIOUS DO ENDS
/ NUMERIC CONVERSION ROUTINE PAGE NUMBER, 0 /GENERAL NUMBER CONVERSION ROUTINE DCA ESWIT /ZERO E/D SWITCH DCA DECPT /ZERO DECIMAL POINT SWITCH DCA WORD1 /ZERO FAC DCA WORD2 DCA WORD3 DCA WORD4 DCA WORD5 DCA WORD6 DCA ACO DCA SIGN /CLEAR SIGN SWITCH JMS I [GETC /GET A CHAR JMP I NUMBER /NO CHAR IS NO NUMBER JMS CHKSGN /CHECK FOR SIGN SIGN, 0 /THIS SWITCH GETS SET DCA NDIGIT /ZERO DIGIT COUNT CONVLP, JMS I [DIGIT /GET A DIGIT JMP TRYDEC /IS THERE A DECIMAL POINT ? AND [17 DCA NXTDGT /SAVE THE DIGIT ISZ NDIGIT /INCR NUMBER OF DIGITS TAD WORD2 /PREPARE TO MULT BY 10 DCA OP2 TAD WORD3 DCA OP3 TAD WORD4 DCA OP4 TAD WORD5 DCA OP5 TAD WORD6 DCA OP6 TAD ACO DCA OPO JMS I (AL1 /DOUBLE FAC JMS I (AL1 /DOUBLE AGAIN JMS I (OADD /TIMES FIVE JMS I (AL1 /ONE MORE DOUBLING IS TIMES 10 DCA OP2 DCA OP3 /PUT NEWEST DIGIT INTO OPERAND DCA OP4 DCA OP5 DCA OP6 TAD NXTDGT DCA OPO JMS I (OADD /ADD IN NEWEST DIGIT JMP CONVLP TRYDEC, TAD DECPT /DECIMAL ALREADY ? SZA CLA JMP TRYE2 /YES, LOOK FOR EXPONENT JMS I [GETC /LOOK FOR . JMP DIGTST /SEE IF THERE WAS ANYTHING TAD (-256 SZA JMP TRYE1 /TRY FOR E JMS I [SAVECP /SAVE CHAR POS JMS I (CKEOPR /CHECK FOR SPECIAL CASE OF LIT.RE. JMP NOLDRE /NOT LIT.RE. JMS I [RESTCP JMS I [BACK1 /PUT BACK . IT BELONGS TO RELATIONAL DIGTST, TAD NDIGIT /ANY DIGITS ? SNA CLA JMP I NUMBER /NO, NO NUMBER JMP INTEGR /TAKE INTEGER EXIT NOLDRE, ISZ DECPT /SET DECIMAL POINT SW JMS I [RESTCP /RESTORE CHAR POS JMP CONVLP-1 /LOOP FOR OTHER DIGITS TRYE1, JMS I [BACK1 /PUT BACK NON . TAD NDIGIT /ANY DIGITS YET ? SNA CLA JMP I NUMBER /NO, NO NUMBER JMS EORD /LOOK OR E OR D JMP INTEGR TRYE2, JMS EORD /LOOK FOR E OR D FPNUM, ISZ NUMBER ISZ NUMBER DCA EXPON /ZERO EXPONENT JMS I (DODEC /HANDLE DIGITS RIGHT OF . JMP DOSIGN-1 /GO DO SIGN INTEGR, TAD (107 /PUT IN EXPONNT DCA WORD1 JMS I (ANORM /NORMALIZE ISZ NUMBER /BUMP RETURN DOSIGN, TAD SIGN /CHECK THE SIGN SZA CLA JMS I (NEGFAC /NEGATE IF NEGATIVE JMP I NUMBER /RETURN CHKSGN, 0 /CHECK FOR SIGN TAD (-255 /IS IT - ? SNA ISZ I CHKSGN /YES, SET SWITCH SZA TAD (255-253 /IS IT + ? SZA CLA JMS I [BACK1 /RETURN CHAR OTHERWISE JMP I CHKSGN EORD, 0 /LOOK FOR E OR D JMS I [GETC /LOOK FOR E OR D JMP I EORD TAD (-304 CLL RAR SZA CLA /E OR D? JMP NOEORD /NO SZL ISZ ESWIT /SET SWITCH IF E SNL ISZ DPUSED /SET D.P. SWITCH IF D JMP I (GETEXP /OK, GET EXPONENT NOEORD, JMS I [BACK1 /PUT IT BACK CAUSE ITS NOT OURS JMP I EORD NXTDGT, 0 REWIND, JMS I [EXPR /COMPILE UNIT JMP I [NEXTST TAD (REWOPR /OUTPUT REWIND OPERATOR JMS I [OUTWRD JMP I [NEXTST
/ NUMERIC CONVERSION ROUTINE PAGE SMLNUM, 0 /INPUT A NUMBER <= 4095 EXPLUP, DCA EXPON /ZERO THE EXPONENT JMS I [DIGIT /GET THE NEXT DIGIT JMP I SMLNUM /NUMBER DONE AND [17 DCA OPO /SAVE THE DIGIT TAD EXPON /MULT BY 10 CLL RAL CLL RAL TAD EXPON CLL RAL TAD OPO /ADD IN DIGIT JMP EXPLUP /STORE BACK INTO EXPONENT GETEXP, DCA ESIGN /ZERO EXPONENT SIGN SWITCH JMS I [GETC /GET A CHAR JMP I (FPNUM+1 JMS I (CHKSGN /IS IT A SIGN FPRTNE, ESIGN, 0 /THIS IS THE SWITCH TO SET JMS SMLNUM /GO GET THE EXPONENT FIXEXP, TAD ESIGN /CHECK EXPONENT SIGN SNA CLA JMP .+4 TAD EXPON /COMPLEMENT EXPONENT CIA DCA EXPON JMS DODEC /GO HANLE EXPONENT CLL CML RTL /BUMP RETURN BY TWO (DP) OR 3 (FP) TAD ESWIT /DEPENDING ON E/D SWITCH TAD I [NUMBER DCA I [NUMBER JMP I (DOSIGN /CHECK THE SIGN DODEC, 0 TAD DO107 /NORMALIZE THE NUMBER DCA WORD1 JMS I (ANORM TAD DECPT /WAS THERE A DECIMAL POINT ? SZA CLA TAD NDIGIT /HOW MANY DIGITS TO THE RIGHT ? CIA TAD EXPON /SUBTRACT THAT NUMBER FROM EXP SMA JMP POSEXP /EXPONENT IS POSITIVE CIA DCA EXPON /ONLY NEED ABS VALUE TAD (FPDIV /DO DIVIDES JMP .+3 POSEXP, DCA EXPON TAD (FPMUL /DO MULTIPLIES DCA FPRTNE /MULTIPLY/DIVIDE ROUTINE TAD (PETABL-1 /POWERS OF TEN TABLE DCA X17 EXPMUL, TAD EXPON /LOOK AT THE EXPONENT SNA JMP I DODEC /IF 0 ITS THRU CLL RAR DCA EXPON /PUT LOWEST BIT INTO LINK SNL JMP SKPEXP /THIS ONE DOESN'T COUNT CDF 10 /3.01/ TAD I X17 /MOVE FACTOR INTO OPERAND DCA OP1 TAD I X17 DCA OP2 TAD I X17 DCA OP3 TAD I X17 DCA OP4 TAD I X17 DCA OP5 TAD I X17 DCA OP6 DCA OPO CDF JMS I FPRTNE /MULTIPLY OR DIVIDE BY THIS FACTOR JMP EXPMUL /CHECK NEXT BIT SKPEXP, TAD X17 /SKIP OVER THIS FACTOR TAD (6 JMP EXPMUL-1 AR1, 0 /SHIFT FAC RIGHT ONE TAD WORD2 CLL RAR DCA WORD2 TAD WORD3 RAR DCA WORD3 TAD WORD4 RAR DCA WORD4 TAD WORD5 RAR DCA WORD5 TAD WORD6 RAR DCA WORD6 TAD ACO RAR DCA ACO ISZ WORD1 DO107, 107 JMP I AR1 AL1, 0 /SHIFT FAC LEFT ONE TAD ACO CLL RAL DCA ACO TAD WORD6 RAL DCA WORD6 TAD WORD5 RAL DCA WORD5 TAD WORD4 RAL DCA WORD4 TAD WORD3 RAL DCA WORD3 TAD WORD2 RAL DCA WORD2 JMP I AL1
/ NUMERIC CONVERSION ROUTINE PAGE FPMUL, 0 /FLOATING MULTIPLY ROUTINE TAD WORD1 /COMPUTE NEW EXPONENT TAD OP1 DCA OP1 TAD WORD2 /SAVE AC MANTISSA DCA TW2 TAD WORD3 DCA TW3 TAD WORD4 DCA TW4 TAD WORD5 DCA TW5 TAD WORD6 DCA TW6 TAD (-74 /SET ITERATION COUNTER DCA ITRCNT DCA WORD2 /ZERO FAC MANTISSA DCA WORD3 DCA WORD4 DCA WORD5 DCA WORD6 DCA ACO MULLUP, JMS I (AR1 /SHIFT FAC RIGHT ONE TAD TW2 /SHIFT MULTIPLIER RIGHT CLL RAR DCA TW2 TAD TW3 RAR DCA TW3 TAD TW4 RAR DCA TW4 TAD TW5 RAR DCA TW5 TAD TW6 RAR DCA TW6 SZL JMS I (OADD /ADD IF LINK IS ONE ISZ ITRCNT /BUMP COUNT JMP MULLUP /LOOP TAD OP1 /PUT IN CORRECT EXPONENT DCA WORD1 JMS I (ANORM /NORMALIZE THE RESULT JMP I FPMUL TW2, 0 TW3, 0 TW4, 0 TW5, 0 TW6, 0 ANORM, 0 /NORMALIZE FAC TAD WORD2 /IS MANTISSA 0 ? SNA TAD WORD3 SNA TAD WORD4 SNA TAD WORD5 SNA TAD WORD6 SNA TAD ACO SNA CLA JMP ZEXP /YES, ZERO EXPONENT NORMLP, CLA CLL CML RTR /IS HIGH ORDER MANTISSA = 6000 TAD WORD2 SZA JMP NO6000 /NO, SKIP THIS STUFF TAD WORD3 /YES, IS THE REST 0 ? SNA TAD WORD4 SNA TAD WORD5 SNA TAD WORD6 SNA TAD ACO SZA CLA /SKIP IF 600000 ... 0000 NO6000, SPA CLA JMP I ANORM /NORM IS DONE WHEN BITS DIFFER JMS I (AL1 /SHIFT LEFT ONE CLA CMA /DECREMENT EXPONENT TAD WORD1 DCA WORD1 JMP NORMLP /LOOP ZEXP, DCA WORD1 JMP I ANORM NEGFAC, 0 /NEGATE FAC TAD (ACO /GET POINTER TO OPERAND DCA NFPTR TAD (-6 /SIX WORD NEGATE DCA NFCNT CLL NFLOOP, RAL TAD I NFPTR /GET NEXT WORD CLL CML CIA DCA I NFPTR /RESTORE AFTER COMPLEMENTING CML CLA CMA /LINK GETS COMPLEMENTED ONCE HERE TAD NFPTR /AND ONCE AGAIN HERE DCA NFPTR /RESTORE DECREMENTED POINTER ISZ NFCNT JMP NFLOOP JMP I NEGFAC NFPTR, 0 NFCNT, 0 ITRCNT, DHLRTH, 0 /HOLLERITH IN DATA SUBR ISZ TEMP SKP JMP I DHLRTH ISZ DHLRTH JMS I [GETCWB JMP DHOLER JMP I DHLRTH
/ VARIABLE SCANNER PAGE GETNAM, 0 /GET VARIABLE NAME JMS LETTER /FIRST CHAR MUST BE ALPHABETIC JMP I GETNAM /NO VARIABLE DCA BUCKET /FIRST ONE IS THE BUCKET TAD (NAME1 DCA NPTR /POINTER TO NAME BUFFER CLL CMA RTL /SIX CHARS MAX (3 WORDS) DCA NCNT PAKLUP, JMS LETTER /GET A LETTER SKP JMP .+3 /WE GOT IT JMS I [DIGIT /NO LETTER, IS IT A DIGIT ? JMP NDONE /NO, NAMES OVER CLL RTL RTL RTL /MOVE CHAR TO A HIGHER PLACE DCA I NPTR /STORE IT ISZ NCNT /BUMP COUNTER JMP MORNAM /MORE TO COME SKP NDONE, DCA I NPTR /ZERO NEXT WORD ISZ GETNAM /FIX RETURN ADDR JMP I GETNAM MORNAM, JMS LETTER /GET NEXT CHAR SKP JMP .+3 /ITS A LETTER JMS I [DIGIT JMP NDONE+1 /NO GOOD, NAMES OVER TAD I NPTR DCA I NPTR /COMBINE TWO CHARS ISZ NPTR JMP PAKLUP NPTR, 0 NCNT=OADD
/ DATA STATEMENT DATA, JMS I [IFCHEK /IF(..)DATA ???? TAD (DATAST /START DATA STATEMENT JMS I [OUTWRD DATLUP, CLA CMA /SET DIMNUM = -1 IF NO SUBSCRIPTS JMS I [GETSS /GET LIST ELEMENT JMP DATAER TAD (DPUSH /OUTPUT DPUSH OPERATOR JMS I [OUTWRD CMA TAD TEMP2 /FOLLOWED BY POINTER JMS I [OUTWRD TAD DIMNUM /FOLLOWED BY NUMBER JMS I [OUTWRD CDF 10 TAD I TEMP2 /LOOK AT TYE TYPE AND (20 /IS IT AN ARG ? CDF SZA CLA JMP DATAER /YES, THATS BAD JMS I [GETC /, ? JMP DATAER TAD (-254 SNA JMP DATLUP /LOOK FOR MORE TAD (254-257 // ? SZA CLA JMP DATAER JMP DLOOP2 /GO LOOK FOR ELEMENT DATA3, TAD (WORD1-1 DCA X10 /POINTER TO THE GOODS TAD I X10 /THEN STUFF JMS I [OUTWRD ISZ TEMP JMP .-3 NXTDE, TAD (ENDELM /OUTPUT END OF ELEMENT JMS I [OUTWRD JMS I [GETC /LOOK FOR COMMA JMP DATAER TAD (-254 SNA JMP DLOOP2 /YES, GET MORE DATA TAD (254-257 /SLASH ? SZA CLA JMP DATAER /NO, ERROR JMS I [GETC /ANOTHER DATA GROUP ? JMP I [NEXTST /NO TAD (-254 /COMMA ? SNA CLA JMP DATA+1 /START A NEW DATA STMT DATAER, JMS I [ERMSG 0401 /OK WHEN THIS IS AN AND JMP I [NEXTST DHOLER, JMS I [ERMSG 0410 /HOLLERITH DATA ERROR JMP I [NEXTST DQUOTE, 0 /GET CHAR FOR QUOTED DATA JMS I [GETCWB JMP DHOLER TAD [-247 SZA JMP DNOTQ2 JMS I [GETCWB JMP I DQUOTE TAD [-247 SNA CLA JMP DNOTQ2 /REPLACE '' BY ' JMS I [BACK1 JMP I DQUOTE DNOTQ2, TAD [247 /FIX CHAR ISZ DQUOTE JMP I DQUOTE OUT3WD, 0 /2.02/ OUTPUT 3 WORDS TAD [DATELM /2.02/ OUTPUT ELEMENT HEAD JMS I [OUTWRD /2.02/ TAD (3 /2.02/ AND SIZE JMS I [OUTWRD /2.02/ TAD WORD1 /2.02/ NOW THREE WORDS JMS I [OUTWRD /2.02/ TAD WORD2 /2.02/ JMS I [OUTWRD /2.02/ TAD WORD3 /2.02/ JMS I [OUTWRD /2.02/ JMP I OUT3WD /2.02/
/ DATA STATEMENT PAGE DLOOP2, JMS I [GETC JMP DATAER TAD (-250 /IS CHAR ( ? SZA JMP NOCMPD /NO, NOT COMPLEX DATA JMS I [NUMBER /GET REAL PART JMP DATAER SKP JMP DATAER /DP IS NG WITH COMPLEX JMS OUT3WD /2.02/ OUTPUT 3 WORDS JMS I [CHECKC /LOOK FOR COMMA -254 JMP DATAER /BAD IF NOT THERE JMS I [NUMBER /GET IMAGINARY PART JMP DATAER SKP JMP DATAER JMS I [CHECKC /LOOK FOR ) -251 JMP DATAER /NOT THERE JMP DATAFP /GO MOVE IMAGINARY PART NOCMPD, IAC /IS IT QUOTED STRING ? SZA JMP NQUOTD /NO TAD (DQUOTE /GET SUBR ADDRESS JMP HOLDAT /GO HANDLE IT NQUOTD, TAD (247-317 /IS IT AN O (OCTAL) SNA JMP I (XOCTAL /YES TAD (317-256 /IS IT . SNA CLA JMS I (TRUFAL /CHECK FOR TRUE OR FALSE JMP NOTF /NO TRUE-FALSE, TRY NUMBER CLL CML RTR /2000 DCA WORD2 TAD WORD2 SZA CLA IAC DCA WORD1 /TRUE=1.0 FALSE=0.0 DCA WORD3 JMP DATAFP /GO PUT IT NOTF, JMS I [BACK1 /PUT BACK CHAR JMS I [NUMBER /TRY FOR A NUMBER JMP DATAER /ELEMENT MISSING JMP TRYHOS /IF INTEGER, TRY FOR H OR * TAD (-3 DATAFP, TAD (-3 /FP DATA DCA TEMP /SIZE OF ITEM TAD [DATELM /DATA ELEMENT SIGNAL JMS I [OUTWRD TAD TEMP /THEN SIZE CIA /ALWAYS POSITIVE JMS I [OUTWRD JMP DATA3 /GO OUTPUT THE DATA TRYHOS, JMS I [GETC /LOOK FOR H JMP DATAER TAD (-310 SZA JMP TRYSTR /NOT H, MAYBE ITS * JMS I [FIXNUM /INTEGERIZE IT SNA JMP DHOLER /HOLLERITH DATA ERROR CMA DCA TEMP /SAVE COUNT TAD (DHLRTH /GET SUBR POINTER HOLDAT, DCA HCHAR CLL CMA RTL /2.02/ COUNT DCA TEMP2 /2.02/ BY THREES TAD (WORD1-1 /2.02/ DCA X10 /2.02/ POINTER HDLOOP, JMS I HCHAR /GET A CHAR JMP EOHD /2.02/ AND [77 /6 BITIZE IT CLL RTL RTL RTL /UPPER-PART-OF-WORDIZE DCA WORD3 /2.02/ STORAGIZE IT JMS I HCHAR /GET ANOTHER JMP LASTHD /LAST HALF WORD MUST GO OUT AND [77 TAD WORD3 /2.02/ COMBINIZE THE TWO HALVES DCA I X10 /2.02/ STORE IT ISZ TEMP2 /2.02/ THREE AT A TIME JMP HDLOOP /2.02/ JMS OUT3WD /2.02/ OUTPUT THREE JMP HOLDAT+1 /2.02/ GO DO NEXT THREE WDS EOHD, CLL CML RTL /2.02/ ANY CHARS IN THIS SET ? TAD TEMP2 /2.02/ SPA CLA /2.02/ JMP NXTDE /2.02/ NO, DO NEXT ELEMENT JMP .+4 /2.02/ YES, FILL IT OUT LASTHD, TAD WORD3 /2.02/ FILL OUT LOWER CHAR TAD (40 /2.02/ WITH A BLANK DCA I X10 /2.02/ TAD (4040 /2.02/ THEN FILL REST DCA I X10 /2.02/ WITH BLANKS TAD (4040 /2.02/ DCA I X10 /2.02/ JMP DATAFP /2.02/ GO OUTPUT IT TRYSTR, TAD (310-252 /* SNA CLA JMP .+3 JMS I [BACK1 /PUT BACK THAT CHAR JMP DATAFP /ITS JUST AN INTEGER TAD (DREPTC /REPETITION COUNT JMS I [OUTWRD JMS I [FIXNUM JMS I [OUTWRD /OUTPUT COUNT JMP DLOOP2 /LOOP
/ INITIALIZE READ IN *6400 INITLN, TAD IX7772 /READ FIRST SIX CHARS DCA TEMP TAD IXLINM DCA CHRPTR INITLP, CIF 10 JMS I [ICHAR /READ A CHAR JMP INITLN TAD IXM211 /TAB ? SZA CLA JMP NIXTAB /NO THIS ONE TAD IX0240 DCA I CHRPTR ISZ TEMP JMP .-3 JMP CHKCOM /DO COMMENT CHECK NIXTAB, TAD CHAR DCA I CHRPTR /STORE THE CHAR ISZ TEMP JMP INITLP CHKCOM, TAD I IXLINE /COMMENT ? TAD IXM303 SNA CLA JMP IGNORE /IGNORE IT TAD I IXLNP5 /CONTINUATION ? TAD IXM240 SZA CLA JMP IGNORE TAD IX7700 /FIX CALL CDF 10 /SEE WHAT HAPPENS WHEN YOU MOVE A ROUTINE** DCA I IXINCL CDF /** CIF 10 JMS I IX200 /REMOVE MONITOR 11 CDF 10 /FIX FIELD ONE STUFF TAD I MOV1 DCA I MOV2 ISZ MOV1 ISZ MOV2 ISZ MOVCNT JMP .-5 CDF JMP I IXRDFS /LOOK FOR PROG HEADER MOV1, 2020 MOV2, 20 MOVCNT, -160 IGNORE, CIF 10 /** JMS I [ICHAR /SKIP TILL CARRIAGE RETURN JMP INITLN CLA JMP IGNORE IXRDFS, RDFRST IXINCL, INCALL IXM240, -240 IXM303, -303 IX0240, 0240 IX200, 200 IX7600, 7600 IX7772, 7772 IXM211, -211 IX7700, 7700 /V3C
/ SEARCH FOR PROGRAM HEADER PAGE RDFRST, CIF 10 /** JMS I [ICHAR /THIS IS A DUPLICATE OF THE CODE JMP ENDLNF /AT LABEL 'RDLOOP' , ONLY THE TAD (-211 SNA TAD (240-211 TAD (211 DCA I CHRPTR /NAMES HAVE BEEN CHANGED TO ISZ CNT72 SKP JMP SKPFL2 TAD CHRPTR /PROTECT THE ASSEMBLY CIA CLL /(IT GETS THE FIRST LINE TAD (LINE+270 /WHICH MAY BE SUBROUTINE OR /FUNCTION. 1ST LINE SHORTER THAN REST BEC OF BUFFER OVERWRITES** SZL CLA /OR SOMETHING ELSE, IN WHICH CASE JMP RDFRST /ITS THE MAIN PROGRAM) JMS I [ERMSG /LINE TOO LONG 1424 JMP SKPFL /SKIP REST SKPFL2, CIF 10 /** JMS I [ICHAR JMP ENDLNF CLA JMP SKPFL2 SKPCMF, TAD X16 /BY ORDER OF THE EMPEROR DCA CHRPTR /MARIO DE NOBILI ENDLNF, TAD CHRPTR DCA X16 TAD CHRPTR DCA X10 TAD (-102 DCA CNT72 TAD (-6 DCA NCHARS GET6F, CIF 10 /** JMS I [ICHAR JMP SKPCMF TAD (-211 SZA CLA JMP NOTABF TAD (240 DCA I CHRPTR ISZ NCHARS JMP .-3 TAD (240 DCA CHAR JMP CCHEKF NOTABF, TAD CHAR DCA I CHRPTR ISZ NCHARS JMP GET6F CCHEKF, TAD I X10 TAD (-303 SZA CLA JMP NOCMTF SKPFL, CIF 10 /** JMS I [ICHAR JMP SKPCMF CLA JMP SKPFL NOCMTF, TAD CHAR TAD (-240 SNA CLA JMP GOTFST CCARDF, TAD X16 DCA CHRPTR JMP RDFRST GOTFST, TAD CHRPTR CIA TAD (LINE+4 DCA NCHARS TAD [LINE-1 DCA CHRPTR JMS I [SAVECP TAD (HDRLST-1 DCA X10 /PREPARE TO SEARCH THE LIST CLOOP1, CDF 10 /(FNC NAMES UP IN FLD 1)** TAD I X10 /OF LEGAL HEADER LINES CDF SZA /CODE IS AS UNDER 'CMDLUP' JMP CLOOP2 CLA CMA RAL TAD STACK DCA STACK CDF 10 /** TAD I X10 CDF DCA TEMP JMP I TEMP CLOOP2, DCA TEMP JMS I [GET2C JMP BADCMF CIA TAD TEMP SNA CLA JMP CLOOP1 SEARCH, CDF 10 /** TAD I X10 CDF SZA CLA JMP SEARCH ISZ X10 JMS I [RESTCP ISZ STACK ISZ STACK CDF 10 /** TAD I X10 CDF SZA JMP CLOOP2 BADCMF, JMS I [RESTCP /NOT A FUNCTION OR SUBROUTINE JMP I (LINE1 /SO GO TO MAIN PART OF COMPILER BADDIE, JMS I [MESSAG /SOMETHING MISSING FROM SYS 323 /S 331 /Y
/ ANALYZE PROGRAM HEADER PAGE SUBRTN, CLA CMA /SET TO -1 FOR SUBR JMP XXXFUN+1 REAFUN, TAD (102 /SET TYPE TO REAL DCA TYPE JMP XXXFUN LOGFUN, IAC /SET TYPE OF FUN DBLFUN, IAC /WITH DOUBLEMINT GUM ! CMPFUN, IAC IAC INTFUN, TAD (101 DCA TYPE JMS I [CHECKC /LOOK FOR 'N' -316 JMP BADBGN XXXFUN, CLA IAC DCA FUNCTN /SET SWITCH CDF 10 /1.05/ KILL ENTRY FOR 'MAIN' DCA I (ALIST+14 /1.05/ BUT DO IT BEFORE THE M BUCKET CDF /1.05/ CONTAINS ANYTHING USEFULL JMS I [GETNAM /GET FUNC/SUBR NAME JMP BADBGN JMS I [LOOKUP /PUT INTO SYMBOL TABLE DCA PROGNM TAD PROGNM /SET UP TYPE IAC DCA TEMP TAD STACK DCA X12 /SAVE POINTER DCA TEMP2 /ZERO ARG COUNTER CDF 10 TAD TYPE /PUT IN THE TYPE BITS TAD (1000 DCA I TEMP CDF JMS I [CHECKC /LOOK OFR ( -250 JMP ISITFN /IS IT A FUNCTION ? ARGLUP, JMS I [GETNAM /GET THE ARG JMP BADBGN JMS I [LOOKUP IAC DCA TEMP /ADDR OF TYPE WORD CDF 10 TAD I TEMP SZA CLA JMP BADBGN /ALREADY AN ARG TAD (20 DCA I TEMP CDF CMA TAD TEMP /OUTPUT ADDR OF ARG JMS I [PUSH ISZ TEMP2 /KEEP COUNT JMS I [COMARP /LOOK FOR , OR ) JMP BADBGN /NEITHER JMP ARGLUP /, TAD TEMP2 /) HOW MANY ARGS ? CDF 10 DCA I NEXT /INTO ARG LIST TAD TEMP2 CIA DCA TEMP2 TAD NEXT /SAVE ADDR OF ARG LIST DCA ARGLST CDF TAD X12 /RESTORE THE STACK DCA STACK MOVARG, TAD I X12 /PUT ARGS INTO ARG LIST CDF 10 DCA I NEXT CDF ISZ TEMP2 JMP MOVARG JMP I [NEXTST /DO NEXT LINE TYPE=WORD6 ISITFN, TAD FUNCTN /IS IT A FUNCTION SPA SNA CLA /WITH NO ARGS ? JMP I [NEXTST /NO, WE'RE OK BADBGN, JMS I [ERMSG 2010 JMP I [NEXTST BDATA, JMS I [CHECKC /LOOK FOR A -301 JMP BADBGN CLL CMA RAL /SET FUNCTION SWITCH DCA FUNCTN /2.02/ STORE IT DUMMY!! TAD (BDLIST-1 /POINTER TO LIST OF PATCHES DCA X10 BDLOOP, CDF 10 TAD I X10 /GET PATCH LOCATION CDF SNA JMP I [NEXTST /NO MORE PATCHES DCA TEMP /SAVE PATCH ADDRESS TAD BADJMP /GET ERROR JUMP DCA I TEMP /STORE IT JMP BDLOOP /LOOP BADJMP, JMP I [BDERR
/ INITIAL SYMBOL TABLE FIELD 1 *2020 NOPUNC *20 ENPUNC 0 BLNKCN, 111;0 /BLANK COMMON SLOT ALIST, 0;0;0;0;0;0;0;0;0;0;0;0;MAIN;0;0;0;0;0;0;0;0;0;0;0;0;0 HOLIST, 0 FPLIST, 0 DPLIST, 0 INTLST, ONE CMPLST, 0 SNLIST, 0 ONE, THREE;0;1;2000;0 THREE, SIX;0;2;3000;0 SIX, 0;0;3;3000;0 TRUE, 0;0145;0 MAIN, 0;1000;0;0111;1600 FREE, 0
/ BLOCK DATA PATCH LIST BDLIST, IF /BLOCK DATA PATCH LIST DOUBLE DO GOTO CALL READ REWIND ENDFIL FORMAT WRITE BACKSP ASSIGN STOP PAUZE DFINFL FIND ITSAR 0
/ INITIALIZATION *2200 START, SKP /NON-CHAINED ENTRY POINT JMP .+5 /CCL ENTRY CIF CDF 10 /START HERE JMS I (200 /COMMAND DECODE 5 0624 /DEFAULT EXT IS .FT TAD I L7600 /IS AN OUTPUT FILE GIVEN ? SNA CLA JMP MYFILE /NO, USE FORTRN.TM MOVOFN, TAD I OFNAME /MOVE NAME INTO PAGE 0 CDF DCA I NAMEOF CDF 10 ISZ NAMEOF ISZ OFNAME ISZ OFNSIZ JMP MOVOFN EXTEST, TAD I (7604 /SET DEFAULT EXTENSIONS SZA JMP EXTSET TAD I (7643 SPA JMP GETRA /A WAS SET.USE RA AND L41 /CHECK FOR L+G SNA CLA TAD (0610 /USE RL TAD (1404 /USE LD EXTSET, DCA I (7604 TAD I (7604 CDF 0 DCA I NAMF CDF 10 TAD I (7611 SNA TAD (1423 /.LS FOR LISTING DCA I (7611 TAD I (7616 SNA TAD (1520 /.MP FOR LOAD MAP DCA I (7616 EFILE, CLA IAC /OPEN PASS1 OUTPUT FILE JMS I (200 3 OBLOK, TMPFL2 OSIZE, 0 JMP OBAD /BADDIE CDF TAD OBLOK /SAVE STARTING BLOCK DCA OUBLOK TAD OBLOK DCA I (OUFILE TAD OSIZE DCA OULEN CDF 10 CLA IAC JMS I (200 /GET PASS2 2 SPASS2, PASS2N 0 JMP OBAD CLA IAC JMS I (200 2 SP2O, PAS2ON /GET PASS2 OVERLAY 0 JMP OBAD CDF /SAVE PASS2 AND PASS2O BLOCKS TAD SPASS2 DCA PASS2B TAD SP2O /SKIP FIRST BLOCK IAC /ITS THE CORE TABLE DCA I (PASS2O CIF JMP INITLN /GO START COMPILE MYFILE, CDF /PUT DEFAULT INTO 17600 TAD I NAMOF DCA I NAMEOF TAD I NAMOF /ALSO INTO PAGE 0 CDF 10 DCA I OFNAME ISZ NAMOF ISZ NAMEOF ISZ OFNAME ISZ OFNSIZ JMP MYFILE CLA IAC /SET DEV TO SYS DCA I L7600 JMP EXTEST /GO OPEN FILE OBAD, CIF CDF JMP BADDIE OFNAME, 7601 /IGNORE DEVICE (ALWAYS USE SYS) NAMEOF, TMPFIL+4 NAMOF, TMPFIL OFNSIZ, -3 TMPFL2, 0617;2224;2216;2415 /FORTRN.TM PASS2N, 2001;2323;6200;2326 /PASS2.SV PAS2ON, 2001;2323;6217;2326 /PASS2O.SV NAMF, TMPFIL+7 L7600, GETRA, 7600 /CLA TAD (2201 /V3C USE RA JMP EXTSET L41, 41
PAGE / PROGRAM HEADER LIST HDRLST, TEXT 'INTEGERFUNCTIO' INTFUN TEXT 'REALFUNCTION' REAFUN TEXT 'COMPLEXFUNCTIO' CMPFUN TEXT 'DOUBLEPRECISIONFUNCTIO' DBLFUN TEXT 'LOGICALFUNCTIO' LOGFUN TEXT 'FUNCTION' XXXFUN TEXT 'SUBROUTINE' SUBRTN TEXT 'BLOCKDAT' BDATA 0
/ PS-8 FILE INPUT ROUTINES /NEED TWO PAGES BEC. MOVING ICHAR OUT OF FIELD 1 REQUIRES /ALOT OF FIELD DIDDLING. *5400 MORCHR, TAD (214 /FIX CHAR CDF 0 /** DCA I QCHAR CDF 10 TAD I (ICHAR IAC /UPDATE ADDR DCA TCHAR CIF CDF 0 TAD I QCHAR /RETURN VALUE IN AC JMP I TCHAR TCHAR, 0 QCHAR, CHAR / EXTENDED OPERATOR LIST OPRLST, -01;-1604;ANDOPR -17;-2200;OROPR -05;-2100;EQOPR -16;-0500;NEOPR -07;-0500;GEOPR -07;-2400;GTOPR -14;-0500;LEOPR -14;-2400;LTOPR -30;-1722;XOROPR -05;-2126;EQVOPR 0 / EXPONENT TABLE PETABL, 0004;2400;0000 /1E1 0000;0000;0000 0007;3100;0000 /1E2 0000;0000;0000 0016;2342;0000 /1E4 0000;0000;0000 0033;2765;7020 /1E8 0000;0000;0000 0066;2160;6744 /1E16 6770;1000;0 0153;2356;1326 /1E32 6501;2670;2655 0325;3023;6017 /1E64 5117;7747;6466 0652;2235;6443 /1E128 7114;0164;6145 1523;2523;7565 /1E256 7734;7374;7357 3245;3430;6320 /1E512 2565;1407;2176 ENDSTM, 211;"E;"N;"D;215;211;215;232 /V3C /FAKE END STATEMENT USED IF PROGRAM HAS NONE
PAGE
/MAIN PART OF OS/8 INPUT ROUTINES ICHAR, 0 /READ CHAR FROM INPUT FILE CDF 10 ISZ INJMP /BUMP THREE WAY UNPACK SWITCH ISZ INCHCT INJMPP, JMP INJMP / CDF ** TAD INEOF /DID LAST READ YEILD END OF FILE ? SNA CLA JMP INGBUF /NO, DO ANOTHER READ GETNEW, JMS INNEWF /OPEN A NEW INPUT FILE JMP ENDIN /END OF INPUT INGBUF, TAD INCTR /BUMP RECORD COUNTER CLL IAC SNL DCA INCTR /RESTORE IF IT HASN'T OVERFLOWED SZL ISZ INEOF /SET END OF FILE SWITCH CDF 10 /** CIF 0 /** JMS I INHNDL /DO THE READ 0210 /ONE BLOCK TO FIELD 1 INBUFP, INBUF INREC, 0 JMP INERR /HANDLER ERROR INBREC, ISZ INREC /BUMP RECORD NUMBER TAD INBUFP /RESET BUFFER POINTER SVIBPT, DCA INPTR /V3C TAD (-601 /SET CHAR COUNT DCA INCHCT TAD INJMPP /RESET THREE WAY JUMP SWITCH DCA INJMP JMP ICHAR+1 /GO AGAIN INERR, ISZ INEOF /EITHER EOF OR BADDIE SMA CLA JMP INBREC /END OF FILE, DO NEXT FILE JMP TERR /INPUT ERROR, GIVE I F AND EXIT ENDIN, TAD (ENDSTM /V3C IF NO END STATEMENT, FORCE ONE JMP SVIBPT /ENDIN, TAD INCALL /END OF INPUT IS USR IN CORE ? / TAD (-200 / CIF 0 /** / SZA CLA / JMP I (ENDX /NO, ITS END OF PROG TERR, JMS I (MESSAG /YES, BAD INPUT. WAS SQ.BRCK** 311 306 INJMP, HLT /3 WAY CHAR UNPACK BRANCH JMP ICHAR1 JMP ICHAR2 ICHAR3, TAD INJMPP /RESET JUMP SWITCH DCA INJMP TAD I INPTR AND (7400 /COMBINE THE HIGH ORDER BITS CLL RTR /OF THE TWO WORDS RTR TAD INTMP /TO FORM THE THIRD CHAR RTR RTR ISZ INPTR /BUMP WORD POINTER JMP ICHAR1+1 /DO SOME COMMON STUFF ICHAR2, TAD I INPTR /SAVE THE HIGH ORDER BITS AND (7400 DCA INTMP /FOR THE THIRD CHAR ISZ INPTR /GO TO THE SECOND WORD ICHAR1, TAD I INPTR /GET THE LOW 8 BITS / CDF AND (177 /AND I MEAN ONLY 8 !! SNA /V3C YOU WERE WRONG - YOU MEANT ONLY 7 JMP ICHAR+1 TAD (-32 /IS IT ^Z (END OF FILE) SNA JMP GETNEW /YES, LOOK FOR THE NEXT FILE TAD (232-212 SNA JMP ICHAR+1 /IGNORE LINE FEEDS TAD (212-215 SNA JMP ICHARN /RETURN ON CARRIAGE RETURN ** IAC SNA JMP ICHAR+1 /IGNORE FORM FEEDS JMP I (MORCHR /** ICHARN, CIF CDF 0 JMP I ICHAR INTMP, 0 INFPTR, 7617 /POINTER TO INPUT FILE LIST INEOF, 1 INCHCT, INNEWF, -1 /FETCH HANDLER FOR NEXT FILE CDF 0 /** TAD (INDEVH+1 /THIS IS WHERE IT GOES ** DCA INHNDL CDF 10 TAD I INFPTR /GET NEXT INPUT FILE INFO SNA JMP I INNEWF /NO MORE FILES CDF 10 /WAS CIF 10** JMS I INCALL /CALL MONITOR 1 /FETCH HANDLER INHNDL, 0 /ENTRY ADDR GOES HERE JMP INERR+3 /THIS CAN'T HAPPEN HERE TAD I INFPTR /GET LENGTH AND (7760 SZA /A ZERO HERE MEANS >=256 BLOCKS TAD (17 /PUT IN SOME MORE BITS CLL CML RTR RTR DCA INCTR /STORE LENGTH OF FILE ISZ INFPTR TAD I INFPTR /GET STARTING RECORD NUMBER DCA INREC ISZ INFPTR DCA INEOF /CLEAR EOF FLAG ISZ INNEWF JMP I INNEWF INCTR, 0 INCALL, 200 /CHANGED TO 7700 AFTER FIRST TIME INPTR, 0 PAGE
/ KEYWORD LIST CMDLST, -1106;0;IF /IF -0417 -2502 -1405 -2022 -0503 -1123 -1117;0;DOUBLE /DOUBLE PRECISION -0417;0;DO /DO -0717 -2417;0;GOTO /GOTO -0317 -1515 -1716;0;COMMON /COMMON -0317 -1520 -1405;0;COMPLE /COMPLEX -0317 -1624 -1116 -2505;0;NEXTST /CONTINUE -0301 -1414;0;CALL /CALL -2205 -0114;0;REAL /REAL -2205 -0104;0;READ /READ -2205 -2711 -1604;0;REWIND /REWIND -2205 -2425 -2216;0;RETURN /RETURN -0516 -0406 -1114;0;ENDFIL /ENDFILE -0516;0;XEND /END -0411 -1505 -1623 -1117;0;DIMENS /DIMENSION -0401 -2401;0;DATA /DATA -0617 -2215 -0124;0;FORMAT /FORMAT -2722 -1124;0;WRITE /WRITE -0521 -2511 -2601 -1405 -1603;0;EQUIV /EQUIVALENCE -0405 -0611 -1605 -0611 -1405;0;DFINFL /DEFINEFILE -1116 -2405 -0705;0;INTEGE /INTEGER -1417 -0711 -0301;0;LOGICA /LOGICAL -0530 -2405 -2216 -0114;0;EXTERN /EXTERNAL -0201 -0313 -2320 -0103;0;BACKSP /BACKSPACE -0123 -2311 -0716;0;ASSIGN /ASSIGN -2001 -2523;0;PAUZE /PAUSE -2324 -1720;0;STOP /STOP -0611 -1604;0;FIND /FIND 0 /END OF LIST $



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search