/PAL8 ASSEMBLER FOR OS/8 MONITOR VERSION 9B / / / / / / / / / /COPYRIGHT (C) 1970,1971,1972,1973,1974 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. / / / / / / / / / / /30 DEC 1973 MB/MB/SM/MB/RL DECIMAL VERSION= 9 SUBVERSION= "B OCTAL /PAL8 IS AN 8K THREE PASS ASSEMBLER DESIGNED /TO BE COMPATIBLE WITH THE OS/8 SYSTEM. /PASS 1 READS THE INPUT (SOURCE) FILE AND CONSTRUCTS /THE SYMBOL TABLE. /PASS 2 GENERATES THE BINARY (OBJECT) FILE, WHICH /MAY BE LOADED WITH THE ABSOLUTE (BINARY) LOADER. /PASS 3 GENERATES THE OCTAL SYMBOLIC ASSEMBLY /LISTING. /PAL8 IS COMPATIBLE IN MOST RESPECTS WITH PAL III, MACRO-8 /4K PAL-D, AND 8K PAL-D, AS WELL AS THE CROSS-ASSEMBLER PAL10. /COMMAND DECODER RULES: /*BINARY(.BN),LISTING(.LS),CREF(.LS)6) CHAR? STA /NO - SET SWITCH TO RIGHT HALF DCA GETTA2 /YES - LEAVE SWITCH AT LEFT HALF JMP GETTA1 GETTA4, NAME1 /IGNORE SPACES ROUTINE SPNOR, 0 TAD CHAR /GET THE CHARACTER TAD [-240 /IS IT A SPACE? SZA CLA JMP I SPNOR /NO --RETURN-- JMS I [GETC /YES - GET NEXT CHARACTER JMP SPNOR+1 /LOOP /HANDLER FOR PAUSE PSEUDO-OP /END-OF-TAPE OR END-OF-FILE PAUSEX, AC4000 DCA CHAR /SET END-OF-LINE CHARACTER TAD [LINBUF+120 /REINITIALIZE TEXT POINTER DCA TXTPTR CLA CMA DCA I (INCHCT /INDICATE EMPTY BUFFER ISZ I (INEOF /SET END-OF-FILE JMP I [LOOKEX /--EXIT TO MAIN-- PAGE /OUTPUT 2 CHARACTER ERROR CODE ERROR1, 0 DCA ERROR5 TAD ERROR5 JMS I [RTL6 RAL AND [77 TAD [240 /CONVERT SIXBIT TO ASCII JMS I OERROR /OUTPUT FIRST CHAR TAD ERROR5 AND [77 TAD [240 JMS I OERROR /OUTPUT SECOND CHAR JMP I ERROR1 /--RETURN-- /HANDLER FOR FIELD PSEUDO-OP FIELDX, JMS I [SPNOR /IGNORE SPACES JMS I [DUMPS /DUMP CURRENT PAGE LITERALS JMS I [DUMPZ /DUMP PAGE ZERO LITERALS JMS I [EXP /GET EXPRESSION TAD VALUE /TRIM TO RIGHT 3 BITS AND [7 DCA FLDIND /STORE FOR LISTING TAD PASS /IS THIS PASS 2? SZA CLA JMP FIELDY /NO - PREPARE TO EXIT TAD FLDIND /YES - GET FIELD NUMBER CLL RTL RAL /AND CHANNELS 7 AND 8 TAD [7700 JMS I OCHAR /OUTPUT FIELD SETTING FIELDY, JMS I [CLEAN /CLEAN UP THINGS TAD [200 /RESET ORIGIN TO 200 JMP STAR1 /CHANGE LAST 2 LOCATIONS TO: / CLA / JMP STAR1+1 /FOR INDAC GROUP TO OMIT RE-ORIGIN /HANDLER FOR PAGE PSEUDO-OP PAGEX, JMS I [DUMPS /DUMP SAME PAGE LITERALS JMS I (XLISTZ /ANY EXPRESSION? JMP PAGEY /NO JMS I [EXP /YES - GET EXPRESSION TAD VALUE JMS I [RTL6 RAL /GET PAGE NUMBER JMP STAR3-1 PAGEY, TAD LOC /NO ARGUMENT - FIND NEXT PAGE TAD [177 AND [7600 STAR3, DCA VALUE TAD VALUE /GET START OF PAGE STAR1, JMS I [PUNORG /PUNCH ORIGIN JMS I [FINDSP TAD [LITBUF /RESET POINTERS DCA TEMP TAD I TEMP DCA LITPTR /INITIALIZE LITERAL POINTER FOR NEW PAGE DCA LAST1 JMP I [PUNVAL /SEE ABOUT DUMPING SOURCE CODE /HANDLER FOR FIXMRI PSEUDO-OP FIXMRX, JMS I [SPNOR /IGNORE SPACES JMS I [TSTALP /IS CHARACTER ALPHABETIC? JMP FIXMR1 /YES-CONTINUE JMS I [ICMESG /NO - GENERATE IC MESSAGE, GET NEXT CHAR JMP FIXMRX+1 /KEEP LOOKING FOR ALPHABETIC CH. OR END OF LINE FIXMR1, JMS I [GETTAG /PICK UP TAG DCA ALPHAI /STORE UNDEFINED SWITCH SKP FIXMR2, JMS I [ICMESG JMS I [SPNOR /IGNORE SPACES TAD CHAR /WAS CHARACTER = ? TAD (-"= SZA CLA JMP FIXMR2 /NO - PRINT IC MESSAGE AND KEEP LOOKING /FALL INTO EQUALS PROCESSOR /HANDLER FOR = AC4000 /FALL INTO HERE FROM FIXMRI EQUAL, JMS I [PUSHA /PUSH FIXMRI FLAG JMS I [GETC /GET NEXT CHARACTER TAD I (NAME1 /STORE THE SYMBOL NAME JMS I [PUSHA /ON THE PUSH DOWN LIST TAD I (NAME2 JMS I [PUSHA TAD I (NAME3 JMS I [PUSHA TAD THISTG /AND ITS PRESENT (OR FUTURE) JMS I [PUSHA /POSITION IN THE SYMTAB TAD ALPHAI JMS I [PUSHA /STORE UNDEFINED INDICATOR JMS I [SPNOR /IGNORE SPACES JMS I [EXP /GET EXPRESSION TO RIGHT OF = TAD I PDLXR DCA ALPHAI /RESTORE UNDEFINED INDICATOR TAD I PDLXR DCA THISTG /RESTORE SYMBOL TABLE POSITION TAD I PDLXR /RESTORE TAG NAME DCA I (NAME3 TAD I PDLXR DCA I (NAME2 TAD I PDLXR DCA I (NAME1 ISZ UNDFSW /WAS ANY PART OF DEFINITION UNDEFINED? JMP EQUAL3 /NO JMS I PERROR /YES - GENERATE IE ERROR MESSAGE IE ISZ PDLXR /CLEAR EXTRA WORD FROM PDL JMP I [PUNVAL /FORGET ABOUT DEFINING TAG /MORE = PROCESSING EQUAL3, ISZ ALPHAI /WAS TAG DEFINED BEFORE? JMP .+3 /YES - CHECK FOR ILLEGAL REDEFINITION JMS I [INSRTG /NO - INSERT TAG INTO SYMBOL TABLE JMP EQUAL2 /AND BYPASS ILLEGAL REDEF CHECK JMS I [FINDTG /PUT TAG IN TAG1-TAGE AND VALUE2 TAD VALUE CIA TAD VALUE2 SZA CLA /WERE DEFINITIONS THE SAME? TAD TAG1 /NO - IS IT A PERMANENT SYMBOL? SMA CLA JMP EQUAL2 /NO - OK TO REDEFINE JMS I [ERROR /YES - GENERATE RD ERROR MESSAGE FIRST RD EQUAL2, TAD VALUE /DEFINE OR REDEFINE DCA VALUE2 AC3777 AND TAG2 /CLEAR OLD FIXMRI BIT TAD I PDLXR /INSERT NEW ONE DCA TAG2 JMS I [PUTTAG /STORE TAG JMP I [PUNVAL /SEE ABOUT DUMPING SOURCE CODE PAGE /ROTATE AC 6 LEFT RTL6, 0 CLL RTL RTL RTL JMP I RTL6 /--RETURN-- /GET NEXT CHARACTER ROUTINE /READS FROM THE INPUT FILES AND PASSES THE MODIFIED CHARACTERS /TO THE PROGRAM /IT ALSO PRINTS THE LATEST LINE IF IT HAS NOT BEEN PRINTED GETC, 0 ISZ TXTPTR /POINT TO NEXT CHARACTER GETC7, TAD I TXTPTR /GET NEXT CHARACTER SZA /IS IT 0? JMP GETC8 /NO - MORE ARE IN THIS LINE TAD PASS /IS THIS PASS 3? SPA SNA CLA JMP GETC1 /NO TAD [LINBUF /YES DCA TXTPTR /RESET POINTER TO BEGINNING TAD I TXTPTR /GET 1ST CHARACTER SNA /IS IT 0? JMP GETC1 /YES - LINE HAS BEEN PRINTED TAD [-215 /IS IT 215? SNA CLA JMP GETC2 /YES - DO NOT PRINT THE SPACES TAD [211 /NO-OUTPUT 2 TABS JMS I OERROR TAD [211 JMS I OERROR GETC2, JMS LINPRT /NOW PRINT THE LINE GETC1, TAD (-121 DCA TXTSWT TAD (LINBUF-1 DCA TXTPTR /RESET POINTER ISZ TXTPTR GETC6, JMS I (INPUT /GET NEXT CHARACTER JMP GETC4 /215 DCA I TXTPTR /STORE THE CHARACTER ISZ TXTSWT /TOO MANY? JMP GETC6-1 /NO CLA CMA /YES DCA TXTSWT JMP GETC6 GETC4, DCA I TXTPTR /SET END ISZ TXTPTR DCA I TXTPTR /SET END OF LINE TAD [LINBUF DCA TXTPTR /RESET POINTER CLA CMA DCA TXTSWT /RESET SWITCH JMP GETC7 /GET THAT CHARACTER GETC8, TAD [-215 /IS IT A CARRIAGE RETURN? SNA JMP GETC12 /YES-END OF LINE TAD GETCI /NO- TAD (215-"/ /IS IT A /? SNA /YES- JMP GETC13 /"/" IS END TAD ("/-"; /IS IT A ;? SNA /YES- JMP GETC12 /";" IS END TAD (";-211 /IS IT A TAB? SZA TAD (211-240 /OR A SPACE? SZA CLA JMP GETC9 /NO-NOT ANYTHING SPECIAL ISZ TXTSWT /YES-2ND OCCURANCE? JMP GETC+1 /YES - IGNORE TAD [240 DCA CHAR /NO - GIVE A SPACE JMP I GETC /--RETURN-- GETC16, ISZ CONDSW /DECREMENT CONDITIONAL COUNTER JMP GETC15 GETC17, TAD [LINBUF+120 DCA TXTPTR GETC12, AC4000 GETC9, TAD I TXTPTR DCA CHAR /STORE CHARACTER CLA CMA DCA TXTSWT /SET THE SWITCH JMP I GETC /--RETURN-- GETC13, TAD CONDSW /CURRENTLY IN CONDITIONALS? SNA JMP GETC17 /NO DCA CONDSW /STORE UPDATED CONDITIONAL LEVEL GETC15, ISZ TXTPTR /YES-SCAN LINE FOR < AND > TAD I TXTPTR TAD [-215 /IS CHARACTER A CARRIAGE RETURN? SNA JMP GETC17 /YES TAD (215-"> /NO IS IT A >? SNA JMP GETC16 /YES TAD (">-"< /NO-IS IT OTYPEO, 0 /TYPE A CHARACTER, CHECKING FOR ^O AND ^C DCA OTYPEC /SAVE CHAR JMS CTCCHK /CHECK FOR ^C - RETURN CHAR-203 IN AC TAD (-14 SNA CLA /^O? JMP I OTYPEO /YES OTYPTD, TAD OTYPEC OTYPB1, TLS OTYPB2, TSF OTYPB3, JMP .-1 /WAIT FOR TTY TAD [-215 OTYPCR, SZA CLA /SET TO CLA DURING "ERRORS DETECTED" STUFF JMP I OTYPEO TAD [212 /IF CHAR WAS CR, TYPE LF JMP OTYPEO+1 OTYPEC, 0 CTCCHK, 0 /CHECK FOR ^C TAD [200 KSF /IS THERE A CHAR AT ALL? STA /NO - PUT DUMMY VALUE IN AC KRS /OR IN KEYBOARD CHAR TAD (-203 SZA JMP I CTCCHK /NO ^C - RETURN JMP I [7600 /RETURN TO OS/8 TTLMSG, "E-240^100+"R-240 /ERRORS DETECTED: "R-240^100+"O-240 "R-240^100+"S-240 "D-240 "E-240^100+"T-240 "E-240^100+"C-240 "T-240^100+"E-240 "D-240^100+":-240 0 "L-240^100+"I-240 /LINKS GENERATED: "N-240^100+"K-240 "S-240^100 "G-240^100+"E-240 "N-240^100+"E-240 "R-240^100+"A-240 "T-240^100+"E-240 "D-240^100+":-240 0 PAGE /OUTPUT A CHARACTER TO OUTPUT DEVICE /CALLED BY JMS I OCHAR /WITH CHARACTER IN 8-BIT ASCII IN AC OUTPT1, PUNCHX /PASS 2=PUNCHX; 3=XLISTX OUTPUT, 0 AND [377 /MASK OUT LEFT 4 BITS DCA OUTPT2 /STORE TAD I OUTPT1 /IS THIS PASS 3 AND SNA TAD OUTINH /IS THIS COVERED BY XLIST? SZA CLA JMP I OUTPUT /YES--RETURN-- TAD OUTPT2 /NO - GET CHARACTER AND [200 SNA CLA TAD OUTPT2 /IF LESS THAN 200, THEN TAD CHKSUM /ADD IT TO CHECKSUM DCA CHKSUM TAD OUTPT2 /GET CHARACTER TAD (-211 /IS IT A TAB? SNA CLA JMP OUTPT3 /YES - OUTPUT SPACES JMS OUTPUX /NO - OUTPUT CHARACTER TAD OUTPT2 /IS IT LINE FEED? TAD (-212 SZA CLA JMP I OUTPUT /NO--RETURN-- TAD [7773 /YES - RESET LSTCNT DCA LSTCNT JMP I OUTPUT /--RETURN-- /OUTPUT SPACES INSTEAD OF TAB OUTPT3, TAD [240 DCA OUTPT2 JMS OUTPUX /OUTPUT SPACE TAD LSTCNT /TAB STOPS ARE EVERY 8 SPACES AND [7 SZA CLA JMP .-4 JMP I OUTPUT /--RETURN-- /OUTPUT THE CHARACTER /PACKS CHARACTERS IN STANDARD OS/8 FORMAT OUTPUX, 0 ISZ OUJMP /BUMP 3-WAY SWITCH OUJMP, HLT /WILL BE CHANGED - SHOULD NEVER HALT JMP OCHAR1 /CHARACTER #1 JMP OCHAR2 /CHARACTER #2 OCHAR3, TAD OUTPT2 /CHARACTER #3 CLL RTL RTL AND [7400 TAD I OUPOLD /ADD 4 BITS TO WORD 1 DCA I OUPOLD TAD OUTPT2 CLL RTR RTR RAR AND [7400 TAD I OUPTR /ADD 4 BITS TO WORD 2 DCA I OUPTR TAD OUJMPE DCA OUJMP /RESET SWITCH ISZ OUPTR ISZ OUDWCT /BUFFER FULL? JMP OUCHLV /NO TAD [200 /YES JMS I (OUTDMP /DUMP BUFFER JMS OUSETP /RESET POINTERS JMP OUCHLV OCHAR2, TAD OUPTR /SAVE POINTER DCA OUPOLD ISZ OUPTR OCHAR1, TAD OUTPT2 DCA I OUPTR /SET 8 BIT WORD OUCHLV, TAD OUTPT2 TAD [40 AND [100 /CHECK FOR PRINTABLE CHAR SZA CLA /IF IT IS, ISZ LSTCNT /BUMP TAB COUNT OUTINH, 0 /ALWAYS 0 OR 1! JMP I OUTPUX /--RETURN-- OUPOLD, 0 OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUTPT2, 0 OUSETP, 0 TAD [7600 /SET OUTPUT WORD COUNT DCA OUDWCT /TO 200 TAD (OUBUF DCA OUPTR /RESET POINTER TAD OUJMPE DCA OUJMP /RESET SWITCH CLL /MUST CLEAR LINK!! JMP I OUSETP /--RETURN-- /HANDLER FOR DEVICE PSEUDO-OP DEVICX, JMS I [SPNOR /IGNORE TRAILING SPACES TAD [-5 JMP DEVIC1 /PACK 4 CHARACTERS /HANDLER FOR FILENAME PSEUDO-OP FILENX, JMS I [SPNOR /IGNORE TRAILING SPACES TAD (-7 JMS FILE1 /PACK 6 CHARACTERS TAD CHAR TAD [-". /WAS CHARACTER . ? SNA CLA JMS I [GETC /YES-SKIP TO EXTENSION AC7775 DEVIC1, JMS FILE1 /PACK 2 CHARACTERS JMP I [LOOKEX /--EXIT TO MAIN-- /PACK CHARACTERS /NEGATIVE OF # OF CHARACTERS TO BE PACKED IN AC ON ENTRY FILE1, 0 DCA FILE6 /SAVE # OF CHARACTERS TO PACK DCA I (TEXT6 /RESET PACK SWITCH FILE4, JMS I [TSTALN /IS CHARACTER IN CHAR ALPHANUMERIC? SKP JMP FILE5 /NO-DONE PACKING ISZ FILE6 /YES-TOO MANY CHARACTERS? JMP FILE3 /NO-O.K. CLA CMA /YES DCA FILE6 /RESET # OF CHARACTERS AND IGNORE JMP FILE2 FILE3, TAD CHAR JMS I (TEXT2 /PACK A CHARACTER FILE2, JMS I [GETC /GET A CHARACTER JMP FILE4 /TEST IT JMS I (TEXT2 /PACK A ZERO CHAR FILE5, ISZ FILE6 /ARE WE DONE? JMP .-2 /NO - PAD WITH ZEROES JMP I FILE1 /YES--RETURN-- FILE6, 0 PAGE /HANDLER FOR TEXT PSEUDO-OP /SPACES ARE IGNORED TO DELIMITER /DELIMITER IS FIRST PRINTING CHARACTER /OTHER THAN SPACE /NON-PRINTING CHARACTERS ARE ILLEGAL /A PRINTING CHARACTER HAS EITHER BIT 5 /OR BIT 6 SET, BUT NOT BOTH TEXT8, JMS I [GETC /GET NEXT CHARACTER TEXTX, CLL CLA CML RAR /AC=4000 DCA GETCI /; AND / ARE NOT END OF LINE JMS TEXT1A /CHECK FOR PRINTING CHARACTER JMP TEXT8 /NON PRINTING - IGNORE TAD [-240 /IGNORE SPACES UNTIL DELIMITER SNA /HAS BEEN FOUND JMP TEXT8 TAD [240 /RESTORE CHARACTER CIA DCA VALUE2 /STORE NEGATIVE DELIMITER DCA TEXT6 /SET PACKING SWITCH TEXT3, JMS I [GETC /GET NEXT CHARACTER JMS TEXT1A /IS IT A PRINTING CHARACTER? JMP TEXT9 /NO - IC TAD VALUE2 /YES - IS IT DELIMITER? SNA CLA JMP TEXT4 /YES - TERMINATE TAD CHAR /NO - PACK AND OUTPUT JMS TEXT2 /PACK IT JMP TEXT3 TEXT4, DCA GETCI /RESET GETCI TO CALL ; AND / END OF LINE JMS I [GETC /SKIP DELIMITER TEXT4X, JMS TEXT2 /OUTPUT 0 TO FILE JMS TEXT2 /CHANGE TEXT4X TO: / NOP /FOR NO EXTRA WORD OF ZEROS DCA GETCI /RESET GETCI IN CASE WE HIT CR JMP I [LOOKEX /--EXIT TO MAIN-- TEXT9, JMS I [ERROR /GENERATE IC ERROR MESSAGE IC JMP TEXT3 /SKIP ON PRINTING CHARACTER TEXT1A, 0 TAD CHAR SPA SNA CLA /IS CHARACTER - JMP TEXT4X /YES TAD CHAR TAD [40 AND [100 SZA CLA /IS THE CHAR PRINTING? ISZ TEXT1A /YES - INCREMENT RETURN TAD CHAR /WITH CHARACTER IN AC JMP I TEXT1A /--RETURN-- /OUTPUT 2 TEXT CHARACTERS (ONE REGISTER) /ENTER WITH CHARACTERS IN AC TEXT2, 0 AND [77 /GET RIGHT 6 BITS ISZ TEXT6 /WHICH HALF OF WORD? JMP TEXT5 /LEFT TAD TEXT7 /RIGHT--ADD IN LEFT HALF JMS I [PUNBIN /OUTPUT IT JMP I TEXT2 /--RETURN-- TEXT5, JMS I [RTL6 /GET LEFT HALF OF WORD DCA TEXT7 /SAVE IT CLA CMA /SET SWITCH FOR RIGHT HALF DCA TEXT6 JMP I TEXT2 /--RETURN-- TEXT6, 0 TEXT7, 0 /HANDLER FOR EXPUNGE PSEUDO-OP EXPUNX, TAD PASS /IS THIS PASS 1 SMA CLA JMP I [LOOKEX /NO--EXIT TO MAIN-- JMP I (EXPUNW /YES-CONTINUE AT EXPUNW /CLOSE OUTPUT FILE OCLOSE, 0 TAD I (OUTINH /OUTPUT INHIBITED? SZA CLA JMP I OCLOSE /YES--RETURN-- PTPSW, TAD [232 /NO-0 IF PTP: - OUTPUT ^Z JMS I OCHAR JMS I OCHAR /AND ZEROS FILLLP, JMS I OCHAR DIRSW, TAD [177 /TAD [77 IF NOT DIRECTORY AND I (OUDWCT /FILL OUT BUFFER OR HALF BUFFER SZA CLA /WITH ZEROS JMP FILLLP TAD I (OUDWCT /IS THERE OUTPUT TO BE DUMPED? TAD [200 SZA JMS OUTDMP /YES - DUMP IT TAD OUFILE /GET DEVICE NUMBER IN AC CIF 10 JMS I IOMON /CALL USER SERVICE ROUTINES 4 /*CLOSE OUTPUT FILE* OUCNAM, 0 /POINTER TO FILENAME TO BE DELETED OUCCNT, 0 /LENGTH OF NEW PERMANENT FILE JMP SYSER3 /DE**FATAL ERROR** JMP I OCLOSE /--RETURN-- OUFILE, ZBLOCK 5 /OUTPUT DUMP /AC CONTAINS CONTROL WORD FOR DUMP OUTDMP, 0 TAD [4000 /BE SURE CONTROL WORD IS DCA OUCTLW /A WRITE OPERATION TAD OUBLK /GET STARTING BLOCK NUMBER TAD OUCCNT /ADD IN COUNT DCA OUREC /SET THIS BLOCK NUMBER TAD OUCTLW TAD [100 /ROUND HALF-BLOCK, IF ANY CLL RTL RTL RTL AND [17 /GET THIS COUNT TAD OUCCNT DCA OUCCNT /ADD TO TOTAL COUNT TAD OUCCNT /IS OUTPUT DEVICE FULL? CLL CML TAD OUELEN /CHECK AGAINST MAXIMUM LENGTH SNL SZA CLA JMP SYSER2 /DF**FATAL ERROR** JMS I OUHNDL /CALL OUTPUT DEVICE HANDLER OUCTLW, 0 /CONTROL WORD OUBUF /BEGINNING OF OUTPUT BUFFER OUREC, 0 /STARTING BLOCK NUMBER SYSER3, CLA SKP /ERROR RETURN JMP I OUTDMP /--RETURN-- SYSERR, TAD (DE /DE **FATAL ERROR** JMP I [MONERR OUHNDL, 0 OUBLK, 0 OUELEN, 0 SYSER2, TAD (DF /GENERATE DF ERROR MESSAGE JMP I [MONERR /**FATAL ERROR** PAGE /MAINLINE CODE LOOKE2, 0 /WAS THIS END OF LINE TAD CHAR / OR END OF CONDITIONAL? TAD [-"> SNA JMP CONEND /END OF CONDITIONAL TAD ("> SMA CLA JMP I LOOKE2 /NOT END OF LINE--RETURN-- LOOKE1, JMS I [GETC /GET A CHARACTER MAIN, JMS I (CTCCHK /CHECK FOR ^C CLA /** CTCCHK RETURNS AC NON-ZERO! JMS I [SPNOR /IGNORE SPACES TAD CHAR TAD (-"$ /WAS IT $ ? SNA /YES-- JMP I (ENDPAS /NO-END THIS PASS TAD ("$-"* SNA CLA /WAS IT * ? JMP STAR /YES-HANDLE * JMS I [TSTALP /NO-WAS IT ALPHABETIC? JMP ALPHA /YES JMS LOOKE2 /NO TOEXP, JMS I [EXP /GET REST OF EXPRESSION TAD LININD DCA LINKSW /STORE LINK SWITCH TAD VALUE JMS I [PUNBIN /OUTPUT THE REGISTER LOOKEX, JMS I [SPNOR /IGNORE TRAILING SPACES JMS LOOKE2 /IS LINE ENDED? ILCHAR, JMS I [ERROR /NO-GENERATE IC ERROR MESSAGE IC JMP CONEN1 CONEND, TAD CONDSW /ARE WE INTO CONDITIONALS? SNA JMP ILCHAR /NO - > IS ILLEGAL IAC /ONE LESS CONDITIONAL DCA CONDSW CONEN1, JMS I [GETC /GET NEXT CHARACTER JMP LOOKEX /AND TRY FOR END AGAIN /HANDLER FOR * STAR, JMS I [GETC /GET NEXT CHARACTER AFTER * JMS I [SPNOR /IGNORE SPACES JMS I [EXP /GET REST OF EXPRESSION STAR0, DCA STARSW /ENTER HERE FROM RELOC WITH AC = -1 ISZ UNDFSW /WAS ANYTHING UNDEFINED? JMP .+3 JMS I [ERROR /YES-GENERATE UO ERROR MESSAGE UO TAD VALUE /NO DCA OP TAD LOC /IS THIS THE SAME PAGE AS AND [7600 /THE PREVIOUS CODE? CIA TAD OP AND [7600 SNA CLA JMP STAR2 /YES-PUNCH ORIGIN JMS I [DUMPS /NO-DUMP LITERALS TAD OFSBUF /SET OFFSET TO NEW VALUE DCA OFFSET /AFTER LITERALS ARE DUMPED. TAD OP /PUNCH NEW ORIGIN, SET "VALUE" JMP I (STAR3 /FOR LISTING, AND SET UP IN NEW PAGE STAR2, TAD OFSBUF /SET OFFSET TO NEW VALUE DCA OFFSET / TAD OP JMS I [PUNORG /PUNCH ORIGIN DCA LAST1 /CLEAR LAST DEFINED SYMBOL JMP I [PUNVAL ALPHA, JMS I [GETTAG /PICK UP TAG-IS IT IN TABLE? DCA ALPHAI /STORE UNDEFINED TAG SWITCH TAD TAG3 /IS IT A PSEUDO-OP? SPA CLA JMP I VALUE2 /YES-GO TO ITS HANDLER TAD CHAR /NO TAD (-", /WAS IT TERMINATED BY , ? SNA JMP COMMA /YES-DEFINE THE SYMBOL TAD (",-"= /NO-WAS IT TERMINATED BY = ? SNA CLA JMP I (EQUAL /YES-EQUATE THE SYMBOL AC4000 /NO JMP TOEXP /TREAT AS AN EXPRESSION /HANDLER FOR , COMMA, JMS I [GETC /GET NEXT CHARACTER ISZ ALPHAI /WAS TAG DEFINED PREVIOUSLY? JMP COMMA2 /YES TAD LOC /NO-STORE CURRENT ADDRESS FOR DEFINITION DCA VALUE2 JMS I [INSRTG /PUT TAG IN SYMBOL TABLE COMMA1, TAD TAG1 /STORE FOR ERROR MESSAGE OUTPUT DCA LAST1 TAD TAG2 DCA LAST2 TAD TAG3 DCA LAST3 TAD VALUE2 DCA LAST4 JMP MAIN /--EXIT TO MAIN-- COMMA2, TAD LOC /DO NEW AND OLD DEFINITIONS AGREE? CIA TAD VALUE2 SNA CLA JMP COMMA1 /YES-ALLOW REDEFINITION JMS I [ERROR /NO-GENERATE ID ERROR MESSAGE ID JMP MAIN /--EXIT TO MAIN-- PAGE /EXPRESSION PROCESSOR /POSSIBLE RECURSIVE ENTRY /ENTER WITH CHARACTER IN CHAR EXP, 0 DCA EXPIND /SET INDICATOR (NOT 0 IF NO MRI FOUND) DCA LININD /CLEAR LINK GENERATED SWITCH (' ) DCA VALUE /START WITH "VALUE" = 0 DCA UNDFSW /CLEAR UNDIFINED SWITCH TAD EXP JMS I [PUSHA /SAVE RETURN ADDRESS DCA OP /OP=0; ADD TAD EXPIND SPA CLA JMP I (EXPINT TAD CHAR /IS CHARACTER A + ? TAD [-"+ CLL RTR /PUT THE 2 BIT IN THE LINK SZA CLA /WAS CHAR 53(+) OR 55(-)? JMP EXP1A /NO RAL /YES - OP IS 0 OR 1, DEPENDING EXP1, DCA OP JMS I [GETC /GET NEXT CHARACTER ISZ EXPIND /MRI NO LONGER LEGAL ON THIS LINE EXP1A, TAD CHAR /IS CHARACTER A . ? TAD [-". SNA JMP PERIOD /YES-GO TO . HANDLER TAD (".-"" /NO-IS IT " ? SNA JMP QUOTE /YES-GO TO " HANDLER TAD (""-"[ /NO-IS IT [ ? CLL SZA TAD ("[-"( /OR (? SNA CLA JMP I (LIT /YES - LITERAL - LINK HOLDS WHICH KIND JMS I [TSTALP /NO-IS IT ALPHABETIC? JMP I (ALPHA1 /YES-HANDLE SYMBOL JMS I [TSTNUM /NO-IS IT NUMERIC? JMP NUMBER /YES-HANDLE NUMBER EXP2, JMS ENDCHK /NO-CHECK FOR END JMP EXP1A /NOGO - TRY AGAIN TAD OP TAD [-4 /IS OP SPACE (4) SNA CLA JMP I (EXPXIT /YES-EXIT JMS I [ERROR IC /GIVE IC MESSAGE ON ILLEGAL OPERATOR JMP I (EXPINT /EXIT ANYWAY /END OF EXPRESSION CHECK /SKIP IF OK ENDCHK, 0 TAD CHAR TAD (-"] /IS CHARACTER A ] ? SZA /YES-SKIP A EXIT TAD ("]-") /IS CHARACTER A ) ? SZA /YES-SKIP A EXIT TAD (")-"> /IS CHARACTER A > ? SZA /YES-SKIP AND EXIT TAD (">-"< /IS CHARACTER A < ? SNA JMP ENDCH1 /YES-SKIP AND EXIT TAD ("< SPA CLA /IS IT END-OF-LINE? JMP ENDCH1 /YES-SKIP AND EXIT JMS I [ICMESG /NO - GENERATE IC MESSAGE AND GET NEXT CHAR JMP I ENDCHK /--RETURN-- ENDCH1, ISZ ENDCHK /INCREMENT RETURN ADDRESS JMP I ENDCHK /--RETURN-- NUMBER, DCA TEMP NUMBE2, TAD RADIX /IS THE CURRENT RADIX OCTAL? SNA CLA TAD CHAR /YES-IS THE DIGIT GREATER THAN 7? TAD (-"8 SMA CLA JMP NUMBE3 /YES-ILLEGAL CHARACTER TAD TEMP /NO-ADD IT TO THE PREVIOUS CLL RAL /ACCUMULATED VALUE CLL RAL DCA TEMP2 TAD RADIX /IS RADIX OCTAL? AND TEMP /NO TAD TEMP2 /YES CLL RAL TAD CHAR TAD (-"0 DCA TEMP JMS I [GETC /GET NEXT CHARACTER NUMBE4, JMS I [TSTNUM /IS IT NUMERIC? JMP NUMBE2 /YES-CONTINUE ACCUMULATING NUMBER TAD TEMP /NO-STORE NUMBER NUMBE1, DCA VALUE2 NUMBE5, TAD OP /GO COMBINE IT VIA LAST OPERATION TAD (OPTABL DCA TEMP /FIND THE OPERATOR HANDLER TAD I TEMP DCA TEMP JMP I TEMP /GO TO THE HANDLER /8 OR 9 FOUND DURING OCTAL RADIX NUMBE3, JMS I [ICMESG /GENERATE IC ERROR MESSAGE AND JMP NUMBE4 /IGNORE CHARACTER /HANDLER FOR . PERIOD, JMS I [GETC /GET NEXT CHARACTER TAD LOC /MAKE CURRENT LOCATION JMP NUMBE1 /INTO VALUE OF NUMBER /HANDLER FOR " QUOTE, ISZ TXTPTR TAD I TXTPTR /GET CHARACTER FROM TEXT BUFFER TAD [-215 /WAS IT CARRIAGE RETURN? SNA CLA JMP QUOTE1 /YES-IT IS IC-IGNORE " TAD I TXTPTR /NO-PUT ASCII CODE INTO DCA VALUE2 /VALUE WORD JMS I [GETC /GET NEXT CHARACTER JMP NUMBE5 /RETURN TO EXPRESSION PROCESSOR /CARRIAGE RETURN FOUND IN SINGLE CHARACTER TEXT QUOTE1, JMS I [ERROR /GENERATE IC ERROR MESSAGE IC CLA CMA DCA CHAR JMP I (EXPXIT PAGE /COME HERE IF FIRST THING IN EXPRESSION IS ALPHA CHARACTER ALPHA1, JMS I [GETTAG /PICK UP TAG DCA ALPHAI /STORE UNDEFINED INDICATOR ALPHA3, TAD TAG3 /IS IT A PSEUDO-OP? SMA CLA JMP .+3 JMS I [ERROR /YES-GENERATE IP ERROR MESSAGE IP ISZ ALPHAI /NO-WAS IT UNDEFINED? JMP ALPHA0 ISZ UNDFSW /YES-SET UNDEFINED SWITCH TAD PASS /IS THIS PASS 1? SPA CLA JMP ALPHA0 /YES-SUPPRESS ERROR MAESSAGE JMS I [ERROR /NO-GENERATE US ERROR MESSAGE US ALPHA0, TAD TAG2 /NO-WAS IT A MEMORY REFERENCE INSTRUCTION? SPA CLA TAD CHAR /YES-GET TERMINATING CHARACTER TAD [-240 /WAS IT SPACE? SZA CLA JMP I (NUMBE5 /NOT MEMREF FOLLOWED BY SPACE JMS I [SPNOR /YES-IGNORE SPACES TAD CHAR SPA CLA JMP I (NUMBE5 TAD EXPIND /IS MEMORY REFERENCE INSTRUCTION OK? SZA CLA JMP I (NUMBE5 /NO- DCA IZIND /YES-CLEAR I AND Z INDICATOR TAD VALUE2 /STORE MRI ON PUSHDOWN LIST JMS I [PUSHA ALPHA6, TAD IZIND JMS I [PUSHA /PUSH THE I AND Z INDICATOR JMS I [TSTALP /WAS TERMINATING CHARACTER ALPHABETIC? SKP JMP ALPHA4 /NO- JMS I [GETTAG /YES-PICK UP TAG DCA ALPHAI /STORE UNDEFINED INDICATOR AC2000 AND TAG1 /WAS IT AN I OR Z? SNA CLA JMP ALPHA5 /NO TAD VALUE2 /YES-WAS IT I? SNA IAC /NO - SET LOW ORDER TAD I PDLXR /GET OLD IZIND FROM PDL DCA IZIND /SET NEW IZIND JMS I [SPNOR /IGNORE SPACES JMP ALPHA6 EXPINT, TAD EXPIND TAD [4000 DCA EXPIND JMP ALPHA3 ALPHA5, AC4000 ALPHA4, IAC JMS I [EXP /GET REST OF EXPRESSION TAD I PDLXR /RETRIEVE MRI DCA IZIND TAD I PDLXR DCA VALUE2 /FALL INTO NEXT PAGE /COMBINE ADDRESS WITH MEMORY REFERENCE INSTRUCTION TAD VALUE /GET ADDRESS AND [7600 SNA /IS IT PAGE 0? JMP FIX4 /YES CIA /NO-IS IT ON CURRENT PAGE? TAD LOC AND [7600 SNA CLA JMP FIX2 /YES TAD VALUE /NO-SET UP LINK JMS I (FINDS DCA VALUE TAD FIXMD0 /SET ' IN LISTING DCA LININD ISZ LINK /BUMP NUMBER OF LINKS GENERATED FIXMD0, 0700 /PROTECTION FOR ISZ LGERR, SKP /JMS I PERROR IF /E SPECIFIED LG JMS ADDIND /SET INDIRECT BIT IN INSTRUCTION FIX2, TAD [200 /SET CURRENT PAGE BIT TAD VALUE2 DCA VALUE2 TAD IZIND AND [77 /WAS Z SPECIFIED? SNA CLA JMP FIX4 /NO JMS I [ERROR /YES - ILLEGAL REFERENCE IZ /TO PAGE 0 FIX4, TAD IZIND /WAS THERE AN I? AND [7700 SZA CLA JMS ADDIND /YES - ADD INDIRECT BIT TO INSTRUCTION TAD VALUE /GET ADDRESS AND [177 TAD VALUE2 /GET OP CODE DCA VALUE /STORE POPJ, TAD I PDLXR DCA TEMP /POP A WORD OFF THE STACK JMP I TEMP /JUMP THROUGH IT. ADDIND, 0 /ROUTINE TO ADD INDIRECT BIT TO AN INSTR TAD VALUE2 CMA AND [400 SZA /WAS THERE ONE ALREADY? JMP .+3 /NO JMS I [ERROR /YES - ILLEGAL INDIRECT II TAD VALUE2 DCA VALUE2 JMP I ADDIND OPTABL, OP0 /+ OP1 /- OP6 /% OP2 /& OP5 /(SPACE) OPEXPL, OP5 /! - CHANGED TO OP3 IF /B ON OP4 /^ PAGE /COMBINE CURRENT VALUE WITH PREVIOUS VALUE /ACCORDING TO LAST OPERATOR OP0, TAD VALUE2 /HANDLER FOR + TAD VALUE /** OP0+1 AND OP0+2 JUMPED TO ** DCA VALUE EXP3, TAD CHAR /GET LAST OPERATOR TAD [-"+ /WAS IT A + OR - ? CLL RTR SNA JMP PLSMIN /YES - LINK=0 FOR +, 1 FOR - RTL TAD ("+-"% CLL RAR SNA /IS THE CHAR % OR &? JMP DIVAND /YES - LINK=0 FOR %, 1 FOR & RAL TAD ("%-240 CLL RAR SNA /IS THE CHAR SPACE OR !? JMP BLKEXP /YES - LINK=0 FOR SPACE, 1 FOR ! RAL TAD (240-"^ SNA CLA /IS THE CHAR ^? JMP MUL /YES - LINK IRRELEVANT JMS I (ENDCHK /NO-SEE IF END OF LINE FOUND JMP EXP3 /NO-TRY AGAIN EXPXIT, TAD UNDFSW /EXIT FROM EXP SNA CLA /RESTORE EXIT POINT JMP I (POPJ /--EXIT VIA POPJ-- CLA CMA DCA UNDFSW /SET UNDEFINED SWITCH DCA VALUE /RESULT IS 0 JMP I (POPJ /--EXIT VIA POPJ-- MUL, CLL IAC /LINK DOESN'T COUNT FOR ^ BLKEXP, IAC /** BLANK ASSUMED TO BE 4 ELSEWHERE ** DIVAND, IAC PLSMIN, RAL JMP I (EXP1 /GET REST OF EXPRESSION /HANDLER FOR & OP2, TAD VALUE AND VALUE2 JMP OP0+2 /HANDLER FOR ^ /MULTIPLY BY REPEATED ADDITION OP4, TAD VALUE CIA DCA TEMP TAD VALUE2 ISZ TEMP JMP .-2 JMP OP0+2 OP1, TAD VALUE2 /- OPERATOR CIA JMP I (OP0+1 /JUMP INTO ADD OPERATOR /OPTIONAL HANDLER FOR ! AS 6 BIT LEFT SHIFT AND THEN OR: OP3, TAD VALUE JMS I [RTL6 AND [7700 /ISOLATE 6 BITS AND FALL INTO "OR" /HANDLER FOR ! AND SPACE AS INCLUSIVE OR OP5, TAD VALUE CMA AND VALUE2 JMP I (OP0+1 /CHARACTER INPUT CHECK /ENTER WITH CHARACTER IN AC LSTCH9, SZA /IGNORE NULL (0) TAD (-177 SZA /IGNORE RUBOUT (377) TAD (177-13 SZA /IGNORE VERTICAL TAB (213) IAC SNA JMP I (INPUT+1 /IGNORE LINE FEED (212) TAD [12-32 /WAS IT ^Z (END-OF-FILE=232)? SNA JMP I (ENDCHR /YES - GET NEXT FILE TAD (32-15 /NO - WAS IT CARRIAGE RETURN? SNA JMP LSTCHR /YES - LAST CHARACTER OF LINE IAC /NO SNA /WAS IT FORM FEED (214)? JMP FORCHR /YES - HANDLER FORM FEED ISZ I (INPUT TAD (14+200 DCA LSTCH5 /STORE CHARACTER TAD PASS /IS THIS PASS 3? SPA SNA CLA JMP LSTCH4 /NO - ISZ LSTCH6 /YES - FILLING HEADER AREA? JMP LSTCH3 /YES CLA CMA /NO - RESET SWITCH DCA LSTCH6 LSTCH4, TAD I (INPUT DCA TEMP TAD LSTCH5 /GET CHARACTER IN AC JMP I TEMP /-EXIT FROM INPUT- LSTCH3, ISZ LSTCH7 /FILLING HEADER TAD LSTCH5 /STORE CHARACTER IN HEADER AREA DCA I LSTCH7 JMP LSTCH4 LSTCH5, 0 LSTCH6, -HEDLEN LSTCH7, HEADER-1 LSTCHR, TAD FORMSW /CARRIAGE RETURN WAS FOUND SNA CLA /HAS THERE BEEN A FORM FEED? JMP LSTCH1 /NO - DCA FORMSW /YES - CLEAR FORM FEED SWITCH ISZ EDITPG /GO TO NEXT EDITOR PAGE DCA THISPG /CLEAR OVERFLOW PAGE TAD PASS /IS THIS PASS 3? SMA SZA CLA JMS I [FORMFD /YES - GENERATE FORM FEED LSTCH1, TAD [215 /NO - CARRIAGE RETURN IS CHARACTER DCA LSTCH5 JMP LSTCH4-2 /EXIT FORCHR, ISZ FORMSW /SET FORM FEED SWITCH JMP I (INPUT+1 /GET ANOTHER CHARACTER FORMSW, 1 PAGE /ERROR MESSAGE OUTPUT DUMPS1, ERROR, 0 CLA ISZ ERCNT /COUNT THE ERRORS ERPLUS, "+ /PROTECTION TAD I ERROR /GET ERROR MESSAGE ISZ ERROR /INCREMENT RETURN ADDRESS JMS I [ERROR1 /OUTPUT 2 CHARACTER ERROR MESSAGE TAD (JMP I [7600 /PUT EXIT TO MONITOR CSWIT1, DCA I (LSWITC /IN SWITCH - "CLA" IF /C TAD PASS /IS THIS PASS 3? SMA SZA CLA JMP ERROR4 /YES - CARRIAGE RETURN/LINE FEED JMS I [ERROR1 /NO - OUTPUT 2 SPACES TAD [1777 /IS THERE A TAG SAVED? AND LAST1 SNA JMP ERROR3 /NO JMS I (DIV45 /YES - OUTPUT FIRST 2 CHARACTERS TAD LAST2 /OUTPUT SECOND 2 CHARACTERS JMS I (DIV45 TAD LAST3 JMS I (DIV45 /OUTPUT THIRD 2 CHARACTERS TAD LAST4 /IS ERROR LOCATION SAME AS LAST TAG? CIA TAD LOC SNA CLA JMP ERROR4 /YES - CARRIAGE RETURN TAD ERPLUS JMS I OERROR TAD LAST4 CIA ERROR3, TAD LOC /OUTPUT 4 DIGIT ADDRESS OR INCREMENT JMS I (OCTPRT ERROR4, TAD [215 /OUTPUT CARRIAGE RETURN/LINE FEED JMS I OERROR JMP I ERROR /--RETURN-- /RESET LITERAL TABLES AND POINTERS DUMPS5, CLEAN, 0 TAD (LITBUF-1 DCA XREG1 /SET LITERAL TABLE POINTER TAD (TPINST-1 DCA XREG2 /SET TOP INST. TABLE POINTER TAD (-40 DCA TEMP TAD [200 DCA I XREG1 /SET LITERAL TABLE ENTRIES TO 200 DCA I XREG2 /SET TOP INST. TABLE ENTRIES TO 0 ISZ TEMP JMP .-4 DCA LAST1 /CLEAR LAST DEFINED TAG JMP I CLEAN /--RETURN-- /DUMP CURRENT PAGE LITERALS DUMPS, 0 JMS I [FINDSP SNA /IF THIS IS PAGE 0, JMP I DUMPS /--RETURN-- TAD [LITBUF DCA DUMPS1 TAD LITPTR CIA CLL TAD I DUMPS1 DCA DUMPS2 /STORE NUMBER OF LITERALS ON THIS PAGE SZL /ARE THERE ANY? JMP I DUMPS /NO DCA STARSW /FORCE ORIGIN PUNCH IF RELOC JUST INVOKED TAD LOC AND [7600 TAD I DUMPS1 JMS I [PUNORG /OUTPUT ORIGIN TAD I DUMPS1 TAD [LITBF1 DUMPS3, DCA DUMPS5 TAD I [LINBUF /SAVE LINBUF JMS I [PUSHA DCA I [LINBUF DUMPS6, TAD I DUMPS5 DCA VALUE JMSPUN, JMS I [PUNONE /OUTPUT ONE REGISTER ISZ LOC ISZ DUMPS5 LITHAK, ISZ I DUMPS1 /DESTROY RECORD OF CURRENT PAGE LITERALS - /ZEROED IF NO /W OPTION SPECIFIED ISZ DUMPS2 JMP DUMPS6 TAD I PDLXR DCA I [LINBUF /RESTORE LINBUF JMP I DUMPS /--RETURN-- /HANDLER FOR ZBLOCK PSEUDO-OP /RESERVES AS MANY WORDS OF ZERO /AS VALUE OF EXPRESSION ZBLOCX, JMS I [SPNOR /IGNORE SPACES JMS I [EXP /GET THE EXPRESSION TAD VALUE CMA /PROTECT AGAINST ZERO CASE DCA TEMP3 /STORE NEGATIVE AS COUNTER JMP ZBLOCZ /JUMP INTO LOOP ZBLOCY, JMS I [PUNBIN /OUTPUT ONE WORD OF ZERO TAD PASS /IS THIS PASS 3? SMA SZA CLA DCA I (PUNMOD /YES - PREVENT OUTPUT ZBLOCZ, ISZ TEMP3 /NO - DONE YET? JMP ZBLOCY /NO - CONTINUE TAD JMSPUN /YES - RESTORE PUNMOD DCA I (PUNMOD JMP I [LOOKEX /--EXIT TO MAIN-- /DUMP PAGE 0 LITERALS DUMPS2, DUMPZ, 0 TAD DUMPZ /RESET EXIT FROM DUMPS DCA DUMPS TAD [200 CIA CLL TAD I [LITBUF /STORE THE NUMBER OF LITERALS ON PAGE 0 DCA DUMPS2 SZL /ARE THERE ANY? JMP I DUMPS /NO - ** DUMPZ IS DESTROYED ** TAD I [LITBUF JMS I [PUNORG /OUTPUT ORIGIN TAD I [LITBUF /SET VALUES FOR DUMPS TAD (LITBF2 JMP DUMPS3 PAGE /ENTER A TAG INTO SYMBOL TABLE INSRTG, 0 TAD VALUE2 /SAVE VALUE 2 JMS I [PUSHA ISZ HIGHTG /COUNT IN THIS TAG TAD TAGMAX CLL CIA /GET LIMIT OF SYMBOL STORAGE TAD HIGHTG /IS THERE ROOM FOR ONE MORE? SZL JMP I (SYMOFL /NO - SE**FATAL ERROR** TAD TAGMAX /YES - IS USR IN CORE? TAD (-1340 SZL CLA JMP GETTG5 /YES TAD [7700 /NO - RESET ADDRESS TO DCA IOMON /USR NON-RESIDENT AC7776 AND I (JSBITS /RESET JOB STATUS WORD TO DCA I (JSBITS /SAVE CORE WHEN USR CALLED GETTG5, TAD THISTG /SEARCH SYMBOL TABLE DCA TEMP2 TAD HIGHTG IAC DCA THISTG GETTG8, AC7776 TAD THISTG DCA THISTG JMS I [FINDTG /GET NEXT TAG FROM SYMBOL TABLE ISZ THISTG TAD THISTG CIA TAD TEMP2 /DOES NEW TAG GO WHERE PREVIOUS TAG WAS? SNA CLA JMP GETTG9 /YES-PUT IT THERE AND EXIT JMS I [PUTTAG /NO-REPLACE RETRIEVED TAG WHERE PREVIOUS TAG WAS JMP GETTG8 /THE ABOVE CODE WILL BE OPTIMIZED AT INITIALIZATION /IF THE ASSEMBLER IS TO BE RESTRICTED TO 8K OF CORE GETTG9, TAD I (NAME1 /GET CURRENT TAG DCA TAG1 /PUT IT IN TAG1-TAG3 TAD I (NAME2 DCA TAG2 TAD I (NAME3 DCA TAG3 TAD I PDLXR /RESTORE VALUE 2 DCA VALUE2 JMS I [PUTTAG /PUT TAG1 - TAG3 INTO SYMBOL TABLE JMP I INSRTG /--RETURN-- TAGMAX, 1740 /12K=3740, ... /OUTPUT 2 CHARACTER WORD /FROM SYMBOL TABLE FORMAT /DIVIDE BY 45(8) DIV45, 0 RAL CLL RAR /CLEAR SIGN BIT DIV45A, ISZ DIV45C TAD (-45 SMA JMP DIV45A TAD (45 JMS DIV45E DCA DIV45B STA TAD DIV45C JMS DIV45E JMS I [RTL6 TAD DIV45B JMS I [ERROR1 /OUTPUT 2 CHARACTERS DCA DIV45C /CLEAR DIV45C FOR NEXT GO-ROUND JMP I DIV45 /--RETURN-- DIV45B, 0 DIV45C, 0 /** MUST BE 0 WHEN DIV45 IS ENTERED ** DIV45E, 0 SNA JMP I DIV45E TAD (-33 SMA TAD (20-40-33 TAD (33+40 JMP I DIV45E /--RETURN-- /HANDLER FOR FIXTAB PSEUDO-OP FIXTBX, TAD PASS /IS THIS PASS 1? SMA CLA JMP I [LOOKEX /NO--EXIT TO MAIN-- JMP I (FIXTAY /YES--DO FIXTAB /SET FIELD SETFLD, 0 CLA /SETFLD CALLED WITH AC RANDOM DCA SETFL1 /INITIALIZE FIELD TAD THISTG SETFLP, ISZ SETFL1 CLL TAD (-1740 /PUT 1740 SYMBOLS IN EACH FIELD SZL /IS THE DIVIDE THROUGH? JMP SETFLP /NO - CONTINUE CLL CMA RTL /AC CONTAINED REM-1740; THIS MAKES IT INTO TAD (-1 /7573-4*REM WHICH IS THE ADDRESS WE WANT DCA TAGXR /TO STICK INTO AN AUTO-XR TAD SETFL1 CLL RTL RAL TAD SETFL2 DCA SETFL1 SETFL1, HLT JMP I SETFLD /--RETURN-- /FIND TAG /GET TAG FROM SYMBOL TABLE /PUT IT INTO TAG1-TAG3 /WITH ITS VALUE IN VALUE2 FINDTG, 0 TAD THISTG JMS SETFLD TAD I TAGXR DCA TAG1 TAD I TAGXR DCA TAG2 TAD I TAGXR DCA TAG3 TAD I TAGXR DCA VALUE2 SETFL2, CDF JMP I FINDTG /--RETURN-- /OPTIMIZATION MAY CHANGE SETFLD TO /REMOVE CLA ON ENTRY PAGE /BEGINNING OF PASS CODE JMS I (IOPEN /SET INPUT ROUTINE TO OPEN FILE START2, ISZ PASS /SET UP COUNTERS AND POINTERS DCA XLISTX /CLEAR XLIST SWITCH DCA FLDIND /SET FIELD TO 0 DCA CONDSW DCA EDITPG DCA LINK DCA RADIX DCA ERCNT DCA GETCI DCA PUNCHX DCA I [LINBUF TAD (PDLST DCA PDLXR JMS I [CLEAN TAD [200 DCA LITPTR TAD [200 JMS I [PUNORG JMP I (LOOKE1 /--EXIT TO MAIN-- /HANDLER FOR $ ENDPAS, JMS I [DUMPS /DUMP CURRENT PAGE LITERALS DCA OFSBUF /CLEAR OFFSET FOR NEXT PASS TAD PASS /WHAT PASS IS ENDING? SNA JMP I (ENDPA2 /PASS 2 SPA CLA JMP I (START1 /PASS 1 TAD I [LINBUF /PASS 3 SNA CLA /ANYTHING TO PRINT? JMP ENDPA1-1 /NO TAD [211 /YES - TAB OVER TWICE JMS I OERROR TAD [211 JMS I OERROR JMS I [LINPRT /PRINT LINE JMS I [DUMPZ /DUMP PAGE 0 LITERALS ENDPA1, DCA XLISTX /OUTPUT SYMBOL TABLE SSWITC, JMS I (SYMPRT /(0 IF /S) TAD I (FORM21 DCA I (FORM22 JMS I [FORMFD /OUTPUT FORM FEED ERMSGS, TAD ERCNT JMS OUTTTL /PRINT "ERRORS DETECTED: N" TAD LINK JMS OUTTTL /PRINT "LINKS GENERATED: N" FINLFF, JMS I [FORMFD /PRINT FINAL FF (ZEROED IF NO PASS 3) JMS I (OCLOSE /AND CLOSE THE OUTPUT FILE /CREF AND LOAD-AND-GO OPTIONS /****FINAL EXIT TO MONITOR**** LSWITC, JMP I [7605 /0 IF /L OR /G OR /C TAD (7616 DCA XREG1 CDF 10 CSWITC, TAD I [7600 /"TAD I [7605" IF /C AND [17 DCA I XREG1 /SET BINARY DEVICE TAD BINSRT /EXIT FROM PAL8 BY CHAINING /TO NEXT PROGRAM /SHOULD BE ABSLDR OR CREF DCA I XREG1 /SET STARTING BLOCK DCA I XREG1 /SET 0 TERMINATOR CDF TAD I (JSBITS /SET BIT 11 OF JOB STATUS WORD RAR /SO 10000-11777 IS NOT SAVED CLL CML RAL DCA I (JSBITS CIF 10 JMS I IOMON /CALL USER SERVICE ROUTINES 6 /*CHAIN TO NEXT PROGRAM* CHAIN, 0 /STARTING BLOCK OF NEXT PROGRAM OUTTTL, 0 DCA LAST1 /SAVE NUMBER TO BE PRINTED OUTTLL, TAD I TTLPTR /GET A WORD OF MESSAGE ISZ TTLPTR SNA /END? JMP PRTTTL /YES JMS I [ERROR1 /NO - PRINT IT JMP OUTTLL /AND LOOP PRTTTL, TAD [240 /PRINT A SPACE JMS I OCHAR TAD LAST1 JMS I (FORMF4 /PRINT NUMBER IN DECIMAL JMS I (CRLF /PRINT CR AND 2 LF'S (1 IF PASS 3) JMP I OUTTTL /AND RETURN TTLPTR, TTLMSG /COME HERE TO LOAD THE PASS 3 OVERLAY AT THE END OF PASS 2 LOADOV, JMS I (7607 /CALL SYSTEM DEVICE HANDLER 0200 /SWAP IN CODE UNIQUE TO PASS 3 SWAP1 /BUFFER ADDRESS ASWAP /STARTING BLOCK NUMBER JMP I (SYSER3 /DE**FATAL ERROR** NSWITC, JMP START2 /(0 IF NO LIST FILE, SKP IF /N) START PASS3 JMP ERMSG1 JMP ENDPA1 ERMSG1, TAD (OTYPEO /COME HERE IF NO PASS 3 OUTPUT FILE DCA OCHAR TAD (OTYPEO DCA OERROR TAD [7600 DCA I (OTYPCR /INHIBIT AUTO-LF ON CARRIAGE RETURN DCA FINLFF /KILL LAST FORM FEED JMP ERMSGS /ADD BITS TO PUNCH ORIGIN PUNORG, 0 DCA LOC TAD PASS /IS THIS PASS 2? SZA CLA JMP I PUNORG /NO--RETURN-- TAD LOC /YES - OUTPUT ORIGIN SETTING TAD OFFSET /"LOC" MAY BE FICTITIOUS - MAKE IT REAL CLL CML ISZ STARSW /INHIBIT PUNCHING ORIGIN IF NECESSARY JMS I [PUNOUT CLA DCA STARSW /RESET SWITCH JMP I PUNORG /--RETURN-- PAGE /EVALUATE LITERAL LIT, STA RAL /-2 IF PAGE 0 LITERAL, -1 IF CUR PAGE DCA FINDS1 /SAVE FLAG JMS I [GETC /GET NEXT CHARACTER JMS I [SPNOR /IGNORE SPACES TAD EXPIND /STORE IMPORTANT VALUES PRIOR TO JMS I [PUSHA /ENTRANCE INTO EXP TAD OP JMS I [PUSHA TAD VALUE JMS I [PUSHA TAD FINDS1 JMS I [PUSHA JMS I [EXP /GET EXPRESSION TAD VALUE /FIND LITERAL IN TABLE ISZ I PDLXR /PAGE 0? JMP .+3 JMS FINDS /NO SKP JMS FIND0 /YES DCA VALUE2 /STORE ADDRESS TAD I PDLXR DCA VALUE TAD I PDLXR /RESTORE SAVED VALUES DCA OP TAD I PDLXR DCA EXPIND TAD CHAR /IGNORE ) OR ] TAD (-") SZA TAD (")-"] SNA CLA JMS I [GETC /GET NEXT CHARACTER JMP I (NUMBE5 /RETURN TO EXPRESSION PROCESSOR PEZE, 0 /SUBR TO ISSUE PE OR ZE MESSAGE SNA CLA /WHICH ONE? JMP .+4 /PAGE 0 JMS I PERROR PE JMP I PEZE JMS I PERROR ZE JMP I PEZE /FIND LITERAL ON CURRENT PAGE FINDS, 0 DCA FINDS1 TAD LOC AND [7600 SNA /IS THIS PAGE 0? JMP FIND01 /YES DCA FINDS2 /NO - SAVE PAGE NUMBER TAD [LITBF1 DCA FIND0 TAD [7700 /ALLOW 100(8) CURRENT PAGE LITERALS DCA FORMF6 TAD LITPTR /GET PG ADDR OF 1ST LITERAL IN BUFFER FIND02, DCA FINDS3 TAD FINDS2 JMS I [RTL6 TAD [LITBUF DCA TEMP TAD FIND0 /COMPUTE ACTUAL CORE ADDRESS OF LITERAL TAD I TEMP DCA TEMP2 TAD FINDS3 /COMPUTE THE NUMBER OF ENTRIES CIA TAD I TEMP /IN THE LITERAL BUFFER SNA JMP FINDS6 /NONE DCA FINDS3 FINDS4, TAD I TEMP2 /GET LITERAL FROM TABLE CIA TAD FINDS1 /AND CURRENT LITERAL SNA CLA /DO THEY MATCH? JMP FINDS5 /YES ISZ TEMP2 /NO - BUMP COUNTERS ISZ FINDS3 JMP FINDS4 /TRY AGAIN FINDS6, TAD FINDS2 JMS I [RTL6 TAD [TPINST DCA FINDS3 TAD I TEMP /DOES THIS OVERFLOW PAGE? CIA TAD I FINDS3 SPA CLA JMP FINDS7 /NO FIND03, TAD FINDS2 /PAGE FULL - WHICH PAGE? JMS PEZE /GENERATE PE OR ZE MESSAGE CLA CMA JMP FINDS9 FINDS7, CLA CMA TAD I TEMP /IS PAGE FULL? AND FORMF6 SNA CLA JMP FIND03 /YES - OUTPUT ERROR MESSAGE CLA CMA TAD I TEMP /NO DCA I TEMP FINDS9, TAD I TEMP TAD FIND0 DCA TEMP2 TAD FINDS1 DCA I TEMP2 FINDS5, TAD FIND0 /GET ADDRESS OF LITERAL CIA TAD TEMP2 TAD FINDS2 JMP I FINDS /--RETURN-- /FIND LITERAL ON PAGE 0 FIND0, 0 DCA FINDS1 TAD FIND0 /RESET EXIT FROM FINDS DCA FINDS FIND01, DCA FINDS2 /SET POINTERS TAD (LITBF2 DCA FIND0 TAD [7760 /ALLOW 160(8) PAGE 0 LITERALS DCA FORMF6 TAD [200 JMP FIND02 FINDS1, 0 FINDS2, 0 FINDS3, 0 PAGE /HANDLER FOR IFZERO PSEUDO-OP IF0, TAD (10 /IFTST1, SNA CLA /HANDLER FOR IFNZERO PSEUDO-OP IFN0, TAD IFSZA /IFTST1, SZA CLA DCA IFTST1 JMS I [SPNOR /IGNORE SPACES JMS I [EXP /GET EXPRESSION IFTST3, TAD CHAR /GET LAST CHARACTER TAD (-"< SNA CLA /IS IT /NO - IS IT >? IFSZA, SZA CLA JMP IFTST4 /NO - FINISH THIS CONDITIONAL AC7776 IFTST6, CMA TAD CONDSW DCA CONDSW IFTST4, DCA I [LINBUF /INHIBIT LISTING OF UNASSEMBLED CODE - /ZEROED IF /J OPTION NOT SPECIFIED JMS I [GETC /GET NEXT CHARACTER JMP IFTST5 /HANDLER FOR IFDEF PSEUDO-OP IFD, TAD (10 /IFTST1, SNA CLA /HANDLER FOR IFNDEF PSEUDO-OP IFND, TAD IFSZA /IFTST1, SZA CLA DCA IFTST1 IFTST7, JMS I [SPNOR /IGNORE SPACES JMS I [TSTALP /IS NEXT CHARACTER ALPHABETIC JMP IFTST8 /YES JMS ICMESG /PRINT IC MESSAGE AND GET NEXT CHAR JMP IFTST7 /KEEP TRYING IFTST8, JMS I [GETTAG /PICK UP TAG DCA VALUE /STORE UNDEFINED INDICATOR TAD TAG3 /WAS IT A PSEUDO-OP? SMA CLA JMP IFTST9 /NO JMS I [ERROR /YES - GENERATE IP ERROR MESSAGE IP JMP IFTST9 ICMESG, 0 JMS I [ERROR IC /IC COMES OUT ON ALL PASSES TAD CHAR SPA CLA JMP I [LOOKEX /END OF LINE - GO AWAY JMS I [GETC /GET NEXT CHAR JMP I ICMESG CONDTM, /PUT TAG IN SYMBOL TABLE PUTTAG, 0 TAD THISTG JMS I (SETFLD /SET FIELD TAD TAG1 DCA I TAGXR TAD TAG2 DCA I TAGXR TAD TAG3 DCA I TAGXR TAD VALUE2 DCA I TAGXR CDF JMP I PUTTAG /--RETURN-- /PUSHDOWN ROUTINE /PUT NEW ENTRY ON PUSHDOWN STACK PUSHA, 0 DCA TEMP CLA CMA TAD PDLXR DCA PDLXR TAD PDLXR TAD (-PDLND SPA CLA /IS LIST TOO FULL? JMP PUSHA1 /BE**FATAL ERROR** TAD TEMP /NO - MAKE ENTRY DCA I PDLXR CLA CMA TAD PDLXR DCA PDLXR JMP I PUSHA /--RETURN-- PUSHA1, TAD (BE JMP I [MONERR /PUSHDOWN OVERFLOW IS FATAL ERROR /TEST NUMERIC ROUTINE /CALL WITH CHARACTER TO TEST IN "CHAR" /SKIPS IF THE CHARACTER IS NOT NUMERIC TSTNUM, 0 TAD CHAR /GET THE CHARACTER TAD (-"9-1 CLL TAD ("9-"0+1 SNL CLA /CHECK FOR RANGE 0-9 ISZ TSTNUM /OUT OF RANGE JMP I TSTNUM /--RETURN-- /TEST ALPHANUMERIC ROUTINE /CALL WITH CHARACTER IN "CHAR" /SKIPS IF CHARACTER IS NOT ALPHANUMERIC TSTALN, 0 JMS I [TSTNUM /IS IT NUMERIC JMP I TSTALN /YES--RETURN-- JMS I [TSTALP /IS IT ALPHABETIC JMP I TSTALN /YES--RETURN-- ISZ TSTALN /NEITHER JMP I TSTALN /--RETURN-- /TEST ALPHABETIC ROUTINE /CALL WITH CHARACTER IN "CHAR" /SKIPS IF NOT ALPHABETIC TSTALP, 0 TAD CHAR TAD (-"Z-1 CLL TAD ("Z-"A+1 SNL CLA /CHECK FOR RANGE A-Z ISZ TSTALP /OUT OF RANGE JMP I TSTALP /--RETURN-- PAGE /INPUT ROUTINE /UNPACKS CHARACTERS FROM BUFFER INPUT, 0 ISZ INCHCT /ARE THERE CHARACTERS LEFT IN BUFFER? JMP I CHARLV /YES - FETCH ONE TAD INEOF /NO - WAS OLD FILE ENDED? SZA CLA JMP ENDCHR /YES - START NEW FILE INGBUF, TAD INCTLA /NO AND [7600 JMS I [RTL6 TAD INCTR SNL DCA INCTR SZL ISZ INEOF CLL CML CMA RTR /SET CONTROL WORD RTR RTR TAD INCTLA DCA INCTLW JMS I INHNDL /CALL INPUT DEVICE HANDLER INCTLW, 0 /CONTROL WORD INBUFP, INBUF /INPUT BUFFER ADDRESS INREC, 0 /STARTING BLOCK NUMBER JMP INERRX /ERROR RETURN INBREC, TAD INCTLA /NORMAL RETURN AND [7600 JMS I [RTL6 TAD INREC DCA INREC /RESET STARTING BLOCK NUMBER TAD INCTLW AND [7600 CLL RAL TAD INCTLW AND [7600 CIA DCA INCHCT /SET CHARACTER COUNT TAD INBUFP DCA INPTR /SET BUFFER POINTER /CHARACTERS ARE FOUND IN BUFFER /IN STANDARD OS/8 PACKING /WORD 1: AAA A11 111 111 /WORD 2: BBB B22 222 222 /WHICH REPRESENTS 3 CHARACTERS /CHARACTER 1: 11 111 111 /CHARACTER 2: 22 222 222 /CHARACTER 3: AA AAB BBB ICHAR1, TAD I INPTR /PICK UP CHARACTER WORD 1 JMS CHARLV /CHECK RIGHT 8 BITS ICHAR2, TAD I INPTR /PICK UP WORD 1 ISZ INPTR /(INCREMENT POINTER TO WORD 2) AND [7400 /WITH WORD 1 IN AC DCA INCTLW /RETRIEVE LEFT 4 BITS AND SAVE TAD I INPTR /PICK UP WORD 2 JMS CHARLV /CHECK RIGHT 8 BITS ICHAR3, TAD I INPTR /PICK UP WORD 2 ISZ INPTR /(POINT TO NEXT WORD 1) AND [7400 /WITH WORD 2 IN AC CLL RTR /RETRIEVE LEFT 4 BITS RTR TAD INCTLW /PUT BOTH SETS OF 4 BITS TOGETHER RTR RTR JMS CHARLV /CHECK CHARACTER JMP ICHAR1 /TRY NEXT SET OF 2 WORDS INERRX, ISZ INEOF SMA CLA /EOF OR FATAL ERROR? JMP INBREC /EOF - UNPACK THIS BUFFER JMP I (SYSERR /FATAL - GENERATE DE ERROR MESSAGE INCHCT, -1 INEOF, 1 INPTR, 0 INCTR, 0 INCTLA, 0 INFPTR, 7617 /START NEW FILE ENDCHR, ISZ I (FORMSW /^Z OR EOF SIMULATES FORM FEED TAD PASS /IS THIS PASS 3? SPA SNA CLA JMP NXTFLE /NO JMS I (HEDCLR /YES - CLEAR HEADING BUFFER TAD [-HEDLEN DCA I (LSTCH6 TAD [HEADER-1 DCA I (LSTCH7 DCA LSTCNT NXTFLE, TAD (INDEVH+1 /SET ADDRESS OF DEVICE HANDLER DCA INHNDL CDF 10 TAD I INFPTR CDF SNA JMP FAKDLR /END OF FILE - FAKE A $ CIF 10 JMS I IOMON /CALL USER SERVICE ROUTINES 1 /*FETCH HANDLER* INHNDL, 0 /LOADING ADDRESS OF HANDLER HLT /ERROR RETURN TAD INHNDL /NORMAL RETURN - HANDLER IN CORE AND [7600 TAD (-INDEVH SZA CLA TAD [200 TAD INCTL DCA INCTLA CDF 10 TAD I INFPTR AND [7760 SZA TAD [17 CLL CML RTR RTR DCA INCTR ISZ INFPTR TAD I INFPTR DCA INREC /RESET STARTING BLOCK NUMBER ISZ INFPTR DCA INEOF CDF JMP INGBUF FAKDLR, TAD (244 JMS CHARLV /CALL THE COROUTINE TAD [215 /WITH $ AND CR JMS CHARLV /TO END THE ASSEMBLY. JMP I (PHASE /** DIDN'T WORK - MUST BE IN CONDITIONAL - FATAL CHARLV, 0 /CHARACTER IN AC AND [177 /AND OFF LEFT 5 BITS JMP I (LSTCH9 /RETURN TO LSTCH9 PAGE /HANDLER FOR DTORG PSEUDO-OP (TYPESETTING) /PUNCHES 4 DIGIT BLOCK NUMBER IN 2 FRAMES /FIRST FRAME HAS CHANNELS 7 AND 8 PUNCHED /ADDED TO CHECKSUM DTORGX, JMS I [SPNOR /IGNORE SPACES JMS I [EXP /GET EXPRESSION TAD PASS /IS THIS PASS 2? SNA JMP DTORG2 /YES PUNVA1, SPA SNA CLA /NO - IS THIS PASS 3? JMP I [LOOKEX /NO--EXIT TO MAIN-- TAD LININD /GET LINK SWITCH FROM "EXP" DCA LINKSW /YES TAD [LOOKEX /FIX PUNONE TO EXIT TO MAIN DCA I (PUNONE TAD [211 /OUTPUT TAB JMS I OERROR JMP I (DTORG1 DTORG2, TAD VALUE /PASS 2 - GET BLOCK NUMBER JMS I [RTL6 RAL AND [77 TAD (300 /PICK UP CHANNELS 7 AND 8 DCA TEMP TAD TEMP TAD CHKSUM /ADD VALUE TO CHECKSUM DCA CHKSUM TAD TEMP JMS I OCHAR /OUTPUT BLOCK NUMBER - FIRST FRAME TAD VALUE AND [77 JMS I OCHAR /OUTPUT SECOND FRAME JMP I [LOOKEX /--EXIT TO MAIN-- /HANDLER FOR % /DIVIDE BY REPEATED SUBTRACTION OP6, DCA TEMP TAD VALUE2 CIA DCA VALUE2 TAD VALUE OP6A, CLL TAD VALUE2 /SUBTRACT DIVISOR FROM DIVIDEND SNL /DONE YET? JMP OP6B /YES - EXIT ISZ TEMP /NO - COUNT ONE MORE SUBTRACTION JMP OP6A /SUBTRACT AGAIN OP6B, CLA TAD TEMP /RESULT IS # OF SUBTRACTIONS JMP I (OP0+2 /HANDLER FOR XLIST PSEUDO-OP XLISTY, JMS XLISTZ /ANY EXPRESSION? JMP XLIST1 /NO JMS I [EXP /GET EXPRESSION TAD VALUE /USE THE VALUE XLIST2, DCA XLISTX /SET SWITCH DCA I [LINBUF /XLIST NEVER LISTS! JMP I [LOOKEX /--EXIT TO MAIN-- XLIST1, TAD XLISTX SNA CLA IAC /FLIP IT JMP XLIST2 RELOCY, JMS XLISTZ /RELOCATE PSEUDO-OP - EXPRESSION? JMP RELOC1 /NO JMS I [EXP /GET IT TAD VALUE CIA /COMPUTE OFFSET OF REL LOC CTR TAD LOC /FROM FAKE LOC CTR TAD OFFSET /OFFSET IS CUMULATIVE! RELOC2, DCA OFSBUF /SET NEW OFFSET - THIS TAKES EFFECT AFTER STA /THE LITERALS (IF ANY) ARE DUMPED. JMP I (STAR0 /FAKE ORIGIN TO NEW LOC, /ACTUALLY A NO-OP BECAUSE OF OFFSET RELOC1, TAD OFFSET /SET OFSBUF=0, LOC=LOC+OFFSET - TAD LOC /THIS CANCELS ALL RELOCATION STUFF. DCA VALUE DCA UNDFSW /JUST IN CASE - "STAR0" CHECKS THIS JMP RELOC2 /STILL MUST OUTPUT *. TO GET IN SYNCH /HANDLER FOR EJECT PSEUDO-OP EJECTX, ISZ THISPG TAD PASS /IS THIS PASS 3? SMA SZA CLA JMP EJECT2 /YES EJECT1, TAD CHAR /NO - LOOK FOR NEXT NEGATIVE CHARACTER SPA CLA JMP I [LOOKEX /--EXIT TO MAIN-- JMS I [GETC /GET NEXT CHARACTER JMP EJECT1 EJECT2, JMS XLISTZ /PASS 3 - IS THERE AN EXPRESSION? JMP EJECT3 /NO - EXIT JMS I (HEDCLR /YES - CLEAR HEADING BUFFER TAD [-HEDLEN DCA EJECT7 /SET UP FOR 40 NEW CHARACTERS TAD [HEADER-1 DCA XREG1 /SET HEADER BUFFER POINTER JMP EJECT4 EJECT6, ISZ EJECT7 /FILLED 40 CHARACTERS YET? JMP EJECT4 /NO - KEEP FILLING CLA CMA /YES - SKIP CHARACTERS TO DCA EJECT7 /END OF LINE JMP EJECT5 EJECT4, TAD CHAR /FILL HEADING BUFFER DCA I XREG1 EJECT5, CLA CMA DCA TXTSWT JMS I [GETC /GET NEXT CHARACTER TAD CHAR /END OF LINE? SMA CLA JMP EJECT6 /NO - KEEP FILLING EJECT3, JMS I [FORMFD /GENERATE FORM FEED JMP I [LOOKEX /--EXIT TO MAIN-- PUNVAL, TAD PASS /IS THIS PASS 3? JMP PUNVA1 /IF SO, LIST STUFF /SEE IF EXPRESSION FOLLOWS XLIST /SKIP ON EXPRESSION EJECT7, XLISTZ, 0 JMS I [SPNOR /IGNORE TRAILING SPACES TAD CHAR TAD [-"> /IS THERE AN EXPRESSION? SNA CLA JMP I XLISTZ /NO--RETURN-- TAD CHAR SMA CLA ISZ XLISTZ /YES - INCREMENT RETURN ADDRESS JMP I XLISTZ /--RETURN-- /DUMMY ERROR ROUTINE /TO SUPPRESS CERTAIN ERROR MESSAGES /ON PASS 1 PERRO1, 0 ISZ PERRO1 /SKIP ERROR MESSAGE POINTER JMP I PERRO1 /--RETURN-- /CONSTANTS FOR DECIMAL PRINT DECIMAL FORMF8, -1000 -100 -10 0 OCTAL PAGE /********************************************************************* INBUF=. /INPUT BUFFER OUBUF=. /OUTPUT BUFFER OUDEVH=.+400 /OUTPUT DEVICE HANDLER INDEVH=7200 /INPUT DEVICE HANDLER /********************************************************************** /MORE ONCE ONLY CODE OTYPE, 0 DCA TEMP CDF 10 TAD I TEMP AND [17 /GET DEVICE NUMBER TAD (DCB-1 DCA TEMP TAD I TEMP /GET DCB ENTRY CDF JMP I OTYPE /--RETURN-- /CHECK TO SEE HOW MUCH CORE EXISTS /AND STORE SYMBOL TABLE ACCORDINGLY BEGINF, CDF 10 /WAS THE /K OPTION SELECTED TO TAD I (MPARAM /CHECK FOR MORE THAN 8K? CDF 0 RTR ZK7630, SNL CLA /YES JMP I (CKBAT /NO - CHECK FOR BATCH, USE 8K ONLY CDF 50 JMS FLD2 /WHAT IS HIGHEST FIELD? JMP FLD1-1 /5 CDF 40 JMS FLD2 JMP FLD1 /4 CDF 30 JMS FLD2 JMP FLD1+1 /3 CDF 20 JMS FLD2 JMP FLD1+2 /2 JMP OPTIM4 /1 TAD [177 /IF FIELD 5, ALLOW 4095 SYMBOLS FLD1, TAD (1740 /OTHERWISE ALLOW 1740*(NR OF FIELDS) TAD (1740 TAD (1740 OPTIM0, TAD (1740 DCA I (TAGMAX /SET HIGHEST ADDRESS FOR TAGS JMP I (BEGING OPTIM4, TAD I OPTIM1 /OPTIMIZE SEARCH PATTERN ISZ OPTIM1 /BY SUBSTITUTING CODE IN SEARCH DCA I OPTIM2 /ROUTINE ISZ OPTIM2 ISZ OPTIM3 JMP OPTIM4 OPTIM8, TAD I OPTIM5 ISZ OPTIM5 DCA I OPTIM6 ISZ OPTIM6 ISZ OPTIM7 JMP OPTIM8 JMP OPTIM0 /SKIP IF CURRENT DATA FIELD DOES NOT EXIST FLD2, 0 TAD (FLD3 DCA I (FLD4 FLD3, CLA TAD I (FLD4 NOP CDF TAD (-FLD3 SZA CLA JMP FLD5 TAD IOMON TAD [-200 SNA CLA /IS FIELD THERE? JMP I FLD2 /YES--RETURN-- TAD [200 DCA IOMON FLD5, ISZ FLD2 /NO-INCREMENT RETURN ADDRESS JMP I FLD2 /--RETURN-- FLD4, IOMON /OVERLAY CODE FOR OPTIMAL SYMBOL TABLE SEARCH /IN 8K OPTIM1, OPTIMA OPTIM2, SETFLD+1 OPTIM3, -7 OPTIM5, OPTIMB OPTIM6, GETTG5 OPTIM7, -21 OPTIMA, RELOC SETFLD+1 CLL CMA RTL TAD STM202 DCA TAGXR CDF 10 JMP I SETFLD STM202, -202 SETFL4, 4 RELOC OPTIMB, RELOC GETTG5 TAD HIGHTG JMS SETFLD TAD TAGXR DCA XREG1 TAD XREG1 TAD SETFL4 DCA XREG2 TAD THISTG JMS SETFLD OPTIML, TAD I XREG2 DCA I XREG1 TAD XREG1 CIA TAD TAGXR SZA CLA JMP OPTIML CDF RELOC /OVERLAY CODE FOR DDT SYMBOL TABLE PRINT DSWIT2, RELOC SYMPR9-2 JMP SYMPRE SYMPRD, TAD SYM204 JMS I OERROR TAD [377 JMS I OERROR JMS SYMPRC DCA LINCNT JMP I SYMPRT SYMPRC, 0 TAD [-200 DCA SYMPR2 TAD [200 JMS I OERROR ISZ SYMPR2 JMP .-3 JMP I SYMPRC RELOC DSWITB= . PAGE BEGING, CIF 10 JMS I IOMON /CALL THE USR 12 /TO FIND OUT DSK: BEGINJ, TEXT /DSK/ 7201 /DUMMY HLT /NEVER! TAD BEGINJ+1 /GET DEVICE NUMBER OF DSK: DCA CC7 /AND SET IT TAD BEGINJ+1 DCA I BEGINL /AND SET IT INTO "PALBIN" CDF 10 TAD I CC1 /GET PARAMETER WORD 1 CDF CLL RTL /OPTION /B INTO LINK AND [400 /IS IT /F? ZF7650, SZA CLA DCA I CCX1 /YES: /F => NO 0 FILL ZB7430, SNL /IS IT /B? JMP .+3 TAD CCX2 DCA I CCX3 /YES: /B => ! IS SHIFT CDF 10 TAD I CC1 /GET WORD 1 AGAIN CDF AND [200 /IS IT /E? ZE7640, SNA CLA JMP .+3 TAD CCX8 DCA I CCX4 /YES: /E => SET 'LG' ERROR CDF 10 TAD I CCX5 /GET WORD 2 THIS TIME CDF RTL ZO7710, SMA CLA /IS IT /O? JMP .+3 DCA I CCX6 /YES: /O => NO 200 ORG ISZ I CCX7 CDF 10 TAD I CC1 /GET WORD 1 AGAIN AND CC2 /IS IT /C? SNA CLA JMP I CC3 /NO: TRY FOR /L OR /G TAD I CC4 /CREF FILE SPECIFIED? SZA CLA JMP CC5 /YES CC6, TAD CC7 /NO: GIVE "CREFLS.TM" DCA I CC4 ISZ CC6 ISZ CC4 ISZ CC8 JMP CC6 CC5, CDF CIF 10 CLA IAC JMS I IOMON /LOOKUP "CREF.SV" 2 CC13, CC9 /POINT TO NAME - BACK WITH START CC8, -5 /LENGTH GOES HERE JMP CC16 /NOT FOUND! TAD CC30 JMS I CC31 /CHECK TYPE FILE SMA CLA JMP CC16 /NOT DIRECTORY IS ERROR TAD CC12 DCA I CC121 /CSWITC=TAD I [7605 TAD CC11 DCA I CC111 /CSWIT1=CLA TAD CC10 DCA I CC101 /CSWIT2=DCA BINSRT DCA I CC171 /CMOVE=0 TAD CC13 DCA I CC131 /CHAIN="CREF.SV" DCA I CC141 /LSWITC=0 TAD CC30 DCA I CC301 /NOPA22=7612 DCA I CC20 /"BEGIAB"=0 TAD CC21 DCA I CC211 /"DIRSW1"=TAD [177 TAD CC22 DCA I CC221 /"PTPSW1"=TAD [232 JMP I .+1 CCC /KEEP GOING (SIGH) CC16, JMS I [ERROR CF /OPTION /C ERROR JMP I CC3 /TRY FOR /L OR /G CC171, SWAPR2+CMOVE CC141, LSWITC CC131, CHAIN CC121, CSWITC CC12, TAD I [7605 CC111, CSWIT1 CC11, CLA CC101, SWAPR2+CSWIT2 CC10, DCA BINSRT CC301, SWAPR2+NOPA22 CC30, 7612 CC31, OTYPE CC1, MPARAM CC2, 1000 CC3, BEGINH CC4, 7612 CCX1, TEXT4+4 CCX2, OP3 CCX3, OPEXPL CCX4, LGERR CCX5, MPARAM+1 CCX6, FIELDY+1 CCX7, FIELDY+2 CCX8, JMS I PERROR CC7, 1 FILENAME CREFLS.TM CC9, FILENAME CREF.SV CC20, BEGIAB CC21, TAD [177 CC211, SWAPR2+DIRSW1 CC22, TAD [232 CC221, SWAPR2+PTPSW1 BEGINL, PALBIN PAGE /*********************************************************************** /SYMBOL TABLE /MOVED BY ASSEMBLER TO FIELD 1 /MUST REMAIN IN ALPHABETICAL ORDER /*********************************************************************** SYMS, 5777 /TERMINATOR 3777 /IMPOSSIBLE (LIMITING) SYMBOL 5777 0000 "Z-300^45+"B-300+4000 /ZBLOCK "L-300^45+"O-300 "C-300^45+"K-300+4000 ZBLOCX "Z-300^45+4000+2000 /Z 0 0 0000 "X-300^45+"L-300+4000 /XLIST "I-300^45+"S-300 "T-300^45+4000 XLISTY "T-300^45+"S-300+4000 /TSK "K-300^45 0 6045 "T-300^45+"S-300+4000 /TSF "F-300^45 0 TSF "T-300^45+"P-300+4000 /TPC "C-300^45 0 TPC "T-300^45+"L-300+4000 /TLS "S-300^45 0 TLS "T-300^45+"F-300+4000 /TFL "L-300^45 0 6040 "T-300^45+"E-300+4000 /TEXT "X-300^45+"T-300 4000 TEXTX "T-300^45+"C-300+4000 /TCF "F-300^45 0 TCF "T-300^45+"A-300+4000 /TAD "D-300^45+4000 0 TAD 0 "S-300^45+"Z-300+4000 /SZL "L-300^45 0 SZL "S-300^45+"Z-300+4000 /SZA "A-300^45 0 SZA "S-300^45+"W-300+4000 /SWP "P-300^45 0 7521 "S-300^45+"T-300+4000 /STL "L-300^45 0 STL "S-300^45+"T-300+4000 /STA "A-300^45 0 STA "S-300^45+"R-300+4000 /SRQ "Q-300^45 0 6003 "S-300^45+"P-300+4000 /SPA "A-300^45 0 SPA "S-300^45+"N-300+4000 /SNL "L-300^45 0 SNL "S-300^45+"N-300+4000 /SNA "A-300^45 0 SNA "S-300^45+"M-300+4000 /SMA "A-300^45 0 SMA "S-300^45+"K-300+4000 /SKP "P-300^45 0 SKP "S-300^45+"K-300+4000 /SKON "O-300^45+"N-300 0 6000 "S-300^45+"G-300+4000 /SGT "T-300^45 0 6006 "R-300^45+"T-300+4000 /RTR "R-300^45 0 RTR "R-300^45+"T-300+4000 /RTL "L-300^45 0 RTL "R-300^45+"T-300+4000 /RTF "F-300^45 0 6005 "R-300^45+"S-300+4000 /RSF "F-300^45 0 RSF "R-300^45+"R-300+4000 /RRB "B-300^45 0 RRB "R-300^45+"P-300+4000 /RPE "E-300^45 0 6010 "R-300^45+"M-300+4000 /RMF "F-300^45 0 RMF "R-300^45+"I-300+4000 /RIF "F-300^45 0 RIF "R-300^45+"I-300+4000 /RIB "B-300^45 0 RIB "R-300^45+"F-300+4000 /RFC "C-300^45 0 RFC "R-300^45+"E-300+4000 /RELOC "L-300^45+"O-300 "C-300^45+4000 RELOCY "R-300^45+"D-300+4000 /RDF "F-300^45 0 RDF "R-300^45+"A-300+4000 /RAR "R-300^45 0 RAR "R-300^45+"A-300+4000 /RAL "L-300^45 0 RAL "P-300^45+"S-300+4000 /PSF "F-300^45 0 PSF "P-300^45+"P-300+4000 /PPC "C-300^45 0 PPC "P-300^45+"L-300+4000 /PLS "S-300^45 0 PLS "P-300^45+"C-300+4000 /PCF "F-300^45 0 PCF "P-300^45+"C-300+4000 /PCE "E-300^45 0 6020 "P-300^45+"A-300+4000 /PAUSE "U-300^45+"S-300 "E-300^45+4000 PAUSEX "P-300^45+"A-300+4000 /PAGE "G-300^45+"E-300 4000 PAGEX "O-300^45+"S-300+4000 /OSR "R-300^45 0 OSR "O-300^45+"P-300+4000 /OPR "R-300^45 0 OPR "O-300^45+"C-300+4000 /OCTAL "T-300^45+"A-300 "L-300^45+4000 OCTALX "N-300^45+"O-300+4000 /NOPUNCH "P-300^45+"U-300 "N-300^45+"C-300+4000 NOPUNX "N-300^45+"O-300+4000 /NOP "P-300^45 0 NOP "M-300^45+"Q-300+4000 /MQL "L-300^45 0 7421 "M-300^45+"Q-300+4000 /MQA "A-300^45 0 7501 "L-300^45+"A-300+4000 /LAS "S-300^45 0 LAS "K-300^45+"S-300+4000 /KSF "F-300^45 0 KSF "K-300^45+"R-300+4000 /KRS "S-300^45 0 KRS "K-300^45+"R-300+4000 /KRB "B-300^45 0 KRB "K-300^45+"I-300+4000 /KIE "E-300^45 0 6035 "K-300^45+"C-300+4000 /KCF "F-300^45 0 6030 "K-300^45+"C-300+4000 /KCC "C-300^45 0 KCC "J-300^45+"M-300+4000 /JMS "S-300^45+4000 0 JMS 0 "J-300^45+"M-300+4000 /JMP "P-300^45+4000 0 JMP 0 "I-300^45+"S-300+4000 /ISZ "Z-300^45+4000 0 ISZ 0 "I-300^45+"O-300+4000 /IOT "T-300^45 0 IOT "I-300^45+"O-300+4000 /ION "N-300^45 0 ION "I-300^45+"O-300+4000 /IOF "F-300^45 0 IOF "I-300^45+"F-300+4000 /IFZERO "Z-300^45+"E-300 "R-300^45+"O-300+4000 IF0 "I-300^45+"F-300+4000 /IFNZRO "N-300^45+"Z-300 "R-300^45+"O-300+4000 IFN0 "I-300^45+"F-300+4000 /IFNDEF "N-300^45+"D-300 "E-300^45+"F-300+4000 IFND "I-300^45+"F-300+4000 /IFDEF "D-300^45+"E-300 "F-300^45+4000 IFD "I-300^45+"A-300+4000 /IAC "C-300^45 0 IAC "I-300^45+4000+2000 /I 0 0 0400 "H-300^45+"L-300+4000 /HLT "T-300^45 0 HLT "G-300^45+"T-300+4000 /GTF "F-300^45 0 6004 "G-300^45+"L-300+4000 /GLK "K-300^45 0 GLK "F-300^45+"I-300+4000 /FIXTAB "X-300^45+"T-300 "A-300^45+"B-300+4000 FIXTBX "F-300^45+"I-300+4000 /FIXMRI "X-300^45+"M-300 "R-300^45+"I-300+4000 FIXMRX "F-300^45+"I-300+4000 /FILENAME "L-300^45+"E-300 "N-300^45+"A-300+4000 FILENX "F-300^45+"I-300+4000 /FIELD "E-300^45+"L-300 "D-300^45+4000 FIELDX "E-300^45+"X-300+4000 /EXPUNGE "P-300^45+"U-300 "N-300^45+"G-300+4000 EXPUNX "E-300^45+"N-300+4000 /ENPUNCH "P-300^45+"U-300 "N-300^45+"C-300+4000 ENPUNX "E-300^45+"J-300+4000 /EJECT "E-300^45+"C-300 "T-300^45+4000 EJECTX "D-300^45+"T-300+4000 /DTORG "O-300^45+"R-300 "G-300^45+4000 DTORGX "D-300^45+"E-300+4000 /DEVICE "V-300^45+"I-300 "C-300^45+"E-300+4000 DEVICX "D-300^45+"E-300+4000 /DECIMAL "C-300^45+"I-300 "M-300^45+"A-300+4000 DECIMX "D-300^45+"C-300+4000 /DCA "A-300^45+4000 0 DCA 0 "C-300^45+"M-300+4000 /CML "L-300^45 0 CML "C-300^45+"M-300+4000 /CMA "A-300^45 0 CMA "C-300^45+"L-300+4000 /CLL "L-300^45 0 CLL "C-300^45+"L-300+4000 /CLA "A-300^45 0 CLA "C-300^45+"I-300+4000 /CIF "F-300^45 0 CIF "C-300^45+"I-300+4000 /CIA "A-300^45 0 CIA "C-300^45+"D-300+4000 /CDF "F-300^45 0 CDF "C-300^45+"A-300+4000 /CAF "F-300^45 0 6007 "B-300^45+"S-300+4000 /BSW "W-300^45 0 7002 "A-300^45+"N-300+4000 /AND "D-300^45+4000 0 AND 0 4001 /TERMINATOR 0000 /IMPOSSIBLE (LIMITING) SYMBOL 4000 0000 SYME=. /********************************************************************** /TOP OF SYMBOL TABLE /********************************************************************** SWAP2=. /********************************************************************** /CODE UNIQUE TO PASSES 1 AND 2 /SWAPPED IN FOR PASSES 1 AND 2 /OVERLAYED DURING PASS 3 *** NO LITERALS *** RELOC 1000 /ASSEMBLED INTO 1000-1247 SWAPB2= . SWAPR2= SWAP2-SWAPB2 /RELOCATION FACTOR FOR THIS CODE OOPEN, 0 TAD OPEN01 /OPEN BINARY AND LISTING FILES DCA XOUHND /SET ADDRESS OF DEVICE HANDLER TAD OPEN02 DCA XOUBLK TAD [-5 DCA XOUELE /SET NEW OUTPUT FILE LENGTH CDF 10 TAD I OUFPTR CDF DCA I XOUBLK ISZ XOUBLK ISZ OUFPTR ISZ XOUELE /INCREMENT OUTPUT FILE LENGTH JMP .-7 TAD OPEN02 IAC DCA XOUBLK /SET POINTER TO NEW FILENAME TAD XOUBLK DCA I OPEN04 CIF 10 JMS I IOMON /CALL USER SERVICE ROUTINES 13 /*RESET SYSTEM TABLES* DCA I OPEN05 /DELETE UNCLOSED FILES AND TAD I OPEN02 /DELETE HANDLERS AND [17 /GET NEW DEVICE HANDLER # SNA /OUTPUT INHIBIT? JMP ONOFIL /YES CIF 10 /NO JMS I IOMON /CALL USER SERVICE ROUTINE 1 /*FETCH DEVICE HANDLER* XOUHND, 0 /LOADING ADDRESS HLT /HANDLER NOT AVAILABLE OUENTR, TAD I OPEN02 /NORMAL RETURN - GET OUTPUT CIF 10 /DEVICE NUMBER AND FILE LENGTH JMS I IOMON /CALL NEW SERVICE ROUTINES 3 /*ENTER OUTUT FILE XOUBLK, 0 /POINTER TO FILENAME XOUELE, 0 /FILE LENGTH JMP OEFAIL /ERROR RETURN DCA I OPEN06 /NORMAL RETURN JMS I OPEN07 TAD XOUHND TAD [200 /LINK IS CLEAR!! SNL CLA TAD [400 TAD OUFDEV DCA I OUFINP TAD I OUFINP CLL RAR CIA TAD OU3501 DCA INCTL ISZ OOPEN TAD XOUHND DCA I OPEN09 TAD XOUBLK DCA I OPEN10 TAD XOUELE DCA I OPEN11 JMP I OOPEN /--RETURN-- OEFAIL, TAD I OPEN02 AND [7760 SNA CLA JMP I OPEN12 /DE**FATAL ERROR** TAD I OPEN02 AND [17 DCA I OPEN02 JMP OUENTR ONOFIL, ISZ I OPEN05 /SET OUTPUT INHIBIT SWITCH JMP I OOPEN /--RETURN-- OUFPTR, 7600 OPEN01, OUDEVH+1 OPEN02, OUFILE OPEN04, OUCNAM OPEN05, OUTINH OPEN06, OUCCNT OPEN07, OUSETP OPEN09, OUHNDL OPEN10, OUBLK OPEN11, OUELEN OPEN12, SYSERR OU3501, 3501 OUFDEV, OUDEVH OUFINP, INBUFP /CONTINUATION OF FIXTAB HANDLER FIXTAY, TAD HIGHTG /SET POINTERS TO TABLE CMA DCA TEMP3 DCA THISTG FIXTAX, JMS I [FINDTG /GET A TAG AC3777 AND TAG1 TAD [4000 /SET BIT 0 OF FIRST WORD TO 1 DCA TAG1 /RETURN IT TO TABLE JMS I [PUTTAG ISZ THISTG ISZ TEMP3 /DONE WITH TABLE YET? JMP FIXTAX /NO JMP I [LOOKEX /YES--EXIT TO MAIN-- /OUTPUT ONE REGISTER - BINARY /ENTER WITH CONTENTS IN AC PUNOUT, 0 DCA PUNOU1 TAD PUNOU1 RTR RTR RTR AND [177 JMS I OCHAR /OUTPUT FIRST FRAME TAD PUNOU1 AND [77 JMS I OCHAR /OUTPUT SECOND FRAME JMP I PUNOUT /--RETURN-- PUNOU1, IOPEN, 0 /SET UP INPUT ROUTINE CLA CMA /TO OPEN FILE DCA I IOPEN1 ISZ I IOPEN2 TAD IOPEN3 DCA I IOPEN4 ISZ I IOPEN5 TAD [LINBUF+120 DCA TXTPTR JMP I IOPEN /--RETURN-- IOPEN1, INCHCT IOPEN2, INEOF IOPEN3, 7617 IOPEN4, INFPTR IOPEN5, FORMSW PAGE /START PASS 2 *** NO LITERALS HERE EITHER *** START1, TAD [ERROR DCA PERROR /RESET PREUDO-ERROR ROUTINE JMS I ST1OPN /OPEN PASS 2 OUTPUT FILE JMP NOPA21 /NO PASS 2 IF PASS 3 NOPA23, TAD I ST1OBL DCA BINSRT DCA PUNCHX /CLEAR PUNCH INHIBIT JMS START3 JMP I .+1 START2-1 NOPA21, CDF 10 TAD I NOPA22 /IS THERE A PASS 3? CDF SNA CLA JMP NOPA23 /NO - DO PASS 2 ISZ PASS /SKIP PASS 2 NOP JMP NOPAS2 /CONTINUE TO PASS 3 NOPA22, 7605 START3, 0 /GENERATE LEADER/TRAILER TAD LEADER DCA TXTPTR TAD [200 JMS I OCHAR ISZ TXTPTR JMP .-3 JMP I START3 /--RETURN-- LEADER, -10 /END PASS 2 ENDPA2, JMS I [DUMPZ /DUMP PAGE 0 LITERALS DCA PUNCHX TAD CHKSUM /OUTPUT CHECKSUM JMS I [PUNOUT /PUNCH THE CHECKSUM JMS START3 /GENERATE LEADER/TRAILER JMS I EN2CLS /CLOSE PASS 2 OUTPUT FILE NOPAS2, TAD EN2LSO DCA OERROR /SET NEW OUTPUT TO BE LISTING ISZ I EN2OU1 CMOVE, JMP CMOVA /ZEROED IF /C CDF 10 /MOVE CODE FOR /C OPTION CMOVB, TAD I CMOV1 DCA I CMOV2 /MOVE OUTPUT FILE STORAGE ISZ CMOV1 ISZ CMOV2 ISZ CMOV3 JMP CMOVB /LOOP CMOVA, CDF JMS I ST1OPN /OPEN 3RD PASS FILE DCA I CMOV4 /NO 3RD PASS TAD I ST1OBL /GET FILE START CSWIT2, CLA /"DCA BINSRT" IF /C TAD PTPSW1 DCA I EN2PTP /RESET PAPERTAPE SWITCH TAD DIRSW1 DCA I EN2DIR /RESET DIRECTORY SWITCH JMS I PIOPEN JMP I .+1 LOADOV /OVERLAY THIS AREA WITH PASS3 CODE PIOPEN, IOPEN DIRSW1, TAD [177 PTPSW1, TAD [232 CMOV1, 7605 CMOV2, 7600 CMOV3, -12 CMOV4, NSWITC EN2CLS, OCLOSE EN2LSO, LISOUT EN2OU1, OUTPT1 EN2PTP, PTPSW EN2DIR, DIRSW ST1OPN, OOPEN ST1OBL, OUBLK SWAPE2, RELOC IFNZRO ENDOVL-SWAPE2&4000 /************************************************************** /PAGE 0 LITERALS /************************************************************** $-$-$