File CREF.04

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

/PDP-8 PS/8 CROSS REFERENCE
/VERSION 04

/1 APRIL 1971		EF/EF

/COPYRIGHT 1971		DIGITAL EQUIPMENT CORP.
/				MAYNARD,MASS.


/CREF IS A CROSS REFERENCING PROGRAM FOR THE PS/8 ASSEMBLERS,
/PAL8 AND SABR. THE PURPOSE OF CREF IS:

/ 1) PROVIDE A SEQUENCE NUMBERED (DECIMAL) OUTPUT LISTING

/ 2) PROVIDE A LIST OF ALL USER DEFINED SYMBOLS AND LITERALS
/   AND THE SEQUENCE NUMBER OF THE LINES IN WHICH THEY OCCUR

/DETAILS OF CREF. /CORE UTILIZED /FIELD 0 /0-3177: MAINLINE CREF CODE /4000-4377: INITIALIZATION CODE.EXECUTED ONCE AT BEGINNING /LATER OVERWRITTEN BY INPUT BUFFER /3200-3577: INPUT DEVICE HANDLER /3600-4177: OUTPUT HANDLER /4200-5577: INPUT BUFFER /7200-7577: OUTPUT BUFFER /5600-7174: USED FOR REFERENCE STORAGE /FIELD 1 /0-NSYM*4+10 NSYM=NO. OF SYMBOLS.(USER+PERMANENT+LITERALS). /7424-7577 PSEUDO OP TABLE /THE REMAINDER IS USED FOR REFERENCES DURING PASSES GREATER THAN ONE /SYSTEM SCRATCH USED. /IF CREF DECIDES THAT MORE THAN 2 PASSES ARE REQUIRED, THE SYMBOL /TABLE IS SEGMENTED AT AN OPTIMUM POINT, AND PART IS SAVED /IN SCRATCH BLOCKS 27-50 FOR A THIRD (OR LARGER) PASS. /MAJOR ROUTINES AND CODE SECTIONS /MAIN-START OF TEXT PROCESSING.CHECKS FOR VALID LINE.READS AND WRITES /TEXT LINES /CVTSEQ CONVERTS SEQUENCE NUMBERS FROM OCTAL TO DECIMAL AND / WRITES THEM INTO THE OUTPUT BUFFER /GETLIN- GET A LINE OF INPUT INTO LINE BUFFER /WRTLIN- WRITE A LINE OF TEXT INTO OUTPUT BUFFER /ANALYZ- LINE SCANNING BEGINS.ALL SYMBOLS COLLECTED HERE /PACK- CHARACTER PACKING ROUTINE. THE SCHEME USED MAPS LETTERS /A-Z AND [,],\,^ INTO 0-37. 0-9 INTO 40-51 / THE PACKING IS: CHAR1-300^52+CHAR2-300 /SYMCHK- BINARY SYMBOL TABLE SEARCH /ENTRY- MAKES ENTRIES IN USER SYMBOL TABLE /BUMP- BUMPS REFERENCE COUNTER OF SYMBOLS IN PASS 1 /ENDPAS- TERMINATES A PASS THROUGH INPUT /PASSN2- FILLS IN REFERENCE STORAGE ARE DURING PASSES / AFTER POASS ONE /DUMP- DUMPS CREF TABLE TO OUT BUFFER /SWITCHES IN CREF: / /R=INPUT IS SABR CODE /P=DISABLE LISTING OUTPUT. RE ENABLE FOR CREF TABLE /X=DON'T CREF LITERALS
/PAGE ZERO FOR CREF *10 /AUTO INDEX REGISTERS XRLINE, SYMTAB-1 /USED TO MOVE UP SYMBOL TABLE XRLIT, -1 /DITTO XRSYM1, 0 XRSYM2, 0 /THESE ARE USED IN SEARCHING SYMBOLS *20 TXTBEG, LINBUF+12 /TEXT STARTS HERE MARGIN, LINBUF-1 /LINE BUFFER COUNT, 0 /GENERAL COUNTER CHAR, 0 /HOLDS CHARACTER TO EXAMINE SEQNO, 0 /SEQUENCE NO. SAVE, 0 TEMP, 0 TEMP1, 0 /THESE THREE ARE TEMPORARY STORAGE DSWIT, 0 RSWIT, 0 /CD SWITCH WORDS MLF, -212 /-LINE FEED SYMCNT, -6 /ALLOW 6 CHARACTER SYMBOLS ISYM, SYM1 /POINTER TO SYMBOL COLLECTOR PSWCH, 0 /PACK SWITCH..LEFT OR RIGHT HALF SYM1, 0 SYM2, 0 SYM3, 0 /COLLECT SYMBOLS HERE USER, 0 /USER MUST FOLLOW SYM3! 110 /INITIAL SYMBOL TABLE ENTRIES PSEUDO, 0 0 /THESE 2 GET FILLED IN AT INITIALIZATION PASN2, PASSN2 /IF NOT PASS 1 GO HERE WITH A SYMBOL PASSG1, -1 /=0 IF NOT PASS1 MAXFLD, 0 /-# OF FIRST NON-EXISTENT FIELD CONST, 0 /EITHHER 0 OR 96(10) FLDPTR, 0 /POINTER TO CORE FIELD USR, 200 /MONITOR IN CORE..CHANGED TO 7700 DOLLAR, DOLL1 SYMFLD, 2 /FIELDS WITH SYMBOLS: BITS 5-11 MASKF, 0 /MASK FOR ABOVE WORD /THESE ARE THE PRESENT PARAMETERS FOR THE I/O ROUTINES OUCTL=4200 OUBUF=7200 OUDEVH=3600 OUFLD=OUCTL&70 INCTL=0600 INBUF=4200 INDEVH=3200 INRECS=3 INFLD=INCTL&70 /(SUBJECT TO CHANGE WITHOUT NOTICE!) SYMADD, 0 /CONTAINS SYMBOL ADDRESS SYMNUM, 0 /ABOVE MOD 4 K0=USER BUFFER, 0 /POINTER FOR UNPACKING R=52 RAD=52 /RADIX FOR CONVERTING SYMBOLS ADDER, 0 SYSM, 0 BASE, 0 /THESE ARE USED TO END A PASS SYMLIM, 0 /UPPER LIMIT FOR SYMBOL REF TABLE FINI, 0 IOSR, 0 JMS I [7607 CNTROL, 4010 /THIS IS ON PAGE ZERO MAINLY CTPTR, 4 /BECAUSE CTPTR IS USED A LOT SCRATCH=27 SCRATCH /SYSTEM SCRATCH FOR OVERFLOW JMP I [ERROR /ERROR ON SYS!!! JMP I IOSR LNPRPG, -70 /# LINES OF TEXT PER PAGE THOUS, 6030 /CONVERSION TABLE..OCTAL-DECIMAL 7634 7766 7777 FPUT, STORIT /INITIALLY POINTS TO DCA I XRLINE M12=THOUS+2 M1=THOUS+3
*200 JMP I (ST1 /INITIALIZATION GETS DESTROYED BREAK, JMP I (CHAIN /CHAIN ENTRY POINT ZBLOCK 7 /BREAK TABLE. HOLDS SYMBOL /NUMBERS DURING VARIOUS PASSES /OF CREF. THE ENTRIES ARE THE NUMBER /OF THE LARGEST SYMBOL /WHOSE REFERENCES ARE IN A PARTICULAR /FIELD. THE 0TH ENTRY CORRESPONDS TO /FIELD 0. ERROR, DCA SAVE TAD [-6 DCA SYMCNT /12 CHARACTER MESSAGES TAD SAVE CLL RAL DCA SAVE /NOW FORMING ADDRESS OF ERROR MESSAGE TAD SAVE CLL RAL TAD SAVE TAD MSGBS DCA BUFFER /POINTS TO APPROPRIATE ERROR MESSAGE TAD TTY /POINT TO TTY OUT ROUTINE DCA [OCHAR TAD I BUFFER JMS I [DIVIDE /CONVERT AND PRINT MESSAGE ISZ SYMCNT JMP .-3 JMP I [7605 MSGBS, MSGTBL TTY, TTYPRT CLEAR, 0 /ROUTINE TO CLEAN OUT OLD SYMBOL DCA SYM1 DCA SYM2 DCA SYM3 JMP I CLEAR /THE INPUT LINE IS STORED HERE. XRLINE POINTS TO VARIOUS /PLACES THROUGHOUT THE SCAN, AND CHAR HOLDS THE CORRESPONDING /CHARACTER WHILE WE EXAMINE IT. LINBUF=. LITBUF=.+6 VERTST=.+4
*400 /MAIN IS THE START OF CREF.(IF SABR, NXTLIN IS START). /AT MAIN WE SCAN A LINE OF TEXT FOR BINARY DATA. IF NONE IS FOUND, /THE LINE IS WRITTEN OUT AND A NEW LINE READ. IF BINARY IS FOUND, /THE SEQUENCE NUMBER OF THE LINE IS PLACED IN THE OUTPUT /BUFFER AND THE ANALYSIS BEGINS AT ANALYZ. MAIN, JMS I [FORM /FORM FEED (CR/LF) JMS I [HEADER /SKIP HEADER JMS I (GETLIN /AND ONE CR/LF NOTBIN, JMS WRTLIN NXTLIN, JMS I (GETLIN TAD I XRLINE DCA CHAR JMS I [CHECK /CHECK FOR ALPHA LINE 301 -336 SKP JMP NOTBIN TAD CHAR TAD MCTLD /IF RUB OUT, USED /D SNA JMP I [ENDPAS /CAN'T OUTPUT SYM TABLE TAD (163 /CHECK FOR FORM FEED SNA JMP MAIN /YES.. TAD (-41 /IF ------, HE USED /T(DUMMY!) SNA CLA JMP MAIN /GIVE HIM A FORM FEED NOFORM, ISZ LNPRPG /=0 AFTER PASS1 NEW PAGE? SKP /SKIP A FORM FEED JMS I [FORM ISZ SEQNO /BUMP SEQUENCE JMP MAIN2 TAD [140 DCA CONST MAIN2, JMS I [PASTST /STILL PASS ONE? JMP MAIN3 TAD SEQNO JMS CVTSEQ TAD [-3 /3 SPACES JMS I [SPACE MAIN3, TAD CHAR TAD [-215 SNA CLA JMP NOTBIN JMP I [ANALYZ MCTLD, -377 /RUB OUT /THIS ROUTINE CONVERTS SEQUENCE NUMBERS TO DECIMAL NUMBERS AND /PUTS THEM INTO THE OUTPUT BUFFER. IT IS USED WHEN PRINTING /THE CREF TABLE ALSO /THE CALLING SEQUENCE IS: AC=OCTAL NUMBER TO BE CONVERTED. /THE OUTPUT IS AUTOMATICALLY 4 DIGITS. POSPT=TEMP1 DIGPT=MASKF CVTSEQ, 0 TAD CONST DCA SAVE /TEMP STORE TAD CONST SZA CLA TAD [4 DCA DIGIT1 DCA DIGIT1+1 DCA DIGIT1+2 DCA DIGIT1+3 /ZERO CONVERSION AREA TAD [-4 DCA COUNT TAD SAVE CLL /SEE IF SEQUENCE IS ABOVE 8000(10) TAD CONST /EITHER 0 OR 140(8) SNL JMP CVT2 /O.K. DCA SAVE /CORRECTED NUMBER TAD [10 DCA DIGIT1 /PUT AN 8 INTO THERE FOR PRINTING CVT2, CLA TAD (DIGIT1 DCA DIGPT TAD (THOUS DCA POSPT TAD SAVE RPEAT, CLL TAD I POSPT /POINTS TO -1000,-100,-10, OR -1 SNL /IF LINK ON,WE DID TOO MUCH JMP ADDUP /COLLECT THE CONVERTED DIGIT ISZ I DIGPT /BUMP THE COUNTER DIGIT1-DIGIT1+3 JMP RPEAT ADDUP, CIA /RESTORE THE LAST ONE TAD I POSPT CIA ISZ POSPT ISZ DIGPT ISZ COUNT /DONE ALL 4? JMP RPEAT TAD [-4 /YES..OUTPUT THE CONVERTED NUMBERS DCA COUNT TAD (DIGIT1 DCA DIGPT SPCLUP, TAD I DIGPT TAD ZSPRES /LEADING ZERO SUPPRESSION DCA ZSPRES TAD ZSPRES SNA CLA /ZSPRES IS 0 UNTIL A VALID # IS FOUND TAD (-20 TAD I DIGPT TAD [260 JMS I [OCHAR ISZ DIGPT ISZ COUNT JMP SPCLUP DCA ZSPRES JMP I CVTSEQ DIGIT1, 0 0 0 0 ZSPRES, 0
/WRTLIN TRANSFERS INPUT LINE TO OUTPUT BUFFER WRTLIN, 0 TAD MARGIN DCA XRLINE /RESET MARGIN TO LEFT OLINE, TAD I XRLINE /PICK UP TEXT CHARACTER DCA CHAR TAD CHAR SNA /IF NULL,WAS PREMATURE TERMINATOR JMP FLUSH /YES. READ AND WRITE THE REST JMS I [OCHAR /OUTPUT THE CHARACTER TAD CHAR TAD MLF /WAS THIS END OF LINE? SZA CLA JMP OLINE /NO..LOOP AGAIN JMP I WRTLIN FLUSH, JMS I [HEADER JMP I WRTLIN /OVERFLOW NOT IN BUFFER
*600 /ANALYZ IS A WORK HORSE. IN IT CHARACTERS ARE EXAMINED AND /SYMBOLS ARE BUILT UP. IF A SYMBOL OR A REFERENCE TO A /SYMBOL IS FOUND,THE APPROPRIATE ACTION IS TAKEN;I.E. /EITHER ENTERING A NEW SYMBOL, BUMPING THE RFERENCE COUNTER, /OR BOTH. ANALYZ, TAD SEMISV /IF #0, LAST WAS SEMICOLON SNA TAD TXTBEG /IF=0, START NORMALLY DCA XRLINE SCAN, TAD I XRLINE DCA CHAR JMS I [CHECK /ALPHANUMERIC CHECK 301 -332 SKP /NONE..TEST FOR PECIAL CHARS JMP PAKIT /FOUND A LETTER PACK AWAY JMS I [CHECK /TEST FOR 0-9 260 -271 SKP /NOPE..COULD BE SABR JMP SCAN1 SCAN3, JMP TSTIT /IF SABR, THIS LOC IS AND 0 SCAN2, JMS I [CHECK /TEST FOR [,],\,AND ^ 333 -336 SKP JMP PAKIT /VALID SABR CHARACTERS TSTIT, JMS REPACK TAD CHAR /IS THIS A ;? TAD (-273 /IF SO, SAVE PLACE ON LINE SZA CLA JMP .+3 /IF ; SAVE PLACE ON LINE TAD XRLINE DCA SEMISV TAD SYM1 /IS THERE A LEGAL SYMBOL? SNA CLA JMP TSTEND /NO..LOOK FOR A LINE FEED TAD CHAR TAD (-257 SNA CLA /A COMMENT? IAC /YES..NEED SPECIAL RETURN DCA SLSWIT REF, JMS I [SYMCHK /THIS IS EITHER A REFERENCE OR A /DEFINITION OR A PERMANENT SYMBOL,PSEUDO PSEUDO /CHECK PSEUDOS FIRST JMP USSYM /NOT A PSEUDO-OP TAD SYMADD TAD [3 DCA SAVE /SYMCHK RETURNS ADDRESS OF SYMBOL IN SYMADD CDF 10 TAD I SAVE DCA SAVE CDF 0 JMS I (CLEAR /WIPE OUT PSEUDO OP JMP I SAVE /PERFORM THE NECESSARY OP FOR PSEUDO USSYM, JMS I [PASTST JMP I PASN2 JMS I [SYMCHK USER /CHECK PERMANENT AND USER SYMBOLS JMP NTER /DIDN'T FIND IT; SO WE HAVE TO ENTER IT JMS I [TSTPRM /FOUND;TEST FOR PERMANENT SYMBOL JMP B /WAS A PERMANENT SYMBOL JMP BMPIT /FOUND AND NOT PERMANENT;INCREASE THE /REFERENCE COUNTER BY ONE NTER, JMS I [ENTRY /ENTER THE SYMBOL BY PUSHING DOWN ALL /THE ONES BELOW IT BMPIT, JMS I [BUMP /AND INCREASE THE REFERENCE COUNT B, JMS I [CLEAR /SETUP FOR NEXT TAD SLSWIT /WAS LAST A /? SZA CLA JMP I (NOTBIN JMP SCANER TSTEND, TAD CHAR SNA /IF NULL, END THE LINE JMP CLRSEM TAD MLF /ARE WE DONE WITH THIS LINE? SZA CLA JMP .+3 /IF LF, CLEAR OUT SEMICOLON CLRSEM, DCA SEMISV JMP I (NOTBIN TAD CHAR TAD (-257 SNA /COMMENT LINE? JMP CLRSEM TAD (15 /A "? SNA ISZ XRLINE /YES..SKIP NEXT LETTER TAD [-2 /A $? SNA JMP I DOLLAR TAD [-4 SNA /TEST FOR ( JMP I (LIT1 TAD (-63 SZA CLA /TEST FOR [ JMP SCANER /NONE OF THEM KEEP GOING JMP I (LIT2 SCAN1, TAD SYM1 /IF WE DON'T HAVE A SYMBOL SNA CLA /DON'T PACK THIS CHARACTER JMP SCAN PAKIT, TAD CHAR JMS I [PACK /PACK A CHARACTER JMP SCAN REPACK, 0 /RESET SYMBOL AREA TAD [-6 DCA SYMCNT /SYMBOL COUNTER..6 CHARS TAD (SYM1 DCA ISYM DCA PSWCH JMP I REPACK SEMISV, 0 SLSWIT, 0 SCANER, TAD CHAR /IF LAST WAS ; READ IN OVERLAY TAD (-273 SNA CLA JMP I (NOTBIN JMP SCAN SUB3, 0 /SUBTRACTS 3 FROM CTPTR TAD [-3 TAD CTPTR DCA CTPTR JMP I SUB3 *1000 /THE PACKING SCHEME IS THE SAME AS THAT USED IN PAL8. THAT IS /IN EACH WORD WE HAVE 2 CHARS. CHAR1-300^45+CHAR2-300. /PERMANENT SYMBOLS HAVE THE FIRST WORD SET TO A NEGATIVE. PACK, 0 DCA BLAH TAD SYMCNT SMA CLA /OVERFLOW PROTECT JMP I PACK TAD BLAH AND [77 /STRIP IT TAD (-37 /INCLUDE VALID SABR CHARS SMA SZA TAD (-20 /NUMBERS GET MAPPED: 40-51 TAD (37 /LETTERS ARE MAPPED:01-37 ISZ PSWCH /WHICH HALF? JMP LEFT TAD I ISYM DCA I ISYM ISZ ISYM JMP PCKOUT LEFT, CLL RAL /*2 DCA TLOW TAD TLOW CLL RTL DCA SAVE /*10 TAD SAVE CLL RTL /*40 TAD SAVE TAD TLOW /*52!! DCA I ISYM CLA CMA /RESET FLIP FLOP DCA PSWCH PCKOUT, ISZ SYMCNT NOP JMP I PACK BLAH, 0
/SYMCHK IS THE BINARY SEARCH ROUTINE FOR CREF. SYMBOLS /ARE A GROUP OF FOUR ENTRIES:THE FIRST THREE WORDS ARE /THE STRIPPED-40 REPRESENTATION OF THE SYMBOL. THE LAST /IS THE REFERENCE COUNTER (IN THE CASE OF A USER SYMBOL) OR /A -1 (IN THE CASE OF A PERMANENT SYMBOL). IN PSEUDO OPS /THE FOURTH WORD DESCRIBES THE DESTINATION OR ACTION /TO BE PERFORMED BY THAT PSEUDO OP. /THE TABLE USER,0 HAS ENTRIES WHICH ARE THE SYMBOL NUMBER /AND NOT THE ABSOLUTE CORE LOCATION OF A SYMBOL. /CALLING SYMCHK: / JMS SYMCHK / TABLE /FIRST WORD OF TWO WHICH GIVES THE LIMITS /MOD 4 OF THE APPROPRIATE TABLE /SYMCHK RETURNS WITH THE NUMBER OF THE SYMBOL IN SYMNUM /AND THE CORE ADDRESS OF THE SYMBOL IN SYMADD. IF THE /SYMBOL IS NOT FOUND, THESE WORDS CONTAIN THE PROPER LOCATION /FOR THE SYMBOL. SYMCHK, 0 TAD I SYMCHK DCA THI DCA LAST TAD I THI /GET LIMITS OF TABLE DCA TLOW /LOW LIMIT ISZ THI TAD I THI DCA THI /HIGH LIMIT COMP, TAD TLOW CIA TAD THI CLL RAR /HALF DIFFERENCE BETWEEN THE LIMITS SNA /IF THIS IS ZERO, WE'RE DONE ISZ LAST /THIS WILL BE LAST TRY TAD TLOW /FORM THE NUMBER OF THE ENTRY DCA SYMNUM /WE ARE GOING TO TEST NOW JMS I (SETXR /SET UP INDICES FOR TEST ISZ COUNT /WE ONLY WANT -3 IN COUNT! S1, CLL CDF 10 TAD I XRSYM2 /SYMBOL TABLE ENTRY CDF 0 AND [3777 /MASK PERMANENT SYMBOL BIT CMA /USE ONE'S COMPLEMENT TAD I XRSYM1 /OUR COLLECTED SYMBOL CMA /0 AC IF EQUAL SZA CLA /WATCH THE LINK!! JMP COMPR /NOW TEST FOR HI OR LOW COMPARISON ISZ COUNT JMP S1 ISZ SYMCHK /TAKE FOUND ENTRY JMP OUT1 COMPR, TAD LAST /LAST GASP? SZA CLA JMP OUT2 /YEP TAD SYMNUM /LINK TELLS THE TALE! SNL JMP COMP-1 /ADJUST HIGH LIMIT DCA TLOW JMP COMP OUT2, TAD SYMNUM SZL IAC DCA SYMNUM OUT1, TAD SYMNUM /ADDING THE FIRST ENTRY AFTER SZA /AN EXPUNGE WILL CAUSE SYMNUM TO BE 0 /AUTOMATICALL IT HAS TO BE 1 JMP .+3 ISZ SYMNUM JMP OUT1 CLL RTL /FORM SYMADD FROM SYMNUM DCA SYMADD /CORE ADDRESS OF THE SYMBOL ISZ SYMCHK JMP I SYMCHK THI, 0 TLOW, 0 LAST, 0 /THESE TABLES DEFINE THE LIMITS OF CORE STORAGE IN CREF. /BASTBL GIVES THE START LOC WHERE REFERENCES WILL BE STORED. /LTTBL GIVES THE LO CORE LIMIT OF THOSE REFS. THERE IS ONE ENTRY FOR /EACH FIELD BASTBL, 7174 /THIS TABLE GIVES THE BASE 7424 /LOCATIONS INEACH FIELD WHERE THE 7574 /REFERENCES BEGIN 7574 /REFS START HERE AND BUILD TOWARD LOWER 7574 /CORE ADDRESSES 7574 7574 7574 LTTBL, DOLL1 /THIS TABLE GIVES THE LOW 10 /CORE ADDRESS OF THE REFS IN EACH FIELD 4 /NOTE:ENDPAS JUGGLES THESE AROUND 4 /TO OPTIMIZE CREF STORAGE 4 4 4 4 DIVE, 0 SNA /IF 0, PRODUCE A SPACE JMP I DIVE TAD (-37 SMA SZA TAD [-60 TAD [77 JMP I DIVE SETXR, 0 /SETUP INDEX REGS FOR SEARC,ENTRY TAD SYMNUM /SETUP WHEN FOUND SYMBOL CLL RTL /CORE ADDRESS OF SYMBOL TAD M1 DCA XRSYM2 TAD [SYM1-1 DCA XRSYM1 TAD [-4 DCA COUNT JMP I SETXR
*1200 /ENTRY IS SLOW! IT ENTERS A SYMBOL BY PUSHING DOWN WHAT IS /BELOW THE PROPER ENTRY.ENTRY CAN ONLY BE USED IN MAKING /ENTRIES IN THE PERMANENT (USER) SYMBOL TABLE. /ENTRY CONDITIONS:AC SHOULD BE CLEAR! / SYMNUM SHOULD HAVE THE SYMBOL NUMBER OF THE / PROPOSED ENTRY. SYMCHK RETURNS THIS WHEN THE / SEARCH IS UNSUCCESSFUL. ENTRY, 0 JMS I (SETXR /SETUP INDEX REGISTERS TAD USER+1 /CHECK FOR POSSIBLE OVERFLOW CMA /WE DON'T WANT TO WIPE PSEUDO TABLE TAD PSEUDO SPA SNA CLA JMP NMOR /BAD!OVERFLOW HAS OCCURRED ISZ USER+1 /OK..BUMP SYMBOL COUNT TAD USER+1 CLL RTL /CORE ADDRESS OF ENTRY DCA TEMP1 TAD TEMP1 TAD [-4 /GIVES BOTTOM OF TABLE NOW DCA SAVE TAD SAVE /TEST FOR AN 'ADD-ON' ENTRY CMA TAD SYMADD DCA COUNT /-# OF WORDS TO MOVE CDF 10 NTR1, TAD I SAVE DCA I TEMP1 /THE BAD LOOP! CMA TAD SAVE DCA SAVE /I WISH WE HAD A DSZ!(DECREMENT &SKIP ON 0 CMA TAD TEMP1 DCA TEMP1 ISZ COUNT /DONE? JMP NTR1 /UNFORTUNATELY NOT CDF 0 ENTER, CLA /NOW PUT IN OUR ENTRY TAD [-4 DCA COUNT /THE 4TH IS A 0 WORD (USER FOLLOWS SYM3) NTR2, TAD I XRSYM1 CDF 10 DCA I XRSYM2 CDF 0 ISZ COUNT JMP NTR2 JMP I ENTRY NMOR, CLA IAC /+1 JMP I [ERROR /SYMBOL OVERFLOW
TXT, JMS GETC TAD (-240 /IGNORE SPACES SNA CLA JMP TXT TAD CHAR CIA /STRING DELIMITER DCA DELMIT TXT2, JMS GETC TAD DELMIT /REACHED END OF STRING? SNA CLA JMP I [B /YES TAD CHAR /NO..END OF LINE? TAD (-215 SNA CLA JMP I [B JMP TXT2 GETC, 0 TAD I XRLINE DCA CHAR TAD CHAR JMP I GETC /GETA CHAR;STORE IT, RETURN IN AC DELMIT, 0
BUMP, 0 /ROUTINE TO BUMP REFERENCE COUNTERS TAD SYMADD TAD [3 DCA SAVE /ADDRESS OF REFEENCE COUNTER CDF 10 TAD I SAVE SPA CLA /IF 4000 BIT ON, AN EXTRA ENTRY HAS /ALREADY BEEN MADE FOR THIS SYMBOL JMP ONEISZ TAD CONST SNA CLA /IS SEQNO >4095? JMP ONEISZ /NOT YET TAD [4000 TAD I SAVE DCA I SAVE /MARK IT AS BEING NOTED CMA ONEISZ, TAD M1 /EITHER -1 OR -2 DCA COUNT BUMP2, TAD [3777 /THIS CODE PROTECTS AGAINST AND I SAVE />2048 REFS. IF SIGN BIT EVER BECOMES ISZ I SAVE /NEG. ON THE ISZ,KILL IT!! NOP /USELESS PROTECTION TAD [3 /IF AC GOES NEG. HE DIES!! SPA CLA JMP ERR7 ISZ COUNT JMP BUMP2 CDF 0 JMP I BUMP ERR7, CDF 0 TAD [7 JMP I [ERROR PTRSET, 0 /THIS ROUTINE TAKES TAD [3 /THE SYMBOL TABLE THAT DCA BUFFER /PRODUCED AND SETS UP EACH REFERENCE DCA SYMNUM /AREA WITH A POINTER INTO THE AREA CLA CMA TAD USER+1 /AND A 0 LOCATION TO HOLD THE DEFINITION CIA /SEQUENCE NO. DCA COUNT PTRST1, TAD [4 /START PICKING UP POINTERS TAD BUFFER DCA BUFFER ISZ SYMNUM /CORRESPONDING SYMBOL NUMBER JMS I (GETFLD /FORM CDF N FOR REFERENCE AREA DCA CDTFLD CDF 10 TAD I BUFFER /IF PERMANENT SYMBOL, THIS LOC=0 SNA /IF SO, SKIP IT JMP PTRST2 TAD M1 DCA SAVE CDTFLD, HLT DCA I SAVE ISZ SAVE /POINT TO INDEX WORD TAD [2 DCA I SAVE PTRST2, CDF 0 ISZ COUNT JMP PTRST1 JMP I PTRSET
*1400 /ENDPAS IS ARRIVED AT WHEN A PASS THROUGH THE INPUT HAS BEEN /COMPLETED.SOME COMPLICATED DIDDLING GOES ON HERE. /PUT IN MORE COMPLETE COMMENTS LATER ENDPAS, ISZ PASSG1 JMP I (DUMP /DUMP WHAT WE HAVE TAD SYSM /IS THERE STUFF ON SYS? SNA JMP NDPS1 /NO IAC /POINT TO END OF NEW TABLE DCA USER+1 /YES..THAT BECOMES THE TOTAL NO. /OF SYMBOLS IN OUR NEW TABLE TAD [3777 /O.K...NOW READ IN A SEGMENT AND CNTROL /NOW FORMING READ CONTROL DCA CNTROL TAD [4 /READ SYMBOLS INTO F1 AT LOC.4 DCA CTPTR JMS IOSR /DO THE READ NDPS1, DCA FLDPTR /INITIALLY AT FIELD 0 END2, DCA ADDER /ADDER HOLDS THE COUNT OF THE NUMBER /OF REFERENCES TO THE SYMBOLS THUS FAR /EXAMINED. THIS IS COMPARED TO THE AVAILAABLE /CORE IN A PARTICULAR FIELD. WHEN THAT OVER- /FLOWS WE HAVE TO EITHER MOVE TO ANOTHER FIELD /FOR THE REFERENCES OR WRITE PART OF THE SYMBOL /TABLE ONTO SYS. TAD (BASTBL TAD FLDPTR DCA TEMP1 /INITIAL BASE OF REFS TAD I TEMP1 DCA BASE TAD FLDPTR /NOW GET MASK FOR QUESTION.. CMA /DOES THIS FIELD HAVE SYMBOLS? DCA COUNT CLL CML RAL ISZ COUNT JMP .-2 DCA MASKF TAD FLDPTR /GET ADDRESS OF UPPER LIMIT TAD (LTTBL /FOR LATER DCA SYMLIM TAD FLDPTR /SET NEW LIMIT IN FIELD 1 TAD [BREAK DCA NUSER /THE NEW LIMIT FOR REFS IS DCA I NUSER /ZERO SYMBOL IN CURRENT FIELD LOC. TAD I SYMLIM FUJ1, TAD CTPTR /IF MORE THAN 2 FIELDS EXIST /THIS BECOMES A NOP. THE LIMIT IN /FIELD 1 IS AT THE BOTTOM OF THE /SYMBOL TABLE DCA LIMIT NDPS2, TAD CTPTR /CTPTR HOLD THE CORE ADDRESS OF THE /THE 4TH LOCATION OF A GIVEN SYMBOL. THIS /IS ALSO THE REFERENCE COUNTER FOR THAT SYMBOL CLL RTR /FORM SYMBOL NUMBER AND [1777 DCA COUNT /SAVE FOR LATER TAD ADDER CIA TAD BASE /NEXT REFERENCE AREA DCA SAVE /IF IT FITS IN THIS AREA /USED WHEN WE MAKE ACTUAL REF ENTRIES CDF 10 TAD I CTPTR /# REFS FOR THIS SYMBOL DCA TEMP TAD [3 TAD CTPTR DCA CTPTR TAD TEMP SPA CLA /PERMANENT SYMBOL JMP PRMSYM /YES TAD I CTPTR AND [3777 /MASK GT 4095 BIT TAD ADDER DCA ADDER /SEE IF THIS SYMBOL WILL FIT IN THE /CURRENT FIELD HOLDING REFS CDF 10 /MUST ADD UP NEW REFS ALSO TAD I CTPTR AND [3777 CDF 0 CLL TAD LIMIT /IF LINK GOES ON, REFS WON'T FIT SZL JMP CUTSYM CMA CLL /WHEN UPPER MEETS LOWER,QUIT TAD SAVE SNL CLA JMP CUTSYM /OK..QUIT! CDF 10 TAD SAVE /FITS..PUT IN BASE WHERE THIS SYMBOL'S /REFS BEGIN DCA I CTPTR ISZ ADDER ISZ ADDER /2 EXTRA FOR BOOKKEEPING PRMSYM, CDF 0 TAD COUNT /SYMBOL NUMBER..REMEMBER? DCA I NUSER TAD SYMFLD /BUT..IF THIS FIELD HAS SYMBOLS, AND MASKF /LET'S REDUCE HIS AVAILABLE SPACE SNA CLA JMP .+4 /NO SYMBOLS TAD [4 TAD LIMIT DCA LIMIT TAD COUNT /SEE IF WE ARE DONE CMA TAD USER+1 SNA JMP I (DONE /YES!! PROBABLY FORGOT SOMETHING DCA SYSM /BECOMES # SYMBOLS TO WRITE OUT IN CASE /WE RUN OUT OF ROOM ISZ CTPTR JMP NDPS2 /CYCLE FOR NEXT SYMBOL
CUTSYM, CLA ISZ FLDPTR /GOTO ANOTHER FIELD TAD FLDPTR /DOES IT EXIST? CLL TAD MAXFLD SNL CLA JMP END3 /YES..GROOVY TAD SYSM /NOPE..HAVE TO WRITE REMAINDER OUT CLL RAL /CONVER TO PAGES AND [3700 /FORM CONTROL WORD FOR WRITE TAD (4110 DCA CNTROL JMS I (SUB3 /RESET CTPTR TAD I NUSER IAC /FUDGE LAST ENTRY IN TABLE DCA USER+1 /NEW END OF TABLE JMS IOSR /WRITE THE SEGMENT CDF 10 /PUT A 7777 AT END OF CURRENT SEG. CLA CMA DCA I CTPTR CDF 0 JMP I (DONE+1 /NOT DONE YET!! END3, JMS I (SUB3 JMP END2 /AND RESUME THY WORK!!
NUSER, 0 LIMIT, 0
*1600 /PASSN2 IS ENTERED WHEN WE HAVE COLLECTED SOME SORT OF A /SYMBOL AND IT IS NOT PASS ONE. WE HAVE TO MAKE SURE IT /IS A USER SYMBOL OR LITERAL. IF IT IS, WE HAVE TO ENTER /THE SEQUENCE # IN THE AREA SET UP FOR REFERENCES TO THIS /SYMBOL. ALSO, IF THE REFERENCE IS A DEFINITION, THE SECOND /LOCATION IN THE REFERENCE AREA IS LOADED WITH THE SEQUENCE /NO. OF THE LINE WE ARE DOING. PASSN2, JMS I [SYMCHK USER /IS IT KNOWN TO US? JMP I [B /NO..BUT IT MIGHT BE IN A SEGMENT EITHER /ALREADY DONE OR YET TO BE DONE!! JMS TSTPRM /TEST FOR A PERMANENT SYMBOL JMP I [B /PERMANENT SYMBOL /NOTE:SAVE IS SET UP IN TSTPRM TO CONTAIN THE ADDRESS OF THE /INDEX WORD. WE USE THIS LATER ON JMS GETFLD DCA CDFN /DETERMINE WHAT FIELD THIS SYMBOL HAS ITS /REFS IN AND FORM A CDF N TAD CHAR TAD MCOMMA /IS THIS A DEFINITION? SZA TAD MEQ /AN= MAYBE? SNA CLA IAC /ONE OR OTHER..MARK AS DEFINITION DCA DEF CDF 10 TAD I SAVE /PICK UP POINTER TO REFERENCE AREA DCA SAVE TAD CDFN DCA .+1 HLT /I HATED TO DO THIS!!! TAD I SAVE SPA CLA /IF THIS IS NEGATIVE, ITMEANS THAT THE /SEQUENCE NUMBER HAS WRAPPED AROUND, BUT WE HAVE /ALREADY MADE A 0 ENTRY TO SHOW THAT JMP P2 TAD CONST /HAS THE SEQUENCE # WRAPPED? SNA CLA JMP P2 /NOT YET JMS REFENT /YES..MAKE A 0 ENTRY TAD CDFN DCA .+1 HLT TAD I SAVE /MARK AS HAVING A 0 ENTRY TAD [4000 DCA I SAVE P2, CDF 0 TAD SEQNO /NOW MAKE A REAL ENTRY JMS REFENT TAD DEF SNA CLA /SHOULD WE FILL IN THE DEFINITION LOC? JMP I [B /NO CLA CMA TAD SAVE /YES..POINT TO IT DCA SAVE TAD CDFN DCA .+1 HLT /THIS IS SLOPPY, BUT SO AM I TAD SEQNO CIA DCA I SAVE CDFZ, CDF 0 JMP I [B DEF, 0 MEQ, -21 MCOMMA, -254
/REFENT, MAKES REFERENCES IN THE SYMBOLS AREA AND BUMPS THE /FIRST LOCATION TO POINT TO THE NEXT LOC. REFENT, 0 DCA TEMP1 /SAVE SEQNO CDFN, HLT TAD I SAVE AND [3777 /MASK OFF WRAP AROUND BIT CIA TAD SAVE /FORM ADDRESS OF THIS REFERENCE DCA TEMP TAD TEMP1 DCA I TEMP ISZ I SAVE /BUMP POINTER CDF 0 JMP I REFENT /TSTPRM TESTS THE SYMBOL WE HAVE FOUND FOR BEING A PERMANENT SYMBOL /PERMANENT SYMBOLS ARE DISTINGUISHED BY HAVING THE 4000 BIT ON. TSTPRM, 0 TAD SYMADD TAD [3 DCA SAVE /WE USE THIS ON RETURN!! CDF 10 TAD I SYMADD CDF 0 SMA CLA /IS IT MINUS? ISZ TSTPRM JMP I TSTPRM /GETFLD DETERMINES WHAT FIELD A PARTICULAR SYMBOL HAS ITS /REFS IN. IT DOES IT BY COMPARING THE CURRENT SYMBOLS NUMBER /WITH THE ENTRIES IN THE BREAK TABLE. GETFLD, 0 DCA FLDPTR GF1, TAD [BREAK TAD FLDPTR /GET BREAK TABLE ENTRY DCA TEMP TAD I TEMP CIA TAD SYMNUM /SYMNUM WAS SET UP WHEN WE FOUND THE SYMBOL SPA SNA CLA JMP GF2 /FIRST NEG. VALUE GIVE FLDPTR ISZ FLDPTR /TRY NEXT JMP GF1 GF2, JMS CHDF /FORM THE CDF N JMP I GETFLD CHDF, 0 TAD FLDPTR CLL RTL RAL TAD CDFZ JMP I CHDF SPACE, 0 /GENERATES AS MANY SPACES AS ARE IN AC DCA CHDF TAD [240 JMS I [OCHAR ISZ CHDF JMP SPACE+2 JMP I SPACE CHECK, 0 TAD I CHECK /SUBROUTINE TO TEST CHAR CIA /AGAINST PRESCRIBED LIMITS TAD CHAR CLL TAD I CHECK ISZ CHECK TAD I CHECK ISZ CHECK SNL SKP CLA /VERY UNESTHETIC..BUT IT WORKS! SNA CLA ISZ CHECK JMP I CHECK DONE, ISZ FINI /SET COMPLETION FLAG JMS I [IOPEN /SET FOR REREAD JMS I (PTRSET /PREPARE REFERENCE AREAS DCA SEQNO /BACK TO BASICS DCA CONST JMP I (FIRST /READ FIRST RECORDS
*2000 /DUMP DOES A LITTLE FORMATTING OF THE OUTPUT, AND DUMPS THE /CROSS REFERENCING TABLE ONTO THE OUTPUT DEVICE. /ANY FIDDLING WITH THE BUFFERS OR DEVICE HANDLERS WILL HAVE TO /BE DONE IN DUMP COUNTR=BASE REFBUF=IOSR SCHAR=ADDER DUMP, CLA CMA DCA PASSG1 /FORCES ANOTHER PASS AT ENDPAS JMS I [FORM /FIRST TIME THRU GETS A FORM FEED DCA .-1 /FUTURE PASSES DON'T TAD USER+1 CIA DCA COUNTR /# SYMBOLS TO PROCESS NOW TAD [3 DCA BUFFER /FIRST SYMBOL IS HERE DMP, ISZ LNPRPG /IS FORM FEED NEEDED? SKP /NOT YET JMS I [FORM DMP3, TAD [-3 DCA SYMCNT /2 CHARACTERS PER PASS DCA CONST /RESET FOR <4096 TAD M12 DCA LINENO NXTDV, ISZ BUFFER CDF 10 TAD I BUFFER /PICK UP PACKES WORD CDF 0 SPA /PERMANENT SYMBOL? JMP DPERM /YES JMS I (DIVIDE /CONVERT 2 CHARS AND PRINT ISZ SYMCNT JMP NXTDV+1 TAD [-4 JMS I [SPACE /GENERATE(AC) SPACES TAD BUFFER CLL RTR /GET SYMBOL NUMBER AND [1777 DCA SYMNUM JMS I (GETFLD DCA CDFNA /CDF N CDF 10 TAD I BUFFER DCA REFBUF /BASE OF REFS FOR SYMBOL CDFNA, HLT TAD I REFBUF /IF THIS IS NEGATIVE, SPA CLA /WE LEFT A REF FOR A 0 ENTRY TAD M1 /IN THAT CASE,DON'T INCLUDE THAT ONE AS TAD [-2 /A REAL ENTRY. DCA SYMCNT TAD I REFBUF AND [3777 /NOW CALCULATE REAL NO. ENTRIES TAD SYMCNT CIA DCA SYMCNT CLA CMA TAD REFBUF DCA REFBUF TAD I REFBUF /SEQUENCE # OF DEF. DCA DEFSEQ DMP2, CLA CMA TAD REFBUF DCA REFBUF TAD CDFNA DCA .+1 HLT TAD I REFBUF /PICK UP A REFERENCE TAD DEFSEQ /IS THIS THE DEF? SNA CLA TAD [3 /YES..PRINT # AFTER SEQ # TAD [240 /IF NO, PRINT 2 SPACES DCA SCHAR TAD I REFBUF SZA CLA /IF A 0, ALL FOLLOWING REFS ARE >4095 JMP .+4 TAD [140 DCA CONST JMP DMP2 /IGNORE ZERO ENTRY!! TAD I REFBUF CDF 0 JMS I (CVTSEQ /WRITE THE DECIMAL SEQUENCE # TAD SCHAR JMS I [OCHAR /EITHER # OR SPACE CLA CMA JMS I [SPACE ISZ SYMCNT /MORE TO DO? JMP DMP0 /NO, BUT IS CR/LF REQUIRED? GETMOR, ISZ COUNTR /EXHAUSTED ALL SYMBOLS? JMP DMP5 TAD FINI /YES..ARE WE ALL DONE SNA CLA JMP I [ENDPAS /NO..READ IN NEXT SEGMENT JMP I (OCLOSE DMP0, ISZ LINENO /A CR/LF NEEDED? JMP DMP2 TAD M12 DCA LINENO /RESET ENTRIES PER LINE ISZ LNPRPG /FORM FEED? SKP JMS I [FORM JMS I (CRLF TAD M12 /AND INDENT NEXT LINE JMS I [SPACE JMP DMP2 DMP5, JMS I (CRLF JMP DMP DPERM, CLA TAD [3 /PERMANENT SYMBOL TAD BUFFER DCA BUFFER /LOOK AT NEXT ISZ COUNTR JMP NXTDV JMP GETMOR+2 FIRST, JMS I (ASHDLR /RESET INPUT FOR READ JMS I (RDREC /AND READ SOME RECORDS JMP I (NXTLIN /START READING TEXT DEFSEQ, 0 LINENO, -12 PASTST, 0 /SR WHICH DETERMINE IF PASS > 1 TAD PASSG1 SPA CLA /IF >0=> PASS >1 ISZ PASTST JMP I PASTST
*2200 /I/O ROUTINES FOR PS/8 OUSETP, 0 TAD (OUCTL&3700 CIA DCA OUDWCT /SIZE OF BUFF IN DOUBLEWORDS TAD (OUBUF DCA OUPTR /INITIALIZE POINTER TAD OUJMPE DCA OUJMP /RESET 3 WAY SWITCH JMP I OUSETP OCHAR, 0 AND (377 /CALLED WITH CHARACTER IN AC DCA OUTEMP JMS I [PASTST JMP I OCHAR OUTSW, KRS /TEST FOR ^C WITH FLAG ON TAD (-203 SNA CLA KSF JMP .+2 JMP I [7600 /SAVE CORE FOR SOME REASON OUCHAR, ISZ OUJMP /BUMP 3 WAY SWAITCH OUJMP, HLT JMP OCHAR1 JMP OCHAR2 OCHAR3, TAD OUTEMP /PICK UP CHARACTER CLL RTL RTL AND (7400 /3RD WORD MERGED INTO 2 BUFFER WORDS TAD I OUPOLD DCA I OUPOLD TAD OUTEMP CLL RTR RTR RAR AND (7400 TAD I OUPTR DCA I OUPTR TAD OUJMPE DCA OUJMP /RESET FOR NEW SET OF 3 CHARS ISZ OUPTR /BUMP BUFFER POINTER ISZ OUDWCT JMP OUCOMN TAD OUCT /YEP JMS OUTDMP /WRITE IT JMS OUSETP /RESET OUT BUFFER JMP I OCHAR OCHAR2, TAD OUPTR DCA OUPOLD /FOR LATER ISZ OUPTR /SECOND WORD GOES HERE OCHAR1, TAD OUTEMP DCA I OUPTR OUCOMN, JMP I OCHAR OUTEMP, 0 /TEMP STORE OUPOLD, 0 /HOLDS OLD POINTER OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUCT, OUCTL
OOPEN, 0 /OPEN AN OUTPUT FILE;FETCH HANDLER TAD (OFILE DCA OUBLK /POINT TO FILE NAME TAD (OUDEVH+1 DCA OUHNDL /LEAVE ROOM FOR 2 PAGE HANDLER CDF 10 TAD I [7600 /OUTPUT DEVICE # CDF 0 CIF 10 JMS I USR /ASSIGN,FETCH HANDLER 1 OUHNDL, HLT /GETS ENTRY POINT OF HANDLER JMP I [ERROR /HANDLER FAILURE OUENTR, CDF 10 TAD I [7600 CDF 0 CIF 10 JMS I [200 3 /ENTER OUTPUT FILE OUBLK, OFILE OUELEN, 0 /RETURNS WITH LENGTH OF HOLE JMP OEFAIL DCA I (OUCCNT TAD OUBLK /STARTING RECORD DCA OUREC JMS OUSETP /SETUP OUTPUT AREA JMP I OOPEN OEFAIL, CDF 10 TAD I [7600 AND (7760 /GET LENGTH PART SNA CLA /WAS IT 0? JMP ERR3 /YEP..HE LOSES TAD I [7600 AND [17 /TRY WITH INDETERMINATE LENGTH DCA I [7600 JMP OUENTR OUTDMP, 0 /WRITE ACTUAL OUTPUT DCA OUCTLW JMS I (OUNREC /FIGURE # RECS TO WRITE TAD I (OUCCNT DCA I (OUCCNT /UPDATE CLOSE LENGTH TAD I (OUCCNT CLL CML TAD OUELEN /ROOM FOR THIS WRITE? SNL CLA JMP ERR4 /HE LOSES JMS I OUHNDL /NJ WRITE IT OUCTLW, 0 OUBUF OUREC, 0 JMP I [ERROR /A HANDLER BADNESS JMS I (OUNREC TAD OUREC /UPDATE OUTPUT RECORD # DCA OUREC JMP I OUTDMP ERR4, IAC /NO ROOM FOR OUTPUT ERR3, IAC ERR2, TAD [2 CDF 0 JMP I [ERROR
*2400 OCLOSE, TAD (232 JMS I [OCHAR JMS I [OCHAR FILLIP, JMS I [OCHAR /FILL WITH 0'S JMS OTYPE M70, SPA CLA /IF DIRECTOR DEVICE, WHOLE REB;ELSE HALF TAD (100 TAD [77 AND I (OUDWCT SZA CLA /TO BOUNDARY YET? JMP FILLIP /NO..KEEP FILLING TAD I (OUDWCT TAD (OUCTL&3700 SNA /FULL WRITE LEFT? JMP NODUMP /YES..BUT ^Z IS OUT TAD (4000+OUFLD /FORM WRITE JMS I (OUTDMP NODUMP, CIF 10 JMS I USR 10 /LOCK IN MONITOR CDF 10 TAD I [7600 CDF 0 CIF 10 JMS I [200 4 /CLOSE OUTPUT FILE OFILE /POINTER TO FILE NAME OUCCNT, 0 /CLOSING LDNGTH JMP ERR5 /SORRY JMP I [7605 ERR5, TAD (5 JMP I [ERROR OUNREC, 0 /ESTIMATE # RECS TAD I (OUCTLW CLL RTL RTL RTL /ITS NOT AN ESTIMATE, BUT EXACT!! AND [17 JMP I OUNREC OTYPE, 0 CDF 10 TAD I [7600 /DETERMINE WHAT TYPE OF DEVICE AND [17 DCB=7760 TAD (DCB-1 DCA FORM TAD I FORM /CHECK DEVICE CONTROL BLOCK CDF 0 JMP I OTYPE OFILE, ZBLOCK 4 /OUTPUT FILE NAME GOES HERE FORM, 0 /GENERATE 214 IF NOT TTY JMS I [PASTST /IF PASS>1, NO FORM FEED JMP I FORM TAD TTYSWT SZA CLA JMP FORM2 TAD LNPRPG /FILL TO END OF PAGE SNA /IF 0, GENERATE 8 LINE FEEDS TAD [-4 DCA COUNT JMS CRLF / ISZ COUNT JMP CRLF1 /HA! GENERATE EXTRA LINE FEED!! TAD [-6 DCA COUNT TAD ["- /GENERATE ------ JMS I [OCHAR ISZ COUNT JMP .-3 TAD [-4 DCA COUNT FORM3, JMS CRLF ISZ COUNT JMP CRLF1 TAD M70 /WATCH IT M70=SPA CLA DCA LNPRPG /RESET TO TOP OF PAGE JMP I FORM FORM2, CLA CMA DCA COUNT CMA JMP FORM3 /USE [215 TO GENERATE A 214 CRLF, 0 /GENERATE CRRIAGE RET AND LINE FEED TAD [215 JMS I [OCHAR CRLF1, TAD [212 JMS I [OCHAR JMP I CRLF TTYSWT, 0 DIVIDE, 0 DCA DIV45B DCA DIV45C JMP DIV45D /START UP HERE DIV45A, ISZ DIV45C /BUMP THE QUOTIENT DCA DIV45B /NEW DIVIDEND DIV45D, TAD DIV45B TAD (-52 /DIVIDE BY 52 SMA JMP DIV45A /STILL +; KEEP LOOPING TAD (52 /REMAINDER IN AC AFTER ADD SNA JMP DIVOUT /IF 0, MAKE CHARACTER A SPACE JMS I (DIVE /LETTER OR NUMBER? DIVOUT, TAD [240 DCA DIV45B TAD DIV45C JMS I (DIVE TAD [240 JMS I [OCHAR TAD DIV45B JMS I [OCHAR ISZ BUFFER JMP I DIVIDE DIV45B, 0 DIV45C, 0
*2600 IOPEN, 0 CLA CMA DCA INCHCT /FORCE READ OF NEW FILE ISZ INEOF TAD (7617 DCA INFPTR JMP I IOPEN INPTR, INBUF ICHAR, 0 INCHAR, ISZ INJMP /PACKING SWITCH ISZ INCHCT /BUFFER EXHAUSTED? INJMPP, JMP INJMP /NOPE TAD INEOF /WAS LAST AN EOF? SNA CLA JMP INGBUF /NO..GET NEXT INPUT INNEWF, CDF 10 TAD I INFPTR CDF 0 SNA CLA /MORE INPUT? JMP I ICHAR /NO..EOF RETURN JMS ASHDLR /SET UP STRT RECORD INGBUF, JMS RDREC /AND READ SOME RECORDS JMP INCHAR /THIS IS DONE TO OPTIMIZE THE DECTAPE /ROCKING. INITIALIZATION DOES THESE /THE FIRST TIME. INJMP, JMP . /3 WAY SWITCH JMP ICHAR1 JMP ICHAR2 ICHAR3, TAD INJMPP DCA INJMP TAD I INPTR AND (7400 /CONTENTS OF BUFFER CLL RTR RTR TAD INCTLW RTR RTR /GETS THIRD WORD FROM 1 AND 2 ISZ INPTR /NEXT BUFFER LOC JMP INCOMN ICHAR2, TAD I INPTR AND (7400 DCA INCTLW /TEMP SAVE ISZ INPTR ICHAR1, TAD I INPTR INCOMN, AND (177 /PARITY TEST SNA /IF 200 CODE..IGNORE IT JMP INCHAR TAD [200 TAD (-232 /IS IT ^Z? SNA JMP I ICHAR /YES..NOMMORE!! TAD (232 ISZ ICHAR /SKIP EOF RETTRN DCA CHAR JMP I ICHAR INCHCT, 0 INFPTR, 7617 INEOF, 0 INCTR, 0 INHAND, 0 ASHDLR, 0 CDF 10 TAD I INFPTR AND (7760 /LENGTH PART OF WORD SZA /0 IMPLIES .GTE. 256 TAD [17 CLL CML RTR RTR DCA INCTR ISZ INFPTR /BUMP TO NEXT TAD I INFPTR /GET STARTING RECORD DCA INREC ISZ INFPTR DCA INEOF CDF 0 JMP I ASHDLR RDREC, 0 TAD INCTR CLL TAD (INRECS /LINK ON IF OVERFLOW AND LAST READ SNL DCA INCTR /UPDATE IF NO OVERFLOW SZL ISZ INEOF CLL CML CMA RTR /CONTROL WORD FROM OVERFLOW RTR RTR TAD (INCTL+1 DCA INCTLW CDF 0 JMS I INHAND INCTLW, 0 INBUFP, INBUF INREC, 0 JMP INERRX /FATAL OR EOF INBREC, TAD INREC TAD (INRECS DCA INREC /UPDATE # READ TAD INCTLW AND [7600 CLL RAL TAD INCTLW AND [7600 CMA DCA INCHCT /NEW CHARACTER COUNT TAD INJMPP DCA INJMP TAD INBUFP DCA INPTR JMP I RDREC INERRX, ISZ INEOF /FATAL OR EOF SMA CLA JMP INBREC /EOF..NEXT FILE TAD (6 JMP I [ERROR TTYPRT, 0 /SIMPLE TTY OUTPUT ROUTINE TLS TSF JMP .-1 CLA JMP I TTYPRT
*3000 MSGTBL, "H-300^R+"A-300 /HANDLER FAIL "N-300^R+"D-300 "L-300^R+"E-300 "R-300^R "F-300^R+"A-300 "I-300^R+"L-300 "S-300^R+"Y-300 "M-300^R "O-300^R+"V-300 "E-300^R+"R-300 "F-300^R+"L-300 "O-300^R+"W-300 "D-300^R+"E-300 /DEV LPT BAD "V-300^R "L-300^R+"P-300 "T-300^R "B-300^R+"A-300 "D-300^R "E-300^R+"N-300 "T-300^R+"E-300 "R-300^R "F-300^R+"A-300 "I-300^R+"L-300 "E-300^R+"D-300 "O-300^R+"U-300 "T-300^R "D-300^R+"E-300 "V-300^R "F-300^R+"U-300 "L-300^R+"L-300 "C-300^R+"L-300 "O-300^R+"S-300 "E-300^R "F-300^R+"A-300 "I-300^R+"L-300 "E-300^R+"D-300 "I-300^R+"N-300 "P-300^R+"U-300 "T-300^R "E-300^R+"R-300 "R-300^R+"O-300 "R-300^R 2664 /2045 REFS 3015 "R-300 "E-300^R+"F-300 "S-300^R 0 /LITERAL PROCESSORS. LITERALS ARE HANDLED ACCORDING TO THEIR /BINARY DEFINITION. A CURRENT PAGE LITERAL AT,SAY, 0377 WILL /BE CALLED _L0377. A PAGE ZERO LITERAL AT LOCATION 0100 WILL /BE CALLED _L0100 LIT2, TAD (2540 /PAGE 0..FIRST NUMBER ALWAYS 0 DCA SYM2 /_L GOES IN SYM1 FOR BOTH ISZ ISYM ISZ ISYM /POINT TO SYM3 FOR LAST 2 DIGITS JMP LIT3 /COMMON CODE LIT1, TAD MARGIN /CURRENT PAGE..GET PAGE DIGITS FIRST JMS I (VTST /VTST TESTS FOR THE VERSION OF /OF PAL8 BEING USED, THEN DESTROYS /THE CALL, LEAVING EITHER NOP OR IAC DCA XRLIT ISZ ISYM /POINT TO SECOND WORD TAD I XRLIT /FIRST BINARY DIGIT JMS I [PACK TAD I XRLIT AND (266 /THIS KNOCKS OFF RELATIVE ADDRESS BIT JMS I [PACK /GOES INTO RIGHT HALF OF SYM2 LIT3, TAD DSWIT /IF /D, DON'T CREF LITERALS SZA CLA JMP LITEX /DON'T DO ANYTHING BUT CLEAR COUNTERS TAD (LITBUF /NOW PICK UP RELATIVE ADD BIT FROM INSTRUCT. JMS I (VTST DCA XRLIT TAD I XRLIT AND (1 TAD SYM2 DCA SYM2 /FORMING ADDRESS OF LITERAL! TAD I XRLIT JMS I [PACK TAD I XRLIT JMS I [PACK /LOAD UP SYM3 TAD [2442 DCA SYM1 /PUT IN _L (NEGATIVE!) JMS I (REPACK JMP I (USSYM /DO THE BOOKKEEPING LITEX, JMS I (REPACK JMP I [B
GETLIN, 0 /GET A LINE OF INPUT AND STORE TAD MARGIN /IT AT LINBUF DCA XRLINE INLINE, JMS I [ICHAR JMP I [ENDPAS TAD CHAR /LINE FEED TERMINATES THIS ROUTINE TAD MLF SNA CLA JMP INLINE /IGNORE LF'S ON INPUT TAD CHAR JMS I FPUT /EITHER DCA I XRLINE...OR JMS I [OCHAR TAD CHAR TAD [-215 SNA JMP GLIN4 /OUTPUT MUST SEE LINE FEED IAC /IF FORM FEED, MAKE A NEW LINE SNA CLA JMP GLIN3 TAD XRLINE TAD (-375 SPA CLA JMP INLINE JMP GLIN4+1 /IF OVERFLOW, WE WRITE A NULL /CHARACTER INTO BUFFER. THIS /PREVENTS MESSY LISTING FILE. GLIN3, TAD [215 JMS I FPUT GLIN4, TAD [212 JMS I FPUT TAD MARGIN DCA XRLINE KSF /TEST FOR ^C JMP I GETLIN /FLAG NOT UP KRS TAD (-203 SNA CLA JMP I [7605 /FOUND ^C JMP I GETLIN /THIS INITIALIZATION CODE IS DESTROYED WHEN DATA IS READ /INTO THE BUFFER. FOR THAT REASON, CREF IS NOT RESTARTABLE *4000 ST1, CDF 0 CIF 10 JMS I USR 5 1423 /DEFAULT EXTENSION IS .LS CHAIN, CDF 10 TAD I (7617 /IF NO INPUT, RESTART CD SNA CLA JMP ST1 TAD I [7600 /IF NO OUTPUT, GIVE HIM LPT!! SZA CLA JMP ST2 CDF 0 CIF 10 JMS I [200 12 /ASSIGN-NO FETCH 1420 DEVS, 2400 0 JMP ERRTWO /DEFAULT DEVICE IS BAD TAD DEVS CDF 10 DCA I [7600 ST2, CLA IAC AND I (7644 /TEST FOR /X DCA DSWIT TAD I (7644 AND (400 /P USED? SNA CLA JMP ST3 CDF 0 TAD KILOUT /YES..DISABLE PASR ONE OUTPUT DCA I (OUTSW ST3, CDF 10 TAD I (7644 CDF 0 AND (100 /IF SABR, SET RSWIT AND DSWIT SNA CLA JMP BLUE0 /PAL8 ISZ RSWIT ISZ DSWIT DCA I (NOFORM DCA I (SCAN3 /ENABLE CHECK FOR SABR CHARS BLUE0, TAD [-4 DCA COUNT /SET UP OUT FILE POINTER BLUE, CDF 10 TAD I (7601 CDF 0 DCA I (OFILE ISZ (7601 ISZ (OFILE ISZ COUNT JMP BLUE JMS I [OOPEN JMS I (OTYPE AND (770 /CHECK FOR TTY AS OUTPUT DCA I (TTYSWT TAD I (TTYSWT /IF LPT IS OUTPUT, SZA CLA /NO INTERNAL FORM FEEDS GENERATED DCA I (NOFORM /NOW WE MOVE UP THE PERMANENT AND PSEUDO-OP TABLES. /THE Y WERE ASSEMBLED IN FIELD 0 TO SAVE DECTAPE MOTION /WHEN LOADING. JMS I (FTEST /GET MACHINE SIZE CDF 10 /ASSIGN THE INPUT HANDLER TAD I (7617 CDF 0 CIF 10 JMS I USR 1 INHNDL, INDEVH+1 HLT /YECH!!! TAD INHNDL DCA I (INHAND /SETUP ENTRY POINT JMS I (ASHDLR /SET UP FIRST READ TAD [7700 DCA USR /SAVE SYMBOL TABLE TAD I (7746 AND [-2 TAD [1200 /MARK NOT RESTARTABLE DCA I (7746 /SAVE CORE BIT TAD I XRLINE DCA COUNT /INITIAL LOAD PROVIDES PARAMETERS FOR /THE SYMBOL TABLE. THIS IS # WORDS TO MOVE JMS MOVEM TAD RSWIT SNA CLA /DETERMINE WHICH PSEUDO-OPS TAD (PPSEUD-SPSEUD TAD (SPSEUD-1 DCA XRLINE TAD I XRLINE DCA PSEUDO /TABLES INITIALLY HAVE A SHORT HEADER /WHICH CONTAINS INFORMATION ABOUT THEM /PSEUDO CONTAINS STARTING # OF FIRST
BLUE2, TAD I XRLINE DCA PSEUDO+1 /LAST ENTRY # TAD I XRLINE DCA COUNT /# ENTRIES TO MOVE TAD I XRLINE DCA XRLIT /WHERE THE Y GO IN FIELD 1 JMS MOVEM JMP I (FIRST+1 /READ FIRST RECORDS MOVEM, 0 TAD I XRLINE CDF 10 DCA I XRLIT CDF 0 ISZ COUNT JMP .-5 JMP I MOVEM KILOUT, OCHAR&177+5600 /JMP I OCHAR ERRTWO, CLA CLL CML RTL JMP I [ERROR /THIS IS AN IMPOSSIBLE ERROR *4200 /THIS JUNK DETERMINES THE # OF FIELDS AVAILABLE TO CREF /THE NOPS ARE BECAUSE THE PDP-8 HAS A NASTY BUG WHICH CAUSES /A REFERENCE TO A NONEXISTENT FIELD TO EXECUTE THE EFFECTIVE ADDRESS /OF THE BAD INSTRUCTION AND THEN SKIPPING THE NEXT LOC. FTEST, 0 TAD (7645 DCA 0 /TO TEST FOR WRAP AROUND;IE PDP-8/L CHUG, CDF 10 TAD K DCA I K0 /WIPES LOC 0 OF EVERY FIELD NOP TAD 0 /NOW CHECK FIELD 0 LOC. 0 CIA TAD (7645 SZA CLA JMP DUN /WRAP AROUND HAS OCCURRED TAD I K0 NOP CIA TAD K /USUAL CASE RETURNS 7777 IN AC SZA CLA JMP DUN ISZ K /OK SO FAR TRY NEXT FIELD TAD [10 TAD CHUG DCA CHUG JMP CHUG-2 DUN, CDF 0 TAD K CIA DCA MAXFLD /- NO. OF FIRST NONEXISTENT FIELD JMP I FTEST K, 1 FIELD 0 /THESE ARE THE PERMANENT AND PSEUDO OP TABLES FOR CREF /RAD IS THE BASE USED TO PACK THE CHARACTERS. FOR SABR IT MAY /HAVE TO BE MOVED TO 51 RATHER THAN 45. RAD=52 *4400 SYMTAB, -453 /INITIAL ENTRIES NOPUNCH *0 ENPUNCH ZBLOCK 4 /DUMMY ENTRY..SYMCHK NEEDS IT "A-300^RAD+"N-300+4000 /AND "D-300^RAD ZBLOCK 2 "C-300^RAD+"D-300+4000 /CDF "F-300^RAD ZBLOCK 2 "C-300^RAD+"I-300+4000 /CIA "A-300^RAD ZBLOCK 2 "C-300^RAD+"I-300+4000 /CIF "F-300^RAD ZBLOCK 2 "C-300^RAD+"L-300+4000 /CLA "A-300^RAD ZBLOCK 2 "C-300^RAD+"L-300+4000 /CLL "L-300^RAD ZBLOCK 2 "C-300^RAD+"M-300+4000 /CMA "A-300^RAD ZBLOCK 2 R=52 "C-300^R+"M-300+4000 /CML "L-300^R ZBLOCK 2 "D-300^R+"C-300+4000 /DCA "A-300^R ZBLOCK 2 "D-300^R+"C-300+4000 /DCEA "E-300^R+"A-300 ZBLOCK 2 "D-300^R+"C-300+4000 /DCMA "M-300^R+"A-300 0 0 "D-300^R+"E-300+4000 /DEAC "A-300^R+"C-300 ZBLOCK 2 "D-300^R+"E-300+4000 /DEAL "A-300^R+"L-300 ZBLOCK 2 "D-300^R+"F-300+4000 /DFSC "S-300^R+"C-300 ZBLOCK 2 "D-300^R+"F-300+4000 /DFSE "S-300^R+"E-300 ZBLOCK 2 "D-300^R+"M-300+4000 /DMAC "A-300^R+"C-300 ZBLOCK 2 "D-300^R+"M-300+4000 /DMAR "A-300^R+"R-300 ZBLOCK 2 "D-300^R+"M-300+4000 /DMAW "A-300^R+"W-300 ZBLOCK 2 "D-300^R+"S-300+4000 /DSAC "A-300^R+"C-300 ZBLOCK 2 "D-300^R+"T-300+4000 /DTCA "C-300^R+"A-300 ZBLOCK 2
"D-300^R+"T-300+4000 /DTLB "L-300^R+"B-300 ZBLOCK 2 "D-300^R+"T-300+4000 /DTRA "R-300^R+"A-300 ZBLOCK 2 "D-300^R+"T-300+4000 /DTRB "R-300^R+"B-300 ZBLOCK 2 "D-300^R+"T-300+4000 /DTSF "S-300^R+"F-300 ZBLOCK 2 "D-300^R+"T-300+4000 /DTXA "X-300^R+"A-300 ZBLOCK 2 "G-300^R+"L-300+4000 /GLK "K-300^R ZBLOCK 2 "H-300^R+"L-300+4000 /HLT "T-300^R ZBLOCK 2 "I-300^R+"A-300+4000 /IAC "C-300^R ZBLOCK 2 "I-300^R+"O-300+4000 /IOF "F-300^R ZBLOCK 2 "I-300^R+"O-300+4000 /ION "N-300^R ZBLOCK 2 "I-300^R+"O-300+4000 /IOT "T-300^R ZBLOCK 2 "I-300^R+"S-300+4000 /ISZ "Z-300^R ZBLOCK 2 "J-300^R+"M-300+4000 /JMP "P-300^R ZBLOCK 2 "J-300^R+"M-300+4000 /JMS "S-300^R ZBLOCK 2 "K-300^R+"C-300+4000 /KCC "C-300^R ZBLOCK 2 "K-300^R+"R-300+4000 /KRB "B-300^R ZBLOCK 2 "K-300^R+"R-300+4000 /KRS "S-300^R ZBLOCK 2 "K-300^R+"S-300+4000 /KSF "F-300^R ZBLOCK 2 "L-300^R+"A-300+4000 /LAS "S-300^R ZBLOCK 2 "N-300^R+"O-300+4000 /NOP "P-300^R ZBLOCK 2 "O-300^R+"P-300+4000 /OPR "R-300^R ZBLOCK 2 "O-300^R+"S-300+4000 /OSR "R-300^R ZBLOCK 2 "P-300^R+"C-300+4000 /PCF "F-300^R ZBLOCK 2 "P-300^R+"L-300+4000 /PLS "S-300^R ZBLOCK 2 "P-300^R+"P-300+4000 /PPC "C-300^R ZBLOCK 2 "P-300^R+"S-300+4000 /PSF "F-300^R ZBLOCK 2 "R-300^R+"A-300+4000 /RAL "L-300^R ZBLOCK 2 "R-300^R+"A-300+4000 /RAR "R-300^R ZBLOCK 2 "R-300^R+"D-300+4000 /RDF "F-300^R ZBLOCK 2 "R-300^R+"F-300+4000 /RFC "C-300^R ZBLOCK 2 "R-300^R+"I-300+4000 /RIB "B-300^R ZBLOCK 2 "R-300^R+"I-300+4000 /RIF "F-33^R ZBLOCK 2 "R-300^R+"M-300+4000 /RMF "F-300^R ZBLOCK 2 "R-300^R+"R-300+4000 /RRB "B-300^R ZBLOCK 2 "R-300^R+"S-300+4000 /RSF "F-300^R ZBLOCK 2 "R-300^R+"T-300+4000 /RTL "L-300^R ZBLOCK 2 "R-300^R+"T-300+4000 /RTR "R-300^R ZBLOCK 2 "S-300^R+"K-300+4000 /SKP "P-300^R ZBLOCK 2 "S-300^R+"M-300+4000 /SMA "A-300^R ZBLOCK 2 "S-300^R+"N-300+4000 /SNA "A-300^R ZBLOCK 2 "S-300^R+"N-300+4000 /SNL "L-300^R ZBLOCK 2 "S-300^R+"P-300+4000 /SPA "A-300^R ZBLOCK 2 "S-300^R+"T-300+4000 /STA "A-300^R ZBLOCK 2 "S-300^R+"T-300+4000 /STL "L-300^R ZBLOCK 2
"S-300^R+"Z-300+4000 /SZA "A-300^R ZBLOCK 2 "S-300^R+"Z-300+4000 /SZL "L-300^R ZBLOCK 2 "T-300^R+"A-300+4000 /TAD "D-300^R ZBLOCK 2 "T-300^R+"C-300+4000 /TCF "F-300^R ZBLOCK 2 "T-300^R+"L-300+4000 /TLS "S-300^R ZBLOCK 2 "T-300^R+"P-300+4000 /TPC "C-300^R ZBLOCK 2 "T-300^R+"S-300+4000 /TSF "F-300^R ZBLOCK 2 -1 -1 -1 -1 /DUMMY LOW ENTRY
/PSEUDO OP TABLES. ENTRIES ARE SAME FORMAT AS PAL8 /SYMBOLS. *.+4400 SPSEUD, 1706 /SABR PSEUDOS. BEGINS AT 1706*4 1737 /ENDS AT 1737*4 -150 /150 LOCATIONS LONG 7427 /STARTS LOADING AT 17430 NOPUNCH *7430 ENPUNCH ZBLOCK 4 "A-300^R+"B-300 /ABSYM "S-300^R+"Y-300 "M-300^R B /RETURN POINT "A-300^R+"R-300 /ARG "G-300^R 0 B "B-300^R+"L-300 /BLOCK "O-300^R+"C-300 "K-300^R B "C-300^R+"A-300 /CALL "L-300^R+"L-300 0 B "C-300^R+"O-300 /COMMON "M-300^R+"M-300 "O-300^R+"N-300 B "C-300^R+"P-300 /CPAGE "A-300^R+"G-300 "E-300^R B "D-300^R+"E-300 /DECIM "C-300^R+"I-300 "M-300^R B "D-300^R+"U-300 /DUMMY "M-300^R+"M-300 "Y-300^R B "E-300^R+"A-300 /EAP "P-300^R 0 B "E-300^R+"N-300 /END "D-300^R 0 EPASS, DOLL1 /BECOMES ENDPAS "E-300^R+"N-300 /ENTRY "T-300^R+"R-300 "Y-300^R B "F-300^R+"O-300 /FORTR "R-300^R+"T-300 "R-300^R B "I-300^R 0 0 B /I "I-300^R+"F-300 /IF 0 0 B "I-300^R+"N-300 /INC "C-300^R 0 B "L-300^R+"A-300 /LAP "P-300^R 0 B "O-300^R+"C-300 /OCTAL "T-300^R+"A-300 "L-300^R B "O-300^R+"P-300 /OPDEF "D-300^R+"E-300 "F-300^R FXR2, FXMR "P-300^R+"A-300 /PAGE "G-300^R+"E-300 0 B "P-300^R+"A-300 /PAUSE "U-300^R+"S-300 "E-300^R B "R-300^R+"E-300 /REORG "O-300^R+"R-300 "G-300^R B "R-300^R+"E-300 /RETRN "T-300^R+"R-300 "N-300^R B "S-300^R+"K-300 /SKPDF "P-300^R+"D-300 "F-300^R FXR3, FXMR "T-300^R+"E-300 /TEXT "X-300^R+"T-300 0 TXT -1 -1 -1 -1
/PAL8 PSEUDOS. SAME FORMAT AS OTHERS *5234 ENPUNCH PPSEUD, 1711 1737 -134 7443 NOPUNCH *7444 ENPUNCH ZBLOCK 4 "D-300^R+"E-300 /DECIMAL "C-300^R+"I-300 "M-300^R+"A-300 B "D-300^R+"E-300 /DEVICE "V-300^R+"I-300 "C-300^R+"E-300 B "E-300^R+"J-300 /EJECT "E-300^R+"C-300 "T-300^R NOTBIN /SKIP ANY MORE TEXT "E-300^R+"N-300 /ENPUNCH "P-300^R+"U-300 "N-300^R+"C-300 B "E-300^R+"X-300 /EXPUNGE "P-300^R+"U-300 "N-300^R+"G-300 XPJ, XPUNJ "F-300^R+"I-300 /FIELD "E-300^R+"L-300 "D-300^R B "F-300^R+"I-300 /FILENAME "L-300^R+"E-300 "N-300^R+"A-300 B "F-300^R+"I-300 /FIXMRI "X-300^R+"M-300 "R-300^R+"I-300 FXR, FXMR "F-300^R+"I-300 /FIXTAB "X-300^R+"T-300 "A-300^R+"B-300 FXT, FXTAB "I-300^R /I ZBLOCK 2 B "I-300^R+"F-300 /IFDEF "D-300^R+"E-300 "F-300^R B "I-300^R+"F-300 /IFNDEF "N-300^R+"D-300 "E-300^R+"F-300 B "I-300^R+"F-300 /IFNZRO "N-300^R+"Z-300 "R-300^R+"O-300 B "I-300^R+"F-300 /IFZERO "Z-300^R+"E-300 "R-300^R+"O-300 B "N-300^R+"O-300 /NOPUNCH "P-300^R+"U-300 "N-300^R+"C-300 B "O-300^R+"C-300 /OCTAL "T-300^R+"A-300 "L-300^R B "P-300^R+"A-300 /PAGE "G-300^R+"E-300 0 B "P-300^R+"A-300 /PAUSE "U-300^R+"S-300 "E-300^R B "T-300^R+"E-300 /TEXT "X-300^R+"T-300 0 TXT "X-300^R+"L-300 /XLIST "I-300^R+"S-300 "T-300^R B "Z-300^R+"B-300 /ZBLOCK "L-300^R+"O-300 "C-300^R+"K-300 B -1 -1 -1 -1
*5600 /THIS CODE IS EXECUTED DURING PASS ONE ONLY. LATER PASSES /USE THIS AREA TO BUILD A REFERENCE TABLE. HEADER, 0 /HEADER SWITCHES FPUT TO JMS I [OCHAR TAD CPCHIT DCA FPUT /ADDRESS OF PUNCH ROUTINE JMS I CGTLIN /CALL GETLIN TAD CSTRIT /RESTORE FPUT DCA FPUT JMP I HEADER CPCHIT, PNCHIT CGTLIN, GETLIN CSTRIT, STORIT PNCHIT, 0 JMS I COCHAR JMP I PNCHIT STORIT, 0 DCA I XRLINE JMP I STORIT COCHAR, OCHAR DOLL1, TAD (ENDPAS DCA DOLLAR DCA I (NOFORM TAD (KRS DCA I (OUTSW /RE ENABLE OUTPUT CDF 10 TAD RSWIT SNA CLA JMP DOLL2 /PAL8 PSEUDOS TAD (B DCA I (FXR2 TAD (B DCA I (FXR3 TAD (ENDPAS DCA I (EPASS /END PSEUDO NOW TO ENDPAS JMP DOLOUT DOLL2, TAD (B DCA I (XPJ TAD (B DCA I (FXR TAD (B DCA I (FXT DOLOUT, CDF 0 TAD MAXFLD /IF WE HAVE MORE THAN 2 FIELDS, CLL /WE SHALL LEAVE THE SYMBOL TABLE IN ONE TAD (2 /PIECE. THAT ALLOWS US TO USE THE UPPER SZL CLA /CORE PROFOTABLY JMP I (NOTBIN TAD USER+1 CLL RTL TAD (4 /CLEARS SYMBOL TABLE DCA I (LTTBL+1 /FIX PERMANENT LIMIT IN FIELD 1 DCA SYMFLD /AND FAKE THAT FLD 1 HAS NO SYMBOLS TAD FUDGE /DISABLE RESET OF FIELD 1 LIMIT DCA I (FUJ1 JMP I (NOTBIN FUDGE, NOP XPUNJ, DCA COUNT CLA CMA TAD USER+1 /SKIP LAST ENTRY (7777) CLL RTL XPUNJ3, DCA BUFFER /POINTER INTO SYMBOLS CDF 10 TAD I BUFFER TAD (5336 /IS THIS A LITERAL? SNA CLA JMP XPUNJ1 /YES..NEXT ENTRY TAD COUNT /NO..NOW PUSH ALL LITERALS UP CLL RTL /BUT IF COUNT =0, THERE ARE NONE CMA DCA SAVE TAD (3 TAD BUFFER /SETTING UP TO DO TRANSFER. IF COUNT=0 DCA XRSYM1 /ONLY THE 7777 GETS TRANSFERRED TAD (3 DCA XRSYM2 TAD I XRSYM1 DCA I XRSYM2 ISZ SAVE /ALL COMPLETED? JMP .-3 TAD COUNT IAC /INCLUDE 7777 ENTRY! DCA USER+1 CDF 0 JMP I (B XPUNJ1, TAD (-4 TAD BUFFER ISZ COUNT JMP XPUNJ3
PAGE FXMR, TAD I XRLINE /SHOULD CONTAIN FIRST CHAR IN INSTR. DCA CHAR JMS I (CHECK /CHECK IT 301 -332 JMP .+4 /NOPE;A NUMBER MAYBE? FX2, TAD CHAR JMS I (PACK JMP FXMR JMS I (CHECK 260 -271 /CHECK FOR DIGIT 0-9 SKP /NOPE. IF THERE IS A SYMBOL, THIS IS TERMINATOR JMP FX2 TAD SYM1 SNA CLA JMP FXMR JMS I (SYMCHK USER JMS I (ENTRY /ENTER AS USER SYMBOL JMS I (BUMP JMP I (B FXTAB, CLA CMA /DON'T INCLUDE 7777 ENTRY TAD USER+1 CIA DCA COUNT /# ENTRIES TO EXAMINE DCA SAVE FXTB2, TAD (4 TAD SAVE DCA SAVE CDF 10 TAD I SAVE /STOP AS SOON AS LITERAL FOUND TAD (5336 SNA CLA JMP FXTB3 TAD I SAVE /IF ALREADY NEG. ITS A PERM SYMBOL SMA TAD (4000 /MAKE IT PERMANENT DCA I SAVE ISZ COUNT JMP FXTB2 /LOOP FOR DURATION FXTB3, CDF 0 JMP I (B VTST, 0 /VTST IS COOL. IT TESTS FOR /THE VERSION OF PAL8 BEING USED, AND /MODIFIES THE CALLING LOCATION RIGHT DCA VTMP /SAVE CALLING AC CLA CMA TAD VTST /WE RETURN AND EXECUTE THE REPALCED DCA VTST /INSTRUCTION WHEN WE'RE DONE TAD I (VERTST /LOOK AT LINE BUFFER TAD (-240 /IF A SPACE, OLD PAL8 SZA CLA /IF NOT, NEWEST PAL8 IAC TAD (7000 DCA I VTST TAD VTMP JMP I VTST VTMP, 0 /THAT'S ALL FOLKS!! $$$$$$$$$$$$$$$$$$



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