/ P?S/8 PAL ASSEMBLER / THE PDP-8 ASSEMBLER (AND LINC CROSS-ASSEMBLER) FOR THE P?S/8 MONITOR SYSTEM. / THIS IS INTERNAL EDIT NUMBER: 392. / LAST EDIT: 06-OCT-1987 19:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / PAL ASSEMBLER FOR THE P?S/8 MONITOR SYSTEM. /ORIGINAL CODE (FOR THE R. L. MONITOR), HASH /AND SYMBOL SORT RESEARCH (ORIGINAL) BY: / JAMES W. ROTH / POLY QUESTION SOCIETY / DIGITAL EQUIPMENT CORPORATION /BUGS CORRECTED BY, OPTIMIZATION OF CORE, /LITERAL PROCESSOR (LATEST), TITLES (LATEST), /LINC MODE, SWITCH ONCE-ONLY CODE (FINAL), /INPUT BUFFERING (FINAL), SYMBOL TABLE LOADING /AND PRINTING ROUTINES, STATEMENT SEQUENCE /NUMBERING, FULL RECURSIVE EQUATE HANDLING /(INCLUDING FIXMRI), ARITHMETICS (LATEST), /CROSS REFERENCE INTERCEPT ROUTINES, <^C>, /<^S>/<^Q>, <^O> SUPPORT, DAY AND DATE /HANDLING, CONSOLE SUPPORT, 256K SUPPORT, /BOOTSTRAP UNIT AND PROPER /U HANDLING, /LOGICAL LINEPRINTER SUPPORT, AND /ADDITIONAL FEATURES BY: / CHARLES J. LASNER / POLY QUESTION SOCIETY / MOUNT SINAI MEDICAL CENTER / WESTERN UNION TELEPROCESSING INC. / UNITED TELEPHONE SERVICES CORP. / MERGENTHALER LINOTYPE CO. / COLUMBIA UNIVERSITY / TLF INC. / ROCKEFELLER UNIVERSITY / CRYPTEL INC. / PR NEWSWIRE INC. / VICKERS AMERICA MEDICAL CORP. / CENTAUR TECHNOLOGY INC. / ICHOR INC. / STARCOM INC. / N. U. S. C. NEWPORT, R. I. /VARIABLE INPUT BUFFERING (ORIGINAL, NOW /PARTIALLY OBSOLETE), TITLES (ORIGINAL), /CROSS REFERENCE RESEARCH, MISTAKES BY THE /OTHER TWO GUYS CORRECTED, INSPECTED, DETECTED, /REJECTED, INFECTED, AND INJECTED BY: / ROD DORMAN / POLY QUESTION SOCIETY / COMMUNITY TREATMENT FOUNDATION OF / NEW YORK STATE / HOSKYNS INC. / UNITED TELEPHONE SERVICES CORP. / TLF INC. / QANTEL INC. / CRYPTEL INC. / CITI-BANK / PR NEWSWIRE INC. /LITERALS (ORIGINAL), MORE MISTAKES, LISTAPE /(ORIGINAL), SWITCHES (ORIGINAL), CHAIN LOOKUP /(ORIGINAL), AND MORE MISTAKES BY: / SCOTT RIKER / POLY QUESTION SOCIETY / DWIGHT FRYE FAN CLUB / NEW YORK UNIVERSITY / MERGENTHALER LINOTYPE CO. /CORE MANAGEMENT, SWITCH ORGANIZATION (PARTIAL) /HASHED AND SORTED SYMBOL TABLE HANDLING /ROUTINES, OPTIMIZED SYMBOL-HANDLING ROUTINE /CALLING SEQUENCES, CHAIN LOOKUP (LATEST) BY: / SIDNEY J. DUNAYER / POLY QUESTION SOCIETY / POLYTECHNIC INSTITUTE OF BROOKLYN / EQUITABLE LIFE / BANKERS TRUST COMPANY / DEAN WITTER & CO. INC. / (FIRST NATIONAL) CITI-BANK / PROGRESSIVE CYBERNETIC SERVICES /FANCY SYMBOL TABLE PRINT AND OTHER ASSORTED /INSPIRATION, ASSISTANCE, AND HINDRANCE BY: / ROBERT W. HARPER, JR. / P?S NORTHEASTERN REGIONAL ANNEX / SYKES DATATRONICS INC. / MERGENTHALER LINOTYPE CO. / UNITED TELEPHONE SERVICES CORP. / ROCKEFELLER UNIVERSITY / A. T. T. /SEER + OVERSEER: / MARIO DENOBILI / POLY QUESTION SOCIETY, M. I. E. /SPIRITUAL GUIDANCE: / RICHARD LARY / POLY HACKING FAMILY: / W. C. F. M. P. G. / FRIENDS OF THE BOSTON MASSACRE / DIGITAL EQUIPMENT CORPORATION / DWIGHT FRYE INTERNATIONAL FAN CLUB /SUSTINENCE BY: / LIN'S GARDEN RESTAURANT / CHINATOWN, N. Y., U. S. A. / MEI'S RESTAURANT / FRAMINGHAM, MASS., U. S. A. / SZECHUAN GARDEN RESTAURANT / CHINATOWN, N. Y., U. S. A. / TUNG LAI SHUN PEKING RESTAURANT / CHINATOWN, N. Y., U. S. A. / HUNAN HOUSE RESTAURANT / CHINATOWN, N. Y., U. S. A. / HUNAN GARDEN RESTAURANT / CHINATOWN, N. Y., U. S. A. / CHUAN YUAN RESTAURANT / BROOKLYN HEIGHTS, N. Y., U. S. A. / HUNAN TASTE RESTAURANT / CHINATOWN, N. Y., U. S. A. / TING FU GARDEN RESTAURANT / CHINATOWN, N. Y., U. S. A. / CHINA STAR RESTAURANT / MIDDLE VILLAGE, N. Y., U. S. A. / HUNAN YUAN RESTAURANT / REGO PARK, N. Y., U. S. A. / DEDICATION / THIS ASSEMBLY IS DEDICATED TO / / / MARIO (-----) DENOBILI / ^ / ^ EMPER0R, POLY ? SOCIETY / ^ / ^ / ^ / ^ <= <= <= <= CENSORED BY MARIO / WITHOUT WHOSE ASSISTANCE AND CONSTANT VIGIL WE COULD'VE GOTTEN / RICHARD LARY TO HELP US GET IT DONE A LOT SOONER. / THIS ASSEMBLER WILL GENERATE ITS OWN SYMBOL TABLE AND NEED NOT HAVE ANY / SYMBOLS OUTSIDE OF SOME COMMON PDP-8 SYMBOLS, A FEW OF WHICH FOLLOW: / EXPUNGE /ELIMINATE OLD SYMBOL TABLE / FIXMRI SYMBOLS. FIXMRI AND= 0000 /AND ADDRESS WITH AC FIXMRI DCA= 3000 /DEPOSIT INTO ADDRESS AND CLEAR AC FIXMRI INC= 2000 /INCREMENT ADDRESS ASSUMING IT DOESN'T SKIP ON ZERO FIXMRI ISZ= 2000 /INCREMENT ADDRESS AND SKIP IF ZERO FIXMRI JMP= 5000 /JUMP ADDRESS FIXMRI JMS= 4000 /JUMP TO SUBROUTINE ADDRESS FIXMRI TAD= 1000 /TWO'S COMPLEMENT ADD ADDRESS TO AC / NONMRI SYMBOLS. ACL= 7701 /AC LOAD FROM MQ ASC= 7403 /AC TO STEP COUNTER ASR= 7415 /ARITHMETIC SHIFT RIGHT BSW= 7002 /BYTE SWAP CAF= 6007 /CLEAR ALL FLAGS CAM= 7621 /CLEAR AC AND MQ CDF= 6201 /CHANGE DATA FIELD CIA= 7041 /COMPLEMENT AND INCREMENT AC CIF= 6202 /CHANGE INSTRUCTION FIELD CINT= 6204 /CLEAR USER INTERRUPT CLA= 7200 /CLEAR THE ACCUMULATOR CLL= 7100 /CLEAR THE LINK CMA= 7040 /COMPLEMENT AC CML= 7020 /COMPLEMENT LINK CUF= 6264 /CLEAR USER FLIP-FLOP DAD= 7443 /DOUBLE PRECISION ADD DCM= 7575 /DOUBLE PRECISION COMPLEMENT DDZ= 7665 /DOUBLE PRECISION DEPOSIT ZERO DLD= 7663 /DOUBLE PRECISION LOAD // DL0001= 7773 /DOUBLE PRECISION LOAD CONSTANT 0000 0001 DPIC= 7573 /DOUBLE PRECISION INCREMENT DPSZ= 7451 /DOUBLE PRECISION SKIP IF ZERO DST= 7445 /DOUBLE PRECISION STORE DTCA= 6762 /CLEAR DECTAPE STATUS "A" DTLA= 6766 /LOAD DECTAPE STATUS "A" DTLB= 6774 /LOAD DECTAPE STATUS "B" DTRA= 6761 /READ DECTAPE STATUS "A" DTRB= 6772 /READ DECTAPE STATUS "B" DTSF= 6771 /SKIP ON DECTAPE OR ERROR FLAG DTXA= 6764 /XOR DECTAPE STATUS "A" DVI= 7407 /DIVIDE EAE= 7401 /EAE NOP GLK= 7204 /GET LINK GTF= 6004 /GET FLAGS HLT= 7402 /HALT CPU IAC= 7001 /INCREMENT ACCUMULATOR IOF= 6002 /INTERRUPT OFF ION= 6001 /INTERRUPT ON IOT= 6000 /IOT NOP KCC= 6032 /KEYBOARD CLEAR AND CAUSE READER TO RUN KCF= 6030 /KEYBOARD CLEAR FLAG ONLY KIE= 6035 /KEYBOARD/PRINTER INTERRUPT ENABLE/DISABLE KRB= 6036 /KEYBOARD READ BUFFER AND CLEAR FLAG KRS= 6034 /KEYBOARD READ STATIC KSF= 6031 /KEYBOARD SKIP ON FLAG LAS= 7604 /LOAD ACCUMULATOR FROM CONSOLE SWITCHES LSR= 7417 /LOGICAL SHIFT RIGHT MQA= 7501 /MQ OR WITH AC MQL= 7421 /MQ LOAD FROM AC, CLEAR AC MUY= 7405 /MULTIPLY NMI= 7411 /NORMALIZE NOP= 7000 /NO OPERATION NOPSKP= 7400 /SKIP GROUP NOP OPR= 7000 /OPERATE CLASS NOP OSR= 7404 /OR AC WITH CONSOLE SWITCHES PCE= 6020 /CLEAR PUNCH/READER INTERRUPT ENABLE PCF= 6022 /CLEAR PUNCH FLAG PLS= 6026 /PUNCH LOAD BUFFER SEQUENCE PPC= 6024 /PUNCH LOAD BUFFER AND PUNCH CHARACTER PSF= 6021 /PUNCH SKIP ON FLAG RAL= 7004 /ROTATE AC AND LINK LEFT RAR= 7010 /ROTATE AC AND LINK RIGHT RCC= 6016 /READ BUFFER, CLEAR FLAG AND FETCH NEW CHARACTER RDF= 6214 /READ DATA FIELD RFC= 6014 /READER FETCH NEW CHARACTER RIB= 6234 /READ INTERRUPT BUFFER RIF= 6224 /READ INSTRUCTION FIELD RMF= 6244 /RESTORE MEMORY FIELDS RPE= 6010 /READER/PUNCH INTERRUPT ENABLE RRB= 6012 /READ READER BUFFER RSF= 6011 /READER SKIP ON FLAG RTF= 6005 /RESTORE FLAGS RTL= 7006 /ROTATE AC AND LINK TWICE LEFT RTR= 7012 /ROTATE AC AND LINK TWICE RIGHT SAM= 7457 /SUBTRACT AC FROM MQ SCA= 7441 /STEP COUNTER OR INTO AC SCL= 7403 /STEP COUNTER LOAD SGT= 6006 /SKIP ON GREATER-THAN FLAG SHL= 7413 /SHIFT LEFT SINT= 6254 /SKIP ON USER INTERRUPT SKON= 6000 /SKIP IF INTERRUPT ON AND TURN IT OFF SKP= 7410 /UNCONDITIONAL SKIP SMA= 7500 /SKIP ON MINUS ACCUMULATOR SNA= 7450 /SKIP ON NON-ZERO ACCUMULATOR SNL= 7420 /SKIP ON NON-ZERO LINK SPA= 7510 /SKIP ON POSITIVE OR ZERO ACCUMULATOR SRQ= 6003 /SKIP ON INTERRUPT REQUEST STA= 7240 /SET ALL BITS OF AC STL= 7120 /SET LINK ON SUF= 6274 /SET USER FLIP-FLOP SWAB= 7431 /SWITCH TO MODE "B" SWBA= 7447 /SWITCH TO MODE "A" SWP= 7521 /SWAP AC AND MQ SZA= 7440 /SKIP ON ZERO ACCUMULATOR SZL= 7430 /SKIP ON ZERO LINK TCF= 6042 /TELETYPE PRINTER CLEAR FLAG TFL= 6040 /TELETYPE FLAG SET TLS= 6046 /TELETYPE LOAD BUFFER SEQUENCE TPC= 6044 /TELETYPE LOAD BUFFER AND PRINT TSF= 6041 /TELETYPE SKIP ON FLAG TSK= 6045 /TELETYPE/READER SKIP ON FLAG (EITHER) / INSERT FURTHER SYMBOLS HERE FOR ASSEMBLY PURPOSES ONLY. / MICRO-OPERATE DEFINITIONS. NL0000= CLA /SET AC TO ZERO ZERO ZERO ZERO NL0001= CLA IAC /SET AC TO ONE NL0002= CLA CLL CML RTL /SET AC TO TWO NL2000= CLA CLL CML RTR /SET AC TO TWO THOUSAND NL3777= CLA CLL CMA RAR /SET AC TO THREE SEVEN SEVEN SEVEN NL4000= CLA CLL CML RAR /SET AC TO FOUR THOUSAND NL5777= CLA CLL CMA RTR /SET AC TO FIVE SEVEN SEVEN SEVEN NL7775= CLA CLL CMA RTL /SET AC TO MINUS THREE NL7776= CLA CLL CMA RAL /SET AC TO MINUS TWO NL7777= CLA CMA /SET AC TO SEVEN SEVEN SEVEN SEVEN / ERROR DEFINITIONS. ERRSYM= 2000 /PRINT SYMBOL WITH ERROR ERROCT= 4000 /PRINT OCTAL NUMBER WITH ERROR BE= "B-300^45+"E-300 /LITERAL BUFFER EXCEEDED BO= "B-300^45+"O-300 /BINARY OUTPUT OVERFLOW CO= "C-300^45+"O-300 /CONDITIONAL ASSEMBLY ERROR DT= "D-300^45+"T-300+ERRSYM /DUPLICATE TAG ER= "E-300^45+"R-300+ERROCT /USER ERROR FI= "F-300^45+"I-300 /FIXMRI ERROR IC= "I-300^45+"C-300+ERROCT /ILLEGAL CHARACTER IE= "I-300^45+"E-300 /ILLEGAL EXPRESSION II= "I-300^45+"I-300 /ILLEGAL INDIRECT IM= "I-300^45+"M-300 /INSUFFICIENT MEMORY IP= "I-300^45+"P-300+ERRSYM /ILLEGAL PSEUDO-OP REDEFINITION ATTEMPT IR= "I-300^45+"R-300+ERROCT /ILLEGAL REFERENCE LG= "L-300^45+"G-300 /LINK GENERATED NE= "N-300^45+"E-300 /NULL LITERAL TERM NU= "N-300^45+"U-300 /NUMERICAL ERROR PA= "P-300^45+"A-300+ERROCT /PAUSE MESSAGE PE= "P-300^45+"E-300 /PAGE EXCEEDED PH= "P-300^45+"H-300 /CONDITIONAL ASSEMBLY PHASE ERROR PO= "P-300^45+"O-300 /PUSHDOWN OVERFLOW ST= "S-300^45+"T-300+ERRSYM /SYMBOL TABLE EXCEEDED SY= "S-300^45+"Y-300 /SYNTAX ERROR UF= "U-300^45+"F-300 /UNDEFINED FIELD UO= "U-300^45+"O-300 /UNDEFINED ORIGIN US= "U-300^45+"S-300+ERRSYM /UNDEFINED SYMBOL ZE= "Z-300^45+"E-300 /ZERO PAGE EXCEEDED / N.B.: / "PA" IS NOT AN ERROR, RATHER IT IS A USER INVOKED FEATURE. / "ER" IS AN ERROR CAUSED BY INVOKING THE "ERROR" PSEUDO-OP. / ASSEMBLER SWITCH OPTIONS. / /A USE ALL SYMBOLS WHERE APPLICABLE INCLUDING PERMANENT SYMBOLS. / /B USE %:[BOOTSTRAP UNIT] FOR BINARY. OVERRIDDEN IF BINARY OUTPUT FILES / PASSED. INTERNALLY SET IF ANY BINARY OUTPUT SHOULD OCCUR TO FORCE A / SECOND PASS WITH BINARY OUTPUT PROCESSING. OTHER SWITCHES MAY SET /B. / /C OPTIMIZE MEMORY UTILIZATION BY MINIMIZING BUFFER SPACE IN FIELD 0 AND / ATTEMPTING TO GET ANOTHER (PARTIAL) FIELD ABOVE THE CURRENT CORE-SIZE / LIMIT. THIS RESULTS IN A SLOWER ASSEMBLY, BUT USES LESS MEMORY, MAKING / POSSIBLE ASSEMBLIES OTHERWISE IMPOSSIBLE. / /D SET /B AND USE $:[BOOTSTRAP UNIT] FOR BINARY AS WELL. OVERRIDDEN IF / BINARY OUTPUT FILES. / /E FORGET LITERAL BOUNDARIES WHEN RE-ENTERRING A PREVIOUS PAGE. NEEDED / FOR RELOCATED PAGES IN OVERLAYS. / /F SET /G AND /W AND INDICATE USE OF HIGH-SPEED PUNCH. / /G CHAIN TO BIN:[BOOTSTRAP UNIT] IF NO ASSEMBLY ERRORS. OTHER SWITCHES / MAY BE INCLUDED TO PASS ADDITIONAL LOADER OPTIONS. / /H SET /G AND INDICATE STORING OF HALT (7402) IN ALL USER MEMORY. / /I SET /G AND INDICATE RELOADING OF SYSTEM I/O HANDLER AFTER LOADING / (IGNORED IF /V ALSO PASSED OR SYSTEM USES VIRTUAL LOADER BY DEFAULT). / /J DO NOT GENERATE TRAILING WORD OF ZERO ON EVEN-LENGTH TEXT MESSAGES. / /K DUAL MEANING - IF /L AND /N ARE SET: GENERATE A NEW TITLE FROM THE / FIRST LINE OF EVERY FILE, NOT JUST THE FIRST FILE. IF /L IS NOT SET: / FORCE A SECOND PASS EVEN IF /B IS NOT SET SO THAT SECOND PASS CAN BE / PERFORMED (ALONG WITH ANY ADDITIONAL ERROR MESSAGES IN THE SECOND PASS). / THIS ALLOWS A TWO-PASS ASSEMBLY WITH NO LISTING AND NO BINARY. / /L ENABLE SECOND PASS LISTING. OTHER SWITCHES MAY ENHANCE THE OUTPUT. / /M SET /B AND CHAIN TO MAP:[BOOTSTRAP UNIT] AFTER END OF ASSEMBLY. IF /G / THEN MAP WILL CHAIN TO BIN:[BOOTSTRAP UNIT] AT END OF THE MAP PRINTOUT / IF NO ASSEMBLY ERRORS. / /N ENABLE NEATNESS OPTIONS ON ALL APPROPRIATE OUTPUT. ENABLES TITLES ON / THE LISTING IF /L AND PAGINATED LISTINGS OF ERROR MESSAGES IF /L NOT / ENABLED. CHECKS FOR SYSTEM LPT: AND REDIRECTS ALL PRINTED OUTPUT TO LPT: / IF AVAILABLE. SEE ALSO /K. / /O ENABLE LITERALS. USED WITHOUT /Q TO ENABLE OFF-PAGE REFERENCE FIXUPS / (LINKS) WITH "LG" ERROR MESSAGE. IF /Q THEN DISABLE "LG" ERRORS. / /P ENABLE WIDE (PRINTER) TYPE OUTPUT ON SYMBOL TABLE, XREF, AND MAP / OUTPUT (IF ANY). NOT PASSED TO BIN IF /G (DELETED BY MAP IF /M). / /Q ENABLE LITERALS. SEE ALSO /O. / /R SET /G AND /W INDICATING USE OF RIM FORMAT PUNCHED OUTPUT. SEE ALSO /F. / /S ENABLE SYMBOL TABLE AT END OF FINAL PASS (1 OR 2). SEE ALSO / /A AND /K AND /N. / /T DISABLE CHECK FOR SYSTEM LPT: SO OUTPUT GOES TO SYSTEM CONSOLE EVEN IF / /N IS IN EFFECT AND LPT: IS AVAILABLE. / /U SET /B AND USE %:[BOOTSTRAP UNIT XOR-ED WITH 0001] ALSO $:[BOOTSTRAP / UNIT XOR-ED WITH 0001] IF /D. OVERRIDEN IF BINARY OUTPUT FILES. / /V SET /G AND INDICATE USE OF VIRTUAL LOADER. / /W SET /G AND INDICATE PUNCHING OF BINARY OUTPUT FILES. SEE ALSO /F AND /R. / /X IF /L THEN ENABLE CROSS-REFERENCE OUTPUT PROCESSING. SEE ALSO /A AND /P. / /Y "!" DOES A BYTE SHIFT (^100!) INSTEAD OF INCLUSIVE OR. / /Z SET /G AND INDICATE STORING OF ZERO IN ALL USER MEMORY. / /0 FIELD SETTINGS GENERATE AN AUTOMATIC *0200. / /1-/7 STARTING FIELD SWITCHES PASSED TO BIN. IF CHAINING TO MAP, THESE / SWITCHES ARE IGNORED BY MAP BUT WILL BE PASSED IF CHAINING FURTHER TO / BIN (/M AND /G AND NO ASSEMBLY ERRORS). / /8 ENABLE LINC MODE CROSS-ASSEMBLY FEATURES AND START ASSEMBLY / IN PMODE AT 000200. / /9 ENABLE LINC MODE CROSS-ASSEMBLY FEATURES AND START ASSEMBLY / IN LMODE AT 004020. / =XXXX SET /G AND PASS THE VALUE AS A STARTING ADDRESS TO BIN. / OPTION SWITCH DEFAULT MODIFICATION. / ALL SWITCHES CAN BE INVERTED IN SENSE BY SETTING THE CORRESPONDING / SWITCHES IN THE THREE WORDS STARTING AT "OPTLST". THE SWITCHES ARE XOR-ED / WITH THESE VALUES INTERNALLY BEFORE ANY OPTION SWITCHES ARE ACTED UPON. / EXAMPLE: / TO PERMANENTLY ENABLE LITERALS BY DEFAULT (AS IF /Q WERE ALWAYS SET, / AND REQUIRING /Q TO BE GIVEN WHEN IT IS ACTUALLY MEANT TO BE TURNED / OFF!) CHANGE LOCATION "OPTLST+1" FROM 0000 TO 0200. / MISCELLANEOUS EQUATED SYMBOLS. BINADR= 0020 /% BLOCK BSGRP= 0003 /(1984-1960)%8 IS BASE GROUP DOLBLK= 0040 /$ BLOCK INCON= 0031 /EQUATED FROM CONSOLE! JMPC= JMP . /CURRENT PAGE JUMP JMPIC= JMP I . /CURRENT PAGE INDIRECT JUMP JMSC= JMS . /CURRENT PAGE DIRECT SUBROUTINE CALL JMSI= JMS I 0 /PAGE ZERO INDIRECT SUBROUTINE CALL JMSIC= JMS I . /CURRENT PAGE INDIRECT SUBROUTINE CALL LPT= 0066 /SYSTEM LINEPRINTER DEVICE CODE OUTCON= 0033 /EQUATED FROM CONSOLE! OUTLPT= 0035 /EQUATED FROM CONSOLE! REVISIO="S&77 /REVISION LETTER OF ASSEMBLER SBLOCK= 7635 /SYSTEM LOADER BLOCK ARGUMENT LOCATION SBOOT= 7600 /SYSTEM BOOTSTRAP ADDRESS SBTFUN= 7602 /SYSTEM BOOTSTRAP FUNCTION SCORE= 7633 /SYSTEM LOADER CORE ARGUMENT LOCATION SCRSIZE=7611 /POINTER TO MEMORY CONFIGURATION WORD SDATE= 7610 /SYSTEM DATE WORD SFILES= 7757 /FILE ARGUMENTS START HERE SFUN= 7634 /SYSTEM LOADER FUNCTION ARGUMENT LOCATION SLOAD= 7632 /LOCATION OF SYSTEM LOADER SOUTFLS=7607 /NUMBER OF PASSED OUTPUT FILES SPARM= 7756 /SYSTEM EQUALS PARAMETER SWAL= 7604 /PASSED SWITCHES /A-/L SWMX= 7605 /PASSED SWITCHES /M-/X SWY9= 7606 /PASSED SWITCHES /Y-/9 SYSCAT= 0063 /SYSTEMS CATALOG SYSIO= 7640 /SYSTEM I/O ROUTINE ENTRY POINT SYSTART=7637 /SYSTEM LOADER SYSTEM START LOCATION TADC= TAD . /CURRENT PAGE ADD TTY= 0003 /SYSTEM CONSOLE DEVICE CODE VERSION="8-"0 /VERSION NUMBER OF ASSEMBLER WRITE= 4000 /SYSIO WRITE BIT JMSSYSI=SYSIO&177+JMSC /CALL TO SYSIO FROM ITS OWN PAGE KCCIOT= TTY^10+6002 /CLEAR KEYBOARD FLAG KRSIOT= TTY^10+6004 /READ KEYBOARD BUFFER KSFIOT= TTY^10+6001 /SKIP ON KEYBOARD FLAG LLSIOT= LPT^10+6006 /OUTPUT CHARACTER TO LINEPRINTER LSFIOT= LPT^10+6001 /SKIP ON LINEPRINTER FLAG TLSIOT= TTY+1^10+6006 /OUTPUT CHARACTER TO TELEPRINTER TSFIOT= TTY+1^10+6001 /SKIP ON TELEPRINTER FLAG XLIST 1 /TURN LISTING OFF IFNDEF OFF ON= 0 IFNDEF FOO FOO= FOO+1 IFNZRO FOO < XLIST ON / HEADER BLOCK FOR SYSODT. *7777 /MAIN SEGMENT *"P-300^100+"A-300 /PA *"L-300^100 /L *0000 / *7600%200 /LOAD/LENGTH WORD *PAL /STARTING ADDRESS *ASMSIZE+0200 /LOAD/LENGTH OF FIRST OVERLAY *STOSIZE+0200 /LOAD LENGTH OF SECOND OVERLAY *SYMSIZE+SYMTAB /LOAD/LENGTH OF SYMBOL TABLE *CRFSIZE+0400 /LOAD/LENGTH OF CROSS-REFERENCE OVERLAY *7777 /END OF OVERLAY LIST XLIST OFF > XLIST ON PAGE 0 /START AT THE BEGINNING IFNZRO 0-. RCDCNT, 0 /BINARY RECORD COUNT; MUST BE IN ZERO FOR CHAINING /ALSO ZEROED BY FIELD ZERO SYMBOL CLEARING ROUTINE /IF NOT ACTUALLY USING FIELD 0! EQUSW, -4 /EQUATE DEPTH SWITCH; INITIALIZED FOR MOVE ROUTINE FCHAR, 0 /FRONT CHARACTER L2000, /CONSTANT 2000 INSYM, INSM /POINTER TO SYMBOL SEARCH ROUTINE MODE, 0 /CURRENT ASSEMBLY MODE IN BIT[0]; 0=PMODE, 4000=LMODE M32, 7746 /CONSTANT 7746 RCHAR, 0 /REAR CHARACTER SYMNUM, 0 /CURRENT SYMBOL NUMBER *10 /AUTO-INDEX REGISTER DEFINITIONS IFNZRO 10-. L6000, 6000 /CONSTANT 6000 BXR, MOVLST-1 /BINARY POINTER; INITIALIZED FOR MOVE ROUTINE RXR, REFBUF-1 /**** RELOCATE **** SXR, IOLIST-1 /SOURCE POINTER; INITIALIZED FOR I/O FIXUP ROUTINE TXR, TITCODE+DAYBLB-SOURCE-1 /TEMPORARY POINTER; INITIALIZED FOR DATE ROUTINE ASIGN, -1 /ARITHMETIC SIGN L7761, 7761 /CONSTANT 7761 MRISW, 0 /MRI IN PROGRESS SWITCH *20 /START OF USUAL STUFF ON PAGE ZERO PUSH= JMS I .;XPUSH /PUSHDOWN CONTROL POP= JMS I .;XPOP /POPUP CONTROL TEOS= JMS I .;XTEOS /TEST FOR END OF STATEMENT TESTL= JMS I .;XTESTL/TEST NEXT CHARACTER FOR A LETTER (OR NUMBER) TSPACE= JMS I .;XTSPAC/TEST FOR OR IFNZRO 25-. TMP, .-. /UNIVERSAL TEMPORARY ARITH, XARITH /FOR PRIMITIVE OPERATORS ERR, XERR /ERROR PRINTOUT EXPR, XEXPR /GENERAL RECURSIVE EXPRESSION HANDLER GCH, XGCH /POINTER TO GET CHARACTER ROUTINE GETCOL, XGETCOL /COLUMN ROUTINE L45, 45 /CONSTANT 0045 OPVAL, XOPVAL /OPERAND EVALUATOR ORSYM, XORSYM /INCLUSIVE OR A SYMBOL OVFLPG, -1 /OVERFLOW PAGE COUNT PCRLF, XPCRLF /PRINT , PRTBUF, XPRTBF /POINTER TO BUFFER PRINTER PSDRET, XPSDRET /PUSHDOWN RETURN PUTFLD, XPUTFLD /POINTER TO FIELD SETTING PUNCH PUTORG, XPUTORG /PUNCH AN ORIGIN SETTING PUTWD, XPUTWD /PRINT A GENERATED WORD OF CODE P45CH, XP45CH /PRINT RADIX 45 CHARACTERS P6CH, XP6CH /PRINT SIX-BIT CHARACTERS IFNZRO 47-. L177, 177 /CONSTANT 0177 SETSYM, XSETSM /POINTER TO SYMBOL SETUP ROUTINE IFNZRO 51-. PRVCHR, 0 /PREVIOUS CHARACTER; IS ZERO IF OPERAND SCANNED SETFLD, XSTFLD /POINTER TO SYMBOL FIELD SETUP ROUTINE IFNZRO 53-. LSTSW, 0 /LOCAL LIST SWITCH PATOM, /POINTER TO ATOM L200, 200 /CONSTANT 0200 L40, 40 /CONSTANT 0040 L7000, 7000 /CONSTANT 7000 VALRET, VEXIT /NORMAL EXPRESSION EXIT IFNZRO 60-. L3, 3 /CONSTANT 0003 L60, 60 /ASCII 6-BIT ZERO CONSTANT L7740, 7740 /CONSTANT 7740 L7741, 7741 /CONSTANT 7741 L7756, 7756 /CONSTANT 7756 L7770, 7770 /CONSTANT 7770 L7774, 7774 /CONSTANT 7774 MSTSIZE,0 /-SYMBOL TABLE SIZE VACRET, VACEXP /RETURN FROM NULL EXPRESSIONS IFNZRO 71-. L1777, 1777 /CONSTANT 1777 ANY, 0 /OPERATE SWITCH CHAR, 0 /INPUT CHARACTER IEXPR, IEXP /PRINT ILLEGAL EXPR MESSAGE LBLSWT, 0 /LABEL SWITCH RESULT, 0 /LATEST EXPRESSION RESULT TITPTR, 0 /TITLE POINTER IFNZRO 100-. L4, 4 /CONSTANT 0004 BDCH, ILLCHR /ILLEGAL CHARACTER ERROR COLCT, 1 /COLUMN COUNTER GETSYM, GETSM /GET NEXT SYMBOL ROUTINE LOCNTR, 200 /LOCATION COUNTER FOR OUTPUT LSTWD, 0 /GLOBAL LIST SWITCH L37, 37 /CONSTANT 0037 PUNSW, 0 /LOCAL PUNCH SWITCH PUNWD, 0 /GLOBAL PUNCH SWITCH NM1, SWAL /FIRST 2 CHARACTERS OF NAME; INITIALIZED FOR STARTUP NM2, SWMX /MIDDLE 2 CHARACTERS OF NAME; INITIALIZED FOR STARTUP NM3, SWY9 /FINAL 2 CHARACTERS OF NAME; INITIALIZED FOR STARTUP IFNZRO .-1-NM3 L7577, 7577 /CONSTANT 7577; MUST BE AFTER NM3 BEGLIN, XBGLIN /ISSUE , IF NECESSARY BUFSW, 0 /BUFFER PRINTED SWITCH ERRTOT, 0 /NUMBER OF ERRORS FIXMRF, 0 /FIXMRI FLAGS FLSHSW, 0 /CONDITIONAL ASSEMBLY FLUSH SWITCH L7, 7 /CONSTANT 0007 L7600, 7600 /CONSTANT 7600 MRINDS, 0 /MRI STORAGE NMFLGS, SOUTFLS /SYMBOL TYPE FLAGS; INITIALIZED FOR OUTPUT FILES CHECK PEJECT, DEJECT /EJECT ROUTINE PIOR, XIOR /POINTER TO INCLUSIVE OR ROUTINE PRTFLD, XPRFLD /PRINT A COMPLETE OCTAL FIELD PRTSYM, XPRTSM /PRINT SYMBOL TABLE PRVOPR, XIOR /PREVIOUS OPERATOR; INITIALIZED TO "OR-ED WITH 0" RLOC8, 0 /RELOCATION CONSTANT ROR6, XROR6 /ROTATE RIGHT SIX SVAL, 0 /LATEST EXPRESSION VALUE TO BE OPERATED ON WITH RESULT IFNZRO 136-. L77, 77 /CONSTANT 0077 BLOCNTR,200 /WHERE BINARY REALLY GOES BUFCNT, .-. /BUFFER COUNT CHKLST, XCHKLST /CHECK PREVIOUS SCAN CHARACTER CHPTR, RESULT /MUST POINT TO A ZERO FOR TITLE ROUTINE CURFLD, 00 /CURRENT FIELD FOR PRINTOUT DUMPSW, 0 /LITERAL DUMP SWITCH ECHOSW, 0 /ECHO SWITCH IBIT, 0400 /**** (/8 OR /9) AND LMODE **** 0020 L12, /CONSTANT 0012 IFLAGS, 12 /INITIAL RELBTS LITFLG, 0 /LITERAL LEVEL FLAG LITSWT, 0 /LITERAL CLOSEOUT SWITCH LITYPE, 0 /CURRENT LITERAL TYPE L15, 15 /CONSTANT 0015 L7772, 7772 /CONSTANT 7772 OFPCNT, 0 /LINKS GENERATED COUNTER OPSW, 0 /EQUATE/COMMA SWITCH OUTPTR, BDFLST /BINARY TARGET POINTER PCHKSTN,XNOPRTN /**** /L AND /X AND PASS 2 **** CHKSTN PEOS, EOS /POINTER TO END OF STATEMENT ROUTINE PGIVCHR,GIVCH /POINTER TO GET A CHARACTER ROUTINE PPAGMOR,PAGMORE /CODE IN COMMON WITH STAR ROUTINE PRGLIT, XNOPRTN /**** /Q OR /O **** DUMPZ (RELOCATED) PRTDEC, DECPRT /POINTER TO DECIMAL PRINT ROUTINE PTNREG, XPTNREG /PRINT THAT WHICH USUALLY DOESN'T Q, .-. /LITERAL TEMPORARY INVRT, .-. /SIXBIT/TEXT SWITCH TXTCNT, -3 /TEXT OUTPUT WORD COUNT UNDFLG, 0 /UNDEFINED SYMBOL FLAG XNWSTM, NEWSTM /POINTER TO NEWSTM ZBLOCK 176-. /GET NEAR END OF PAGE / GENERAL CHARACTER SCAN RESTARTS HERE. SETCHR, TAD CHAR /USE CURRENT CHARACTER FOR SCAN SCRESET,DCA PRVCHR /ENTER HERE TO RESET SCAN / THE CODE ON THE NEXT FOUR PAGES IS ONCE-ONLY. / THE REST OF THE RESIDENT CODE NORMALLY FOUND IN THE NEXT FOUR PAGES / WILL BE LOADED BY STILL FURTHER ONCE-ONLY CODE AFTER POSSIBLY USING / THE FOUR PAGE AREA AS A BUFFER FOR THE SYSTEM CATALOG (TO LOOKUP / "BIN" OR "MAP"). / SEE THE OVERLAY STARTING AT "ATOM" FOR THE CODE NORMALLY FOUND HERE. / PAL SYSTEM STARTS HERE. IFNZRO .&177 PAL= . /START OF PAL SYSTEM PAL, 10 /HERE IN CASE WE ARE CHAINED TO FIXIO, TAD I SXR /GET NEXT FIXUP ELEMENT SNA /END OF LIST? JMP EXORLP /YES, GO ON TO NEXT TEST DCA TMP /NO, SAVE POINTER TO FUNCTION TAD I (SFUN) /GET SYSTEM LOADER FUNCTION WORD AND L7/[7] /JUST UNIT BITS TAD I TMP /FIXUP REQUESTED FUNCTION WORD DCA I TMP /AND PUT IT BACK ISZ TMP /BUMP TO BLOCK ARGUMENT TAD I (SBLOCK) /GET OUR LOAD BLOCK TAD I TMP /ADD ON RELATIVE OFFSET DCA I TMP /PUT BACK RELOCATED BLOCK ARGUMENT JMP FIXIO /AND GO DO ANOTHER LIST / THIS MODIFIES THE SWITCHES ACCORDING TO THE INTERNAL OPTION WORDS. EXORLP, TAD I SWPTR /GET A SWITCH WORD AND I OPTPTR /AND AGAINST OPTION WORD CIA /INVERT CLL RAL /*2 TAD I SWPTR /ADD ON SWITCH WORD TAD I OPTPTR /ADD ON OPTION WORD DCA I SWPTR /STORE XOR-ED VALUE ISZ SWPTR /BUMP TO NEXT ISZ OPTPTR /BUMP TO NEXT ISZ I (REPLACE) /DONE YET? JMP EXORLP /NO, GO BACK ATEKTST,TAD I (SCRSIZE) /GET MEMORY CONFIGURATION WORD RTR;RAR /MOVE DOWN AND L7/[7] /JUST LOGICAL CORE-SIZE BITS DCA ATEKTST /SAVE TEMPORARILY TAD ATEKTST /REGAIN LOGICAL SIZE TAD L7774/[-4] /20K OR BETTER? SMA SZA /SKIP IF LESS THAN 20K CLA /INDICATE NOT TAD L4/[4] /ADD IN FUDGE FACTOR DCA MSTSIZE /FOR SYMBOL TABLE SIZE LIMITATION TAD MSTSIZE /REGAIN SIZE TAD L7774/[-4] /ADD ON THEORETICAL MAXIMUM SNA CLA /SKIP IF LESS THAN FULL SIZE JMP ZAPXM /WE HAVE THE MOST WE CAN USE CTEST, TAD I NM1/[SWAL] /GET SWITCHES /A-/L RTL /MOVE /C TO AC[0] SPA CLA /IS IT SET? JMP TRYMORE /YES, WE CAN GET A LITTLE EXTRA CFAIL, TAD MSTSIZE /GET CURRENT LIMIT OF SYMBOL TABLE SIZE SNA CLA /SKIP IF MORE THAN FIELD 0 JMP ZEROXM /OH WELL, ONLY 4K (BUT WE CAN STILL RUN!) ZAPXM, TAD (ATEKAY-1) /GET POINTER TO 8K ZAP LIST JMS I (REPLACE) /DO THE ZAPS JMP ZEROXM /RESUME IN LINE TRYMORE,TAD I (SCRSIZE) /GET CONFIGURATION WORD AGAIN JMS I ROR6/[XROR6] /MOVE MCS TO LOW ORDER AND L7/[7] /CLEAN UP OTHERS CIA /NEGATE TAD ATEKTST /ADD IN SAVED LCS SNA CLA /IF NOT EQUAL, LCS WORDS / CHBUF; SOURCE+400 /ACCOUNT FOR BINARY BUFFER / SLIMIT; 7600-200-4 /END OF CORE IN 4K IF 8K OR MORE / LTFROM-LTOUT+LTLEN; 4^100 /LISTAPE BUFFER IS 4 BLOCKS IN 8K / LTFROM-LTOUT+LT8KZP; TAD L4/[4] /LIKEWISE / LTFROM-LTOUT+LTLIM; -BINARY-1000 /COUNT 4 PAGES IN 8K 0 /THIS ENDS THE LIST PAGE TSTOUT, TAD I (SBTFUN) /GET BOOTSTRAP UNIT CMA /INVERT IT AND L7/[7] /JUST INVERTED UNIT BITS TAD I (CRWFUN) /ADD ON WRITE FUNCTION DCA I (CRWFUN) /STORE IN CREF CALL TAD I NMFLGS/[SOUTFLS]/CHECK FOR OUTPUT FILES MEMPTR, SNA /ANY? RLPTR, JMP SETUNT /NO RLSWT, CMA /INVERT AND ADD ONE TO COUNT XFACT, DCA I (OUTCNT) /AND ZAP INTO COUNTER TAD I (FLPNTR) /SETUP THE POINTER DCA OUTPTR /TO THE OUTPUT FILES TAD I NMFLGS/[SOUTFLS]/ADJUST THE TAD I (FLPNTR) /INPUT FILES SNA /ALL OUTPUT FILES? TAD STEAL/(OFPCNT) /YES, AVOID NON-EXISTANT INPUT DCA I (FLPNTR) /STASH THE POINTER TAD I (FLPNTR) /ALSO THE DCA I (INTFPT) /RESET POINTER DCA I NMFLGS/[SOUTFLS]/SET NUMBER OF OUTPUT FILES TO ZERO JMP OUTIN /DON'T CHECK FOR DEFAULT OUTPUT FILES SETUNT, TAD I (SBTFUN) /GET BOOTSTRAP FUNCTION AND L7/[7] /JUST UNIT BITS TAD (BINADR) /GET % BLOCK BITS DCA I (BDFLST) /STORE INTO DEFAULT LIST TESTU, TAD I NM2/[SWMX] /GET /M-/X AND (10) /JUST /U SNA CLA /SKIP IF SET JMP DTEST /JUMP IF NOT TAD I (BDFLST) /GET %:[BOOTSTRAP UNIT] CLL RAR /MOVE OVER CML RAL /MOVE BACK INVERTED BIT DCA I (BDFLST) /STORE AS %:[BOOTSTRAP UNIT XOR ONE] JMS I (SETB) /FORCE /B DTEST, TAD I NM1/[SWAL] /GET /A-/L AND (400) /JUST /D SNA CLA /SKIP IF SET JMP GTEST /JUMP IF NOT NL7775 /ALLOW TWO DCA I (OUTCNT) /OUTPUT FILES TAD I (BDFLST) /GET %:[BOOTSTRAP UNIT (XOR ONE IF /U)] TAD (DOLBLK-BINADR) /UPDATE TO $:[BOOTSTRAP UNIT (XOR ONE IF /U)] DCA I (BDFLST+1) /STORE INTO DEFAULT LIST OUTIN, JMS I (SETB) /FORCE /B GTEST, TAD I (SPARM) /GET EQUALS PARAMETER IAC /ADD ONE SZA CLA /SKIP IF NONE PASSED JMP GSET /ELSE SET /G TAD I NM1/[SWAL] /GET SWITCHES /A-/L AND (130) /JUST /F, /H, /I SZA CLA /SKIP IF NONE SET JMP GSET /ELSE SET /G TAD I NM2/[SWMX] /GET SWITCHES /M-/X AND (106) /JUST /R, /V, /W SZA CLA /SKIP IF NONE SET JMP GSET /ELSE SET /G NL2000 /SET /Z MASK AND I NM3/[SWY9] /GET /Z SWITCH SNA CLA /SKIP IF SET JMP I (TESTSW) /JUMP IF NOT GSET, TAD I NM1/[SWAL] /GET SWITCHES /A-/L AND (7737) /REMOVE /G TAD L40/[40] /FORCE /G ON DCA I NM1/[SWAL] /SAVE ALL BACK JMP I (TESTSW) /ON TO NEXT TEST STEAL, OFPCNT /CORE STEAL ROUTINE; INITIALIZED FOR ONCE-ONLY CODE TAD I STEAL /GET AGAIN TAD I PCHEND /ADD ON TO INPUT LIMIT DCA I PCHEND /STORE IT BACK / TAD I PCHROOM /RECOVER MAGIC NUMBER / CLL /CLEAR LINK FOR TEST / TAD SLIMIT /COMPARE TO MAGIC LIMIT / SNL CLA /SKIP IF STILL ROOM / JMP NOCORE /GO ABEND (SYSTEM 80A) TAD I STEAL /GET NUMBER OF PAGES STL RAR /SIGNED HALVE IT TAD I PPAGCNT /ADD ON PAGE COUNTER DCA I PPAGCNT /SAVE NEW PAGE COUNT TAD I PPAGCNT /GET PAGE COUNT BACK JMS I ROR6/[XROR6] /MAKE IT BLOCK COUNT DCA I PBLKCNT /STORE IT TAD I STEAL /\ CIA / \UPDATE TAD I (CHBUF) / /BUFFER POINTER DCA I (CHBUF) // TAD I (CHBUF) /CALCULATE STOLEN TAD I STEAL /CORE ADDRESS ISZ STEAL /BUMP RETURN ADDRESS JMP I STEAL /RETURN /NOCORE,TAD STEAL /GET LOCATION / DCA LOCNTR /OF NO RETURN / JMS I ERR/[XERR] /TELL OF IMPENDING DOOM / IM /IF YOU GET 8K THIS WON'T HAPPEN (?) / JMP I L7600/[SBOOT] /BYE BYE RELOC8, .-. /RELOCATION ROUTINE DCA XFACT /SAVE REAL ADDRESS NL7777 /SET POSITIVE/NEGATIVE DCA RLSWT /PASS SWITCH TAD I RELOC8 /GET POINTER TO RELOCATION LIST ISZ RELOC8 /BUMP RETURN POINTER DCA RLPTR /STASH LIST POINTER TAD I RLPTR /GET -(ASSEMBLED ADDRESS) TAD XFACT /ADD ON REAL ADDRESS DCA XFACT /SAVE AS RELOCATION FACTOR RLLOOP, ISZ RLPTR /POINT TO NEXT ENTRY IN LIST TAD I RLPTR /FETCH NEXT ENTRY SNA /SKIP IF NOT END OF LIST JMP RLCHNG /FLIP TO NEGATIVE LIST OR RETURN ON ZERO DCA MEMPTR /STASH POINTER TO MEMORY LOCATION TAD I MEMPTR /GET WORD TO RELOCATE TAD XFACT /RELOCATE IT DCA I MEMPTR /PUT IT BACK JMP RLLOOP /NOW GO DO NEXT ONE RLCHNG, ISZ RLSWT /END OF POSITIVE LIST? JMP I RELOC8 /NO, RETURN TO CALLER TAD XFACT /ELSE NEGATE CIA /RELOCATION FACTOR JMP RLLOOP-1 /AND DO NEGATIVE LIST PBLKCNT,RELOC8 /**** 8K **** BLKCNT PPAGCNT,RELOC8 /**** 8K **** PAGCNT /SLIMIT,XSBEG&7600-200-4 /**** 8K **** 7600-200-4 PCHEND, CHEND /**** 8K **** RELOC8 PAGE TESTSW, TAD I NM1/[SWAL] /GET SWITCHES /A-/L DAY, AND (100) /JUST /F SWITCH LPYRCT, SNA /SKIP IF ALREADY SET MONCNT, TAD I NM2/[SWMX] /ELSE GET SWITCHES /M-/X MONTH, AND (100) /JUST /F, /R QUO, SNA CLA /SKIP IF EITHER SET REM, JMP DODATE /JUMP IF NEITHER SET YEAR, NL7775 /FORM /W MASK AND I NM2/[SWMX] /REMOVE /W BIT TAD (2) /FORCE /W BIT ON DCA I NM2/[SWMX] /STORE ALL BACK DODATE, TAD I (SDATE) /GET SYSTEM DATE WORD JMS DIVIDE /DIVIDE BY 372 564 /TO GET YEAR DCA YEAR /SAVE AS YEAR OFFSET TAD REM /GET DAYS LEFT IN THE YEAR JMS DIVIDE /DIVIDE BY 31 TO GET 37 /MONTH (ORIGIN ZERO) DCA MONTH /SAVE IT NL0001 /MAKE ORIGIN ONE TAD REM /GET DAY OF THE MONTH DCA DAY /SAVE THE DAY TAD YEAR /GET LATEST YEAR L1060, TAD L3/[3] /ROUND UP FOR LEAP YEAR CLL RAR /DIVIDE CLL RAR /BY FOUR DCA LPYRCT /SAVE AS EXTRA LEAP DAYS COUNT TAD YEAR /GET THE YEAR AND L3/[3] /JUST LEAP YEAR BITS SNA CLA /SKIP IF NOT A LEAP YEAR ISZ I (FEBENT) /BUMP UP FEBRUARY COUNT IN A LEAP YEAR TAD MONTH /GET THE MONTH CMA /INVERT FOR COUNTING DCA MONCNT /SAVE IT JMP .+3 /JUMP INTO IT TAD I ENTPTR /GET A MONTH'S DAY COUNT ISZ ENTPTR /BUMP TO NEXT MONTH ISZ MONCNT /DONE ALL YET? JMP .-3 /NO, GO BACK TAD DAY /ADD ON DAY TAD YEAR /AND YEAR TAD LPYRCT /ADD ON EXTRA LEAP DAYS TAD BSGROUP /\ TAD BSGROUP / >ADD ON TEN-SEVEN DAYS/GROUP TAD BSGROUP // JMS DIVIDE /DIVIDE BY 7 TO GET 7 /DAY OF THE WEEK CLA /CLEAN UP TAD REM /GET RELATIVE DAY CLL RAL /*2 FOR DOUBLE-WORDS TAD (DAYS-1) /ADD ON TABLE POINTER DCA SXR /STASH THE POINTER TAD I SXR /GET A DAY WORD DCA I TXR /STORE INTO THE HEADER TAD I SXR /GET ANOTHER DAY WORD DCA I TXR /STORE INTO THE HEADER ISZ TXR /BUMP TO DATE FIELD TAD DAY /GET THE DAY JMS DIVIDE /GET TENS DIGIT 12 /BY DIVIDING BY 10 TAD L60/["0&77] /MAKE IT PRINTABLE JMS I ROR6/[XROR6] /MOVE TO HIGH ORDER RAR /FOR 2*6-BIT TAD REM /ADD ON UNITS DIGIT TAD L60/["0&77] /MAKE THAT PRINTABLE DCA I TXR /STICK INTO BLURB TAD MONTH /GET THE MONTH CLL RAL /*2 FOR DOUBLE-WORDS TAD (MONLST-1) /ADD ON TABLE POINTER DCA SXR /STASH THE VALUE TAD I SXR /GET A MONTH WORD DCA I TXR /PUT INTO MESSAGE TAD I SXR /GET ANOTHER MONTH WORD DCA I TXR /PUT INTO MESSAGE TAD BSGROUP /GET GROUP NUMBER CLL RTL /*4 RAL /*8 TAD YEAR /NOW HAVE YEAR-1960 TAD L1060/(764+74) /ADD ON 0560 (XX60 IS ACCEPTABLE) JMS DIVIDE /DIVIDE BY 100 144 /TO GET PROPER REMAINDER 60-99 AND 00-59 CLA /THROW AWAY QUOTIENT TAD REM /GET REMAINDER JMS DIVIDE /DIVIDE BY 10 TO GET 12 /THE TEN'S DIGIT TAD ("-^100+"0-200) /WILL PRINT "-" DCA I TXR /PUT INTO BLURB TAD REM /GET UNITS DIGIT JMS I ROR6/[XROR6] /SHIFT IT UP RAR /TO HIGH ORDER TAD ("0^100+" -200) /WILL PRINT "" DCA I TXR /PUT INTO BLURB TAD I NM1/[SWAL] /GET SWITCHES /A-/L SMA CLA /SKIP IF /A SET JMP I (SLNSTA) /JUMP IF /A NOT SET TAD (SKP CLA) /SETUP FOR ALL SYMBOLS DCA I (CRAZP9) /IN CROSS-REFERENCE JMP I (SLNSTA) /GO CHECK NEXT ITEM DIVIDE, .-. /DIVIDE ROUTINE FOR DATE DCA REM /SAVE IN REMAINDER DCA QUO /CLEAR QUOTIENT TAD REM /GET DIVIDEND STL CIA /INVERT FOR SUBTRACTION SKP /DON'T BUMP QUOTIENT FIRST TIME DVLOOP, ISZ QUO /BUMP UP QUOTIENT TAD I DIVIDE /ADD ON DIVISOR SNA SZL /OVERFLOW? JMP DVLOOP /NO, KEEP GOING CIA /YES, INVERT TAD I DIVIDE /RESTORE ISZ DIVIDE /BUMP PAST ARGUMENT DCA REM /SAVE AS REMAINDER TAD QUO /GET QUOTIENT JMP I DIVIDE /RETURN BSGROUP,BSGRP /BASE YEAR GROUP NUMBER ENTPTR, JANENT /POINTER TO MONTH DAY COUNTS PAGE IFNZRO .&177 SLNSTA, NL7777 /SET ALL BITS MQL /ATTEMPT TO LOAD MQ REGISTER SNA CLA /SKIP IF NO MQ HARDWARE JMP TESTEN /JUMP IF OK TAD L7410/(SKP) /ELSE GET A SKIP INSTRUCTION DCA I (EAEZAP) /KILL P. C. DISPLAY TESTEN, NL2000 /SET /N BIT AND I NM2/[SWMX] /AND JUST /N SZA CLA /SKIP IF NOT SET JMP TESTEL /JUMP IF SET TAD (NOFRM2&177+JMPC) /DESTROY DCA I (SLNZP8) /PAGINATION L1200, TAD SLNSTA/(NL7777) /DESTROY DCA I (SLNZP3) /"SKIP" PSEUDO-OP TAD L7600/[CLA!400] /DESTROY THE DCA I (SLNZP9) /CHECK FOR LPT: JMP NOHDNG /DON'T CHECK FOR LISTING TITLES TESTEL, NL0001 /CHECK FOR /L AND I NM1/[SWAL] /AND JUST /L SZA CLA /SKIP IF NOT SET DCA .+4 /DESTROY TEST IF SET TAD I NM2/[SWMX] /TEST FOR /S AND L40/[40] /AND JUST /S SNA CLA /SKIP IF SET JMP NOHDNG /JUMP IF NEITHER SET JMS I (STEAL) /TRY TO STEAL -200 /1 PAGE DCA I (TPT2) /SAVE POINTER FOR MOVE ROUTINE / TAD I (TPT2) /RECOVER POINTER / JMS I (RELOC8) /RELOCATE ADDRESS CONSTANTS / SLLRLC /POINTER TO RELOCATION LIST TAD (TMVCNT) /ALLOW THE DCA I (SLLLST) /NEATNESS ZAPS SKP /ALLOW TITLES NOHDNG, DCA I (SLNZP2) /DESTROY TITLES TAD I NM1/[SWAL] /CHECK FOR RAR /L ONLY SZL CLA /SKIP IF NOT /L JMP TESTQU-1 /JUMP IF /L SET DCA I (SLLZP9) /DESTROY LISTING ISZ I (LSTRPL) /BUMP UP THE ISZ I (LSTRPL) /REPLACEMENT POINTER L7410, SKP /DON'T DCA I (SLLZP2) /ALLOW A LISTING TESTQU, TAD I NM2/[SWMX] /TEST FOR /Q OR /O AND L1200/(1200) /AND JUST /Q OR /O SNA /SKIP IF SET JMP TEST89 /JUMP IF NOT SET AND L200/[200] /TEST FOR /Q ONLY SZA CLA /SKIP IF /Q IS OFF DCA I (OZAPLG) /"LG" MESSAGES IF /O ONLY JMS I (STEAL) /TRY TO STEAL LITMORE-ZPLBEG /CORE FOR LITERALS DCA I (QPT2) /SAVE POINTER FOR MOVE ROUTINE TAD I (QPT2) /RECOVER POINTER JMS I (RELOC8) /RELOCATE LITERAL POINTERS SLQRLC /POINTER TO RELOCATION LIST TAD I NM2/[SWMX] /TEST FOR /O RTL /AND JUST /O SMA CLA /SKIP IF SET DCA I (SLOZAP) /TERMINATE ZAP LIST EARLY IF NOT SET TAD (PDUMPL) /ENABLE REPLACEMENT LIST DCA I (SLQLST) /FOR LITERALS (ULTIMATELY) TEST89, TAD I NM3/[SWY9] /TEST FOR /8 OR /9 RTR /TO LINK, AC[0] SMA SNL CLA /SKIP IF EITHER /8 OR /9 JMP TESTKA-1 /JUMP IF NEITHER SZL /SKIP IF NOT /8 DCA I (SL9ZAP) /DESTROY /9 ZAPS JMS I (STEAL) /TRY TO STEAL -600 /3 PAGES DCA I (LNCPT2) /SAVE FOR MOVE ROUTINE TAD I (LNCPT2) /GET IT BACK JMS I (RELOC8) /RELOCATE POINTERS, ETC. LNCRLC /POINTER TO RELOCATION LIST TAD (LMZAPA) /ENABLE REPLACEMENT LIST DCA I (LNCLST) /FOR LMODE (ULTIMATELY) SKP /DON'T ISZ I (SYMBLK) /BUMP TO NEXT BLOCK TO ELIMINATE LMODE PSEUDO-OPS TESTKA, NL0002 /CHECK FOR /K AND I NM1/[SWAL] /AND JUST /K SNA CLA /SKIP IF SET DCA I (SLKZP0) /DESTROY GETTING NEW TITLES FROM FILES TESTEX, NL0001 /SETUP FOR /L, /X AND I NM1/[SWAL] /JUST /L AND I NM2/[SWMX] /JUST /X SNA CLA /SKIP IF BOTH SET JMP SETBUNIT /JUMP IF NOT BOTH SET JMS I (STEAL) /TRY TO STEAL -400 /TWO PAGES DCA I (XPT2) /SAVE FOR MOVE ROUTINE TAD I (XPT2) /GET IT BACK JMS I (RELOC8) /RELOCATE POINTERS, ETC. XRLC /POINTER TO RELOCATION LIST TAD (RPLSLX) /ENABLE REPLACEMENT LIST DCA I (EXLST) /FOR CROSS-REFERENCE (ULTIMATELY) SETBUNI,TAD I (SBTFUN) /GET BOOTSTRAP UNIT FUNCTION AND L7/[7] /JUST UNIT BITS DCA I (QTMP) /SAVE FOR SYSLOOK JMP I (CHKCONSOL) /GO DO NEXT TEST PAGE XOPVAL, .-. /PREVIOUS OPERAND EVALUATOR DCA OPSW /SAVE SWITCH JMS I INSYM/[INSM] /LOOKUP (PROBABLE) SYMBOL TAD NMFLGS /GET SYMBOL FLAGS SNA /DEFINED? JMP OPUS /NO, BUT IT MIGHT NOT EVEN BE A SYMBOL! SPA CLA /NORMAL SYMBOL? JMP .+3 /NO, INVESTIGATE FURTHER OPOUT, ISZ XOPVAL /TAKE VALUED RETURN JMP I XOPVAL /RETURN TO WHATEVER TAD OPSW /CALLED FROM EQUATE OR COMMA? TAD FLSHSW /OR IN CONDITIONAL ASSEMBLY? SZA CLA /ALLOW NORMALITY IF NOT JMP OPTHRU /DON'T CHECK NL2000 /SET DISTINGUISHING BIT AND NMFLGS /MASK OFF PSEUDO-OP BIT CLL RAL /MOVE TO HIGH-ORDER AND SVAL /CHECK IF VALUED PSEUDO-OP SPA CLA /SKIP IF SOMETHING ELSE JMP OPTHRU /DON'T CHECK IF PSEUDO-VALUE TAD CHAR /GET DELIMITER TSPACE /IS IT A ? SKP CLA /NO, CHECK FURTHER JMP OPTHRU /YES, GOOD ENOUGH TEOS /IS IT ? JMP I BDCH/[ILLCHR] /NO, BARF OPTHRU, TAD XOPVAL /GET HEADER PUSH /SAVE IT NL2000 /-PSEUDO-OP VALUE TAD NMFLGS /COMPARE TO VALUE WE TEST FOR SZA CLA /SKIP IF IT MATCHS JMP DOMRI /CHECK OUT MRI TYPE SYMBOL ISZ LBLSWT /INDICATE SCAN PENETRATION TAD FLSHSW /CONDITIONAL SCAN? SNA CLA /SKIP IF SO JMP .+4 /JUMP IF NOT TAD SVAL /PICK UP PSEUDO-OP ADDRESS SMA CLA /SKIP IF VFLAG IS SET JMP PSDVAL /ELSE RETURN ADDRESS AS VALUE NL3777 /SETUP MASK AND SVAL /TURN OFF VFLAG BIT DCA TMP /SAVE ADDRESS DCA SVAL /CLEAR FOR OTHERS ISZ OPSW /CALLED FROM EQUATE OR COMMA? JMP I TMP /BRANCH TO PSEUDO-OP JMS I ERR/[XERR] /COMPLAIN OF ILLEGAL IP /REDEFINITION ATTEMPT JMP I XNWSTM/[NEWSTM] /KEEP GOING DOMRI, TAD OPSW /CALLED BY EQUATE OR COMMA? SZA CLA /SKIP IF SO JMP PSDVAL /JUMP IF NOT ISZ LBLSWT /INCREASE SCANNER RANGE TAD PRVOPR /SAVE PUSH /PREVIOUS OPERATOR TAD RESULT /SAVE PUSH /PREVIOUS RESULT TAD MRINDS /SAVE PUSH /PREVIOUS MRI FLAGS TAD SVAL /SAVE PUSH /PREVIOUS TERM TAD ASIGN /GET CURRENT SIGN PUSH /SAVE NL7777 /RESET DCA ASIGN /SIGN LMZAP1, TAD L200/[200] /**** (/8 OR /9) AND LMODE **** JMP I LMZAP2 LMZAP2, DCA MRINDS /**** (/8 OR /9) AND LMODE **** LNCMRI TAD MRISW /GET CURRENT MRI SWITCH PUSH /STASH IT ISZ MRISW /INDICATE MRI IN PROGRESS JMS I EXPR/[XEXPR] /SCAN OFF OPERAND JMP PG0 /NONE THERE, USE 0000 TAD RESULT /GET RESULT AND L7600/[7600] /JUST PAGE BITS SNA /SKIP IF MRI PROBLEM POSSIBLE JMP PG0 /PAGE ZERO ALWAYS WORKS DCA TMP /SAVE PAGE BITS PS2ZAP, JMP MRIOK /**** PASS 2 **** TAD LOCNTR AND L7600/[7600] /GET CURRENT PAGE BITS CIA /INVERT FOR TEST TAD TMP /COMPARE TO LATEST SNA CLA /SKIP IF DIFFERENT PAGE JMP MRIOK /SAME PAGE, WE'RE OK OZAP2, TAD RESULT /**** /O **** JMP I .+1 OZAP3, JMS I ERR/[XERR] /**** /O **** OFPLIT (RELOCATED) IR /COMPLAIN OF ILLEGAL REFERENCE MRIOK, POP /RESTORE THE DCA MRISW /MRI SWITCH MRILNC, POP /RESTORE DCA ASIGN /PREVIOUS ARITHMETIC SIGN POP /RESTORE PREVIOUS DCA SVAL /SCAN TERM TAD RESULT /GET RESULT LMZAP4, AND L177/[177] /**** (/8 OR /9) AND LMODE **** AND L1777/[1777] TAD MRINDS /ADD ON LATEST PAGE BITS JMS I ORSYM/[XORSYM] /OR EVERYONE TOGETHER DCA SVAL /SAVE AS LATEST TERM POP /RESTORE DCA MRINDS /PREVIOUS PAGE BITS POP /RESTORE DCA RESULT /PREVIOUS RESULT POP /RESTORE DCA PRVOPR /PREVIOUS OPERATOR FLAG PSDVAL, POP /VALUED PSEUDO-OP RETURN DCA XOPVAL /RESTORE RETURN ADDRESS JMP OPOUT /FINISH THERE PG0, TAD MRINDS /GET PAGE BITS AND L7577/[-200-1] /MAKE IT PAGE ZERO ONLY DCA MRINDS /STORE IT BACK JMP MRIOK /PAGE ZERO NEVER HAS "IR" PROBLEMS OPUS, TAD OPSW /CALLED BY EQUATE OR COMMA? TAD FLSHSW /OR IN CONDITIONAL ASSEMBLY? SNA CLA /SKIP IF ANY OF THEM TAD NM1 /IS IT A SYMBOL AT ALL? SNA CLA /SKIP IF IT IS JMP OPOUT /JUMP IF NOT USMFIX, SKP /**** PASS 2 **** JMS I ERR/[XERR] US /UNDEFINED SYMBOL ISZ UNDFLG /SET UNDEFINED FLAG DCA SVAL /CLEAR UNDEFINED RESULT JMP OPOUT /DO SKIP RETURN / PSEUDO-OPS RETURN HERE. XPSDRET,POP /POP RETURN ADDRESS OFF STACK DCA XOPVAL /RESTORE IT DCA SVAL /CLEAR LATEST TERM JUST IN CASE JMP I XOPVAL /RETURN TO CALLER / "EXPUNGE" PSEUDO-OP PROCESSOR. XPUNGE, JMP I .+1/(XPUNG2) /CONTINUE THERE XPUNG2 /THROUGH HERE / "FIXTAB" PSEUDO-OP PROCESSOR. XFXTAB, JMP I LMFXTAB /CONTINUE THERE LMFXTAB,XFXT2 /**** /8 OR /9 **** LMFXTB (RELOCATED) PAGE / "I" PSEUDO-OP PROCESSOR. EYE, TAD MRISW /GET MRI SWITCH SNA CLA /SKIP IF IN MRI PROCESSING JMP EYEVAL /JUMP IF NOT TAD IBIT /GET CURRENT BIT CMA /INVERT FOR MASKING AND MRINDS /GET OTHER BITS TAD IBIT /OR IN CURRENT BIT DCA MRINDS /SAVE IT JMP I PSDRET/[XPSDRET]/RETURN / "CONSOLE" PSEUDO-OP PROCESSOR. XCNSOL, LAS SKP /GET SWITCHES, NOT THE DATE / "DATE" PSEUDO-OP PROCESSOR. XDATE, TAD I (SDATE) /GET THE SYSTEM DATE WORD SKP /NOT THE "I" BIT EYEVAL, TAD IBIT /GET LATEST "I" BIT VALUE DCA SVAL /SETUP AS LATEST TERM JMP I (PSDVAL) /NOW USE AS A VALUED PSEUDO-OP / "PAGE" PSEUDO-OP PROCESSOR. XPAGE, JMS I EXPR/[XEXPR] /GET THE ARGUMENT JMP NEXTPAGE /WASN'T ANY, GOTO NEXT PAGE TAD RESULT /GET ARGUMENT JMS I ROR6/[XROR6] /MOVE TO PAGE BITS AND L7600/[7600] /JUST PAGE BITS JMP I PPAGMOR/[PAGMOR]/CONTINUE THERE NEXTPAG,TAD LOCNTR /GET CURRENT LOCATION COUNTER TAD L177/[177] /BUMP TO NEXT PAGE JMP NEXTPAGE-2 /CONTINUE THERE / 8-BIT ASCII '"' PROCESSOR. XDQUO, JMS I CHKLST/[XCHKLST]/CHECK IF LEGAL HERE JMS I GCH/[XGCH] /GET NEXT CHARACTER TAD L40/[40] /INVERT IT AND L77/[77] /REMOVE CARRY TAD (240) /MAKE IT EIGHT-BIT JMP PONTIN /CONTINUE THERE IFNDF, TAD L7770/[SZA-SNA] /GET SZA-SNA IFDF, TAD LSNACLA/(SNA CLA) /GET SNA CLA DCA IFNST1 /NOW HAVE PROPER SKIP INSTRUCTION JMS IFCOM /CALL COMMON ROUTINE TAD NMFLGS /GET FLAGS IFNST1, SZA CLA /WERE THEY PROPERLY TOUCHED? JMP FLUSH /NO, START FLUSHING IFMOR, DCA FLSHSW /YES, ALLOW FURTHER INPUT SCANNING JMP I XNWSTM/[NEWSTM] /GO TO NEW STATEMENT DRIVER IFNZER, TAD L7770/[SZA-SNA] /GET SZA-SNA IFZER, TAD LSNACLA/(SNA CLA) /GET SNA CLA DCA IFNST2 /SETUP PROPER SKIP INSTRUCTION JMS IFCOM /CALL COMMON ROUTINE TAD RESULT /GET RESULT OF SCAN IFNST2, SZA CLA /DID IT COME OUT PROPERLY? JMP IFMOR /YES, ALLOW MORE INPUT SCANNING FLUSH, JMS I PRTBUF/[XPRTBF] /PRINT OUT THIS LINE NOW JMS I GCH/[XGCH] /GET A CHARACTER TAD (-"? JMS I PRTBUF/[XPRTBF] /YES, PRINT THE LINE TAD (-">!200) /IS IT ">"? SNA CLA /SKIP IF NOT ISZ FLSHSW /BUMPED UP TO PROPER LEVEL? JMP FLUSH+1 /NO, KEEP FLUSHING JMP I (CONDIN) /YES, GO TO NEW STATEMENT DRIVER IFCOM, .-. /COMMON IF ROUTINE IFCMA, CMA /SET DCA FLSHSW /SWITCH DCA NMFLGS /INITIALLY CLEAR FLAGS DCA I (INSM+1) /PREVENT ERRONEOUS INSERTION JMS I EXPR/[XEXPR] /TRY TO EVALUATE NL7777 /NONE THERE DCA TMP /SAVE STATUS TAD IFCMA/(CMA) /RESTORE DCA I (INSM+1) /SYMBOL CREATION ISZ TMP /WAS ANYTHING THERE? TAD CHAR /YES, CHECK IF IT WAS TAD (-" AND PROCESSORS / WHICH RELAX SOME OF THE OTHERWISE TIGHT SYNTACTICAL RULES / FORMERLY IN THIS ASSEMBLER. / WHEN A "." IS ENCOUNTERED, THE INPUT ROUTINES ARE FAKED OUT TO / PRETEND THAT A DID OCCUR PRIOR TO THE "."! POINT,/ JMS I CHKLST/[XCHKLST]/FIND OUT IF LEGAL HERE TAD I PGIVCHR/[GIVCH] /GET CURRENT CO-ROUTINE VALUE DCA POINTMP /SAVE IT TAD (POINT2) /GET OUR POINTER DCA I PGIVCHR/[GIVCH] /GIVE IT TO THEM TAD L40/[" &77] /GET A DCA CHAR /PRETEND IT CAME IN BY ITSELF JMP I (SPACE) /PRETEND WE'RE A / COMES HERE TO GET ANOTHER CHARACTER (HA-HA!). POINT2, TAD POINTMP /GET ORIGINAL ADDRESS DCA I PGIVCHR/[GIVCH] /RESTORE IT TAD LOCNTR /GET LOCATION COUNTER LMZAP5, NOP /**** (/8 OR /9) AND LMODE **** AND L1777/[1777] PONTIN, DCA SVAL /USE AS LATEST TERM JMP SCRESET /CONTINUE SCAN / "ENPUNCH" PSEUDO-OP PROCESSOR. XPUNCH, TAD PUNWD /SET OR ... / "NOPUNCH" PSEUDO-OP PROCESSOR. XNOPUNC,DCA PUNSW /CLEAR PUNCH SWITCH JMP I PSDRET/[XPSDRET]/RETURN / "LMODE" PSEUDO-OP PROCESSOR. XLMODE, NL4000 /INDICATE LINC MODE / "PMODE" PSEUDO-OP PROCESSOR. XPMODE, JMP I .+1 /CONTINUE THERE PLMODE /**** RELOCATE **** PDUMPL, XNOPRTN /**** /Q OR /O **** DUMPC (RELOCATED) POINTMP,.-. /ADDRESS STORED HERE PAGE / LITERAL PROCESSOR. / TESTLI ROUTINE COMES HERE BY A TABLE BRANCH FOR THE CHARACTERS: "(", "[", "#". LPARN, NL4000 /"(" ENTRY LBRAK, IAC /"[" ENTRY NUMSGN, DCA Q /"#" ENTRY JMS I CHKLST/[XCHKLST]/SEE IF LEGAL HERE JMP I LITNBL /CONTINUE THERE / CLOSING LITERAL CHARACTER PROCESSOR. RBRAK, NL4000 /"]" ENTRY RPARN, DCA TMP /")" ENTRY TAD LITFLG /ARE LITERALS IN PROGRESS? SNA CLA /SKIP IF YES JMP I BDCH/[ILLCHR] /BRANCH TO ILLEGAL CHARACTER ROUTINE TAD LITYPE /GET LITERAL TYPE SZA CLA /NUMBER-SIGN ALLOWS EITHER TAD TMP /ADD ON RBRAK FLAG OR RPARN 0 SMA SZA CLA /SKIP IF NUMBER-SIGN OR MATCHING TYPE JMP I BDCH/[ILLCHR] /BRANCH TO ILLEGAL CHARACTER ROUTINE NL7777 /SET AC FOR DCA LITSWT /CLOSEOUT INDICATOR DCA CHAR /PREVENT SCANNING PROBLEMS JMP I PEOS/[EOS] /NOW CLOSE OUT THE SUB-EXPRESSION / "SKIP" PSEUDO-OP PROCESSOR. XSKIP, JMS I EXPR/[EXPR] /GET THE ARGUMENT NL0001 /WASN'T ANY, ASSUME ONE TAD RESULT /GET RESULT SLNZP3, CMA /**** NOT /N **** NL7777 DCA I TSPACE-JMSI /SAVE AS COUNT DCA BUFSW /HIDE SOURCE LINE ISZ I TSPACE-JMSI /DONE ENOUGH? TAD LSTSW /IS LISTING ALLOWED? SNA CLA /SKIP IF SO JMP I PSDRET/[XPSDRET]/JUMP IF NOT JMS I PCRLF/[XPCRLF] /DO A , JMP .-5 /TRY AGAIN CHKSTN, .-. /CHECK IF STATEMENT NUMBER NEEDED ISZ I PSTSW/(STSW) /IS IT NEEDED? JMP CHSTNXT /NO, JUST MOVE OVER TAD DIGPT /YES, SETUP THE DCA TXR /DIGIT POINTER TAD I TXR /GET A DIGIT SPA /END OF DIGITS? JMP CHSTND /YES, FINISH UP JMS I P6CH/[XP6CH] /NO, PRINT IT JMP .-4 /GO GET ANOTHER DIGIT CHSTND, CLA /CLEAN UP CHSTNXT,JMS I GETCOL/[XGETCOL]/GET TO -10 /COLUMN 8 JMP I CHKSTN /RETURN XTESTL, .-. /CLASSIFY NEXT CHARACTER TESTLI, JMS I GCH/[XGCH] /GET A CHARACTER SNA /? JMP I PEOS/[EOS] /YES, FINISH UP STATEMENT TAD M32/[-"Z!300] /COMPARE TO A LETTER SPA SNA CLA /SKIP IF NOT ALPHA JMP LETTER /JUMP IF ALPHA TAD CHAR /\ TAD TRATBL/(XTRATAB)/ >SETUP TABLE BRANCH DCA TMP // TAD I TMP /GET ADDRESS DCA TMP /STASH IT JMP I TMP /BRANCH THERE LETTER, ISZ XTESTL /BUMP RETURN FOR ALPHA DIGIT, JMP I XTESTL /RETURN IMMEDIATELY IF A DIGIT DIGPT, DIGS-1 /**** RELOCATE **** LITNBL, ILLCHR /**** /Q OR /O **** LITMORE (RELOCATED) PSTSW, STSW /POINTER TO STATEMENT NEEDED SWITCH TRATBL, XTRATAB /TRANSLATE TABLE POINTER ZBLOCK .&7600+101-. /EMPTY SPACE! / FURTHER ASSEMBLY INITIALIZATION. / THIS SPACE WILL BE USED FOR CURRENT PAGE LITERALS (IF ENABLED). / TEST FOR CHAINING OPTIONS USING THE FOUR PAGES (000200-001177) STILL / AVAILABLE AT THIS POINT AS A BUFFER. WHEN DONE, LOAD IN THE OVERLAY / CONTAINING THE ASSEMBLER CODE NORMALLY FOUND THERE. / THE CONSOLE OVERLAY TEST IS LOCATED ON THE SAME PAGE AS THE LPT: TEST CODE. / THIS IS DONE TO HELP THE LPT: CODE ACCESS THE LOGICAL I/O WORDS NEEDED / FOR THE LOGICAL LINEPRINTER TEST. HOWEVER, WE TEST FOR THE OVERLAY HERE / FIRST BECAUSE WE MIGHT HAVE TO COMPLAIN ABOUT A SYSTEM CATALOG LOOKUP / FAILURE ON THE SYSTEM CONSOLE! CHKCONS,JMS I (CONTEST) /ENABLE POSSIBLE CONSOLE OVERLAY NOW /IN CASE OF CHAINING LOOKUP FAILURES TESTEM, TAD I NM2/[SWMX] /GET /M-/X SWITCHES SMA CLA /SKIP IF /M SET JMP TESTGE /JUMP IF /M NOT SET JMS I (SYSLOOK) /LOOKUP TEXT "MAP";0 /BITMAP SYSTEM PROGRAM JMP BSET /SET /B SWITCH IF FOUND TESTGE, TAD I NM1/[SWAL] /GET /A-/L SWITCHES AND L40/[40] /JUST /G SWITCH SNA CLA /SKIP IF SET JMP CODELOD /JUMP IF NOT SET JMS I (SYSLOOK) /LOOKUP TEXT "BIN";0 /BINARY LOADER SYSTEM PROGRAM BSET, JMS SETB /SET /B SWITCH IF FOUND CODELOD,JMS I SYSIOP/(SYSIO) /CALL I/O ROUTINES ATOM /OVERLAY LOWEST ADDRESS ASMFUN, ASMSIZE^100+.-. /UNIT BITS WILL BE FILLED IN ASMBLK /RELATIVE BLOCK; WILL BE ADJUSTED TAD I NM1/[SWAL] /GET /A-/L SWITCHES AND (2003) /JUST /B, /K, /L SWITCHES SYSIOP, SZA CLA /SKIP IF NONE SET DCA I (PAS2ZAP) /ALLOW PASS TWO IF ANY SET TAD I NM1/[SWAL] /GET /A-/L SWITCHES RTL /B SWITCH TO LINK SZL CLA /SKIP IF NO BINARY DCA I (REMOVB) /PREVENT "ENDBIN" DESTRUCTION IF /B SET SNL /SKIP IF /B SWITCH SET DCA I (NOBNZP) /PREVENT BINARY IF /B NOT SET TAD I NM1/[SWAL] /GET /A-/L SWITCHES AND L4/[4] /JUST /J SWITCH SNA CLA /SKIP IF SET JMP I (TSTNOT) /JUMP IF NOT SET TAD (SZA) /GET "SZA" INSTRUCTION DCA I (ZERSWT) /PREVENT EXTRA ZERO WORD GENERATION JMP I (TSTNOT) /CONTINUE THERE SETB, .-. /SET /B SWITCH ROUTINE TAD I NM1/[SWAL] /GET /A-/L SWITCHES CLL RTL /B SWITCH TO LINK STL RTR /SET IT AND MOVE BACK DCA I NM1/[SWAL] /STORE THEM ALL BACK JMP I SETB /RETURN PAGE / ZBLOCK 77 /CURRENT PAGE LITERALS HERE CPLBEG= . /END OF PREVIOUS PAGE USED FOR CURRENT PAGE LITERALS IFNZRO 2000-. INSM, .-. /LOOKUP A SYMBOL ROUTINE CMA /SETUP "DO NOT ENTER SYMBOL" SWITCH DCA INSMTMP /STASH IT FOR LATER TAD NM1 /ARE WE TRYING TO LOOK UP A NULLNESS? SNA CLA /SKIP IF NOT JMP LMZAP8 /RETURN TO CALLER IF SO TAD MSTSIZ /SETUP REHASH DCA RHSHCT /LOOP COUNTER TAD NM1 /\ CLL RTL / \ TAD NM2 / \ RTL / >HASH THE SYMBOL TO A VALUE TAD NM3 / / RTL / / TAD NM1 // SRCHL, STL /\ TAD MSTSIZ / \ SNL / \CALCULATE SYMNUM MODULO JMP .-3 / /THE SYMBOL TABLE SIZE TAD STSIZE / / DCA SYMNUM // JMS I SETSYM/[XSETSM] /SETUP SYMBOL POINTER AND FIELD TAD I SXR /PICK UP FIRST WORD OF SYMBOL DCA NMFLGS /AND SAVE IT FOR LATER TAD L1777/[1777] /SETUP MASK AND NMFLGS /GET FIRST 2 CHARACTERS OF SYMBOL SNA /SKIP IF IT'S A SYMBOL JMP ENTSYM /ENTER NEW SYMBOL IF IT'S A HOLE (MAYBE) CIA /SETUP FOR COMPARISON TAD NM1 /COMPARE FIRST 2 CHARACTERS OF SYMBOL SZA CLA /SKIP IF THEY MATCH JMP REHASH /ELSE FIND A NEW SLOT NL3777 /SETUP MASK BITS AND I SXR /GET NEXT 2 CHARACTERS CIA /SETUP FOR COMPARISON TAD NM2 /COMPARE NEXT 2 CHARACTERS SZA CLA /SKIP IF THEY MATCH JMP REHASH /ELSE FIND A NEW SLOT NL3777 /SETUP MASK BITS AND I SXR /GET LAST PART OF SYMBOL CIA /SETUP FOR COMPARISON TAD NM3 /COMPARE LAST 2 CHARACTERS SZA CLA /SKIP IF THEY MATCH JMP REHASH /ELSE FIND A NEW SLOT TAD I SXR /GET SYMBOLS VALUE DCA SVAL /AND PASS IT BACK TO CALLER TAD NMFLGS /GET FLAG BITS INXIT, AND L6000/[6000] /**** /L AND /X AND PASS 2 **** JMP I CRZAPA CRZAPA, CDF 00 /**** /L AND /X AND PASS 2 **** CREFSYM (RELOCATED) LMZAP8, DCA NMFLGS /**** /8 OR /9 **** JMP I LMZAP9 LMZAP9, JMP I INSM /**** /8 OR /9 **** LNCSYM (RELOCATED) ENTSYM, ISZ INSMTMP /SHOULD WE ENTER THE NEW SYMBOL? JMP INXIT /NO, SO JUST EXIT (WITH SYMNUM SET) JMS I SETSYM/[XSETSM] /SETUP SYMBOL POINTER AND FIELD TAD NM1 /\ DCA I SXR / \ TAD NM2 / \ENTER SYMBOL IN DCA I SXR / /EMPTY SLOT TAD NM3 / / DCA I SXR // TAD LOCNTR /PUT LOCATION COUNTER IN VALUE DCA I SXR /SLOT IN CASE IT'S UNDEFINED TAD LOCNTR /GET SYMBOL'S CURRENT VALUE DCA SVAL /AND RETURN IT TO CALLER JMP INXIT /NOW RETURN WITH FLAGS CLEARED REHASH, CDF 00 /MAKE SURE TAD SYMNUM /\ IAC / \REHASH TO A NEW ISZ RHSHCT / /SYMBOL NUMBER JMP SRCHL // JMS I ERR/[XERR] /IF WE HASHED THROUGH THE ENTIRE ST /SYMBOL TABLE, THEN IT'S FULL JMP I L7600/[SBOOT] /RETURN TO THE MONITOR RHSHCT, .-. /REHASH LOOP COUNT STSIZE, .-. /SYMBOL TABLE SIZE INSMTMP,.-. /TEMPORARY XTEOS, .-. /TEST FOR SEMICOLON OR () TAD CHAR /GET LATEST CHARACTER SZA /? TAD SEMICK/(-";!200)/IS IT A SEMICOLON? SNA CLA /SKIP IF NEITHER ISZ XTEOS /BUMP IF EITHER JMP I XTEOS /RETURN SEMICK, -";!200 /CONVERSION CONSTANT / "FIXMRI" PSEUDO-OP PROCESSOR. MAKMRI, NL2000 /FORCE ON DCA FIXMRF /MRI BIT DCA I PTNREG/[XPTNREG]/RESET CALLER JMS I EXPR/[XEXPR] /SCAN IT OFF JMP FMRIOK /PROBABLY OK MRIERR, JMS I ERR/[XERR] /COMPLAIN FI /OF FIXMRI ABUSE JMP .+5 /MUST CLEAN UP FMRIOK, TAD I PTNREG/[XPTNREG]/GET LAST CALLER TAD MRICON/(-MRILOC)/COMPARE TO CORRECT VALUE SZA CLA /SKIP IF OK JMP MRIERR /BARF DCA FIXMRF /CLEAR FLAG DCA I PTNREG/[XPTNREG]/PRESET CALLER FOR NEXT JMP I PSDRET/[XPSDRET]/RETURN MRICON, -MRILOC /MAGIC VALUE WHEN CALLED CORRECTLY / "XLIST" PSEUDO-OP PROCESSOR. XLISTI, JMS I EXPR/[XEXPR] /GET ARGUMENT TAD LSTSW /IF NO EXPRESSION FLIP CURRENT VALUE TAD RESULT /COMPARE TO RESULT SNA CLA /IF ZERO THEN TAD LSTWD /LIST IF THERE IS ANY LISTING AT ALL DCA LSTSW /STORE VALUE DCA BUFSW /DO NOT PRINT THE LINE JMP I PSDRET/[XPSDRET]/RETURN / "ZBLOCK" PSEUDO-OP PROCESSOR. ZBLK, JMS I EXPR/[XEXPR] /GET ARGUMENT ISZ UNDFLG /THIS WILL REPORT THE ERROR JMS I PUOCHK/(UOCHEK) /CHECK IF ARGUMENT IS UNDEFINED TAD RESULT /GET RESULTANT ARGUMENT SNA /SKIP IF ANY JMP I PSDRET/[XPSDRET]/DO NOTHING ON ZERO ARGUMENT CIA /INVERT DCA OPSW /SAVE AS COUNTER TAD LSTSW /GET LISTING STATUS PUSH /SAVE IT JMS I PUTWD/[XPUTWD] /OUTPUT A ZERO WORD DCA LSTSW /TURN OFF FURTHER LISTING ISZ OPSW /DONE ENOUGH YET? JMP .-3 /NO, GO BACK POP /GET OLD LISTING STATUS DCA LSTSW /RESTORE IT JMP I PSDRET/[XPSDRET]/RETURN PUOCHK, UOCHEK /POINTER TO UNDEFINED ORIGIN CHECK CRFUN, CRFSIZE^100+.-. /THESE ARE HERE FOR BENEFIT CRFOVB, CRFBLK /OF SYMBOL TABLE OVERLAY PAGE XSETSM, .-. /SETUP SYMBOL POINTER AND FIELD ROUTINE CLA CLL /CLEAR DIRTY AC AND LINK DCA SYMFLD /CLEAR FIELD TAD SYMNUM /PICK UP SYMBOL NUMBER TAD SYMS4K /CHECK IF SYMBOL IS IN FIELD 0 USE4K, SKP /**** USING FIELD 0 **** SNL JMP .+6 /JUMP IF IT IS ISZ SYMFLD /BUMP TO NEXT FIELD STL /\ TAD L6000/[-2000] / \SEE IF SYMBOL BELONGS SNL / /IN THIS FIELD JMP .-4 // CLL RTL /\ DCA SXR / \ TAD SYMFLD / \ SZA CLA / \CREATE ADDRESS OF SYMBOL-1 TAD L200/[200] / /IN THE CALCULATED FIELD TAD L7576/(7576) / / TAD SXR / / DCA SXR // JMS XSTFLD /NOW GO SET THE DATA FIELD JMP I XSETSM /AND RETURN XSTFLD, .-. /SET SYMBOL DATA FIELD ROUTINE TAD SYMFLD /GET THE DATA FIELD SNA /SKIP IF NOT FIELD 0 JMP I XSTFLD /JUST RETURN IF FIELD 0 CLL RTL /\ RAL / \SETUP THE TAD GETSM1/(CDF 00)/ /CDF INSTRUCTION DCA .+1 // CDF 00+.-. /WILL CONTAIN THE CORRECT FIELD JMP I XSTFLD /AND RETURN / "SEGMNT" PSEUDO-OP PROCESSOR. XSGMNT, JMP I .+1 /CONTINUE THERE SEGMENT /**** RELOCATE **** L7576, 7576 /CONSTANT 7576 SYMFLD, .-. /HOLDS SYMBOL'S DATA FIELD SYMS4K, 0 /-NUMBER OF SYMBOLS IN FIELD 0 GSADJ, .-. /GETSYM ADJUSTMENT FACTOR GETSM, .-. /GET NEXT SYMBOL ROUTINE SNA CLA /SKIP IF FIRST TIME CALL JMP GETSM0 /JUMP IF WE WANT NEXT SYMBOL DCA SYMNUM /SETUP INITIAL SYMBOL NUMBER JMS I SETSYM/[XSETSM] /SETUP SYMBOL POINTER AND FIELD RDF /GET STARTING DATA FIELD SNA CLA /SKIP IF NOT FIELD 0 TAD L200/[-7600] /GET FIELD 0 LIMIT FACTOR DCA GSADJ /SAVE RDF /AGAIN TAD GETSM1 /MAKE INTO CDF INSTRUCTION DCA GSCDF /STASH IT TAD MSTSIZE /CALCULATE THE DCA XPTNREG /SYMBOL COUNT JMP GSCDF /GO GET FIRST SYMBOL GETSM0, ISZ XPTNREG /SEE IF ANY MORE SKP /SKIP IF THERE ARE JMP GETSM1 /JUMP IF NO MORE TAD GSADJ /GET ADJUSTMENT FACTOR TAD SXR /ADD ON SYMBOL POINTER CMA /INVERT AI7640, SZA CLA /SKIP IF NEW FIELD JMP GSCDF /JUMP IF NOT TAD GS10/(10) /GET FIELD BUMP VALUE TAD GSCDF /ADD ON OLD FIELD DCA GSCDF /PUT IT BACK DCA GSADJ /CLEAR ADJUSTMENT FACTOR FOR NON-ZERO FIELDS NL7777 /RESET DCA SXR /SYMBOL POINTER ISZ SYMFLD /MAKE SETFLD WORK GSCDF, CDF 00 /GET INTO CORRECT FIELD TAD I SXR /GET FIRST WORD OF SYMBOL SZA /SKIP IF IT'S A HOLE JMP .+5 /JUMP IF IT'S A SYMBOL TAD SXR /BUMP TAD L3/[3] /TO DCA SXR /NEXT JMP GETSM0 /TRY AGAIN DCA NM1 /STASH FIRST WORD OF SYMBOL TAD NM1 /GET IT BACK GS10, AND L6000/[6000] /JUST SYMBOL TYPE FLAGS DCA NMFLGS /STASH THEM TAD I SXR /\ DCA NM2 / \NOW STASH REST TAD I SXR / /OF THE SYMBOL DCA NM3 // TAD I SXR /GET SYMBOL'S VALUE DCA SVAL /AND STASH IT ISZ GETSM /PREPARE FOR SKIP RETURN GETSM1, CDF 00 /MAKE SURE JMP I GETSM /AND NOW RETURN XPRTSM, .-. /PRINT OUT SYMBOL IN NM1-3 TAD NM1 /GET FIRST WORD AND L1777/[1777] /JUST SYMBOL BITS JMS I P45CH/[XP45CH] /PRINT IT IN RADIX 45 NL3777 /SETUP CHARACTER MASK AND NM2 /GET SECOND PAIR JMS I P45CH/[XP45CH] /PRINT IT NL3777 /SETUP CHARACTER MASK AND NM3 /GET FINAL PAIR JMS I P45CH/[XP45CH] /DO FINAL PRINTING JMP I XPRTSM /RETURN TO CALLER XPTNREG,.-. /NON-REGULAR PRINT DCA XSETSM /SAVE PASSED ARGUMENT TAD LSTSW /IS LISTING ON? SNA CLA /SKIP IF YES JMP PTNXIT /NO, FINISH IT JMS I BEGLINE/[XBGLIN]/GET TO NEW LINE IN CASE MULTI-STATEMENT JMS I PCHKSTN /CHECK IF STATEMENT NUMBER NEEDED HERE JMS I GETCOL/[XGETCOL]/GET TO APPROPRIATE COLUMN EXZAP2, -7 /**** /L AND /X **** -17 TAD XSETSM /GET ARGUMENT BACK PTNXIT, JMS I PRTFLD/[XPRFLD] /GO PRINT IT JMP I XPTNREG /RETURN / SINGLE QUOTE CHARACTER "'" PROCESSOR. QUOTE, JMS I CHKLST/[XCHKLST]/CHECK IF LEGAL HERE JMS I GCH/[XGCH] /GET NEXT CHARACTER JMS I ROR6/[XROR6] /SHIFT IT RAR /LEFT SIX DCA I CHKLST/[XCHKLST]/SAVE IT JMS I GCH/[XGCH] /GET ANOTHER ONE TAD I CHKLST/[XCHKLST]/ADD ON PREVIOUS DCA SVAL /SAVE IT JMP SCRESET /GO PROCESS NEXT ELEMENT / "ASMIFM" PSEUDO-OP PROCESSOR. MASSIF, TAD L40/[SPA-SNA] /SETUP SPA CLA / "ASMIFZ" PSEUDO-OP PROCESSOR. ZASSIF, TAD GS10/(SNA-SZA) /SETUP SNA CLA / "ASMIFN" PSEUDO-OP PROCESSOR. NASSIF, TAD AI7640/(SZA CLA)/SETUP SZA CLA JMP I .+1 /CONTINUE THERE ASMCOM /**** RELOCATE **** / "DTORG" PSEUDO-OP PROCESSOR. XDTORG, JMP I .+1 /CONTINUE THERE XDTOR2 /**** RELOCATE **** PAGE / ALL CODE PAST HERE IS CONSIDERED RESIDENT WITH RESPECT TO THE VARIOUS / OVERLAYS THAT CAN COME IN BEFORE THIS POINT. / BINARY OUTPUT ROUTINE. BINOUT, .-. /BINARY FILE OUTPUT ROUTINE BININ, DCA I BXR /PUT OUTPUT WORD INTO BUFFER TAD RELBTS /GET FLAG BITS CLL RTL /SHIFT THEM TAD I BINOUT /BRING IN LATEST ONES DCA RELBTS /PUT THEM BACK ISZ WRDCNT /DONE 6 WORDS YET? JMP I BINOUT /NO, RETURN TAD L7772/[-6] /RESET WORD DCA WRDCNT /COUNT TAD L7772/[-6] /\ TAD BXR / \ DCA BINWRT / >PUT IN FINAL VALUE OF FLAG BITS TAD RELBTS / / DCA I BINWRT // DCA RELBTS /ZERO OUT FLAG WORD ISZ BXR /BUMP PAST FLAG WORD ISZ GRPCNT /DONE 22 GROUPS YET? JMP I BINOUT /NO, RETURN TAD L7756/[-22] /RESET GROUP DCA GRPCNT /COUNT ISZ RCDCNT /DONE 20 BLOCKS YET? JMP BWRITE /NO, JUST WRITE OUT A FEW TAD L7774/[7774] /\ AND I EOFGRP / \FORCE ON IAC / /END OF FILE DCA I EOFGRP // JMS BINWRT /WRITE OUT A FULL BLOCK JMS BGETFL /SETUP NEXT FILE TAD I EOFWRD /GET OVERFLOWING WORD JMP BININ /START OVER BWRITE, JMS BINWRT /WRITE OUT A FULL BLOCK JMP I BINOUT /RETURN BEOTAPE,.-. /BINARY CLOSE ROUTINE JMP I BEOTAPE /\**** PASS 2 AND /B **** TAD WRDCNT CIA / \ TAD L7772/[-6] / >SETUP POINTER TO FINAL FLAG WORD TAD BXR / / DCA BINWRT // TAD RELBTS /\ CLL RTL / \ IAC / >CIRCULATE FLAG BITS TO FINAL STATE WITH ON ISZ WRDCNT / / JMP .-3 // DCA I BINWRT /SAVE FINAL FLAG WORD TAD BEOTAPE /POINT BINARY DCA BINWRT /TO WHO CALLED US JMP BEOTIN /FALL INTO BINWRT ROUTINE BINWRT, .-. /PAGE CLOSING ROUTINE ISZ BXR /BUMP TO ISZ BXR /BLOCK END ISZ BUFCNT /DONE 2 YET? (4 IF 8K) JMP I BINWRT /NO, JUST RETURN BEOTIN, NL7776 /**** 8K ZAP **** TAD L7774/[-4] DCA BUFCNT /RESET BUFFER COUNT JMS I BSYSIO/(SYSIO) /WRITE OUT BUFFAD, BINARY /SOME BINARY BFUN, 2^100+WRITE+.-. /4^100+WRITE+.-. IF 8K BRECRD, .-. /BLOCK NUMBER B8KZAP, NL0002 /**** 8K ZAP **** TAD L4/[4] TAD BRECRD /ADD IN CURRENT BLOCK NUMBER DCA BRECRD /PUT BACK UPDATED VALUE TAD BUFFAD /RESET INDEXING DCA BXR /BUFFER POINTER JMP I BINWRT /RETURN BGETFL, .-. /GET A BINARY FILE ROUTINE JMP I BGETFL /**** PASS 2 **** TAD BUFFAD DCA BXR /SETUP BUFFER INDEX TAD L7774/[-6+2] /SETUP INITIAL DCA WRDCNT /WORD COUNT TAD L7756/[-22] /SETUP INITIAL DCA GRPCNT /GROUP COUNT TAD (-20) /SETUP INITIAL DCA RCDCNT /PAGE COUNT TAD L200/[200] /DEFAULT ORIGIN DCA I BXR /IS FIRST IN FILE TAD BLOCNTR /CURRENT OUTPUT LOCATION DCA I BXR /IS NEXT IN FILE TAD IFLAGS/[12] /INDICATE TWO DCA RELBTS /ORIGIN SETTINGS ISZ OUTCNT /BUMP TARGET COUNT TAD L7770/[7770] /FILE BLOCK MASK AND I OUTPTR /JUST FILE BITS SNA /ANY? JMP BOVFL /NO, BARF DCA BRECRD /SAVE IT TAD I OUTPTR /GET OUTPUT ARGUMENT AGAIN AND L7/[7] /JUST UNIT BITS TAD BFUNCON /ADD ON WRITE CONSTANT DCA BFUN /SAVE IT IN CALL ISZ OUTPTR /BUMP TO NEXT FILE BN8KZP, NL7776 /**** 8K ZAP **** TAD L7774 DCA BUFCNT /RESET BUFFER COUNT JMP I BGETFL /RETURN BOVFL, JMS I ERR/[XERR] /COMPLAIN OF BO /BINARY OVERFLOW JMP I L7600/[SBOOT] /BARF! WRDCNT, .-. /WORD COUNT GRPCNT, .-. /GROUP COUNT EOFGRP, BINARY+367 /**** 8K ZAP **** BINARY+767 EOFWRD, BINARY+375 /**** 8K ZAP **** BINARY+775 OUTCNT, -2 /**** /D **** -3 **** OUTPUT FILES **** OTHER RELBTS, .-. /BINARY FLAGS WORD BFUNCON,2^100+WRITE /**** 8K ZAP **** 4^100+WRITE / "ENDBIN" PSEUDO-OP PROCESSOR. / DESTROYED IF NOT /B. XENDBIN,JMS BEOTAPE /CLOSE BINARY FILE JMS BGETFL /GET NEXT FILE JMP I PSDRET/[XPSDRET]/RETURN CTLCTST,.-. /<^C> TEST ROUTINE BSYSIO, SZA CLA /THIS CLEARS THE AC INCHAR, .-. /THIS CAN BE SKIPPED CHKKSF, KSFIOT /**** CONSOLE **** CIF MCS+10 CHKJMP, JMP I CTLCTST /**** CONSOLE **** JMS INCON CHKKRS, KRSIOT/OR KRBIOT /**** CONSOLE **** JMP I CTLCTST AND L177/[177] /JUST SEVEN BITS DCA INCHAR /SAVE IT NL7775 /-3 TAD INCHAR /COMPARE TO LATEST CHARACTER SNA /SKIP IF NOT <^C> ISZ I (SCRSIZE) /ELSE SET SOFT INDICATOR SPA SNA CLA /SKIP IF <^D> OR GREATER JMP I L7600/[SBOOT] /ELSE GOODBYE CHKKCC, KCCIOT/OR 0000 /**** CONSOLE **** 0000 TAD INCHAR /GET THE CHARACTER JMP I CTLCTST /RETURN / "ASMSKP" PSEUDO-OP PROCESSOR. SKPASM, JMP I .+1 /CONTINUE THERE SKIPASM /**** RELOCATE **** PAGE / COMMA "," PROCESSOR. COMMA, TAD PRVCHR /SYMBOL SCANNED? SNA /SKIP IF NOT TAD LBLSWT /TAG ALLOWED? SNA CLA /SKIP IF EITHER ON TAD NM1 /IS THIS A SYMBOL? SNA CLA /SKIP IF SO JMP I BDCH/[ILLCHR] /JUMP IF ANY CONDITION FAILED NL7777 /ALLOW UNDEFINED JMS I OPVAL/[XOPVAL] /EVALUATE SYMBOL COMADR, NOP /DON'T CARE TAD NMFLGS /HAD BETTER BE UNDEFINED SZA /ELSE JMP DTERR /COMPLAINTS WILL BE MADE BOS, JMS I SETFLD/[XSTFLD] /GET TO CORRECT FIELD NL7775 /BACKUP SYMBOL TAD SXR /TABLE POINTER DCA TMP /SAVE IT TAD I TMP /GET FIRST WORD AND L1777/[1777] /REMOVE OLD FLAG BITS TAD L2000/[2000] /MAKE IT DEFINED DCA I TMP /STORE INTO TABLE ISZ TMP /BUMP TO ISZ TMP /"DEFINED BY COMMA" WORD TAD I TMP /GET THIRD WORD RAL /MOVE OVER STL RAR /FORCE ON COMMA BIT DCA I TMP /STORE INTO TABLE ISZ TMP /BUMP TO VALUE WORD TAD LOCNTR /GET CURRENT LOCATION DCA I TMP /STORE AS VALUE OF SYMBOL CDF 00 /MAKE SURE TAD NM1 /GET LATEST FIRST DCA SM1 /SAVE IT TAD NM2 /GET LATEST SECOND DCA SM2 /SAVE IT TAD NM3 /GET LATEST THIRD DCA SM3 /SAVE IT TAD LOCNTR /GET LOCATION COUNTER DCA SM4 /SAVE IT ALSO TAD L40/[" &77] /GO BACK TO DRIVER JMP SCRESET /OF THIS MESS XROR6, .-. /ROTATE RIGHT SIX BITS ROUTINE CLL RTR /\ RTR / >ROTATE RIGHT SIX RTR // JMP I XROR6 /RETURN XERR, .-. /ERROR ROUTINE DCA I TESTL-JMSI/[XTESTL] /SAVE A POSSIBLE ARGUMENT TAD LSTSW /GET CURRENT LIST SWITCH PUSH /SAVE IT PR53, ISZ LSTSW /FORCE LIST ON JMS I BEGLINE/[XBGLINE] /DO A , IF NOT AT BEGINNING OF LINE TAD I XERR /GET ERROR PAIR ATCOD, AND L1777/[1777] /JUST ALPHA BITS JMS I P45CH/[XP45CH] /**** /L AND /X AND PASS 2 **** JMP I CRERRP CRERRP, DCA RCHAR /**** /L AND /X AND PASS 2 **** CRFERR (REL.) TAD I XERR /GET ARGUMENT RAL /PUT FLAG BITS INTO LINK AND SIGN SMA CLA /SKIP IF ERRSYM ON JMP ERRLNK /JUMP IF NOT JMS I P6CH/[XP6CH] /PRINT OUT A JMS I PRTSYM/[XPRTSM] /PRINT OUT THE LATEST SYMBOL SKP /DON'T TEST ERROCT BIT ERRLNK, SNL /ERROCT BIT ON? JMP ERRNONE /NO, USE NORMAL OUTPUT JMS I P6CH/[XP6CH] /PRINT OUT A TAD I TESTL-JMSI/[XTESTL] /GET THE ARGUMENT BACK JMS I PRTFLD/[XPRFLD] /PRINT IT OUT IN OCTAL ERRNONE,JMS I P6CH/[XP6CH] /PRINT OUT A ERRZAP, TAD ATCOD/("A-300^45+"T-300)/**** PASS 2 AND /L **** JMP ERRXIT JMS I P45CH/[XP45CH] /PRINT IT TAD SM1 /GET FIRST PAIR SNA CLA /IS IT A SYMBOL AT ALL? JMP NONSYM /JUMP IF NOT JMS I P6CH/[XP6CH] /PRINT A TAD SM1 /GET FIRST PAIR JMS I P45CH/[XP45CH] /PRINT THEM TAD SM2 /GET SECOND PAIR JMS I P45CH/[XP45CH] /PRINT THEM TAD SM3 /GET THIRD PAIR JMS I P45CH/[XP45CH] /PRINT THEM TAD PR53/("+&77) /GET A PLUS IF APPROPRIATE DCA FCHAR /PUT IN FRONT TAD SM4 /GET LAST KNOWN LOCATION CIA /SUBTRACT FROM CURRENT TAD LOCNTR /NOW HAVE OFFSET FROM IT SNA /ZERO OFFSET? JMP .+3 /YES, DON'T PRINT IT JMS I PRTFLD/[XPRFLD] /PRINT THE OFFSET SKP /DON'T PRINT A JMS I P6CH/[XP6CH] /PRINT A TAD PR50/("(&77) /GET A LEFT PARENTHESIS DCA FCHAR /PUT IN FRONT TAD COMMA/(")&77) /GET A RIGHT PARENTHESIS DCA RCHAR /PUT IN BACK NONSYM, TAD LOCNTR /GET LOCATION COUNTER ITSELF JMS I PRTFLD/[XPRFLD] /GO PRINT IT ERRXIT, ISZ ERRTOT /ONE MORE ERROR JMS I PCRLF/[XPCRLF] /DO A , ISZ XERR /SKIP AROUND ARGUMENT POP /GET OLD VALUE OF SWITCH DCA LSTSW /RESTORE IT JMP I XERR /AND RETURN DTERR, SPA CLA /MRI OR PSEUDO-OP? JMP I BDCH/[ILLCHR] /YES, COMPLAIN TAD SVAL /GET CURRENT VALUE CIA /INVERT TAD LOCNTR /COMPARE TO REDEFINITION ATTEMPT LMZAPJ, NOP /**** (/8 OR /9) AND LMODE **** AND L1777/[1777] SNA CLA /SKIP IF DIFFERENT JMP BOS /NO PROBLEMS IF SAME VALUE JMS I ERR/[XERR] /ONCE IS TOO MUCH PR50, DT /COMPLAIN OF THE "DT"'S JMP BOS /MEET THE NEW; SAME AS THE OLD XBGLIN, .-. /GET TO BEGINNING OF LINE ROUTINE TAD COLCT /GET CURRENT COLUMN COUNT SZA CLA /SKIP IF ALREADY ZERO JMS I PCRLF/[XPCRLF] /DO A , JMP I XBGLIN /RETURN /SLLRL4,XGBLURB /**** RELOCATE **** INTFPT, SFILES /FILE POINTER RESET VALUE; UPDATED BY OUTPUT FILES SM1, .-. /SYMBOL SM2, .-. /STORED SM3, .-. /HERE SM4, .-. /VALUE HERE LNEXT, SBOOT /**** /F OR /G OR /H OR /I OR /M OR /R OR /V OR /W OR /Z /OR EQUALS PARAMETER PASSED **** SLOAD / DEFAULT OUTPUT FILE LIST. BDFLST, BINADR+.-. /BOOTSTRAP UNIT BITS FILLED IN /**** /U **** XOR-ED WITH 0001 DOLBLK+.-. /BOOTSTRAP UNIT BITS FILLED IN /**** /D AND /U **** XOR-ED WITH 0001 .-. /MAY BE WIPED OUT AT END OF ASSEMBLY! PAGE XPUTFLD,.-. /FIELD SETTING OUTPUT DCA XP45CH /SAVE PASSED VALUE ISZ DUMPSW /BUMP DUMP LITERALS SWITCH JMS I PRGLIT /DUMP LITERALS TAD I OPVAL/[XOPVAL] /GET FIELD BITS NUMBER JMS I PTNREG/[XPTNREG]/PRINT IT JMS I PRTBUF/[XPRTBF] /PRINT THE BUFFER TAD PUNSW /ARE WE PUNCHING? SNA CLA /SKIP IF SO JMP I XPUTFLD /JUMP IF NOT TAD XP45CH /RESTORE VALUE JMS I PUNCH /PUNCH IT 0003 /FIELD BITS JMP I XPUTFLD /RETURN XPUTORG,.-. /ORIGIN OUTPUT ROUTINE DCA I ORSYM/[XORSYM] /SAVE PASSED VALUE TAD L52/("*&77) /SETUP DCA FCHAR /"*" TAD I ORSYM/[XORSYM] /GET THE PASSED ORIGIN JMS I PTNREG/[XPTNREG]/GO PRINT IT TAD PUNSW /GET CURRENT PUNCH MODE SNA CLA /ARE WE PUNCHING? JMP I XPUTORG /NO, RETURN TAD RLOC8 /GET RELOCATION FACTOR TAD I ORSYM/[XORSYM] /GET CURRENT VALUE DCA BLOCNTR /SETUP REAL OUTPUT ORIGIN TAD BLOCNTR /GET THE VALUE OF ORIGIN JMS I PUNCH /GO PUNCH IT 0002 /THESE ARE THE FLAG BITS JMP I XPUTORG /RETURN XPUTWD, .-. /OUTPUT A WORD ROUTINE DCA I ORSYM/[XORSYM] /SAVE PASSED WORD PUTZAP, TAD LSTSW /**** /Q **** JMS I PLIT2 SNA CLA /SKIP IF LISTING ON JMP NOPUN1 /**** PASS 2 **** JMP NOLS1 TAD RCHAR /SAVE POSSIBLE DCA XP45CH /QUOTE CHARACTER JMS I BEGLINE/[XBGLIN]/GET TO NEW LINE JMS I PCHKSTN /CHECK IF STATEMENT NUMBER NEEDED HERE TAD CURFLD /GET CURRENT FIELD RAR /MOVE DOWN RTR /THREE BITS AND L7/[7] /JUST HIGH-ORDER FIELD BITS TAD L60/["0&77] /MAKE IT ASCII JMS I P6CH/[XP6CH] /PRINT IT TAD CURFLD /GET CURRENT FIELD AGAIN AND L7/[7] /JUST LOW-ORDER FIELD BITS TAD L60/["0&77] /MAKE IT ASCII DCA FCHAR /SETUP FIRST CHARACTER TAD LOCNTR /\ CIA / >COMPARE LOCATION COUNTER TAD BLOCNTR // SZA CLA /SKIP IF NOT RELOCATED TAD L52/("*&77) /INDICATE RELOCATION WITH "*" DCA RCHAR /SAVE "*" OR 0000 FOR TAD LOCNTR /GET APPARENT LOCATION COUNTER JMS I PRTFLD/[XPRFLD] /GO PRINT IT TAD XP45CH /RESTORE POSSIBLE DCA RCHAR /QUOTE CHARACTER TAD I ORSYM/[XORSYM] /GET PASSED WORD JMS I PRTFLD/[XPRFLD] /GO PRINT IT NOLS1, TAD PUNSW /GET PUNCH FLAG SNA CLA /SKIP IF PUNCHING JMP NOPUN1 /JUMP IF NOT PUNCHING TAD I ORSYM/[XORSYM] /GET VALUE JMS I PUNCH /GO PUNCH IT P45TMP, 0000 /ZERO EXCEPT DURING P45CH ROUTINE ISZ BLOCNTR /BUMP OUTPUT POINTER L52, 52 /JUST IN CASE NOPUN1, ISZ LOCNTR /BUMP TO NEXT JMP I XPUTWD /RETURN JMP I XPUTWD /RETURN / POWERS OF TEN FOR DECIMAL PRINT ROUTINE. DECIMAL /MAKE IT EASIER TENS, -1000 /-1750 -100 /-144 -10 /-12 -1 /-1 0 /THIS ENDS THE LIST OCTAL /BACK TO NORMAL XP45CH, .-. /PRINT RADIX 45 PAIR ROUTINE SKP /DON'T BUMP THE FIRST TIME ISZ P45TMP /BUMP QUOTIENT TAD L7733/(-45) /SUBTRACT 45 SMA /UNDERFLOW? JMP .-3 /NO, KEEP GOING TAD L45/[45] /RESTORE LOST POWER DCA XPRFLD /SAVE AS SECOND CHARACTER TAD P45TMP /GET FIRST CHARACTER JMS PRTCH /PRINT IT TAD XPRFLD /GET SECOND CHARACTER JMS PRTCH /PRINT IT DCA P45TMP /CLEAR QUOTIENT FOR NEXT TIME JMP I XP45CH /RETURN PRTCH, .-. /PRINT RADIX 45 CHARACTERS TAD M32/[-"Z!300] /WAS IT A LETTER? SMA SZA /SKIP IF YES TAD L25/("0!100-"Z-1) /ADD ON DIGIT ADJUST TAD L32/("Z&77) /RESTORE TO SIX-BIT JMS I P6CH/[XP6CH] /GO PRINT IT JMP I PRTCH /RETURN L25, 25 /CONSTANT 0025 L32, 32 /CONSTANT 0032 L7733, 7733 /CONSTANT 7733 PUNCH, XNOPRTN /**** PASS 2 AND /B **** BINOUT PLIT2, LIT2 /**** RELOCATE **** XPRFLD, .-. /PRINT OCTAL FIELD ROUTINE DCA PRTCH /SAVE IT FOR NOW TAD LSTSW /GET CURRENT LISTING SWITCH SNA CLA /SKIP IF LISTING JMP PRFXIT /JUMP IF NOT TAD FCHAR /GET FRONTAL CHARACTER JMS I P6CH/[XP6CH] /PRINT CURFLD LOW-ORDER (0-7), "*", OR TAD L7774/[-4] /SET UP THE DCA FCHAR /DIGIT COUNT XPRTAGN,TAD PRTCH /GET NUMBER BACK RTL /ROTATE RAL /3 PLACES DCA PRTCH /SAVE IT BACK TAD PRTCH /GET IT BACK AND L3/[3] /JUST LATEST BITS RAL /GET LINK BACK AND ADJUST IT TAD L60/["0&77] /MAKE IT PRINTABLE JMS I P6CH/[XP6CH] /OUTPUT IT ISZ FCHAR /DONE ALL YET? JMP XPRTAGN /NO, GO BACK TAD RCHAR /GET ENDING CHARACTER JMS I P6CH/[XP6CH] /PRINT "*", "'", OR PRFXIT, DCA FCHAR /CLEAR OUT BOTH DCA RCHAR /CHARACTERS JMP I XPRFLD /RETURN PAGE P7CH, .-. /SEVEN-BIT ASCII PRINT ROUTINE ISZ COLCT /BUMP TO NEXT COLUMN DCA DEJECT /SAVE PASSED VALUE P7AGN, JMS CHKUP /CHECK FOR <^C>, ETC. TAD ECHOSW /GET ECHO SWITCH SPA CLA /SKIP IF ECHO ON JMP P7OFF /JUMP IF NOT TAD DEJECT /GET THE CHARACTER P7TSF, TSFIOT /**** LPT: **** LSFIOT /**** CONSOLE **** CIF MCS+10 /**** LOGLPT: **** CIF MCS+10 P7JMP, JMP P7AGN /**** LPT: **** JMP P7AGN /**** CONSOLE **** JMS OUTCON /**** LOGLPT: **** JMS OUTLPT P7TLS, TLSIOT /**** LPT: **** LLSIOT /**** CONSOLE **** JMP P7AGN /**** LOGLPT: **** JMP P7AGN P7OFF, JMS CHKUP /CHECK FOR <^C>, ETC. JMP I P7CH /RETURN CHKUP, .-. /CHECK FOR <^P>, ETC. ROUTINE JMS I (CTLCTST) /CHECK FOR <^C>, ETC. TAD L7761/[-"O!300] /COMPARE TO <^O> SNA /SKIP IF DIFFERENT JMP DOUO /JUMP IF IT MATCHES TAD L7774/[-"S+"O] /COMPARE TO <^S> SZA CLA /SKIP IF IT MATCHES JMP I CHKUP /JUMP IF IT DOESN'T JMS I (CTLCTST) /CHECK FOR <^C>, ETC. TAD (-"Q!300) /COMPARE TO <^Q> SZA CLA /SKIP IF IT MATCHES JMP .-3 /JUMP IF IT DOESN'T JMP I CHKUP /RETURN DOUO, TAD L136/("^&177) /GET AN "^" DOUO1, TSFIOT /**** CONSOLE **** CIF MCS+10 JMP DOUO1 /**** CONSOLE **** JMS OUTCON TLSIOT /**** CONSOLE **** JMP DOUO1 TAD L7761/("O-"^) /GET "O" DOUO2, TSFIOT /**** CONSOLE **** CIF MCS+10 JMP DOUO2 /**** CONSOLE **** JMS OUTCON TLSIOT /**** CONSOLE **** JMP DOUO2 NL4000 /SET INVERSION BIT TAD ECHOSW /INVERT CURRENT ECHO STATUS DCA ECHOSW /STORE BACK JMP I CHKUP /RETURN XPCRLF, .-. /MASTER END OF LINE ROUTINE NL4000 /INDICATE JMS XP6CH /GO DO , ISZ PLINCT /LINE OVERFLOW? SPA CLA /NO, THIS WILL SKIP NL7777 /SET OR DCA EJCTSW /CLEAR EJECTION SWITCH JMP I XPCRLF /RETURN XP6CH, .-. /SIX-BIT PRINT ROUTINE ISZ EJCTSW /SWITCH SET? JMP P6OK /NO, KEEP GOING PUSH /YES, SAVE PASSED ARGUMENT TAD XP6CH /GET CALLER PUSH /SAVE ALSO SLNZP8, NL7777 /**** NOT /N **** JMP NOFRM2 **** SUB-TITLES **** NL0001 JMS P4CRLF /GO DO 5 (OR 3) EXTRA , SEQUENCES LPZAP1, TAD L7772/[-6] /**** LPT: **** NL7777 DCA PLINCT /SETUP FOR HASH MARKS TAD LSEP /GET MINUS (OR ) JMS P7CH /PRINT IT ISZ PLINCT /DONE ALL YET? JMP .-3 /NO, GO BACK NOPTIT, JMS P4CRLF /**** END OF ASSEMBLY **** JMP NOFRM2+1 JMS I PRTTITLE /PRINT A TITLE LINE (IF ENABLED) JMS CRLF /**** OVERLAY SUB-TITLES **** JMP I NOFRM2 NOFRM2, JMS CRLF /**** OVERLAY SUB-TITLES **** BLBAK TAD (-67) /RESET THE DCA PLINCT /LINE COUNT NOPTT2, POP /**** END OF ASSEMBLY **** JMP I XPCRLF DCA XP6CH /RESTORE SIX-BIT CALLER POP /RESTORE AC P6OK, SNA /DO WE WANT A ? TAD L40/[" &77] /YES, MAKE IT ASCII L136, AND L77/[77] /JUST SIX-BIT SNA / NEEDED? JMP P6EOL /YES TAD L7741/[-37] /TEST FOR SNA /SKIP IF OTHERWISE JMP P6TAB /JUMP IF REALLY AND L77/[77] /REMOVE GARBAGE TAD L37/[37] /FOLD INTO SEVEN-BIT JMS P7CH /PRINT IT JMP I XP6CH /RETURN DEJECT, .-. /EJECT SETUP ROUTINE TAD LSTSW /GET LISTING STATUS SNA CLA /SKIP IF ON JMP I DEJECT /RETURN IF OFF NL7777 /SET THE DCA EJCTSW /SWITCH NL7777 /THIS WILL DCA OVFLPG /CLEAR CONTINUATION JMP I DEJECT /RETURN P6TAB, TAD L40/[" &177] /**** /T **** TAD L37/[37] JMS P7CH /PRINT IT TAD COLCT /GET COLUMN COUNT TAD L7772/[-6] /ADD ON OFFSET L117, AND L7/[7] /JUST MODULO 8 SZA CLA /AT A STOP? JMP P6TAB /**** /T **** JMP P6TAB+1 JMP I XP6CH /RETURN P6EOL, JMS CRLF /DO A , JMP I XP6CH /RETURN P4CRLF, .-. /PRINT 4 , ROUTINE TAD L7774/[-4] /BACK UP FOUR LPZAP2, TAD PLINCT /**** /T OR LPT: **** NL7777 DCA PLINCT /STORE CORRECTED AMOUNT JMS CRLF /DO A (MAYBE) AND A ISZ PLINCT /DONE YET? JMP .-2 /NO, GO BACK JMP I P4CRLF /RETURN CRLF, .-. /, ROUTINE TAD COLCT /GET CURRENT COLUMN COUNT SNA CLA /AT BEGINNING OF LINE? JMP .+3 /YES, DON'T DO A TAD L15/[15] /NO, GET CODE JMS P7CH /PRINT IT TAD L12/[12] /GET CODE JMS P7CH /PRINT IT DCA COLCT /CLEAR COLUMN COUNT JMP I CRLF /RETURN / DEFAULT SUBROUTINE TO ABSORB CALLS TO DEACTIVATED ROUTINES. XNOPRTN,.-. /DEFAULT SUBROUTINE ENTRY CLA /CLEAN UP JMP I XNOPRTN /RETURN EJCTSW, -1 /EJECT SWITCH LSEP, "-&177 /**** LPT: **** 0014 PLINCT, -1 /LINE COUNT PRTTITL,XNOPRTN /**** PASS 2 AND /N AND (/L OR /A OR /S) **** /XPBLURB (RELOCATED) PAGE IFNZRO .&177 PDLPTR, .-. /STACK POINTER / "EJECT" PSEUDO-OP PROCESSOR. XEJECT, JMS I PEJECT/[DEJECT] /SETUP AN EJECTION / "TITLE" PSEUDO-OP PROCESSOR. XTITLE, TAD CHAR /GET DELIMITER SZA CLA /? JMP I PDOTITLE /NO, GET A NEW TITLE NOTITLE,DCA BUFSW /HIDE SOURCE LINE TAD L40/[" &77] /PREVENT DCA PRVCHR /PROBLEMS TAD CHAR /GET CURRENT DELIMITER JMP OSYSIO /DON'T GET ANOTHER DECPRT, .-. /DECIMAL PRINTOUT ROUTINE SNA /NON-ZERO NUMBER REQUESTED? JMP DECNO /YES, PRINT "NO" INSTEAD OF 0 DCA TMP /SAVE THE NON-ZERO NUMBER TAD (TENS) /RESET POINTER DCA DECPTR /TO POWERS OF TEN DECLUP, DCA DECQUO /CLEAR THE QUOTIENT JMP .+3 /START THE DIVIDE OPERATION NOW DECLOP, DCA TMP /RESTORE UPDATED QUOTIENT ISZ DECQUO /BUMP DIGIT QUOTIENT TAD I DECPTR /GET NEXT POWER OF TEN SNA /END OF LIST? JMP I DECPRT /YES, WE'RE DONE CLL /CLEAR LINK NEEDED FOR TESTING LNO, TAD TMP /"N-300^45+"O-300 SZL /SKIP IF WE DIDN'T UNDERFLOW JMP DECLOP /BUMP UP QUOTIENT CLA /ALL DONE WITH THIS ONE ISZ DECPTR /BUMP POINTER TO NEXT POWER OF TEN TAD DECQUO /GET DIGIT SNA /IS IT ZERO? JMP DECLUP /YES, DON'T PRINT IT TAD L60/["0&77] /MAKE INTO ASCII DIGIT DECZAP, JMS I P6CH/[XP6CH] /**** STATISTICS PRINT TRAP **** JMP I DECPRT NL4000 /FORCE SIGNIFICENCE OF REMAINING DIGITS JMP DECLUP /DO IT AGAIN DECNO, TAD LNO/("N-300^45+"O-300) /GET "NO" JMS I P45CH/[XP45CH] /PRINT "NO" JMP I DECPRT /RETURN / MASTER STATEMENT DRIVER. NEWSTM, JMS I (CHKUP) /CHECK FOR <^C>, ETC. NL7777 /RESET THE DCA STSW /STATEMENT SWITCH NEWSTX, TAD L40/[" &77] /**** /L AND /X AND PASS 2 **** JMP I EXZAPA NEWRET, DCA CHAR /RESET CHAR AT THE BEGINNING OF A STATEMENT DCA UNDFLG /CLEAR UNDEFINED SYMBOL FLAG DCA LBLSWT /CLEAR LABEL FLAG DCA EQUSW /CLEAR EQUALS SWITCH TAD PUSHPT/(XPDLADR)/RESET DCA PDLPTR /PUSHDOWN NL7777 /RESET THE DCA ASIGN /ARITHMETIC SIGN DCA MRISW /CLEAR MRI STATE DCA MRINDS /CLEAR MRI (I) BITS JMS I EXPR/[XEXPR] /TRY TO EVALUATE JMP NEWT1 /VACUOUS EXPRESSION (MAYBE COMMENT) TAD RESULT /GET GOOD VALUE JMS I PUTWD/[XPUTWD] /GO PUT IT OUT JMP NEWT1 /TEST FOR FURTHER UNNEEDED STUFF NEWTHRW,TAD CHAR /GET THE LATEST CHARACTER TAD (-"/!200) /COMPARE TO "/" SNA CLA /SKIP IF DIFFERENT JMP THROCOMMENT /JUMP IF IT MATCHES TAD CHAR /GET THE LATEST CHARACTER TSPACE /IS IT A OR ? JMP I BDCH/[ILLCHR] /NO, GO COMPLAIN JMS I GCH/[XGCH] /GRAB A CHARACTER CLA /THROW IT AWAY NEWT1, TEOS /ANY EXTRANEOUS GARBAGE ON LINE JMP NEWTHRW /YES EAEZAP, TAD LOCNTR /**** NO EAE **** SKP MQL /PUT BACK INTO MQ JMS I PRTBUF/[XPRTBF] /GO PRINT LINE BUFFER TAD LSTSW /IS LISTING ALLOWED? SNA CLA /SKIP IF SO JMP NWSTZP /FORGET IT IF NOT TAD CHAR /GET DELIMITER SZA CLA /SKIP IF JMP NWSTZP /JUMP IF NOT JMS I BEGLINE/[XBGLIN]/MAKE SURE WE'RE AT A NEW LINE CONDIN, /CONDITIONAL FLUSHES COME HERE NWSTZP, JMP NEWSTM /**** DOLLAR SCANNED **** 0000 EOF, JMS I PRTBUF/[XPRTBF] /MAKE SURE LAST LINE BUFFER IS PRINTED JMS I PRGLIT /DUMP ALL LITERALS TAD FLSHSW /GET CONDITIONAL SWITCH SNA CLA /SKIP IF SET LMZAPZ, JMP EOFZAP /**** /8 OR /9 **** JMP I LMZAPY JMS I ERR/[XERR] /COMPLAIN OF PH /PHASE ERROR JMP I L7600/[SBOOT] /GOODBYE! THROCOM,JMS I GCH/[XGCH] /GET A CHARACTER SZA CLA /SKIP IF EOL JMP THROCOMMENT /ELSE TOSS IT JMP EAEZAP /CONTINUE THERE / DOLLAR "$" END OF ASSEMBLY HANDLER. DOLLAR, DCA NWSTZP /PREVENT FURTHER INPUT / COMMENT "/" PROCESSOR. COMMNT, JMS I GCH/[XGCH] /GET NEXT CHARACTER OSYSIO, SZA CLA /? JMP COMMNT /NO, GET NEXT JMP I PEOS/[EOS] /CONTINUE THERE / COMES HERE AT END OF EACH PASS. EOFZAP, JMP I .+1/(USLP0) /**** PASS 2 **** JMS I PBEOTAP USLP0 /**** PASS 2 **** JMS I OSYSIO/(SYSIO) XSYMWK /WHERE IT GOES STOFUN, STOSIZE^100+.-. /UNIT IS FILLED IN STOBLK /BLOCK WILL BE RELOCATED JMP I .-3/(XSYMWK) /START IT UP / PUSHDOWN ROUTINES. DECPTR, /POINTER TO CURRENTLY USED POWER OF TEN XPUSH, .-. /PUSH ROUTINE PUSHPT, DCA I PDLPTR /SAVE SOMETHING ON THE STACK ISZ PDLPTR /BUMP TO NEXT POSITION TAD PDLPTR /COMPARE PUSHDOWN POINTER TAD (-XPDLEND) /TO LIMIT SZA CLA /SKIP IF EXCEEDED JMP I XPUSH /RETURN IF OK JMS I ERR/[XERR] /COMPLAIN OF PUSHDOWN OVERFLOW PO /POW! RIGHT IN THE KISSER! JMP I L7600/[SBOOT] /TAKE FATAL RETURN TO THE MONITOR DECQUO, /DIGIT QUOTIENT XPOP, .-. /POP ROUTINE NL7777 /BACKUP TAD PDLPTR /THE DCA PDLPTR /POINTER TAD I PDLPTR /GET THE VALUE OFF OF THE STACK JMP I XPOP /RETURN EXZAPA, EXNEW /**** RELOCATE **** LMZAPY, LMFIX /**** RELOCATE **** PBEOTAP,XNOPRTN /**** PASS 2 AND /B **** BEOTAPE PDOTITL,NOTITLE /**** /L AND /N AND PASS 2 **** DOTITLE (RELOCATED) STSW, -1 /STATEMENT NUMBER PRINT SWITCH PAGE PAGE IFNZRO 3600-. XPDLADR=. /PUSHDOWN LIST START XPDLEND=XPDLADR+74 /PUSHDOWN LIST END LSTBUF= XPDLEND /START OF LISTING BUFFER LSTEND= LSTBUF!177 /END OF LISTING BUFFER / THIS AREA IS NORMALLY USED FOR PUSHDOWN STACK AND LISTING BUFFER. / THE FOLLOWING CODE MOVES ANY SELECTED OPTION PACKAGES TO THEIR / RESPECTIVE RELOCATED ADDRESSES. THIS MUST BE ACCOMPLISHED FROM A / LOCATION LOWER THAN "SOURCE". ENDINIT,TAD I BXR /GET A SOURCE POINTER DCA SXR /STASH IT NL7777 /BACKUP TAD I BXR /GET A DESTINATION DCA TXR /STASH IT TAD I BXR /GET A COUNT DCA TMP /STASH IT JMP .+3 /CONTINUE THERE TAD I SXR /GET A WORD DCA I TXR /PUT A WORD ISZ TMP /DONE YET? JMP .-3 /NO, KEEP GOING ISZ EQUSW /ANY MORE LISTS TO MOVE? JMP ENDINIT /YES, KEEP GOING / THE FOLLOWING CODE ZEROES THE FIELD ZERO SYMBOL TABLE (IF ANY). IF / THERE ARE NO SYMBOLS IN FIELD ZERO, IT WILL JUST ZERO "RCDCNT" / (LOCATION 000000). THIS MUST BE ACCOMPLISHED FROM A LOCATION LOWER / THAN "SOURCE"+400. DCA I SYMNUM /CLEAR AN ENTRY TAD SYMNUM /GET POINTER TAD L4/[4] /GET UPDATE FACTOR DCA SYMNUM /STORE IT BACK ISZ I (ELIMN8) /DONE ALL YET? JMP .-5 /NO, GO BACK / THE FOLLOWING CODE LOADS IN THE SYMBOL TABLE FROM THE SYMBOL TABLE / BLOCKS. IT CALLS THE STANDARD SYMBOL INSERTION ROUTINE TO OBTAIN / MAXIMUM BENEFIT FROM THE HASHING SYMBOL TABLE MANAGEMENT. THE / SYMBOL TABLE IMAGE IS READ INTO THE SAME BUFFER AS THE SOURCE FILES / WILL BE READ INTO AND THUS OPTIMIZES FOR 8K OR GREATER ASSEMBLIES / (WITH /C OFF) WITH THE LEAST NUMBER OF OPTION PACKAGES USED. TAD MSTSIZE /GET MINUS SYMBOL TABLE SIZE CIA /WANT POSITIVE FORM DCA I (STSIZE) /SAVE FOR INSM ROUTINE NXTLOD, JMS I (SYSIO) /CALL I/O SYMBUF, .-. /THESE ARE SYMFUN, .-. /FILLED IN SYMBLK, SUDOBLK /**** NOT (/8 OR /9) **** SUDOBLK+1 (RELATIVE) TAD I (BLKCNT) /GET UPDATE VALUE TAD SYMBLK /ADD ON DCA SYMBLK /STORE IT BACK NL7777 /BACK UP TAD SYMBUF /GET POINTER DCA BXR /SETUP INDEX REGISTER PUTLUP, TAD I BXR /GET A WORD DCA NM1 /SAVE IT TAD BXR /GET INDEX TAD I (CHEND) /COMPARE TO LIMIT SNA CLA /SKIP IF OK JMP NXTLOD /ELSE READ MORE TAD NM1 /RECOVER SAVED WORD SZA /SKIP IF END OF BLOCK JMP .+6 /JUMP IF NOT SLDAGN, TAD BXR /\ AND L7600/[7600] / \BUMP TO TAD L177/[177] / /NEXT BLOCK DCA BXR // JMP PUTLUP /NOW CHECK AGAIN CMA /TEST FOR 7777 SNA /SKIP IF NOT 7777 JMP INIFIN /JUMP IF SO CMA /RESTORE AND L1777/[1777] /MASK OUT FLAGS DCA NM1 /SAVE IT NL3777 /\ AND I BXR / \ DCA NM2 / >BUILD UP SYMBOL NAME TAD I BXR / / DCA NM3 // NL7777 /SET "DO NOT ENTER" FLAG JMS I INSYM/[INSM] /CALCULATE A SYMBOL NUMBER NL7775 /BACKUP TAD BXR /INDEX DCA BXR /REGISTER TAD I BXR /\ DCA NM1 / \ TAD I BXR / \ DCA NM2 / \MOVE SYMBOL TAD I BXR / /TEMPORARILY DCA NM3 / / TAD I BXR / / DCA SVAL // JMS I SETSYM/[XSETSM] /SETUP SYMBOL REGISTERS TAD NM1 /\ DCA I SXR / \ TAD NM2 / \ DCA I SXR / \PUT SYMBOL TAD NM3 / /IN TABLE DCA I SXR / / TAD SVAL / / DCA I SXR // CDF 00 /MAKE SURE JMP PUTLUP /GO BACK FOR MORE INIFIN, ISZ SLDCNT /DONE YET? JMP SLDAGN /NO, GO DO ANOTHER LOAD REMOVB, JMS I (ELIMN8) /**** /B **** 0000 "E-300^45+"N-300 /\ "D-300^45+"B-300 / >ELIMINATE "ENDBIN" "I-300^45+"N-300 // LMZAPA, JMP I XNWSTM/[NEWSTM] /**** /8 OR /9 **** JMP I LMZAPB LMZAPB, LMLODE /**** RELOCATE **** SLDCNT, -1 /**** /8 OR /9 **** -2 / OPTION PACKAGE MOVE LISTS. MOVLST, TITCOD-1 /TITLES START HERE TPT2, .-. /FILLED IN IF TITLES TMVCNT, -1 /**** (/A OR /S OR /L) AND /N **** 7577 LITMORE-1 /LITERALS START HERE QPT2, .-. /FILLED IN IF LITERALS QMVCNT, -1 /**** /Q OR /O **** 7157 LNCODE-1 /LINC MODE STARTS HERE LNCPT2, .-. /FILLED IN IF LINC MODE LMVCNT, -1 /**** /8 OR /9 **** 7177 EXCODE-1 /CROSS-REFERENCE STARTS HERE XPT2, .-. /FILLED IN IF CROSS-REFERENCE XMVCNT, -1 /**** /L AND /X **** 7577 PAGE / BUFFERED LINE PRINT ROUTINE. XPRTBF, .-. /PRINT LINE BUFFER ISZ BUFSW /DONE ALREADY? SKP /YES TAD LSTSW /NO, LISTING ALLOWED? SNA CLA /SKIP IF SO JMP BFDONE /JUMP IF NOT JMS I PCHKSTN /CHECK IF STATEMENT NUMBER NEEDED HERE TAD PLSTBF/(LSTBUF) /SETUP THE DCA PRTPTR /UNPACKING POINTER TAD I PLSTBF/(LSTBUF) /GET FIRST PAIR AND L7700/(7700) /JUST FIRST SNA CLA /SKIP IF NOT JMP P6OUT /JUMP IF SO JMS I GETCOL/[XGETCOL]/GET TO COLUMN EXZAP3, -16 /**** /L AND /X **** -26 LNPRT, TAD I PRTPTR /GET PAIR JMS I ROR6/[XROR6] /LEFT TO RIGHT JMS P6TST /PRINT IT TAD I PRTPTR /GET AGAIN JMS P6TST /PRINT RIGHT HALF ISZ PRTPTR /BUMP TO NEXT JMP LNPRT /GO PRINT IT P6TST, .-. /PRINT 6-BIT AND L77/[77] /JUST 6-BIT SNA /? JMP P6OUT /YES JMS I P6CH/[XP6CH] /NO, NORMAL JMP I P6TST /RETURN P6OUT, JMS I PCRLF/[XPCRLF] /, BFDONE, TAD PLSTBF/(LSTBUF) /RESET DCA PRTPTR /POINTER JMP I XPRTBF /RETURN / CHARACTER INPUT ROUTINE. XGCH, .-. /GET NEXT CHARACTER JMP I GIVCH /GO GET IT GIVCH, NXTFIL+1 /**** START OF PASS 2 **** NXTFIL+1 AND L77/[77] /SIXBIT ONLY DCA CHAR /SAVE IN CHARACTER TAD CHAR /GET IT BACK SZA /? JMP I XGCH /NO, RETURN TO CALLER TAD PRESET /YES, FORCE DCA GIVCH /NEW LINE JMP I XGCH /RETURN CHKBUF, TAD I CHPTR /GET A PAIR SZA /END OF FILE? GIVNXT, JMP UNBUFF /**** PASS 2 AND /L AND PRINT /BUFFER UNPACK **** JMP NXTWRD NXTFIL, ISZ FLPNTR /NEXT FILE TAD I FLPNTR /GET FILE ARGUMENT AND L7770/[7770] /JUST BLOCK BITS SNA /? JMP I PEOF/(EOF) /YES DCA CHBLK /NO, SAVE BLOCK NUMBER SLKZP0, DCA TITPTR /**** NOT /K **** 0000 SHOT7, TAD I FLPNTR /**** PASS 2 AND 1 BUFFER **** JMP GOFAST AND L7/[7] /GET UNIT BITS TAD PAGCNT /ADD ON PAGE COUNT DCA CHFUN /SAVE IT GETBUF, JMS I GSYSIO/(SYSIO) /CALL I/O CHBUF, SOURCE /**** OPTIONS **** UPDATED BY PAGES CHFUN, SBOOT-SOURCE-400+400%2 /UNIT FILLED IN; PAGE COUNT DETERMINED BY OPTIONS CHBLK, 40 /BLOCK ARGUMENT ISZ NUMBFS /BUMP COUNT BLKCNT, 2 /**** 8K **** 14-OPTIONS GOFAST, TAD CHBUF /RESET DCA CHPTR /POINTER TAD TITPTR /GET A TITLE? TITZAP, SKP CLA /**** PASS 2 AND /L AND /N **** SNA CLA JMP I GETTITLE /JUMP IF SO TITRET, JMP CHKBUF /CHECK BUFFER AGAIN UNBUFF, JMS I ROR6/[XROR6] /GET LEFT HALF JMS GIVCH /OUTPUT IT TAD I CHPTR /GET RIGHT HALF JMS GIVCH /OUTPUT IT CHKEND, ISZ CHPTR /BUMP TO NEXT TAD CHPTR /GET POINTER TAD CHEND /COMPARE TO LIMIT GSYSIO, SZA CLA /SKIP IF DONE JMP CHKBUF /JUMP IF NOT TAD CHBLK /\ TAD BLKCNT / >UPDATE BLOCK NUMBER DCA CHBLK // JMP GETBUF /GET NEXT CHKEN3, TAD L7756/[UNBUFF-NXTWRD] /DON'T OR CHKEN2, TAD PREST2/(JMP NXTWRD) /DO USE DCA GIVNXT /BUFFERED JMP CHKEND /KEEP GOING NUMBFS, -1 /NUMBER OF BUFFERS READ NXTWRD, DCA I PRTPTR /STORE PAIR TAD I PRTPTR /GET BACK AND L7700/(7700) /JUST HIGH-ORDER HALF SNA CLA /? JMP BUFWRK /YES, WE'RE FILLED TAD I PRTPTR /GET PAIR AGAIN AND L77/[77] /JUST LOW-ORDER HALF SNA CLA /? JMP BUFWRK /YES, WE'RE FILLED TAD PRTPTR /GET POINTER ISZ PRTPTR /BUMP TO NEXT TAD PRTLIM /COMPARE TO LIMIT SPA CLA /SKIP IF NO ROOM JMP CHKEND /KEEP GOING DCA I PRTPTR /DELIMIT BUFFER BUFWRK, NL7777 /INDICATE DCA BUFSW /NEW BUFFER TAD PLSTBF/(LSTBUF) /SETUP TO DCA BUFPTR /UNPACK BUFLUP, TAD I BUFPTR /GET A PAIR SNA /END? JMP CHKEN3 /YES, GOTO UNBUFFERED JMS I ROR6/[XROR6] /GET HIGH-ORDER JMS GIVCH /OUTPUT IT TAD I BUFPTR /GET PAIR AGAIN JMS GIVCH /OUTPUT LOW-ORDER ISZ BUFPTR /BUMP TO NEXT JMP BUFLUP /PROCESS NEXT WORD BUFPTR, LSTBUF /UNPACKING POINTER CHEND, -SOURCE-400 /**** 4K **** DECREASED BY OPTIONS /**** 8K **** CONSTANT -7600 FLPNTR, SFILES /**** UPDATED AS NECESSARY GETTITL,XGBLURB /GET A TITLE POINTER L7700, 7700 /CONSTANT 7700 PAGCNT, 2^100 /**** 8K **** 14-OPTIONS^100 PEOF, EOF /POINTER TO ROUTINE PLSTBF, LSTBUF /BUFFER HEAD PRESET, CHKEND /**** PASS 2 AND /L **** CHKEN2 PREST2, JMP NXTWRD /BUFFERED RESET VALUE PRTLIM, -LSTEND+1 /PRINT BUFFER LIMIT PRTPTR, LSTBUF /PRINT POINTER IFNZRO NXTWRD-UNBUFF-22 / SO WE CAN USE L7756 AS AN OFFSET PAGE / BINARY OUTPUT AREA, CONTAINS PASS 1 ONLY CODE. BINARY,/ZBLOCK 3 /LISTAPE BUFFER REPLACE,-3/.-. /REPLACE ROUTINE; INITIALIZED FOR OPTION SWITCH XOR DCA SXR /SAVE PASSED POINTER TAD I SXR /GET A VALUE SNA /END OF LIST? JMP I REPLACE /YES, RETURN DCA TMP /NO, SAVE AS ADDRESS TAD I SXR /GET REPLACEMENT VALUE DCA I TMP /ZAP IT IN JMP REPLACE+2 /GO DO ANOTHER XPUNG2, NL0001 /SETUP INITIAL SYMBOL POINTER JMS I GETSYM/[GETSM] /GET A SYMBOL JMP I PSDRET/[XPSDRET]/RETURN IF NO MORE NL2000 /SEE IF TAD NMFLGS /IT'S A AND L6000/[6000] /PSEUDO-OP SNA CLA /SKIP IF NOT JMP XPUNG2+1 /JUMP IF SO NL7775 /BACKUP SYMBOL TAD SXR /TABLE POINTER DCA TMP /SAVE IT JMS I SETFLD/[XSTFLD] /SETUP FIELD DCA I TMP /WIPE OUT SYMBOL CDF 00 /MAKE SURE JMP XPUNG2+1 /BACK FOR MORE XFXT2, NL0001 /GET INITIAL VALUE JMS I GETSYM/[GETSM] /GET A SYMBOL JMP I PSDRET/[XPSDRET]/NO MORE SYMBOLS, RETURN NL7776 /BACKUP SYMBOL TAD SXR /TABLE POINTER DCA TMP /SAVE IT JMS I SETFLD/[XSTFLD] /SETUP FIELD TAD I TMP /GET SECOND SYMBOL WORD RAL /SHIFT PFLAG INTO LINK STL RAR /SET PFLAG DCA I TMP /STORE IT BACK CDF 00 /MAKE SURE IN CASE LAST JMP XFXT2+1 /GO DO NEXT USXIT, DCA ECHOSW /FORCE ECHO ON TAD ERRTOT /\ SZA CLA / >CLEAN UP IF ERRORS JMS I PCRLF/[XPCRLF] // TAD PS2RPL/(PS2RPL+1-1) /DO PASS 2 JMS REPLACE /ZAPS NOW TAD LSTRPL /ZAP IN JMS REPLACE /LISTING ZAPS PAS2ZAP,JMP I PS1STB/(STOFUN-2) /**** /B OR /K OR /L **** 0000 ISZ PUNWD /ALLOW PUNCHING ISZ PUNSW /FOR LISTING AND BINARY NOBNZP, TAD BINALOW/(BEOTAPE+1) /**** NOT /B **** 0000 DCA I PNOPUN/(NOPUN) /ALLOW BINARY SLLZP2, JMP SPASS2 /**** /L **** 0000 ISZ LSTWD /FORCE LISTING PHASE ISZ LSTSW /INITIALLY TURN LISTING ON TAD SLLRPL/(RPLSLL-1) /GO DO JMS REPLACE /LISTING PASS REPLACEMENTS SPASS2, TAD I PNUMBFS/(NUMBFS) /GET NUMBER OF BUFFERS READ SZA CLA /SKIP IF EXACTLY ONE (UNO) JMP .+3 /READ IN NEW BUFFER NEXT TIME TAD LGOFAS/(GOFAST&177+JMPC)/MAKE IT DCA I PSHOT7/(SHOT7) /RE-READ BUFFER TAD I PINTFPT/(INTFPT) /RESET DCA I AFLPNTR/(FLPNTR) /INPUT POINTER TAD PS2RPL/(PS2RPL+1-1) /DO PASS 2 JMS REPLACE /ZAPS AGAIN IN CASE /B JMS I PELMN8/(ELIMN8) /ELIMINATE "E-300^45+"X-300 /\ "P-300^45+"U-300 / >"EXPUNGE" "N-300^45+"G-300 // JMS I PELMN8/(ELIMN8) /ELIMINATE "F-300^45+"I-300 /\ "X-300^45+"T-300 / >"FIXTAB" "A-300^45+"B-300 // DCA RLOC8 /CLEAR RELOCATION DCA CURFLD /FIELD ZERO DCA DUMPSW /CLEAR DUMP LITERALS SWITCH DCA COLCT /CLEAR COLUMN COUNTER DCA ERRTOT /CLEAR ERROR COUNTER TAD SLXRPL/(RPLSLX-1) /ATTEMPT TO JMS REPLACE /DO /X ZAPS JMS I ABGTFL /OPEN BINARY OUTPUT FILE JMP I PNWST1 /GO START PASS 2 ABGTFL, XNOPRTN /POINTER TO BINARY OPEN ROUTINE (IF ACTIVE) AFLPNTR,FLPNTR /POINTER TO INPUT FILE POINTER BINALOW,BEOTAPE+1 /FIRST ENTRY FOR /B PASS 2 LGOFAST,GOFAST&177+JMPC /"JMP GOFAST" LSTRPL, OZAP4-1 /**** NOT /L **** OZAP4-1+2 PELMN8, ELIMN8 /POINTER TO SYMBOL ELIMINATION ROUTINE PINTFPT,INTFPT /POINTER TO INPUT FILE POINTER RESET PNOPUN, NOPUN /WHERE TO INHIBIT BINARY PNUMBFS,NUMBFS /WHERE BUFFER COUNT IS PNWST1, NEWSTM /**** /8 OR /9 **** LMLODE (RELOCATED) PSHOT7, SHOT7 /WHERE TO ZAP INPUT ROUTINES TO RE-READ BUFFER PS1STB, STOFUN-2 /POINTER TO SYMBOL TABLE PRINT ROUTINE SLLRPL, RPLSLL-1 /LISTING PASS REPLACEMENT LIST POINTER SLXRPL, RPLSLX-1 /CROSS-REFERENCE REPLACEMENT LIST POINTER / PASS TWO REPLACEMENT LIST. PS2RPL, .+1-1 /POINTER TO PASS 2 REPLACEMENT LIST PS2ZAP; TAD LOCNTR /ALLOW "IR"S IN PASS 2 GIVCH; NXTFIL+1 /RESTART INPUT XPUTWD+4;NOLS1&177+JMPC /"JMP NOLS1" IN SECOND PASS EQ2ZAP; NL7777 /KEEP PFLAG DURING PASS 2 IN CASE FIXTAB'ED PASS 1 LOCNTR /RESET LOCATION COUNTER LNCORG, 0200 /**** /9 **** 4020 BLOCNTR /RESET RELOCATION FACTOR LNORG2, 0200 /**** /9 **** 4020 RADSW1; NOP /OCTAL RADIX RADSW2; 7711 /OCTAL RADIX SLQZP1, SYMNUM; 200 /**** /Q **** OLDLOC (RELOCATED) OFPCNT; 0 /ONLY NEEDED IF /O NWSTZP; NEWSTM&177+JMPC /"JMP NEWSTM" EOFZAP; PBEOTA&177+JMSIC /MAKE SECOND PASS EOFZAP+1;OSYSIO&177+JMSIC /END OF FILE ZAPS USMFIX; JMS I ERR/[XERR] /PRINT "US" MESSAGES DURING PASS 2 EQUFIX; SZA CLA /"IE" ERRORS ON BAD EQUATES DURING PASS 2 / LIST ENDS HERE IF NOT /B AT PASS 1 END. NOPUN, 0; WRDCNT&177+TADC /ALLOW BINARY FILES BGETFL+1;BUFFAD&177+TADC /ALLOW OPENING OF BINARY FILES ABGTFL; BGETFL /ALLOW BINARY OPEN PUNCH; BINOUT /REAL BINARY OUTPUT ROUTINE PBEOTAP;BEOTAP /REAL BINARY CLOSE ROUTINE 0 /END OF REPLACEMENT LIST OZAP4, OZAP4+1 /**** /O **** OZAPL2 (RELOCATED) DCA RCHAR /ALLOW FIXUP QUOTE TO PRINT SLNZP2, PRTTITLE /**** NOT /N OR NOT (/A OR /S OR /L) **** 0000 PPBLB1, XPBLURB /**** /N AND (/L OR /A OR /S) **** XPBLURB (RELOCATED) SLLZP9, TITZAP; SNA CLA /**** NOT /L **** 0000 PDOTITL /DO TITLES HERE SLLZAP, DOTITLE /THROUGH HERE 0 /THIS DEFINITELY ENDS THE LIST RPLSLL, ERRZAP; ERRXIT&177+JMPC /NO "AT" MESSAGES ON LISTING GIVNXT; NXTWRD&177+JMPC /USE BUFFERED ROUTINES FOR LISTING PRESET; CHKEN2 /NEW LINES ARE INITIALLY BUFFERED 0 /THIS ENDS THE LIST RPLSLX, 0 /**** /L AND /X **** NEWSTX EXZAPA&177+JMPIC /BUMP STATEMENT NUMBER AT BEGINNING OF EACH STATEMENT PNFCPTR /INTERCEPT PUNFLD ROUTINE EXRL3, CRFFLD /**** RELOCATE **** ATCOD+1 /MAKE ERROR ROUTINE CRERRP&177+JMPIC /INTERCEPT HERE CRERRP /SETUP ERROR INTERCEPT ADDRESS EXRL2, CRFERR /**** RELOCATE **** INXIT /MAKE INSM EXIT CRZAPA&177+JMPIC /TO CROSS-REFERENCE SYMBOL REFERENCE ROUTINE CRZAPA /SETUP CREFSYM POINTER EXRL7, CREFSYM /**** RELOCATE **** L6201+1 /MAKE EQUATE ROUTINE TRAP TO L6201+2&177+JMPIC /EQUATE CROSS-REFERENCE INTERCEPT L6201+2 /ZAP IN EQUATE INTERCEPT ADDRESS EXRL4, CRFEQU /**** RELOCATE **** PCHKSTN /ALLOW CHECK FOR STATEMENT NUMBERS IN PASS 2 CHKSTN /THROUGH HERE CLENABL,0 /**** /Q OR /O **** GOTZAP+2 (RELOCATED) CRZAPD&177+JMPIC /"JMP I CRZAPD" SLQRLM, CRZAPD /**** RELOCATE **** SLQRLN, CRFLIT /**** RELOCATE **** 0 /THIS ENDS THE LIST USLP0, DCA ECHOSW /FORCE ECHO ON DCA I PSM1/(SM1) /DESTROY SAVED SYMBOL DCA I PSM4/(SM4) /AND ITS VALUE NL0001 /INITIALIZE SYMBOL TABLE USLP, JMS I GETSYM/[GETSM] /GET A SYMBOL JMP I PUSXIT/(USXIT) /NO MORE TAD NMFLGS /GET FLAGS SZA CLA /SKIP IF UNDEFINED JMP USLP /GO BACK FOR ANOTHER TAD SVAL /GET VALUE OF SYMBOL DCA LOCNTR /PRINT WHERE IT'S AT JMS I ERR/[XERR] /COMPLAIN OF US /UNDEFINED SYMBOL TAD SXR /GET POINTER DCA ELIMN8 /SET IT UP JMS I SETFLD/[XSTFLD] /SETUP FIELD DCA I ELIMN8 /SET TO ZERO CDF 00 /BACK TO FIELD 0 JMP USLP /KEEP GOING ELIMN8, -1 /SYMBOL ELIMINATION ROUTINE; PRELOADED FOR /FIELD 0 SYMBOL CLEARING ROUTINE TAD I ELIMN8 /GET FIRST WORD DCA NM1 /SAVE IT ISZ ELIMN8 /BUMP POINTER TAD I ELIMN8 /GET SECOND WORD DCA NM2 /SAVE IT ISZ ELIMN8 /BUMP POINTER TAD I ELIMN8 /GET THIRD WORD DCA NM3 /SAVE IT ISZ ELIMN8 /BUMP POINTER JMS I INSYM/[INSM] /FIND THE SYMBOL TAD SXR /GET POINTER DCA TMP /SAVE IT JMS I SETFLD/[XSTFLD] /SETUP FIELD TAD PSDRET/[XPSDRET]/GET THROW AWAY ADDRESS DCA I TMP /STORE DO NOTHING ADDRESS CDF 00 /BACK TO FIELD 0 JMP I ELIMN8 /NOW RETURN PSM1, SM1 /=> SM1 PSM4, SM4 /=> SM4 PUSXIT, USXIT /WHERE NEXT ROUTINE AFTER US STUFF IS PAGE SOURCE= . /WHERE INPUT BUFFER STARTS / FURTHER ASSEMBLY INITIALIZATION. TSTNOT, TAD I NM2/[SWMX] /CHECK FOR /T AND (20) /AND JUST /T SLNZP9, SZA CLA /**** NOT /N **** CLA!400 JMP TSTNXT /JUMP IF /T IS SET LPTEMP, NL7777 /SETUP AN EXTENDED OUTINIT,LLSIOT /**** CONSOLE **** JMS LPWAIT CLA /CLEAN UP TAD L40/[" &177] /GET A LPJMS, JMS LPWAIT /ATTEMPT TO PRINT IT TAD L40/[" &177] /GET ANOTHER JMS LPWAIT /ATTEMPT TO PRINT IT TAD L15/[15] /GET A JMS LPWAIT /ATTEMPT TO PRINT IT DCA LPTMZAP /PREVENT FURTHER TIMING OUT TAD L40/[" &177] /GET ANOTHER JMS LPWAIT /PRINT IT TAD L15/[15] /GET ANOTHER JMS LPWAIT /PRINT IT TAD L12/[12] /GET A JMS LPWAIT /PRINT IT TAD LP14/(14) /GET A JMS LPWAIT /PRINT IT TAD (LPTLST-1) /GET LPT: REPLACEMENT LIST POINTER JMS I (REPLACE) /GO DO LPT: ZAPS JMP TSTNXT /CONTINUE THERE LPTMOUT,-100 /LPT: TIME-OUT COUNTER LPWAIT, .-. /LPT: WAIT AND TIME-OUT ROUTINE DCA LPTEMP /SAVE PASSED VALUE LPAGN, TAD LPTEMP /GET IT BACK LPCHK, LSFIOT /**** CONSOLE **** CIF MCS+1 LPJMP, JMP LPTIME /**** CONSOLE **** JMS OUTLPT LPRNT, LLSIOT /**** CONSOLE **** JMP LPTIME TAD (7700) /RESET THE TIME-OUT DCA LPTMOUT /FOR NEXT TIME JMP I LPWAIT /RETURN LPTIME, ISZ I (REPLACE) /WASTE JMP LPTIME /SOME TIME CLA /CLEAN UP LPTMZAP,ISZ LPTMOUT /**** ZAPPED **** 0000 JMP LPAGN /TRY AGAIN TSTNXT, TAD (SLLLST-1) /GET TITLE REPLACEMENT LIST POINTER JMS I (REPLACE) /(POSSIBLY) DO TITLE ZAPS TAD (SLQLST-1) /GET LITERAL REPLACEMENT LIST POINTER JMS I (REPLACE) /(POSSIBLY) DO LITERAL ZAPS TAD (LNCLST-1) /GET LINC MODE REPLACEMENT LIST POINTER JMS I (REPLACE) /(POSSIBLY) DO LINC MODE ZAPS TAD (EXLST-1) /GET CROSS-REFERENCE REPLACEMENT LIST POINTER JMS I (REPLACE) /(POSSIBLY) DO CROSS-REFERENCE ZAPS TAD I (CHBUF) /\ DCA I (SYMBUF) / \ TAD I (PAGCNT) / >FIXUP SYMBOL TABLE LOADER TAD I (SYMFUN) / / DCA I (SYMFUN) // JMP I (ENDIN1) /NOW FINISH UP CONTEST,.-. /CONSOLE OVERLAY TEST ROUTINE TAD I L7600/[SBOOT] /GET BOOTSTRAP INSTRUCTION TAD (-JMSSYSIO) /COMPARE TO POSSIBLE VALUE SNA CLA /SKIP IF DIFFERENT JMP CHKCOVRLAY /JUMP IF IT MATCHES ISZ I (CHKKRS) /TURN "KRSIOT" ISZ I (CHKKRS) /INTO "KRBIOT" DCA I (CHKKCC) /DESTROY "KCCIOT" CHKCOVR,NL0002 /SET "C" BIT MASK AND I (SCRSIZE) /GET THE "C" BIT SNA CLA /SKIP IF SET JMP I CONTEST /ELSE RETURN DCA I (CHKKCC) /DESTROY "KCCIOT" TAD I (SCRSIZE) /GET THE CORE-SIZE WORD RTR;RAR /MOVE OVER THE MCS BITS AND (70) /ISOLATE THEM TAD I (CNZAP1)/(CIF 10) /TURN INTO "CIF MCS+10" DCA I (CNZAP1) /STORE IN REPLACEMENT LIST TAD I (CNZAP1) /GET IT BACK DCA I (CNZAP2) /STORE IN REPLACEMENT LIST TAD I (CNZAP2) /GET IT BACK DCA I (CNZAP3) /STORE IN REPLACEMENT LIST TAD I (CNZAP3) /GET IT BACK DCA I (CNZAP4) /STORE IN REPLACEMENT LIST TAD I (CNZAP4) /GET IT BACK DCA LPCHK /STORE IT IN LPT: TIME-OUT ROUTINE TAD LPJMP /GET THE "JMP LPTIME" DCA LPRNT /STORE OVER THE "LLSIOT" TAD (JMS OUTLPT) /GET PRINTER CALL DCA LPJMP /STORE OVER THE "JMP LPTIME" TAD LPJMS /GET THE LPWAIT CALL DCA OUTINIT /STORE IN INITIALIZE LOCATION DCA LLZAP2 /PREVENT PHYSICAL LPT: REPLACEMENTS TAD (CNLIST-1) /GET CONSOLE REPLACEMENT LIST POINTER JMS I (REPLACE) /MAKE CONSOLE ZAPS JMP I CONTEST /RETURN TO /M TEST ROUTINE / LPT: REPLACEMENT LIST. LPTLST, LPZAP2; NL7777 /USE ONE SEPARATOR LPZAP1; NL7777 /USE ONE SEPARATOR LSEP; LP14, 14 /OUTPUT BETWEEN PAGES P7JMP /CHANGE "JMP P7AGN" LLZAP1, P7AGN&177+JMPC /**** CONSOLE **** JMS OUTLPT LLZAP2, P7TSF; LSFIOT /**** CONSOLE **** 0000 P7TLS; LLSIOT /CHANGE "TLSIOT" INTO "LLSIOT" 0 /THIS ENDS THE LIST PAGE / CROSS-REFERENCE REPLACEMENT LIST. EXLST, 0 /**** /L AND /X **** RPLSLX NEWSTX /ENABLE STATEMENT NUMBER INCREMENT DURING PASS TWO EXZAP2 /ENABLE THE CORRECT -17 /COLUMN FOR PTNREG EXZAP3 /ENABLE THE CORRECT -26 /COLUMN FOR PRTBUF XMVCNT /MOVE DOWN -200-1 /ONE PAGE 0 /THIS ENDS THE LIST / LITERALS AND LINKS REPLACEMENT LIST. / /Q OR /O LIST. SLQLST, 0 /**** /Q OR /O **** PDUMPL SLQRL0, DUMPC /**** RELOCATE **** PUTORG /ZAP PUTORG POINTER TO LIT1 SLQRL1, LIT1 /**** RELOCATE **** PUTZAP /ZAP PUTWD ROUTINE TO COME TO LIT2 PLIT2&177+JMSIC /"JMS I PLIT2" QMVCNT /SET UP TO MOVE LITMORE-ZPLBEG+160-1 /LITERAL CODE DOWN PRGLIT /DO A LITERAL POOL DUMP AT PASS TWO END SLQRL2, DUMPZ /**** RELOCATE **** / "[&77+XTRATAB /ZAP LEFT BRACKET IN TABLE /SLQRL4,LBRAK /**** RELOCATE **** / "]&77+XTRATAB /ZAP RIGHT BRACKET INTO TABLE /SLQRL5,RBRAK /**** RELOCATE **** / "(&77+XTRATAB /ZAP LEFT PARENTHESIS IN TABLE /SLQRL6,LPARN /**** RELOCATE **** / ")&77+XTRATAB /ZAP RIGHT PARENTHESIS IN TABLE /SLQRL7,RPARN /**** RELOCATE **** / "#&77+XTRATAB /ZAP NUMBER-SIGN IN TABLE /SLQRL8,NUMSGN /**** RELOCATE **** SLQZP1 /RESET OLDLOC FOR PASS 2 SLQRLA, OLDLOC /**** RELOCATE **** / PUSHPT /USE NEW STACK ADDRESS /SLQRLD,QSTACK /**** RELOCATE **** / PDLEND /USE NEW STACK LIMIT /SLQRLE,-QSTKEND /**** RELOCATE **** LITNBL /ENABLE LITERAL CHARACTER HANDLING SLQRLP, LITMORE /**** RELOCATE **** CLENABL /ENABLE CROSS-REFERENCE OF LITERALS SLQRLG, GOTZAP+2 /**** RELOCATE **** / /O ONLY ADDITIONAL REPLACEMENT LIST. SLOZAP= . /**** /Q AND NOT /O **** 0000 / PS2ZAP /ALLOW "LG" MESSAGES / TAD LOCNTR /DURING PASS ONE OZAP2 /BRANCH TO OFF-PAGE LITERAL PROCESSOR BY OZAP3&177+JMPIC /"JMP I OZAP3" OZAP3 /ZAP POINTER TO OFPLIT SLORL1, OFPLIT /**** RELOCATE **** OZAP4 /ZAP POINTER TO OZAPL2 SLORL2, OZAPL2 /**** RELOCATE **** 0 /THIS ENDS THE LIST / TITLES REPLACEMENT LIST. SLLLST, 0 /**** TITLE ZAPS ENABLED **** TMVCNT -200-1 /MOVE DOWN 1 PAGE OF TITLE CODE PPBLB1 /ALLOW TITLE OUTPUT /SLLRL1, /**** RELOCATE **** XPBLURB /BY POINTING IT TO THIS 0 /THIS ENDS THE LIST / OBSOLETE TITLES RELOCATION LIST. / (TITLES ARE NOW USED AS ASSEMBLED AS THEY ARE ALWAYS THE FIRST OPTION.) /SLLRLC,-TITCODE /-ASSEMBLED ADDRESS / SLLRL1 /POINTER TO SLLRL1 / SLLRL2 /POINTER TO SLLRL2 / SLLRL3 /POINTER TO SLLRL3 / SLLRL4 /POINTER TO SLLRL4 / SLLZAP /POINTER TO SLLZAP / GETTITLE /POINTER TO GETTITLE / 0 /END OF POSITIVE LIST / 0 /END OF NEGATIVE LIST / CONSOLE REPLACEMENT LIST. CNLIST, CHKKSF /CHANGE "KSFIOT" CNZAP1, CIF 10+.-. /INTO "CIF MCS+10" CHKJMP; JMS INCON /CHANGE "JMP I CTLCTST" INTO INPUT CALL PCHKKRS,CHKKRS; CTLCTS&177+JMPIC/TURN "KRSIOT" (OR "KRBIOT") INTO "JMP I CTLCTST" P7TSF /CHANGE "TSFIOT" CNZAP2, CIF 10+.-. /INTO "CIF MCS+10" P7JMP; JMS OUTCON /TURN "JMP P7AGN" INTO OUTPUT CALL P7TLS; P7AGN&177+JMPC /CHANGE "TLSIOT" INTO "JMP P7AGN" DOUO1 /CHANGE "TSFIOT" CNZAP3, CIF 10+.-. /INTO "CIF MCS+10" DOUO1+1;JMS OUTCON /TURN "JMP DOUO1" INTO OUTPUT CALL DOUO1+2;DOUO1&177+JMPC /TURN "TLSIOT" INTO "JMP DOUO1" DOUO2 /CHANGE "TSFIOT" CNZAP4, CIF 10+.-. /INTO "CIF MCS+10" DOUO2+1;JMS OUTCON /TURN "JMP DOUO2" INTO OUTPUT CALL DOUO2+2;DOUO2&177+JMPC /TURN "TLSIOT" INTO "JMP DOUO2" LLZAP1; JMS OUTLPT /MAKE "JMP P7AGN" OR "JMS OUTCON" INTO LOGLPT: CALL 0 /THIS ENDS THE LIST ENDIN1, TAD I (CHEND) /CALCULATE FREE SPACE TAD L7600/[7600] /IN FIELD 0 SNA /SKIP IF THERE IS SOME JMP FIXEND /JUMP IF NONE CLL RTR /CALCULATE NUMBER OF SLOTS CIA /MAKE NEGATIVE DCA I (ELIMN8) /SAVE FOR LATER STL /SETUP IN CASE OF OVERFLOW TAD MSTSIZE /GET OLD SYMBOL TABLE SIZE SNA /SKIP IF IT WAS THERE CLL /ELSE CLEAR LINK TAD I (ELIMN8) /CALCULATE NEW SIZE SNA SZL /SKIP IF NO OVERFLOW NL0001 /ELSE SETUP MAXIMUM SIZE TABLE DCA MSTSIZ /SAVE SIZE FOR LATER TAD I (ELIMN8) /GET NUMBER IN FIELD 0 DCA I (SYMS4K) /SAVE FOR SETSYM ROUTINE TAD (SNL) /ENABLE SETSYM TO DCA I (USE4K) /USE FIELD 0 TAD I (CHEND) /SETUP CIA /TO CLEAR FIXEND, DCA SYMNUM /FIELD 0 ETEST, TAD L200/[200] /GET /E MASK AND I NM1/[SWAL] /JUST /E BIT SNA CLA /SKIP IF SET JMP TESTY /JUMP IF NOT TAD L7600/[CLA!400] /GET A CLA DCA I (SLEZAP) /ZAP THE CODE TESTY, TAD I NM3/[SWY9] /GET /Y-/9 SWITCHES SPA CLA /SKIP IF OFF JMP TEST0 /JUMP IF ON TAD (XBCKIN&177+JMPC) /MAKE IT DCA I (SLYZAP) /DO INCLUSIVE OR INSTEAD TEST0, TAD I NM3/[SWY9] /GET /Y-/9 SWITCHES RTL /0 TO AC[0] SMA CLA /SKIP IF SET JMP I (ENDINIT) /JUMP IF OFF TAD ETEST/(TAD L200/[200]) /GET ENABLING CONSTANT DCA I (SL0ZAP) /ENABLE DEFAULT ORIGIN JMP I (ENDINIT) /CONTINUE THERE PAGE / INTERNAL OPTION SWITCH MODIFICATION LIST. OPTLST, ZBLOCK 3 /FOR XOR-ING SWITCHES / LINC MODE RELOCATION LIST. LNCRLC, -LNCODE /-ASSEMBLED ADDRESS LNCRL1 /POINTER TO PASS 1 MODE CHECK LNCRL2 /SYMBOL TABLE FIXUP POINTER XSGMNT+1 /SEGMNT PSEUDO-OP POINTER SKPASM+1 /ASMSKP PSEUDO-OP POINTER MASSIF+2 /ASMIFX PSEUDO-OP POINTER XDTORG+1 /RELOCATE DTORG PSEUDO-OP POINTER LNCRL3 /SYMBOL HANDLER LNCRL4 /ORIGIN HANDLER LNCRL5 /PASS 2 STARTUP LNCRL6 /LMODE MRI HANDLER LNCRL8 /RELOCATE "\" OPERATOR XPMODE+1 /LMODE, PMODE PSEUDO-OP POINTER RPADR /PMODE ZAP ADDRESS MODTBL /LMODE ZAP ADDRESS MLTABLE /LMODE SYMBOLS LNCRL7 /FIXTAB FIXUP POINTER MLTAB2 /FIXTAB TABLE POINTER ABCKSL /RELOCATE "\" HANDLING CODE POINTER LCHKMODE /RELOCATE POINTER TO CHKMODE 0 /END OF POSITIVE LIST 0 /END OF NEGATIVE LIST / CROSS-REFERENCE RELOCATION LIST. XRLC, -EXCODE /-ASSEMBLED ADDRESS CWBUFF /RELOCATE CROSS-REFERENCE BUFFER ARGUMENT DIGPT /PRINTOUT DIGIT POINTER EXRL2 /ERROR INTERCEPT POINTER EXRL3 /CURRENT FIELD OUTPUT INTERCEPT EXRL4 /RELOCATE EQUATE INTERCEPT POINTER EXRL7 /SYMBOL INTERCEPT POINTER EXZAPA /STATEMENT NUMBER INCREMENT POINTER QPUTREF /RELOCATE LITERAL'S POINTER TO PUTREF RESET /RESET POINTER FOR DIGIT INCREMENT RXR /CROSS-REFERENCE OUTPUT INDEX 0 /END OF POSITIVE LIST 0 /END OF NEGATIVE LIST / LITERALS AND LINKS RELOCATION LIST. SLQRLC, -LITMORE /MINUS ASSEMBLED ADDRESS SLQRL0 /POINTER TO DUMPC FOR RELOC SLQRL1 /POINTER TO LIT1 FOR PUTORG ROUTINE SLQRL2 /POINTER TO DUMPZ FOR END OF EACH PASS / SLQRL4 /POINTER TO LBRAK / SLQRL5 /POINTER TO RBRAK / SLQRL6 /POINTER TO LPARN / SLQRL7 /POINTER TO RPARN / SLQRL8 /POINTER TO NUMSGN SLQRLA /POINTER TO OLDLOC TO BE ZEROED BY PASS 2 / SLQRLD /POINTER TO SLQRLD SLQRLF /XREF POINTER TO GOTZAP+4 / CQ /XREF POINTER TO Q SLQRLG /XREF LITERAL ENABLE POINTER SLQRLM /RELOCTE POINTER TO CRZAPD FOR PASS 2 SLQRLN /RELOCATE POINTER TO CREFLIT ROUTINE FOR PASS 2 SLQRLP /RELOCATE LITERAL STARTUP CODE SLORL1 /POINTER TO SLORL1 SLORL2 /POINTER TO SLORL2 PLIT2 /POINTER TO LIT2 PZPLP2 /POINTER TO SECOND POINTER TO ZPLPTR PCPLP2 /POINTER TO SECOND POINTER TO CPLPTR PTSTPE /POINTER TO TSTPE PLGFIX /POINTER TO PLGFIX PDUMPC /POINTER TO DUMPC PCPLPTR /POINTER TO POINTER TO CPLPTR PZPLPTR /POINTER TO POINTER TO ZPLPTR PCPLEND /POINTER TO POINTER TO CPLEND PZPLEND /POINTER TO POINTER TO ZPLEND PCPLBUF /POINTER TO POINTER TO CPLBUF POLDLOC /POINTER TO POINTER TO OLDLOC / CPLPTR /POINTER TO CPLPTR ZPLPTR /POINTER TO ZPLPTR / PLITYPE /POINTER TO PLITYPE / PLITSWT /POINTER TO PLITSWT ACPLEND /POINTER TO SECOND POINTER TO CPLEND PZPLND2 /POINTER TO PZPLND2 REMST /POINTER TO REMST PGOTZAP /POINTER TO POINTER TO GOTZAP POFFIN /POINTER TO POINTER TO OFFIN 0 /END OF POSITIVE RELOCATION LIST ZPLEND /POINTER TO ZPLEND ZPLBUF /POINTER TO ZPLBUF / CPLEND /POINTER TO CPLEND / CPLBUF /POINTER TO CPLBUF / PAGEND /POINTER TO PAGEND PAGZND /POINTER TO PAGZND / MCPLBEG /POINTER TO MCPLBEG ZPLRST /POINTER TO ZPLRST / SLQRLE /POINTER TO SLQRLE 0 /END OF NEGATIVE RELOCATION LIST NFMSG, TEXT " NOT FOUND!" / MONTHS MESSAGE LIST. MONLST, TEXT "-JAN" /JANUARY TEXT "-FEB" /FEBRUARY TEXT "-MAR" /MARCH TEXT "-APR" /APRIL TEXT "-MAY" /MAY TEXT "-JUN" /JUNE TEXT "-JUL" /JULY TEXT "-AUG" /AUGUST TEXT "-SEP" /SEPTEMBER TEXT "-OCT" /OCTOBER TEXT "-NOV" /NOVEMBER TEXT "-DEC" /DECEMBER / MONTH LENGTH TABLE. JANENT, 37 /31 DAYS IN JANUARY FEBENT, 34 /29 IN LEAP YEAR! 37 /31 DAYS IN MARCH 36 /30 DAYS IN APRIL 37 /31 DAYS IN MAY 36 /30 DAYS IN JUNE 37 /31 DAYS IN JULY 37 /31 DAYS IN AUGUST 36 /30 DAYS IN SEPTEMBER 37 /31 DAYS IN OCTOBER 36 /30 DAYS IN NOVEMBER / 37 /31 DAYS IN DECEMBER ZBLOCK 5400-. /FORCE LAST LOADED OPTION TO END AT 07577 TITCOD, FIELD 0 /PREVENT LITERAL PROBLEMS CAUSED BY OVERLAYS / TITLE CODE GOES HERE. *TITCOD /TITLES START HERE RELOC SOURCE /WHERE IT EXECUTES XPBLURB,.-. /PUT OUT THE BLURB ROUTINE TAD SLLRL3/(BLURB) /GRAB OUR POINTER JMS TITOUT /PRINT IT OUT TITLEN, -5-1 /DEFAULT IS THE LENGTH OF THE DUMMY TITLE TAD SLLRL2/(BLBEGN) /GET THEIR POINTER JMS TITOUT /PRINT THEIR PART OUT STTLEN, 7754+1-1 /**** /S AND /N DURING SYMBOL TABLE OVERLAY **** 7754-1 ISZ OVFLPG /BUMP CONTINUATION OVFZP1, SKP /DON'T ISZ PAGNUM /BUMP PAGE NUMBER TAD PAGNUM /GET PAGE NUMBER JMS I PRTDEC/[DECPRT] /PRINT IT OUT OVFZP2, TAD OVFLPG /GET OVERFLOW SNA CLA /ANY OVERFLOW? JMP I XPBLURB /NO, JUST RETURN TAD TMIN/("-&77) /YES, PRINT A MINUS JMS I P6CH/[XP6CH] /SIGN TO TELL THEM SO TAD OVFLPG /GET COUNT AGAIN JMS I PRTDEC/[DECPRT] /PRINT IT OUT JMP I XPBLURB /RETURN TITOUT, .-. /BLURB OUTPUTTER DCA TITPTR /SAVE PASSED POINTER TAD I TITOUT /GET THE COUNT DCA I PUSH-JMSI /STASH IT ISZ TITOUT /BUMP PAST ARGUMENT JMP TITTRY /CHECK FIRST IN CASE ZERO LENGTH TITAGN, TAD I TITPTR /GET A PAIR JMS I ROR6/[XROR6] /DO A BSW JMS I P6CH/[XP6CH] /PRINT HIGH ORDER WHICH CAN'T BE ZERO TAD I TITPTR /GET AGAIN AND L77/[77] /BE SURE JMS I P6CH/[XP6CH] /PRINT LOW ORDER WHICH COULD BE ZERO ISZ TITPTR /BUMP TO NEXT PAIR TITTRY, ISZ I PUSH-JMSI /DONE ALL YET? JMP TITAGN /NO, GO BACK JMP I TITOUT /YES, RETURN PAGNUM, 0 /PAGE NUMBER BAKADR, NOTITL /RETURN ADDRESS SLLRL3, BLURB /POINTER TO USER PORTION OF THE TITLE XGBLURB,NL7777 /INDICATE CHPTR INPUT DOTITLE,DCA TITOUT /TO GRBTITLE ROUTINE TAD SLLRL3/(BLURB) /SET UP DCA TITPTR /NEW TITLE POINTER TAD TITMAX/(BLURB-TITEND) /SET UP MAXIMUM DCA XPBLURB /TITLE LENGTH IFNZRO .&177-55 GRBAGN, TAD TITOUT /WHICH INPUT MODE? SPA CLA /SKIP IF GCH MODE JMP GETIT1 /JUMP IF CHPTR MODE JMS I GCH/[XGCH] /GET A CHARACTER JMS I ROR6/[XROR6] /ROTATE LEFT RAR /SIX SKP /ONE TITLE CHARACTER IS ENOUGH GETIT1, TAD I CHPTR /READ INPUT PAIR AND L7700F/(7700) /JUST HIGH-ORDER SNA /SKIP IF NOT JMP BLCALC /CALCULATE LENGTH, WE'RE DONE DCA I TITPTR /SAVE CHARACTER IN TITLE BUFFER TAD TITOUT /GET MODE SWITCH AGAIN L7700F, SMA CLA /SKIP IF CHPTR MODE JMP GETIT2 /JUMP IF GCH MODE TAD I CHPTR /GET A PAIR ISZ CHPTR /BUMP TO NEXT SKP /DON'T GETIT2, JMS I GCH/[XGCH] /GET A CHARACTER AND L77/[77] /JUST LOW ORDER PLEASE SNA /? JMP BLCALC-1 /YES, CALCULATE LENGTH TAD I TITPTR /GET HIGH ORDER DCA I TITPTR /SAVE BOTH ISZ TITPTR /BUMP TO NEXT ISZ XPBLURB /BUMP COUNT (MAY SKIP) TMIN, JMP GRBAGN /GET ANOTHER PAIR SKP /DON'T BUMP IF WE FALL THROUGH ISZ XPBLURB /ACCOUNT FOR HIGH-ORDER BLCALC, TAD XPBLURB /GET COUNT CMA /FOR ZERO CASE, DO IT THIS WAY TAD TITMAX/(BLURB-TITEND) /NOW WE HAVE HOW MANY DCA TITLEN /SAVE FOR PBLURB ROUTINE ISZ TITOUT /WHICH RETURN? JMP I BAKADR/(NOTITLE) /GO BACK TO TITLE OR EJECT JMS I PEJECT/[DEJECT] /DO AN EJECT FOR NEW FILES JMP I .+1/(GOFAST) /NOW BACK AND RESET INPUT ROUTINE GOFAST /THROUGH HERE SLLRL2, BLBEGN /POINTER TO OUR PORTION OF THE TITLE BLBEGN, 3720 /P TEXT "?S PAL V" VERSIO%12^66+VERSIO+6060/VERSION NUMBER REVISION^100+" -200 / TEXT " " / DAYBLB, TEXT " MON UN-DAT-ED PAGE S-" TITMAX, BLURB-TITND /MAXIMUM LENGTH OF USER BLURB BLURB, TEXT "NO INPUT!" /DEFAULT TITLE TITND= .+177&7600 /END OF USER BLURB AREA RELOC /RESTORE REAL ORIGIN / DAYS OF THE WEEK MESSAGE TABLE. DAYS, TEXT " THU" /THURSDAY TEXT " FRI" /FRIDAY TEXT " SAT" /SATURDAY TEXT " SUN" /SUNDAY TEXT " MON" /MONDAY TEXT " TUE" /TUESDAY TEXT " WED" /WEDNESDAY PAGE /GET TO NEXT PAGE TITEND= . /END OF TITLE CODE / CONTINUATION OF LITERAL PROCESSOR. LITMORE,TAD RESULT /GET PREVIOUS VALUE PUSH /STASH IT TAD PRVOPR /GET PREVIOUS OPERATOR PUSH /SAVE THAT TOO TAD LITYPE /GET PREVIOUS LITERAL TYPE PUSH /SAVE THAT ALSO TAD MRISW /GET CURRENT MRI SWITCH PUSH /SAVE IT DCA MRISW /MRI'S NOT IN PROGRESS TAD MRINDS /GET MRI BITS PUSH /SAVE THEM DCA MRINDS /NOT ANY MRI BITS NOW TAD Q /GET CURRENT LITERAL TYPE DCA LITYPE /TO ITS HOLDER ISZ LITFLG /UP LITERAL LEVEL JMS I EXPR/[XEXPR] /SCAN OFF LITERAL EXPRESSION JMS I ERR/[XERR] /COMPLAIN OF "NE" ERROR NE /THIS IS A HARMLESS "TAD" NL7777 /\ TAD LITFLG / >BACKUP LITERAL LEVEL DCA LITFLG // JMS I PTSTPE /TEST IF WE OVERFLOW THE PAGE TAD LITYPE /\ SNA / \ JMP NMSLIT / >PROCESS NUMBER-SIGN OR PAGE ZERO LITERAL SMA CLA / / JMP ZPL // OFFIN, TAD LOCNTR /\ AND L7600/[7600] / \ON PAGE ZERO "(" IS SZA CLA / /A PAGE ZERO LITERAL! JMP CPL // ZPL, JMS SERCHZ /SEARCH FOR PREVIOUS VALUE JMS INSRTL /PUT IN NEW VALUE ZPLEND, -ZPLBEG+160 /**** RELOCATE **** LITPTR= . /INSRTL TEMPORARY SERCHZ, .-. /SEARCH FOR PAGE ZERO LITERALS JMS ISIT /CALL TRUE SEARCH ROUTINE PZPLP2, ZPLPTR /**** RELOCATE **** ZPLBUF, -ZPLBEG-1 /**** RELOCATE **** JMP GOTZPL /WE FOUND IT! JMP I SERCHZ /TRY AGAIN NMSLIT, JMS SERCHZ /SEARCH PAGE ZERO FIRST CPL, JMS SERCHC /SEARCH FOR PREVIOUS VALUE JMS INSRTL /PUT IN NEW VALUE CPLEND, -CPLBEG+77 /CURRENT PAGE LITERAL LIMIT POINTER LITEND= . /INSRTL TEMPORARY SERCHC, .-. /SEARCH FOR CURRENT PAGE LITERALS JMS ISIT /CALL TRUE SEARCH ROUTINE PCPLP2, CPLPTR /**** RELOCATE **** CPLBUF, -CPLBEG-1 /CURRENT PAGE LITERAL LIMIT CONSTANT JMP GOTCPL /WE FOUND IT! JMP I SERCHC /TRY AGAIN GOTCPL, TAD LOCNTR /GET LOCATION COUNTER AND L7600/[7600] /PAGE BITS ONLY GOTZPL, DCA LITEND /SAVE PAGE BITS; 0 FOR ZPL TAD Q /GET LITERAL POINTER AND L177/[177] /ADDRESS BITS ONLY GOTZAP, TAD LITEND /PLUS CORRECT PAGE; JMP I PLGFIX IF LG DCA SVAL /PASS BACK TO EXPRESSION SCAN POP /**** /L AND /X AND PASS 2 **** JMP I CRZAPD CRZAPD, DCA MRINDS /**** /L AND /X AND PASS 2 **** CRFLIT (RELOCATED) POP /RESTORE DCA MRISW /PREVIOUS MRI CONDITION POP /RECOVER LAST DCA LITYPE /LITERAL TYPE POP /RESTORE DCA PRVOPR /PREVIOUS OPERATOR POP /RESTORE DCA RESULT /PREVIOUS EXPRESSION RESULT ISZ LITSWT /")" OR "]" FOUND? SKP /SKIP IF NONE FOUND JMP SETCHR+1 /CONTINUE FORWARD JMS I ARITH/[XARITH] /DO OLD OPERATION JMP I VALRET/[VEXIT] /NOW RETURN TO EXPRESSION CALL ISIT, .-. /LITERAL SEARCH ROUTINE TAD I ISIT /GET CPLPTR OR ZPLPTR ISZ ISIT /BUMP TO NEXT ARGUMENT DCA Q /SAVE AS OUR LITERAL POINTER TAD I Q /GET POINTER VALUE TAD I ISIT /ADD ON BEGINNING VALUE ISZ ISIT /BUMP PAST ARGUMENT DCA INSRTL /SAVE AS COUNT NL7777 /\ TAD I Q / >BACKUP FOR TEST AND SAVE POINTER DCA Q // JMP LITTST /NOW SEARCH LTLOOP, ISZ Q /BUMP LITERAL VALUE POINTER TAD I Q /GET LITERAL VALUE CIA /INVERT FOR COMPARISON TAD RESULT /ADD ON LITERAL VALUE (CURRENT) SNA CLA /SKIP IF NOT FOUND JMP I ISIT /RETURN WITH Q POINTING TO SLOT LITTST, ISZ INSRTL /ISZ FIRST, ASK QUESTIONS LATER JMP LTLOOP /GO LOOK FOR A LITERAL ISZ ISIT /WASN'T FOUND, BUMP RETURN ADDRESS JMP I ISIT /RETURN PTSTPE, TESTPE /**** RELOCATE **** PLGFIX, LGFIX /**** RELOCATE **** PXPUTOR,XPUTORG /POINTER TO REAL PUTORG ROUTINE LIT1, .-. /PUTORG INTERCEPT ROUTINE DCA LOCNTR /SAVE THE NEW ORIGIN JMS I PTSTPE /CHECK IF IT EXCEEDS THE PAGE TAD LOCNTR /GET THE ORIGIN BACK JMS I PXPUTOR/(XPUTOR)/REALLY PUNCH IT JMP I LIT1 /RETURN INSRTL, .-. /INSERT A LITERAL ROUTINE TAD I INSRTL /GET CPLEND OR ZPLEND DCA LITEND /SAVE AS LIMIT ISZ INSRTL /\ ISZ INSRTL / >BUMP TO ISIT ARGUMENT ISZ INSRTL // TAD I INSRTL /GET CPLPTR OR ZPLPTR DCA LITPTR /SAVE AS OUR LITERAL POINTER ISZ INSRTL /BUMP TO JUMP TO ISZ INSRTL /GOTCPL OR GOTZPL TAD I LITPTR /GET LITERAL POINTER TAD LITEND /COMPARE TO TABLE LIMIT SMA SZA CLA /SKIP IF TABLE FULL JMP .+4 /JUMP IF THERE IS ROOM JMS I ERR/[XERR] /COMPLAIN OF NO ROOM BE /LITERAL BUFFER EXCEEDED JMP I INSRTL /FORGET IT NL7777 /\ TAD I LITPTR / >BACKUP CPLPTR OR ZPLPTR DCA I LITPTR // TAD I LITPTR /GET NEW POINTER DCA Q /PUT IN Q AS LITERAL VALUE POINTER TAD RESULT /INSERT DCA I Q /LITERAL JMP I INSRTL /RETURN PAGE TESTPE, .-. /TEST FOR EXCEEDING PAGE GOTFIX, TAD OLDLOC /GET OLD AND L7600/[7600] /PAGE BITS CIA /\ TAD LOCNTR / \ AND L7600/[7600] / >OK IF SAME PAGE AS PREVIOUS SNA CLA / / JMP TESTXT // TAD I PUTWD /SAVE RETURN ADDRESS DCA TPE1 /IF NECESSARY TAD NOTEST/(JMP LIT2XT) /ZAP CALL TO TESTPE DCA LT2ZAP /TO PREVENT RECURSION TAD I ORSYM/[XORSYM] /GET OLD PUTWD ARGUMENT DCA TPE2 /SAVE IF NECESSARY JMS I PDUMPC /NOW DUMP OUT THE LITERALS TAD OFPLIT/(JMS TESTPE) /RESET TESTPE CALL DCA LT2ZAP /FOR FUTURE USE TAD TPE1 /RESTORE RETURN ADDRESS DCA I PUTWD /IF NECESSARY TAD TPE2 /RESTORE OLD PUTWD ARGUMENT DCA I ORSYM/[XORSYM] /IF NECESSARY TESTXT, TAD LOCNTR /CURRENT LOCATION COUNTER DCA OLDLOC /IS OLD LOCATION COUNTER ALSO JMP I TESTPE /RETURN ZPORG, TAD I PZPLPTR /\ TAD PAGZND / \ TAD TMP / \ SMA CLA / >CHECK IF WE OVERLAP PAGE ZERO LITERALS JMP .+3 / / JMS I ERR/[XERR] / / ZE // TAD I PZPLEND /\ CIA / \ TAD PAGZND / \ TAD TMP / \ SMA CLA / >IF GREATER THAN ZPLEND, UPDATE ZPLEND JMP LIT2XT / / TAD PAGZND / / TAD TMP / / DCA I PZPLEND // LIT2XT, TAD LSTSW /THIS IS THE DISPLACED INSTRUCTION JMP I LIT2 /RETURN PDUMPC, DUMPC /**** RELOCATE **** PCPLPTR,CPLPTR /**** RELOCATE **** OLDLOC, 200 /OLD LOCATION COUNTER PZPLPTR,ZPLPTR /**** RELOCATE **** PCPLEND,CPLEND /**** RELOCATE **** PZPLEND,ZPLEND /**** RELOCATE **** PAGEND, -CPLBEG+177 /CURRENT PAGE LITERAL BEGINNING CONSTANT PAGZND, -ZPLBEG+177 /**** RELOCATE **** TPE1, .-. /TEMPORARY FOR TESTPE TPE2, .-. /TEMPORARY FOR TESTPE IFNZRO OLDLOC-LITEND&177 LIT2, .-. /PUTWD INTERCEPT ROUTINE LT2ZAP, JMS TESTPE /JMP LIT2XT IF ZAPPED BY TESTPE TAD LOCNTR /\ L47, AND L177/[177] / \SAVE INVERTED PAGE CIA / /BITS IN TMP DCA TMP // TAD LOCNTR /\ AND L7600/[7600] / \CHECK FOR PAGE ZERO SNA CLA / /AND BRANCH TO ZPORG IF SO JMP ZPORG // TAD I PCPLPTR /\ TAD PAGEND/(-CPLBEG+177) / \ TAD TMP / \ SMA CLA / >CHECK IF THIS WORD OVERFLOWS LITERALS JMP .+3 / / JMS I ERR/[XERR] / / PE // TAD I PCPLEND /\ CIA / \ TAD PAGEND/(-CPLBEG+177) / \ TAD TMP / \ SMA CLA / \IF WORD IS HIGHER THAN NOTEST, JMP LIT2XT / /CPLEND, THEN UPDATE CPLEND TAD PAGEND / / TAD TMP / / DCA I PCPLEND / / JMP LIT2XT // / OFFPAGE LITERAL PROCESSOR. / SOMETIMES KNOWN AS LINK GENERATOR. / SOMETIMES KNOWN AS ILLEGAL REFERENCES. / WARNING: / THIS PROCESSOR IS IGNORANT OF RELOCATION. THE / DEVELOPMENT OF THIS ASSEMBLER WAS INHIBITED BY THE USE / OF A SYSTEM WHERE THIS VERY FEATURE COULD NOT BE TURNED / OFF. WE RECOMMEND YOU NEVER TURN IT ON! HOW LAZY CAN / YOU GET IF YOU NEED THIS KLUDGE TO GET YOUR CRUMMY / PROGRAM WORKING AT ALL! / FURTHER WARNING: / LINKS FOR "AND", "TAD", "ISZ", AND "DCA" INSTRUCTIONS / DON'T WORK IN EXTENDED MEMORY SITUATIONS WHERE (QUITE / USUALLY) THE DATA AND INSTRUCTION FIELDS DIFFER. OFPLIT, JMS TESTPE /TEST IF WE EXCEED THE PAGE OZAPLG, JMS I ERR/[XERR] /**** /O AND /Q **** 0000 LG /LINK GENERATION ERROR TAD CPLZAP/(PLGFIX&177+JMPIC) /ZAP GOTCPL ROUTINE DCA I PGOTZAP /TO COME BACK TO US JMP I POFFIN /INSERT LITERAL ON CURRENT PAGE LGFIX, DCA RESULT /AC CONTAINS Q&177 TAD GOTFIX/(TAD OLDLOC) /RESTORE DCA I PGOTZAP /CPL INSTRUCTION TAD MRINDS /\ AND LT400/(400) / \ SZA CLA / >COMPLAIN IF ALREADY INDIRECT JMS I ERR/[XERR] / / II // ISZ OFPCNT /UP BADNESS COUNT TAD L600/(600) /FORCE INDIRECTNESS DCA MRINDS /FROM CURRENT PAGE TAD L47/("'&77) /PUT FIXUP OZAPL2, CLA /**** PASS 2 AND /L AND /O **** DCA RCHAR JMP I .+1/(MRIOK) /RETURN TO MRI PROCESSOR MRIOK /THROUGH HERE CPLZAP, PLGFIX&177+JMPIC /"JMP I PLGFIX" PGOTZAP,GOTZAP /**** RELOCATE **** POFFIN, OFFIN /**** RELOCATE **** L600, 600 /CURRENT PAGE, INDIRECT LT400, 400 /INDIRECT MASK REMTBL, ZBLOCK 40 /MUST BE ZEROED OUT BEFORE PASS 1 STARTS / CURRENT PAGE LITERAL DUMPING ROUTINE. / CALLED FROM DUMPZ OR TESTPE WITH LIT2 NOPPED. DUMPC, .-. /DUMP CURRENT PAGE LITERALS TAD CPLPTR /SAVE CPLPTR DCA DMP1 /FOR REMEMBERING PURPOSES TAD I PCPLBUF /GET COUNT OF THE TAD CPLPTR /GENERATED LITERALS CLL IAC /CLEAR LINK FOR PUNCHING + CORRECT COUNT SNA /SKIP IF ANY JMP DMPXIT /JUMP IF NONE TO DMPXIT IN CASE CPLEND WAS UPDATED DCA REMSET /SAVE LITERAL COUNT TAD RCHAR /SAVE POSSIBLE PUSH /QUOTE CHARACTER DCA RCHAR /FORCE NO QUOTE TAD I POLDLOC /\ AND L7600/[7600] / >GET CURRENT PAGE BITS DCA REMBER // TAD CPLPTR /\ AND L177/[177] / >CREATE COMPLETE ORIGIN SETTING TAD REMBER // JMS I PUNORG/[XPUTORG]/PUNCH AN ORIGIN SETTING TAD LOCNTR /SAVE CURRENT DCA REMBER /ORIGIN SETTING TAD I ORSYM/[XORSYM] /GET OUR NEW ORIGIN SETTING DCA LOCNTR /PUT IN LOCNTR SO IT CAN BE LISTED DMPCLP, TAD I CPLPTR /\ ISZ CPLPTR / \ JMS I PUTWD/[XPUTWD] / >DUMP THE LITERALS OUT ISZ REMSET / / JMP DMPCLP // TAD REMBER /RESTORE DCA LOCNTR /LOCATION COUNTER POP /RESTORE SAVED DCA RCHAR /QUOTE CHARACTER DMPXIT, JMS REMBER /FIXUP ALL LITERAL POINTERS, ETC. JMP I DUMPC /RETURN DUMPZ, .-. /DUMP ALL LITERALS ROUTINE JMS DUMPC /DUMP CPL'S FIRST REMLEN, SMA SZA CLA /NOT NOW (EXTRANEOUS SKIPS TO GENERATE A 7740) JMP DMPZIT /LATER TAD REMLEN/(-40) /SET UP DCA REMSET /COUNTER TAD REMST /SET UP DCA REMPTR /POINTER DCA I REMPTR /CLEAR AN ENTRY ISZ REMPTR /BUMP UP POINTER ISZ REMSET /BUMP UP COUNT JMP .-3 /GO BACK 'TIL DONE ISZ DUMPC /RETURN JMP REMIND /TO MIDDLE OF REMBER DMPZIT, TAD ZPLPTR /\ AND L177/[177] / \ SNA / \RETURN IF NO LITERALS JMP DMPZXT / /ELSE SET UP COUNT TAD L7600/[7600] / / DCA REMSET // TAD ZPLPTR /\ AND L177/[177] / >PUNCH OUT LITERAL ORIGIN SETTING JMS I PUNORG/[XPUTORG]// TAD I ORSYM/[XORSYM] /GET IT BACK IN CASE OF RELOCATION DCA LOCNTR /PUT IN LOCNTR FOR LISTING DCA I POLDLOC /PREVENT TESTPE PROBLEMS DMPZLP, TAD I ZPLPTR /\ ISZ ZPLPTR / \ JMS I PUTWD/[XPUTWD] / >DUMP THE LITERALS OUT ISZ REMSET / / JMP DMPZLP // DMPZXT, TAD ZPLRST /RESET DCA I PZPLND2 /ZPLEND JMP I DUMPZ /RETURN REMBER, .-. /LITERAL POINTER RESET ROUTINE TAD I POLDLOC /GET OLD PAGE BITS JMS REMSET /SET UP POINTER TAD DMP1 /GET CPLPTR RELIC CIA /INVERT AND L77/[77] /GET POSITIVE OFFSET JMS I ROR6/[XROR6] /MOVE DOWN RAR /TOO FAR DOWN IS ACTUALLY UP DCA REMSET /SAVE HIGH ORDER ENTRY TAD I ACPLEND /GET LIMIT VALUE CMA /INVERT IT AND L77/[77] /JUST POSITIVE OFFSET SLEZAP, TAD REMSET /PLUS OTHER ENTRY **** /E **** 7600 DCA I REMPTR /INTO TABLE TAD LOCNTR /GET NEW PAGE BITS REMIND, JMS REMSET /SET UP POINTER TAD I REMPTR /GET ENTRY CMA /INVERT IT AND L77/[77] /JUST LIMIT HALF TAD MCPLBEG/(-CPLBEG) /ADJUST CONSTANT DCA I ACPLEND /PUT IN LIMIT VALUE TAD I REMPTR /GET ENTRY PAIR AGAIN JMS I ROR6/[XROR6] /MOVE DOWN AND L77/[77] /JUST POINTER ENTRY TAD MCPLBEG/(-CPLBEG) /ADD NEGATIVE CONSTANT TO NEGATIVE OFFSET CIA /INVERSION FIXES EVERYTHING DCA CPLPTR /PUT INTO POINTER NL0001 /\ TAD CPLPTR / \SET UP CPLBUF AS A FUNCTION CLL CIA / /OF NEW VALUE OF CPLPTR DCA I PCPLBUF // JMP I REMBER / REMSET, .-. /TABLE SETUP ROUTINE AND L7600/[7600] /JUST PAGE BITS JMS I ROR6/[XROR6] /MOVE DOWN TO RAR /CREATE OFFSET TAD REMST /ADD ON TABLE BASE DCA REMPTR /STORE IN POINTER JMP I REMSET /RETURN ACPLEND,CPLEND /**** RELOCATE **** CPLPTR, CPLBEG /CURRENT PAGE LITERAL POINTER DMP1, .-. /CPLPTR TEMPORARY FOR REMBER MCPLBEG,-CPLBEG /CURRENT PAGE LITERAL BEGINNING POINTER PCPLBUF,CPLBUF /**** RELOCATE **** POLDLOC,OLDLOC /**** RELOCATE **** PUNORG, XPUTORG /REAL PUTORG ROUTINE PZPLND2,ZPLEND /**** RELOCATE **** REMPTR, .-. /POINTER TO REMBER ENTRY REMST, REMTBL /**** RELOCATE **** ZPLPTR, ZPLBEG /**** RELOCATE **** ZPLRST, -ZPLBEG+160 /**** RELOCATE **** / LISTAPE ROUTINE. / P7CH ROUTINE COMES HERE WITH FULL ASCII CHARACTER IN AC. /LTFROM,RELOC BINOUT /FOOL THE ASSEMBLER /LTOUT, .-. /LISTAPE OUTPUT ROUTINE / AND L177 /JUST 7-BIT / SZA /? / TAD L7763 /? / SNA /SKIP IF NOT / JMP I LTOUT /YES, IGNORE / TAD L3 /? / SZA /SKIP IF YES / TAD L12 /RESTORE CHARACTER / AND L77 /JUST TO BE SURE / SNA /SKIP IF NORMAL / JMP LTEOL /GO DO / JMS LTSTORE /PUT AWAY CHARACTER / JMP I LTOUT /RETURN /LTEOL, JMS LTSTORE /PUT IN 0 / ISZ LTPTR /BUMP PAST / DCA I LTPTR /ZERO OUT IN CASE LAST / TAD LTLFT /RESET / DCA LTPUT /CO-ROUTINE / JMP I LTOUT /RETURN /LTSTORE,.-. /STORE A CHARACTER ROUTINE / DCA LTEMP /SAVE TEMPORARILY / JMP I LTPUT /GO WHEREVER /LTPUT, LTLEFT /LOW LEVEL ROUTINE / DCA I LTPTR /STORE WHATEVER / JMP I LTSTORE /RETURN TO CALLER /LTLEFT,TAD LTPTR /GET CURRENT POINTER VALUE / TAD LTLIM /COMPARE TO LIMIT /LSYSIO,SZA CLA /SKIP IF EQUAL / JMP LTOK /FORGET IT /LTRITE,JMS I LSYSIO /CALL I/O TO WRITE /LTBUFF,BINARY /FROM THIS BUFFER /LTLEN, 2^100 /**** 8K **** 4^100 + UNIT FROM /T /LTBLK, 7777 /**** /T **** INITIALIZED /LT8KZP,NL0002 /**** 8K **** TAD L4 / TAD LTBLK /UPDATE BLOCK / DCA LTBLK /SAVE IT / TAD LTBUFF /RESET / DCA LTPTR /POINTER /LTOK, TAD LTEMP /GET PASSED CHARACTER / STL RTL /SHIFT LEFT / STL RTL /WITH APPROPRIATE / STL RTL /GARBAGE / JMS LTPUT /STORE IT / TAD I LTPTR /GET OLD CHARACTER / AND LT7700 /JUST OLD 6 BITS / TAD LTEMP /ADD ON LATEST / JMS LTPUT /STORE PAIR / ISZ LTPTR /BUMP TO NEXT PAIR / JMP LTLEFT /GO DO NEXT /LTEOTP,LNEXT /POINTER TO WHERE TO GO NEXT / TAD LTEOTP /GET POINTER / DCA LTSTORE /SET IT UP / JMP LTRITE /CLOSE LAST BUFFER /L7763, 7763 /CONSTANT 7763 /LTEMP, .-. /CHARACTER TEMPORARY /LTLFT, LTLEFT /RESET VALUE /LT7700,7700 /LEFT MASK /LTPTR, BINARY /BUFFER POINTER /LTLIM, -BINARY-400 /**** 8K **** -BINARY-1000 / RELOC PAGE / LITERAL CROSS-REFERENCE COMES HERE. CRFLIT, NL7775 /SETUP LITERAL TYPE ENTRY JMS I QPUTREF /OUTPUT IT TAD Q /GET LITERAL'S ADDRESS DCA QTMP /SAVE IT TAD SVAL /GET LITERAL ITSELF IN ADDRESS FORM JMS I QPUTREF /OUTPUT IT TAD I QTMP /GET THE ACTUAL LITERAL VALUE JMS I QPUTREF /OUTPUT IT POP /DO THE DCA MRINDS /DISPLACED INSTRUCTIONS JMP I .+1 /NOW GO BACK SLQRLF, GOTZAP+4 /**** RELOCATE **** QPUTREF,PUTREF /**** RELOCATE **** QTMP, .-. /TEMPORARY; SYSTEM UNIT BITS STORED HERE FOR SYSLOOK SYSLOOK,.-. /ROUTINE TO LOOK UP SYSTEMS TAD SNMPT/(4^100) /GET FUNCTION TAD QTMP /ADD ON UNIT BITS DCA SNMPT /STORE BACK JMS I SSYSIO/(SYSIO) /CALL I/O ROUTINES SCATPTR,PAL /WHERE CATALOG GOES SNMPT, 4^100+.-. /READ FOUR BLOCKS; UNIT BITS FILLED IN SNMCT, SYSCAT /CATALOG BLOCK NL7777 /BACKUP TAD SCATPTR /NOW HAVE AUTO-INDEX POINTER JMP .+5 /GO INTO IT SAGAIN, TAD SNMCT /GET CURRENT COUNT CMA /INVERT TAD TXR /ADD ON POINTER TAD L3/[3] /AND ENTRY OFFSET DCA TXR /NOW POINTS TO NEXT ENTRY TAD SYSLOOK /POINT TO DCA SNMPT /SEARCH ARGUMENT NL7775 /SET FOR DCA SNMCT /THREE WORDS TAD I TXR /FETCH FIRST WORD OF NAME SNA /SKIP IF ITS GOOD JMP NOSYS /JUMP IF END OF CATALOG SKP /SKIP DOING ANOTHER FETCH SCOMPR, TAD I TXR /FETCH A CATALOG WORD CIA /COMPLEMENT IT TAD I SNMPT /ADD ON A SEARCH ARG WORD SSYSIO, SZA CLA /SKIP IF EQUAL JMP SAGAIN /GO TRY NEXT ENTRY ISZ SNMPT /BUMP SEARCH ARGUMENT POINTER ISZ SNMCT /BUMP COUNT JMP SCOMPR /JUMP IF MORE TO DO TAD I TXR /FETCH STARTING BLOCK DCA I (SBLOCK) /STASH IN SYSTEM LOADER TAD I TXR /FETCH LOAD/LENGTH WORD DCA PRTRIM /SAVE IT TAD PRTRIM /RECOVER WORD AND L7600/[7600] /GET LOADING PAGE BITS DCA I (SCORE) /SAVE IN SYSTEM LOADER TAD PRTRIM /GET BACK WORD JMS I ROR6/[XROR6] /SHIFT IT AROUND AND L7600/[7600] /JUST LENGTH BITS CLL RAR /PUT IN POSITION TAD QTMP /ADD ON UNIT BITS DCA I (SFUN) /SAVE IN SYSTEM LOADER TAD I TXR /GET STARTING ADDRESS AND L7600/[7600] /JUST PAGE BITS IAC /ADD ON CHAIN OFFSET DCA I (SYSTART) /SAVE FOR SYSTEM LOADER TAD (SLOAD) /TELL ASSEMBLER DCA I (LNEXT) /TO CHAIN TO SYSTEM JMP I SNMPT /AND RETURN TO CALLER PRNTFND,TAD (NFMSG) /SETUP FOR DCA SYSLOOK /NEXT MESSAGE DCA TRMZAP /BOOTSTRAP NEXT TIME NOSYS, TAD I SYSLOOK /\ JMS I ROR6/[XROR6] / >PRINT HIGH ORDER JMS PRTRIM // TAD I SYSLOOK /PRINT JMS PRTRIM /LOW ORDER ISZ SYSLOOK /BUMP TO NEXT PAIR JMP NOSYS /GO BACK FOR MORE PRTRIM, .-. /PRINT A CHARACTER ROUTINE AND L77/[77] /JUST SIX-BIT SZA /END OF LIST? JMP TRIMOK /NO, GO PRINT IT TRMZAP, JMP PRNTFND /YES, GO DO NEXT **** SECOND MESSAGE **** 0000 JMP I L7600/[SBOOT] /BYE, BYE! TRIMOK, JMS I P6CH/[XP6CH] /PRINT IT JMP I PRTRIM /RETURN / LINC MODE REPLACEMENT LIST. LNCLST, 0 /**** /8 OR /9 **** LMZAPA LMZAPB&177+JMPIC /"JMP I LMZAPB" LMZAPB /CHECK MODE BEFORE STARTING PASS 1 LNCRL1, LMLODE /**** RELOCATE **** SLDCNT; -2 /LOAD BOTH TABLES LMVCNT; -600-1 /MOVE DOWN LMODE, PMODE CODE LMZAPZ; LMZAPY&177+JMPIC/"JMP I LMZAPY" LMZAPY /FINALIZE SYMBOL TABLE AT END OF EACH PASS LNCRL2, LMFIX /**** RELOCATE **** LMZAP8; LMZAP9&177+JMPIC/"JMP I LMZAP9" LMZAP9 /INTERCEPT AND MODIFY LMODE SYMBOL VALUES LNCRL3, LNCSYM /**** RELOCATE **** LMZAP6; LMZAP7&177+JMPIC/"JMP I LMZAP7" LMZAP7 /INTERCEPT ORIGIN SETTINGS LNCRL4, LMORG /**** RELOCATE **** PNWST1 /CHECK MODE BEFORE STARTING PASS 2 LNCRL5, LMLODE /**** RELOCATE **** LMFXTAB /MAKE FIXTAB FIX LMODE, PMODE TABLES LNCRL7, LMFXTB /**** RELOCATE **** "\&77+XTRATAB /ENABLE "\" OPERATOR LNCRL8, BKSLSH /**** RELOCATE **** SL9ZAP, LNCORG; 4020 /**** /8 **** 0000 LNORG2; 4020 /USE LMODE LOCNTR; 4020 /ORIGINS 0 /THIS ENDS THE LIST PAGE / THE LAST 160 LOCATIONS OF THIS PAGE ARE USED FOR PAGE ZERO LITERALS. ZPLBEG= . /PREVIOUS PAGE CONTAINS PAGE ZERO LITERALS LNCODE= . /START OF LINC MODE STUFF / LINC MODE MRI'S ARE HANDLED HERE. LNCMRI, DCA MRINDS /NO PAGE BITS IN LINC MODE! JMS I EXPR/[XEXPR] /GET THE ARGUMENT MODIF1, PREP-LREP /INTER-REPLACEMENT TABLE OFFSET JMP I .+1/(MRILNC) /BACK TO THE MRI PROCESSOR MRILNC /THROUGH HERE CHKMODE,.-. /MODE CHECK ROUTINE TAD MODE /ADD ON CURRENT MODE SNA /SKIP IF DIFFERENT JMP I CHKMODE /JUMP IF SAME TAD MODE /CANCEL OLD MODE DCA MODE /SAVE NEW MODE TAD MODE /GET LATEST MODE SNA CLA /SKIP IF LMODE TAD MODIF1/(PREP-LREP) /USE PMODE TAD MODTBL /ADD ON REPLACEMENT BASE DCA SXR /STASH AS REPLACEMENT POINTER TAD RPADR /SETUP DCA TXR /REPLACEMENT ADDRESS POINTER TAD I TXR /GET AN ADDRESS SNA /END OF LIST? JMP MODMORE /YES, GO FIX TABLES DCA NM1 /NO, SAVE IT TAD I SXR /GET A REPLACEMENT VALUE DCA I NM1 /ZAP IT IN JMP .-6 /GO DO ANOTHER ONE MODMORE,TAD MODE /GET CURRENT MODE SNA CLA /SKIP IF LMODE TAD MODIF2/(PTABLE-LTABLE) /USE PMODE VALUE TAD MLTABLE /ADD ON SYMBOL BASE DCA FROMPTR /STASH IT TAD MODE /GET MODE AGAIN SZA CLA /SKIP IF PMODE TAD MODIF2 /USE PMODE BASE AS ALTER EGO TAD MLTABLE /ADD ON SYMBOL BASE DCA TOPTR /STASH IT MODLUP, TAD FROMPTR /GET NEW MODE POINTER DCA SXR /SETUP AUTOINDEX REGISTER TAD I FROMPTR /GET A PAIR SNA /END OF LIST? JMP I CHKMODE /YES, WE'RE DONE AND L1777/[1777] /JUST SYMBOL BITS DCA NM1 /STASH IT IN STRIPPED FORM NL3777 /SETUP SYMBOL MASK AND I SXR /NOW HAVE SECOND PAIR DCA NM2 /STASH IT NL3777 /SETUP SYMBOL MASK AND I SXR /GET THIRD PAIR DCA NM3 /STASH IT NL7777 /SETUP DCA INITSW /MASK SWITCH TAD L7774/[-4] /\ DCA MCNT / \SETUP THE TAD L7774/[-4] / /SYMBOL COUNTS DCA MCNT2 // TAD I PINXIT/(INXIT) /\ PUSH / \SAVE PREVIOUS TAD I PCRZPA/(CRZAPA) / /TRAPPED CODE PUSH // TAD LORIG1/(AND L6000) /\ DCA I PINXIT/(INXIT) / \RESTORE THE TAD LORIG2/(CDF 00) / /ORIGINAL CODE DCA I PCRZPA/(CRZAPA) // NL7777 /INDICATE "NON-ENTER" MODE JMS I INSYM/[INSM] /LOOKUP THE LATEST SYMBOL POP /\ DCA I PCRZPA/(CRZAPA) / \RESTORE THE POP / /TRAPPED CODE DCA I PINXIT/(INXIT) // JMS I SETSYM/[XSETSM] /SETUP THE SYMBOL POINTERS LORIG2, CDF 00 /BUT NOT THE DATA FIELD MLOOP, TAD NMFLGS /GET SYMBOL'S FLAGS SNA CLA /SKIP IF DEFINED JMP NOTHERE /JUMP IF NOT DEFINED TAD I FROMPTR /GET NEW ELEMENT DCA NM1 /SAVE IT JMS I SETFLD/[XSTFLD] /SET CORRECT DATA FIELD TAD SXR /GET CURRENT POINTER DCA TXR /SAVE IT TAD I SXR /GET A WORD DCA NM2 /SAVE IT ISZ MCNT2 /DOING VALUE WORD? SKP /SKIP IF NOT JMP MNOFIX /JUMP IF SO ISZ INITSW /FIRST TIME? SKP /SKIP IF NOT NL4000 /INITIALIZE MASK TO 1777 CLL CMA RAR /NOW HAVE 1777 OR 3777 IF SECONDARY DCA LMASK /SAVE MASK TAD LMASK /GET IT BACK CMA /NEED INVERTED FORM HERE AND NM2 /GET LATEST BITS DCA NM3 /SAVE THEM TAD LMASK /GET LASTEST SYMBOL MASK AND NM1 /STRIP BITS FROM NEW MODE'S VALUE TAD NM3 /USE CURRENT BITS VALUE DCA NM1 /SAVE ADJUSTED VALUE MNOFIX, TAD NM1 /GET NEW MODE VALUE AFTER POSSIBLE ADJUSTMENT DCA I TXR /STASH IN MAIN TABLE CDF 00 /BACK TO FIELD 0 TAD NM1 /GET ORIGINAL VALUE (ADJUSTED) DCA I FROMPTR /STORE IT BACK IN CASE IT CHANGED TAD NM2 /GET LATEST OLD VALUE DCA I TOPTR /STORE IN OLD MODE TABLE NOTHERE,ISZ FROMPTR /BUMP TO NEXT ISZ TOPTR /BUMP TO NEXT ISZ MCNT /DONE WHOLE SYMBOL? JMP MLOOP /NO, GO DO ANOTHER WORD JMP MODLUP /YES, GO GET ANOTHER SYMBOL RPADR, REPADR-1 /**** RELOCATE **** MODTBL, LREP-1 /**** RELOCATE **** MLTABLE,LTABLE /**** RELOCATE **** MODIF2, PTABLE-LTABLE /INTER-SYMBOL TABLE OFFSET FROMPTR,.-. /FROM TABLE POINTER TOPTR, .-. /TO TABLE POINTER MCNT, .-. /SYMBOL COUNTER MCNT2, .-. /AUXILARY SYMBOL COUNTER INITSW, .-. /INITIAL MASK SWITCH LMASK, .-. /SYMBOL MASK LORIG1, AND L6000/[6000] /ORIGINAL CONTENTS OF INXIT PINXIT, INXIT /WHERE IT WAS PCRZPA, CRZAPA /POINTER TO DISPLACED INSTRUCTION / LMODE/PMODE ADDRESS LIST. REPADR, LMZAP1 /MRI LMZAP2 /ZAPS LMZAP4 /MRI MASK ADDRESS LMZAP3 /ADD ZAP ADDRESS XSUB /SUBTRACT ZAP ADDRESS IBIT /I VALUE ADDRESS LMZAPJ /DTERR MASK LMZAPL /ASIGN INVERT LMZAP5 /POINT MASK 0 /THIS ENDS THE LIST MLTAB2, LTABLE+2 /**** RELOCATE **** CNTSYMS,-7 /NUMBER OF INTERNAL SYMBOLS PER TABLE MODIFF, PTABLE-LTABLE /INTER-TABLE OFFSET PXFXT2, XFXT2 /POINTER TO MAIN FIXTAB ROUTINE / COMES HERE TO "FIXTAB" LMODE, PMODE TABLES BEFORE MAIN SYMBOL TABLE. LMFXTB, NL7777 /SETUP THE DCA NM3 /SWITCH FXLOOP, TAD MLTAB2 /CALCULATE TABLE ADDRESS DCA NM1 /STASH POINTER TAD CNTSYMS/(-7) /SETUP THE SYMBOL DCA NM2 /LENGTH COUNTER FXLUP2, TAD I NM1 /GET A WORD RAL /FIX BIT TO LINK STL RAR /FORCE IT ON DCA I NM1 /STORE IT BACK TAD NM1 /\ TAD L4/[4] / >UPDATE TO NEXT SYMBOL DCA NM1 // ISZ NM2 /DONE ALL SYMBOLS? JMP FXLUP2 /NO, GO BACK FOR MORE ISZ NM3 /DONE BOTH TABLES? JMP I PXFXT2/(XFXT2) /YES TAD MODIFF/(PTABLE-LTABLE) /NO, GET INTER-TABLE OFFSET JMP FXLOOP /GO DO OTHER TABLE / COMES HERE FROM "ASMIFN", "ASMIFZ", "ASMIFM" WITH APPROPRIATE AC CONTENTS. ASMCOM, DCA ASSTM2 /STORE IN-LINE FOR TEST LATER JMS I EXPR/[XEXPR] /GET ARGUMENT JMP I PSDRET/[XPSDRET]/WASN'T ANY TAD RESULT /GET RESULT ASSTM2, .-. /SKIP AS APPROPRIATE JMP I PSDRET/[XPSDRET]/FORGET IT NL7776 /SETUP FOR "ASMSKP 1" JMP ASSYIN /CONTINUE THERE / COMES HERE FROM "ASMSKP". SKIPAS, JMS I EXPR/XEXPR] /GET ARGUMENT JMP I PSDRET/[XPSDRET]/WASN'T ANY TAD RESULT /GET RESULTS OF ARGUMENT SCAN SNA /ZERO VALUE? JMP I PSDRET/[XPSDRET]/YES, FORGET IT CMA /INVERT ASSYIN, DCA ASSTMP /SAVE IN ONE'S COMPLEMENT FORM TAD CHAR /GET DELIMITER SNA CLA /SKIP IF NOT ISZ ASSTMP /BUMP IF TO DO ONE LESS ISZ FLSHSW /INDICATE CONDITIONALS IN PROGRESS JMS I PRTBUF/[XPRTBF] /DUMP THE BUFFER NOW JMS I GCH/[XGCH] /GET A CHARACTER SZA CLA /SKIP IF JMP .-2 /THROW IT AWAY JMS I PRTBUF/[XPRTBF] /PRINT OUT A BUFFER'S WORTH ISZ ASSTMP /DONE ENOUGH? JMP .-5 /NO, GO BACK DCA FLSHSW /TURN OFF CONDITIONAL SWITCH JMP I .+1/(CONDIN) /NOW CONTINUE CONDIN /THERE / "SEGMNT" PSEUDO-OP COMES HERE. SEGMENT,JMS I EXPR/[XEXPR] /GET ARGUMENT IF ANY JMP ANEWSEG /WASN'T ANY TAD RESULT /GET VALUE CLL RTR /MOVE DOWN FIELD BITS AND L77/[77] /ISOLATE FIELD DCA I OPVAL/[XOPVAL] /SAVE IT TAD CURFLD /GET CURRENT FIELD CIA /INVERT FOR TEST TAD I OPVAL/[XOPVAL] /COMPARE TO DESIRED FIELD SZA CLA /SKIP IF SAME JMS I PPUNFLD/(PUNFLD)/OUTPUT NEW FIELD SETTING TAD RESULT /GET VALUE CLL RAR;RTR /MOVE PAGE BITS DOWN AND L6000/[6000] /JUST MEMORY QUARTER BITS JMP I PPAGMOR/[PAGMOR]/FINISH THERE ANEWSEG,CLL /CLEAN UP TAD LOCNTR /GET CURRENT LOCATION TAD L1777/[1777] /ADVANCE TO NEXT SEGMENT AND L6000/[6000] /JUST MEMORY QUARTER BITS RAL /START MOVING BACK TAD CURFLD /ADD ON CURRENT FIELD RTL /NOW HAVE NEXT SEGMENT DCA RESULT /SAVE IT JMP SEGMENT+2 /KEEP GOING PPUNFLD,PUNFLD /POINTER TO FIELD SETTING PUNCH ROUTINE ASSTMP, .-. /TEMPORARY / SYMBOL HANDLING IS INTERCEPTED HERE. LNCSYM, DCA NMFLGS /DO DISPLACED INSTRUCTION TAD NM1 /GET FIRST SYMBOL PAIR SNA CLA /SKIP IF ACTUALLY A SYMBOL JMP NOTSYM /FORGET IT! JMS I SETSYM/[XSETSM] /SETUP SYMBOL AND I SXR /BUMP TO AND I SXR /COMMA WORD TAD MODE /GET CURRENT MODE AND I SXR /NOW HAVE COMMA AND LMODE SNA CLA /SKIP IF BOTH SET JMP NORMSYM /JUMP IF EITHER OR BOTH OFF TAD LOCNTR /GET CURRENT AND L6000/[6000] /JUST SEGMENT BITS CIA /COMPARE CURRENT TAD SVAL /WITH SYMBOL AND L6000/[6000] /JUST SEGMENT BITS SZA CLA /SKIP IF EQUAL NL2000 /SET DATA FIELD BIT IF DIFFERENT DCA ASSTMP /SAVE FINAL DATA FIELD BIT VALUE TAD SVAL /GET CURRENT SYMBOL AND L1777/[1777] /JUST 10-BIT VALUE TAD ASSTMP /MAYBE DATA FIELD BIT DCA SVAL /SAVE IT BACK NORMSYM,CDF 00 /BACK TO FIELD 0 AND I SXR /RESTORE SXR TO ORIGINAL VALUE NOTSYM, TAD I INSYM/[INSM] /GET CALLER DCA ASSTMP /SET IT UP JMP I ASSTMP /RETURN TO CALLER / LMODE ORIGIN HANDLING COMES HERE. LMORG, TAD MODE /GET CURRENT MODE SNA CLA /SKIP IF LINC MODE JMP FULLORG /JUMP IF PMODE TAD RESULT /GET ARGUMENT AND L6000/[6000] /JUST SEGMENT BITS SNA CLA /SKIP IF A NEW SEGMENT TAD LOCNTR /ELSE USE OLD SEGMENT AND L6000/[6000] /ONLY USE SEGMENT BITS (IF EVEN THAT MUCH!) FULLORG,TAD RESULT /ADD ON LATEST JMP I PPAGMOR/[PAGMOR]/FINISH THERE LREP, LMZAP2&177+JMPIC /"JMP I LMZAP2" LNCRL6, LNCMRI /**** RELOCATE **** AND L1777/[1777] /MASK TO 10 BITS SZL /CHECK FOR END AROUND CARRY CMA /USE ONE'S COMPLEMENT 20 /USE 20 FOR I AND L1777/[1777] /USE 10 BIT MASK CMA /USE ONE'S COMPLEMENT AND L1777/[1777] /USE 10 BIT MASK PREP, TAD L200/[200] /USE CURRENT PAGE DCA MRINDS /BY DEFAULT AND L177/[177] /MASK TO 7 BITS SKP /NO END AROUND CARRY CIA /USE TWO'S COMPLEMENT 400 /USE 400 FOR I NOP /USE 12 BIT MASK CIA /USE TWO'S COMPLEMENT NOP /USE 12 BIT MASK / BACKSLASH "\" OPERATOR. BKSLSH, TAD ABCKSL /GET "\" ADDRESS JMP I .+1/(UPARRX+1) /CONTINUE THERE UPARRX+1 /THROUGH HERE ABCKSL, BCKSL /**** RELOCATE **** LCHKMOD,CHKMODE /**** RELOCATE **** BCKSL, DCA SVAL /SAVE LATEST TERM TAD RESULT /X 0 1 2 3 4 5 6 7 8 9 10 11 CLL RAR /11 X 0 1 2 3 4 5 6 7 8 9 10 RTR /9 10 11 X 0 1 2 3 4 5 6 7 8 DCA TMP /SAVE IT TAD TMP /GET IT BACK AND L1777/[1777] /9 X X X 0 1 2 3 4 5 6 7 8 TAD TMP /9 10 11 0 1 2 3 4 5 6 7 8 X RAR /X 9 10 11 0 1 2 3 4 5 6 7 8 JMP I .+1/(XBCKIN) /CONTINUE THERE XBCKIN /THROUGH HERE / COMES HERE TO SETUP FINAL MODE AFTER LOADING THE SYMBOL TABLE. / ALSO COMES HERE BEFORE OPTIONALLY STARTING UP THE SECOND PASS. LMLODE, TAD I LMSWY9/(SWY9) /GET SWITCHES /Y-/9 RTR /8 TO LINK CLA CML RAR /4000 IF /8 OFF, 0 IF /8 ON JMS I LCHKMODE/(CHKMODE) /CHECK IF LMODE NEEDED HERE JMP I XNWSTM/[NEWSTM] /NOW START UP A PASS LMSWY9, SWY9 /POINTER TO /Y-/9 / COMES HERE AFTER END OF A PASS TO REVERSE MODES. / THIS FREEZES THE MAIN SYMBOL TABLE IN CASE /S IS SPECIFIED. LMFIX, NL4000 /GET REVERSING BIT TAD MODE /ADD ON CURRENT MODE JMS I LCHKMODE/(CHKMODE) /THIS WILL REVERSE MODES NL4000 /GET REVERSING BIT TAD MODE /ADD ON CURRENT MODE JMS I LCHKMODE/(CHKMODE) /THIS WILL PUT IT BACK TAD I LMSWY9/(SWY9) /GET SWITCHES /Y-/9 RTR /8 TO LINK CLA CML RAR /4000 IF /8 OFF, 0 IF /8 ON JMS I LCHKMODE/(CHKMODE) /CHECK IF LMODE NEEDED HERE JMP I .+1/(EOFZAP) /NOW CONTINUE EOFZAP /THROUGH HERE / PMODE COMES HERE WITH AC=0000. / LMODE COMES HERE WITH AC=4000. PLMODE, JMS I LCHKMODE/(CHKMODE) /CHECK IF CHANGE REQUIRED JMP I PSDRET/[XPSDRET] /RETURN / CONTINUATION OF "DTORG" PSEUDO-OP. XDTOR2, JMS I EXPR/[XEXPR] /GET THE ARGUMENT (IF ANY) NOP /DON'T CARE TAD RESULT /GET RESULT OF SCAN DCA I OPVAL/[XOPVAL] /SETUP PUTFLD ROUTINE TAD RESULT /GET THE RESULT BACK AGAIN JMS I PUTFLD/[XPUTFLD] /OUTPUT IT JMP I PSDRET/[XPSDRET] /RETURN / PMODE COPY OF ANOMALOUS SYMBOLS. PTABLE, "H-300^45+"L-300+NFLAG /HLT "T-300^45+PFLAG 0000 HLT /PMODE HLT / "I-300^45+SFLAG /I / PFLAG / 0000 / EYE "J-300^45+"M-300+MFLAG /JMP "P-300+PFLAG 0000 JMP 0000 /PMODE JMP "N-300^45+"O-300+NFLAG /NOP "P-300^45+PFLAG 0000 NOP /PMODE NOP "O-300^45+"P-300+NFLAG /OPR "R-300^45+PFLAG 0000 OPR /PMODE OPR "S-300^45+"A-300+NFLAG /SAM "M-300+PFLAG 0000 SAM /PMODE SAM "S-300^45+"K-300+NFLAG /SKP "M-300+PFLAG 0000 SKP /PMODE SKP "S-300^45+"T-300+NFLAG /STA "A-300^45+PFLAG 0000 NL7777 /PMODE STA 0000 /THIS ENDS THE LIST / LMODE COPY OF ANOMALOUS SYMBOLS. LTABLE, "H-300^45+"L-300+NFLAG /HLT "T-300^45+PFLAG 0000 0000 /LMODE HLT / "I-300^45+SFLAG /I / PFLAG / 0000 / EYE "J-300^45+"M-300+MFLAG /JMP "P-300^45+PFLAG 0000 6000 /LMODE JMP "N-300^45+"O-300+NFLAG /NOP "P-300^45+PFLAG 0000 0016 /LMODE NOP "O-300^45+"P-300+NFLAG /OPR "R-300^45+PFLAG 0000 0500 /LMODE OPR "S-300^45+"A-300+NFLAG /SAM "M-300^45+PFLAG 0000 0100 /LMODE SAM "S-300^45+"K-300+NFLAG /SKP "P-300^45+PFLAG 0000 0466 /LMODE SKP "S-300^45+"T-300+NFLAG /STA "A-300^45+PFLAG 0000 1040 /LMODE STA 0000 /THIS ENDS THE LIST PAGE EXCODE= . /X CODE HERE / INXIT COMES HERE WITH NMFLGS IN AC, SXR POINTING TO VALUE WORD, / SYMBOL'S DATA FIELD SET. CREFSYM,AND L6000/[6000] /JUST FLAG BITS DCA NMFLGS /SAVE AC NL7775 /\ TAD SXR / >BACKUP SYMBOL POINTER DCA TXR // TAD I TXR /GET PFLAG WORD CDF 00 /BACK TO FIELD 0 CRAZP9, SPA CLA /**** /A **** SKP CLA JMP CRFEND /JUMP IF SYMBOL NOT NEEDED TAD OPSW /GET EQUATE/COMMA SWITCH SZA CLA /SKIP IF NOT EQUATE OR COMMA TAD I OPVAL/[XOPVAL] /GET CALLER OF OPVAL IF IT IS EITHER ONE TAD EQUVAL/(-EQUADR)/COMPARE TO EQUATE SNA CLA /SKIP IF OTHERWISE JMP CRFEND /FORGET IT IF EQUATE JMS GETREF /GET THE SYMBOL TAD OPSW /GET EQUATE/COMMA SWITCH CRFIO, SZA CLA /PREVENT CHECKING IF NORMAL REFERENCE TAD I OPVAL/[XOPVAL] /GET THE CALLER OF OPVAL TAD COMVAL/(-COMADR)/IS IT "COMMA"? SZA CLA /SKIP IF SO JMP CRFEND /JUMP IF NOT "COMMA" CALLING NL2000 /OUTPUT "DEFINED BY COMMA" JMS PUTREF /BIT SEQUENCE TAD SVAL /GET DEFINING VALUE JMS PUTREF /OUTPUT IT ALSO CRFEND, TAD NMFLGS /RESTORE AC JMP I .+1/(LMZAP8) /GO BACK TO INXIT ROUTINE LMZAP8 /THROUGH HERE / EQUATE ROUTINE COMES HERE WHEN A SYMBOL IS DEFINED. CRFEQU, JMS GETREF /GET THE SYMBOL ITSELF NL4000 /SET "DEFINED BY EQUATE" BIT JMS PUTREF /OUTPUT IT TAD RESULT /GET DEFINITION JMS PUTREF /OUTPUT IT NL7777 /DO DISPLACED TAD EQUSW /INSTRUCTIONS JMP I .+1/(L6201+3) /GO BACK L6201+3 /THROUGH HERE COMVAL, -COMADR /COMMA CALLING OPVAL CONSTANT CRWCNT, -200 /BUFFER COUNT EQUVAL, -EQUADR /EQUATE CALLING OPVAL CONSTANT GETREF, .-. /SYMBOL REFERENCE ROUTINE TAD SXR /GET THE POINTER TAD L7774/[-4] /BACKUP TO FLAG WORD DCA TXR /SAVE FOR RETRIEVAL NL7775 /SETUP THE DCA CTMP2 /SYMBOL COUNT LUPCRF, JMS I SETFLD/[XSTFLD] /SETUP THE DATA FIELD TAD I TXR /GET A SYMBOL WORD CDF 00 /BACK TO FIELD 0 JMS PUTREF /OUTPUT IT ISZ CTMP2 /DONE YET? JMP LUPCRF /NO, GO BACK JMP I GETREF /YES, RETURN PUTREF, .-. /REFERENCE OUTPUT ROUTINE DCA I RXR /OUTPUT A REFERENCE ISZ CRWCNT /BUFFER DONE? JMP I PUTREF /NO, JUST RETURN JMS I CRFIO/(SYSIO) /YES, CALL I/O ROUTINES CWBUFF, REFBUF /**** RELOCATE **** CRWFUN, 1^100+WRITE+.-. /OUTPUT 1 BLOCK; UNIT BITS WILL BE ADDED ON CRWBLK, 0000 /OUTPUT BLOCK NUMBER NL7777 /\ TAD CWBUFF / >RESET OUTPUT INDEX DCA RXR // TAD L7600/[-200] /RESET THE DCA CRWCNT /WORD COUNT ISZ CRWBLK /UPDATE THE BLOCK NUMBER JMP I PUTREF /RETURN / PUNFLD ROUTINE COMES HERE TO OUTPUT THE LATEST FIELD. CRFFLD, TAD L6000/[6000] /GET FIELD SETTING FLAGS JMS PUTREF /OUTPUT IT TAD CURFLD /GET LATEST FIELD SETTING JMS PUTREF /OUTPUT IT JMP I .+1/(PNFRET) /RETURN PNFRET /THROUGH HERE DIGS, 0 /DIGIT NUMBER 1 0 /DIGIT NUMBER 2 0 /DIGIT NUMBER 3 0 /DIGIT NUMBER 4 "0&77 /DIGIT NUMBER 5 CR7706, 7706 /CONSTANT 7706 WHICH ENDS THE DIGITS CTMP2, .-. /TEMPORARY / XERR COMES HERE WITH ERROR TYPE IN AC. CRFERR, DCA CTMP2 /SAVE ERROR CODE NL7776 /SETUP JMS PUTREF /ERROR TYPE CODE TAD CTMP2 /GET PARTICULAR ERROR TYPE JMS PUTREF /OUTPUT IT TAD CTMP2 /RESTORE AC JMS I P45CH/[XP45CH] /DO DISPLACED DCA RCHAR /INSTRUCTIONS JMP I .+1/(CRERRP+1) /GO BACK TO THEM CRERRP+1 /THROUGH HERE / NEWSTM COMES HERE AT EACH BEGINNING OF A NEW STATEMENT. EXNEW, ISZ LO /BUMP LOWER WORD SKP /DO WE BUMP HIGH WORD? ISZ HI /YES TAD HI /GET HIGH WORD JMS PUTREF /OUTPUT IT TAD LO /GET LOW WORD JMS PUTREF /OUTPUT IT TAD RESET /RESET THE DCA PTR /DIGIT POINTER EXNLUP, ISZ I PTR /BUMP TO NEXT TAD I PTR /RETRIEVE DIGIT TAD CR7706/(-":!200)/IS IT PAST "9"? SZA CLA /SKIP IF SO JMP EXNEXT /JUMP IF NOT TAD L60/["0&77] /RESET THIS DCA I PTR /DIGIT TO 0 NL7777 /\ TAD PTR / >BACKUP THE POINTER DCA PTR // TAD I PTR /GET PREVIOUS DIGIT SNA /ALREADY SET? TAD L60/["0&77] /NO, INITIALIZE IT DCA I PTR /STORE BACK JMP EXNLUP /TRY AGAIN EXNEXT, TAD L40/[" &77] /GET DISPLACED INSTRUCTION JMP I .+1/(NEWRET) /CONTINUE THERE NEWRET /THROUGH HERE HI, 0 /HIGH-ORDER STATEMENT NUMBER LO, 0 /LOW-ORDER STATEMENT NUMBER PTR, DIGS+4 /DIGIT POINTER RESET, DIGS+4 /**** RELOCATE **** PAGE REFBUF= . /REFERENCES DUMPED HERE *7777 /END OF *7777 /AN OVERLAY OVLYBLK=37 /STARTING OVERLAY BLOCK FIELD 1 /GENERATE IT HERE NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WHERE IT REALLY GOES EVENTUALLY ENPUNCH /RESTORE THE BINARY OUTPUT NOW *0 /GENERATE IT IN FIELD 1 HERE ASMCOD, RELOC 200 /WHERE IN FIELD 0 IT GOES ASMBLK= OVLYBLK /BLOCK NUMBER FOR OVERLAY IFNZRO 200-. ATOM, DCA NM1 /MUST BE AT 000200 DCA NM2 /CLEAR OUT DCA NM3 /TAG FIELD TESTL /TEST FOR VALID ALPHA JMP NUMRIC /MUST BE ON PAGE 200; THIS IS THE DIGIT RETURN JMS OPCHK /THIS IS THE ALPHA RETURN TAD PNM1/(NM1) /RESET DCA ATMSPT /TAG POINTER SHFTIT, TAD CHAR /GET LATEST CHARACTER CLL RTL /*4 RAL /*10 TAD CHAR /*11 RTL /*44 TAD CHAR /*45 DCA I ATMSPT /STORE AS HIGH CHARACTER SNXTCH, TESTL /TEST NEXT CHARACTER TAD L7753/("Z-"0+1-100) /IF DIGIT ADJUST TO RADIX 45 CONVENTIONS TAD CHAR /NOW HAVE VALID ALPHANUMERIC IN RADIX 45 DCA CHAR /STORE IT BACK TAD I ATMSPT /GET PREVIOUS CHARACTER SNA /IN THIS WORD BEFORE? JMP SHFTIT /NO, THIS IS NEXT HIGH ORDER SPA /SCANNED OFF SIX YET? JMP AFLSHM /YES, GO INTO IGNORE MODE TAD CHAR /GET THE CHARACTER ADDED ON DCA I ATMSPT /STORE PAIR AWAY ISZ ATMSPT /BUMP TO NEXT PAIR JMP SNXTCH /GO GET ANOTHER RADSW2, 7711 /RADIX SWITCH / DIGIT "0"-"9" PROCESSOR. NUMRIC, JMS OPCHK /CHECK IF ALLOWED HERE DCA SVAL /CLEAR RUNNING SUM NUMLUP, TAD RADSW2 /GET CURRENT LIMIT (-7 OR -9) TAD CHAR /COMPARE TO LATEST CHARACTER SMA SZA CLA /SKIP IF LEGAL ASCII DIGIT JMP DIGERR /BARF RD10VAL,TAD SVAL /GET RUNNING SUM CLL RAL /*2 CLL RAL /*4 RADSW1, NOP /*4 IF OCTAL; *5 IF DECIMAL CLL RAL /*8 IF OCTAL; *10 IF DECIMAL TAD CHAR /ADD ON LATEST DIGIT TAD L7720/(-"0!200) /STRIP OFF ASCII ZONE BITS DCA SVAL /SAVE AS LATEST SUM TESTL /SCAN ANOTHER CHARACTER JMP NUMLUP /GET ANOTHER DIGIT; CHECK IF IT'S LEGAL DIGERR, JMS I ERR/[XERR] /\ NU / >ILLEGAL USAGE WITHIN NUMERALS JMP AFLSH // XORSYM, .-. /OR AC WITH SVAL DCA TMP /SAVE AC TAD SVAL /GET SVAL CMA /FORM CARRY MASK AND TMP /REMOVE ALL CARRIES TAD SVAL /THIS COMPLETES THE "OR" JMP I XORSYM /RETURN L7707, 7707 /CONSTANT 7707 L7711, 7711 /CONSTANT 7711 L7753, 7753 /CONSTANT 7753 / "OCTAL" PSEUDO-OP HANDLER. RAD8, TAD L7000/[NOP] /USE A "NOP" DCA RADSW1 /TO FORCE OCTAL TAD L7711/(-"7!200) /FORCE "8" AND "9" TO BE ILLEGAL RADIN, DCA RADSW2 /DURING OCTAL CALCULATIONS JMP I PSDRET/[XPSDRET] /RETURN / "DECIMAL" PSEUDO-OP HANDLER. RAD10, TAD RD10VAL/(TAD SVAL) /USE A "TAD SVAL" DCA RADSW1 /TO FORCE DECIMAL TAD L7707/(-"9!200) /ALLOW "8" AND "9" TO BE LEGAL JMP RADIN /CONTINUE THERE OPCHK, .-. /OPERAND CHECK TAD PRVCHR /GET PREVIOUS CHARACTER FLAG SNA CLA /WERE WE HERE? JMP OPGONE /YES, BARF DCA PRVCHR /INDICATE WE WERE HERE FOR FURTHER SCAN CHECKS JMP I OPCHK /RETURN OPGONE, JMS I ERR/[XERR] /COMPLAIN OF SY /SYNTACTICAL SCAN ERROR AFLSH, TESTL /GET A CHARACTER AFLSHM, /THROW IT AWAY L7720, 7720 /CONSTANT 7720; THIS CLEARS THE AC ATMSPT, NM1 /NAME POINTER; THIS CAN BE SKIPPED JMP AFLSH /FLUSH TO END OF LINE / GENERAL RECURSIVE EXPRESSION EVALUATOR. XEXPR, .-. /EXPRESSION EVALUATOR TAD XEXPR /SAVE RETURN ADDRESS PUSH /ON STACK DCA ANY /NO ARITHMETICS SEEN YET AT BEGINNING TAD PIOR/[XIOR] /PREVIOUS OPERATOR IS DCA PRVOPR /DEFAULTED TO INCLUSIVE OR WITH DCA RESULT /A ZERO RESULT TEOS /END OF STATEMENT? SKP /NO JMP VACEXP /YES, THIS TERM IS NULL TAD L40/[" &77] /GRAB A BLANK JMP SCRESET /AND START SCANNING / LEFT ANGLE BRACKET PROCESSOR. BRKTRP, TAD FLSHSW /ARE WE IN CONDITIONAL ASSEMBLY? SNA CLA /SKIP IF YES JMP I BDCH/[ILLCHR] /JUMP IF NOT EOS, TAD PRVCHR /GET SWITCH SZA /ELEMENT SCANNED? JMP EOSPCK /NO, CHECK PREVIOUS JMS I OPVAL/[XOPVAL] /EVALUATE OPERAND JMP VACEXP /WAS NONE OR PSEUDO-OP JMS I ARITH/[XARITH] /DO PREVIOUS ARITHMETIC VEXIT, POP /GOOD RETURN, GET RETURN ADDRESS IAC /INCREMENT FOR SKIP RETURN DCA XEXPR /RESTORE ADDRESS JMP I XEXPR /RETURN TO CALLER EOSPCK, TSPACE /WAS PREVIOUS AS GOOD AS A ? JMP IEXP /NO, BARF TAD ANY /ANYTHING SCANNED OFF? SZA CLA /SKIP IF NOT JMP VEXIT /JUMP IF ANYTHING OBTAINED VACEXP, DCA RESULT /CLEAR RESULT POP /GET RETURN ADDRESS JMP VEXIT+2 /CONTINUE THERE IEXP, JMS I ERR/[XERR] /COMPLAIN OF IE /ILLEGAL EXPRESSION JMP VACEXP /CONTINUE THERE / "ERROR" PSEUDO-OP PROCESSOR. XERROR, JMS I EXPR/[XEXPR] /EVALUATE ARGUMENT PNM1, NM1 /POINTER TO NM1 TAD RESULT /GET RESULT JMS I ERR/[XERR] /COMPLAIN OF ER /USER ERROR JMP I PSDRET/[XPSDRET]/RETURN XTSPACE,.-. /TEST FOR OR TAD L7740/[-" !200] /AC CONTAINS THE TEST CHARACTER SZA /SKIP IF A IAC /ELSE TRY SNA CLA /SKIP IF NOT OR ISZ XTSPACE /BUMP RETURN ADDRESS IF SO JMP I XTSPACE /RETURN EITHER WAY PAGE PRCENT, TAD L7761/[XDIV-XAND] /A("%")-A("&") AMPSND, TAD L7770/[XAND-XADD] /A("&")-A("+") PLUS, TAD L7772/[XADD-XSUB] /A("+")-A("-") MINUS, TAD L7774/[XSUB-XBSFHT] /A("-")-A("!") BAR, TAD L7772/[XBSHFT-XMUL] /A("!")-A("^") UPARRX, TAD PMULT/(XMUL) /A("^") DCA TMOP /SAVE AS OPERATOR ADDRESS TAD PRVCHR /GET PREVIOUS SCAN INDICATOR SZA /SYMBOL SCANNED? JMP CHKIT /NO, CHECK FURTHER JMS I OPVAL/[XOPVAL] /YES, EVALUATE IT TMOP, .-. /OPERATOR TEMPORARY JMS XARITH /NOW DO ARITHMETIC TRIPLE JMP SETPRV /CONTINUE SCAN CHKIT, TSPACE /IS TERMINATOR A ? JMP CHKMOR /NO, CHECK FURTHER ISZ LBLSWT /YES, BUMP SCAN LEVEL SETPRV, TAD TMOP /USE CURRENT OPERATOR SPBRIN, DCA PRVOPR /NEXT TIME AS PREVIOUS NL7777 /INITIALIZE DCA ASIGN /SIGN SWITCH JMP SETCHR /CONTINUE SCAN XARITH, .-. /COMMON ARITHMETIC CO-ROUTINE ISZ ANY /INDICATE ELEMENT FOUND ISZ LBLSWT /BUMP SCAN PENETRATION TAD SVAL /GET LATEST TERM VALUE ISZ ASIGN /DO WE INVERT? LMZAPL, CIA /**** (/8 OR /9) AND LMODE **** CMA JMP I PRVOPR /GO DO PREVIOUS SPSYM, JMS I OPVAL/[XOPVAL] /EVALUATE SYMBOL (MAYBE) JMP NULVL /WAS NONE JMS XARITH /DO ARITHMETIC TRIPLE WITH PREVIOUS TEOS /ARE WE DONE? JMP SPBAR /NO, KEEP GOING JMP I VALRET/[VEXIT] /YES, RETURN WITH GOOD VALUE XDIV, DCA SVAL /SAVE TERM DCA TMP /CLEAR QUOTIENT XDIVIN, TAD SVAL /RESTORE IT CLL CIA /INVERT TAD RESULT /ADD ONTO RESULT DCA RESULT /SAVE IT BACK SNL /DID WE OVERFLOW? JMP .+3 /YES, QUIT ISZ TMP /BUMP QUOTIENT JMP XDIVIN /GO BACK FOR MORE TAD TMP /GET QUOTIENT JMP XMULXT /FINISH UP NULVL, TEOS /END OF STATEMENT? JMP SETCHR /NO, KEEP GOING JMP I VACRET/[VACEXP] /YES, WE'RE DONE; NOTHING HAPPENED AT THIS SCAN LEVEL IFNZRO 7761-XDIV+. XAND, AND RESULT /AND OFF JMP XMULXT /FINISH IT THERE / AND PROCESSOR. TAB, /SAME AS SPACE SPACE, TAD PRVCHR /WAS A SYMBOL ELEMENT SCANNED? SNA CLA/SNA /SKIP IF NOT JMP SPSYM /JUMP IF SO / TSPACE /WAS THE PREVIOUS A ? / JMP I IEXPR/[IEXP] /NO, BARF JMP I PATOM/[ATOM] /YES, IGNORE IT MXADD, -XADD /ADDRESS CONSTANT PNXTFIL,NXTFILE /RESET VALUE FOR CO-ROUTINE IFNZRO 7770-XAND+. XADD, CLL /CLEAN UP FOR TEST TAD RESULT /ADD ON RESULT LMZAP3, SKP /**** (/8 OR /9) AND LMODE **** SZL IAC /END AROUND CARRY JMP XMULXT /FINISH THERE PMULT, XMUL /MULTIPLY POINTER IFNZRO 7772-XADD+. XSUB, CIA /**** (/8 OR /9) AND LMODE **** CMA JMP XADD /FINISH THERE SPBAR, TAD PIOR/[XIOR] /SPACE IS OR (!) OPERATION JMP SPBRIN /CONTINUE THERE IFNZRO 7774-XSUB+. XBSHFT, DCA SVAL /SAVE TERM TAD RESULT /GET RUNNING RESULT SLYZAP, JMS I ROR6/[XROR6] /**** NOT /Y **** JMP XBCKIN RAR /SHIFT LEFT SIX AND L7700X /REMOVE JUNK BITS JMP XBCKIN /CONTINUE THERE IFNZRO 7772-XBSHFT+. XMUL, CIA /INVERT DCA SVAL /SAVE AS COUNT TAD RESULT /ADD ON RESULT ISZ SVAL /DONE ENOUGH? JMP .-2 /NO, GO BACK XMULXT, DCA RESULT /SAVE RESULT NL7777 /RESET DCA ASIGN /ARITHMETIC SIGN JMP I XARITH /RETURN TO WHOEVER CHKMOR, TAD TMOP /GET OPERATOR TAD MXADD/(-XADD) /IS IT ? SNA /SKIP IF NOT JMP SETCHR /IGNORE IT TAD L7772/[-XSUB+XADD] /IS IT ? SZA CLA /SKIP IF SO JMP I BDCH/[ILLCHR] /COMPLAIN TAD ASIGN /GET LATEST SIGN CMA /INVERT IT DCA ASIGN /PUT IT BACK JMP SETCHR /KEEP GOING XIOR, DCA SVAL /SAVE IT TAD RESULT /GET RESULT XBCKIN, JMS I ORSYM/[XORSYM] /OR IT IN JMP XMULXT /FINISH THERE / "PAUSE" PSEUDO-OP PREOCESSOR. XPAUSE, JMS I EXPR/[XEXPR] /GET AN ARGUMENT (IF ANY PRESENT) JMP PAUSE2 /WASN'T ANY TAD RESULT /DISPLAY JMS I ERR/[XERR] /THE PAUSE AS PA /PA XXXX AT YYYY+ZZZZ (VVVV) NL7777 /\ TAD ERRTOT / >BACKUP ERROR COUNT DCA ERRTOT // JMP I PSDRET/[XPSDRET] /RETURN PAUSE2, JMS I PRTBUF/[XPRTBF] /PRINT THE LINE BUFFER TAD PNXTFIL/(NXTFILE) /RESET THE DCA I PGIVCHR/[GIVCH] /INPUT ROUTINE JMP I XNWSTM/[NEWSTM] /CONTINUE PROCESSING AT THE NEXT INPUT FILE XGETCOL,.-. /GET TO SPECIFIED COLUMN ROUTINE TAD I XGETCOL /GET THE ARGUMENT TAD COLCT /COMPARE TO CURRENT COLUMN L7700X, SMA CLA /SKIP IF NOT ENOUGH JMP COLXIT /JUMP IF DONE JMS I P6CH/[XP6CH] /OUTPUT A JMP XGETCOL+1 /TRY AGAIN COLXIT, ISZ XGETCOL /BUMP AROUND ARGUMENT JMP I XGETCOL /RETURN TO CALLER XCHKLST,.-. /CHECK LEGALITY OF LOCAL EXPRESSION ELEMENT TAD PRVCHR /GET SWITCH SNA CLA /ELEMENT SCANNED? JMP I BDCH/[ILLCHR] /YES, NOT ALLOWED SO COMPLAIN JMP I XCHKLST /NO, RETURN TO CONTINUE THE SCAN PAGE / ORIGIN SETTING "*" PROCESSOR. STAR, TAD PRVCHR /CHECK IF TSPACE /NOTHING WAS SCANNED OFF YET JMP I BDCH/[ILLCHR] /BARF TAD LBLSWT /ANY EVALUATED ELEMENTS? SZA CLA /SKIP IF NOT JMP I BDCH/[ILLCHR] /BARF ISZ LBLSWT /INDICATE THIS SCAN DONE JMS I EXPR/[XEXPR] /GET ANY ARGUMENT JMP I IEXPR/[IEXP] /WAS NONE LMZAP6, TAD RESULT /**** /8 OR /9 **** JMP I LMZAP7 LMZAP7, JMP PAGMOR /**** /8 OR /9 **** LMORG (RELOCATED) / "FIELD" PSEUDO-OP PROCESSOR. XFLD, JMS I EXPR/[XEXPR] /GET ARGUMENT JMP NXTFLD /WASN'T ANY ARGUMENT TAD RESULT /GET VALUE XFLDIN, AND L77/[77] /ONLY BITS 6-11 ARE USED DCA I OPVAL/[XOPVAL] /SAVE FOR LATER TAD RESULT /GET ARGUMENT SPA CLA /WAS IT POSITIVE? NL7777 /IF NEGATIVE, DON'T DUMP LITERALS DCA DUMPSW /SET OR CLEAR SWITCH JMS PUNFLD /OUTPUT THE FIELD SETTING DCA UNDFLG /*200 IS NOT UNDEFINED! SL0ZAP, JMP I VACRET/[VACEXP] /**** /0 **** TAD L200/[200] PAGMOR, JMS UOCHEK /CHECK FOR UNDEFINED ORIGIN JMS I PUTORG/[XPUTORG]/OUTPUT ORIGIN TAD I ORSYM/[XORSYM] /GET WHAT WE JUST OUTPUTTED DCA LOCNTR /NEW VALUE FOR PC JMP I VACRET/[VACEXP] /TAKE VACUOUS RETURN NXTFLD, TAD CURFLD /GET CURRENT FIELD IAC /BUMP TO NEXT ONE JMP XFLDIN /CONTINUE THERE PUNFLD, .-. /OUTPUT FIELD SETTING TO PUTFLD TAD UNDFLG /GET DEFINED FLAG SNA CLA /SKIP IF UNDEFINED JMP .+3 /JUMP IF OK JMS I ERR/[XERR] /COMPLAIN OF UF /UNDEFINED FIELD TAD I OPVAL/[XOPVAL] /GET FIELD VALUE AND L7/[7] /JUST MEMORY FIELD BITS CLL RAL;RTL /PUT INTO FIELD BITS TAD L6201/[CDF] /MAKE IT A CDF INSTRUCTION DCA UOCHEK /SAVE IT FOR NOW TAD I OPVAL/[XOPVAL] /GET FIELD VALUE AGAIN RAR /MOVE BANK BIT DOWN L100, AND L4/[4] /ISOLATE THE BIT TAD UOCHEK /UPDATE DCA UOCHEK /STORE BACK TAD I OPVAL/[XOPVAL] /GET FIELD VALUE AGAIN RTL /MOVE UPPER BANK BIT UP AND L100/[100] /ISOLATE IT TAD UOCHEK /NOW HAVE COMPOSITE JMS I PUTFLD/[XPUTFLD]/GO PUNCH IT TAD I OPVAL/[XOPVAL] /RETRIEVE DCA CURFLD /SAVED FIELD JMP I PNFCPTR /OUTPUT LATEST FIELD FOR CROSS-REFERENCE PNFRET, JMP I PUNFLD /RETURN PNFCPTR,PNFRET /**** /L AND /X AND PASS 2 **** CRFFLD (RELOCATED) UOCHEK, .-. /UNDEFINED ORIGIN CHECK ROUTINE DCA PUNFLD /SAVE AC TAD UNDFLG /GET UNDEFINED FLAG SNA CLA /SKIP IF SET JMP .+3 /JUMP IF NOT JMS I ERR/[XERR] /COMPLAIN OF UO /UNDEFINED ORIGIN TAD PUNFLD /RESTORE AC JMP I UOCHEK /RETURN / RECURSIVE EQUATE "=" PROCESSOR. EQU, TAD PRVCHR /CHARACTERS (SYMBOL) SCANNED? SZA CLA /SKIP IF SO JMP I BDCH/[ILLCHR] /BARF NL7777 /ALLOW UNDEFINED JMS I OPVAL/[XOPVAL] /EVALUATE SYMBOL EQUADR, JMP I IEXPR/[IEXP] /CAN'T REDEFINE PSEUDO-OPS, ETC. TAD EQUSW /WERE WE HERE BEFORE? TAD FIXMRF /OR IS THIS A FIXMRI EQUATE? SNA CLA /DON'T CHECK SCAN POSITION IF EITHER TAD LBLSWT /SCAN WITHIN LIMITS? SNA CLA /FORCE ERROR BY SKIPPING NEXT IF YES TAD NM1 /IS IT REALLY A SYMBOL? SNA CLA /SKIP IF WE RAN THE GAUNTLET JMP I IEXPR/[IEXP] /BARF ISZ LBLSWT /DON'T ALLOW INITIAL SCAN ITEMS ISZ EQUSW /BUMP UP EQUATE COUNT IN CASE RECURSIVE TAD SYMNUM /GET SYMBOL NUMBER PUSH /SAVE IT DCA UNDFLG /EXONERATE THIS TERM FOR NOW JMS I EXPR/[XEXPR] /GET A POSSIBLE ARGUMENT ISZ UNDFLG /WASN'T ANY POP /RESTORE DCA SYMNUM /SYMBOL NUMBER TAD UNDFLG /GET UNDEFINEDNESS INDICATOR EQUFIX, SKP /**** PASS 2 **** SZA CLA JMP I IEXPR/[IEXP] /BARF SZA CLA /DURING PASS 1, IS IT UNDEFINED? JMP I VACRET/[VACEXP] /YES, DON'T EXTRANEOUSLY DEFINE IT JMS I SETSYM/[XSETSM] /SETUP THE SYMBOL TAD SXR /GET TABLE POINTER DCA TXR /SAVE IT TAD L1777/[1777] /SET TO THROW AWAY OLD FLAG BITS AND I TXR /GET FIRST SYMBOL WORD CLL RTL /MOVE DEFINED BIT TO LINK STL RTR /RESTORE WITH DEFINED BIT SET TAD FIXMRF /MAKE MRI (MAYBE) DCA I SXR /STORE AWAY EQ2ZAP, NL3777 /**** PASS 2 **** NL7777 AND I SXR /RETAIN DESIRED BITS DCA I TXR /STORE IT BACK NL3777 /REMOVE THE AND I TXR /"DEFINED BY COMMA" BIT DCA I SXR /JUST IN CASE TAD RESULT /GET NEW VALUE DCA I SXR /STORE IT L6201, CDF 00 /BACK TO FIELD 0 NL7777 /**** /L AND /X AND PASS 2 **** JMP I .+1 TAD EQUSW /**** /L AND /X AND PASS 2 **** CRFEQU (RELOCATED) DCA EQUSW /BACKUP THE EQUALS COUNT TAD EQUSW /GET LATEST VALUE SZA CLA /SKIP IF AT FIRST LEVEL JMP I VALRET/[VEXIT] /RETURN GOOD VALUE TAD RESULT /GET VALUE AGAIN JMS I PTNREG/[XPTNREG]/PRINT IT OUT MRILOC, JMP I VACRET/[VACEXP] /WE'RE DONE / ILLEGAL CHARACTERS COME HERE. ILLCHR, TAD CHAR /GET THE OFFENDING CHARACTER JMS I ERR/[XERR] /PRINT OUT THE COMPLAINT IC /WITH THIS MESSAGE JMP SETCHR /KEEP RIGHT ON GOING PAGE IFNZRO .&177 XTRATAB=. /TRANSLATE TABLE HERE / MASTER SIXBIT TRANSLATE AND DISPATCH TABLE. / 0 0 1 2 3 4 5 6 7 0 / ATSIGN A B C D E F G / 00 01 02 03 04 05 06 07 EOS ;LETTER;LETTER;LETTER;LETTER;LETTER;LETTER;LETTER / 1 0 1 2 3 4 5 6 7 1 / H I J K L M N O / 10 11 12 13 14 15 16 17 LETTER;LETTER;LETTER;LETTER;LETTER;LETTER;LETTER;LETTER / 2 0 1 2 3 4 5 6 7 2 / P Q R S T U V W / 20 21 22 23 24 25 26 27 LETTER;LETTER;LETTER;LETTER;LETTER;LETTER;LETTER;LETTER / 3 0 1 2 3 4 5 6 7 3 / X Y Z [ \ ] ^ BKARROW / 30 31 32 33 34 35 36 37 LETTER;LETTER;LETTER;LBRAK ;ILLCHR;RBRAK ;UPARRX;TAB / 4 0 1 2 3 4 5 6 7 4 / BLANK ! " # $ % & ' / 40 41 42 43 44 45 46 47 SPACE ;BAR ;XDQUO ;NUMSGN;DOLLAR;PRCENT;AMPSND;QUOTE / 5 0 1 2 3 4 5 6 7 5 / ( ) * + , - . / / 50 51 52 53 54 55 56 57 LPARN ;RPARN ;STAR ;PLUS ;COMMA ;MINUS ;POINT ;COMMNT / 6 0 1 2 3 4 5 6 7 6 / 0 1 2 3 4 5 6 7 / 60 61 62 63 64 65 66 67 DIGIT ;DIGIT ;DIGIT ;DIGIT ;DIGIT ;DIGIT ;DIGIT ;DIGIT / 7 0 1 2 3 4 5 6 7 7 / 8 9 : ; < = > ? / 70 71 72 73 74 75 76 77 DIGIT ;DIGIT ;COMMA ;EOS ;BRKTRP;EQU ;TESTLI;ILLCHR / 0 0 1 2 3 4 5 6 7 0 *XTRATAB /OVER UNNEEDED PART OF TABLE / "SIXBIT" PSEUDO-OP PROCESSOR. XSXBIT, TAD L40/[40] /GET INVERSION BIT / "TEXT" PSEUDO-OP PROCESSOR. XTEXT, DCA INVRT /SAVE TEXT MODE DCA TXTCNT /ALLOW ANY NUMBER OF OUTPUT WORDS TAD (JMP DOTEXT) /SETUP FOR DORFIN, DCA TXTZP1 /[TEXT OR SIXBIT] (OR [FILNAME OR DEVICE]) TAD CHAR /GET DELIMITER TSPACE /TEST IF OR JMP TNXT /OK JMS I GCH/[XGCH] /GET NEXT JMP .-3 /TEST AGAIN GIVTXT, .-. /TEXT CHECK ROUTINE DCA RESULT /SAVE PREVIOUS HALF TXTZP1, SKP /**** TEXT OR SIXBIT **** JMP DOTEXT /**** DEVICE OR FILENAME **** 0000 OR SKP OR ASCII /**** DEVICE OR FILENAME FIRST TIME **** SKP JMS I GCH/[XGCH] /GET NEXT CHARACTER DCA TXTZP1 /ENABLE FURTHER INPUT JMS TSTAON /TEST IF ALPHANUMERIC JMP ANGOOD /IT IS TAD FNMSKP/(SKP) /GET "SKP" INSTRUCTION DCA TXTZP1 /STORE IN-LINE TO PREVENT FURTHER INPUT JMP I GIVTXT /RETURN WITH ZERO TOSSIT, .-. /TOSS ALPHANUMERICS ROUTINE TAD TXTZP1 /GET CHARACTER FLAG SMA CLA /NON-ALPHA-NUMERIC CAPTURED? JMS I GCH/[XGCH] /NO, GET ONE JMS TSTAON /CHECK IF ALPHANUMERIC JMP .-2 /YES, THROW IT AWAY JMP I TOSSIT /NO, RETURN NOW *XTRATAB+100 /PAST TABLE / "FILENAME" PSEUDO-OP PROCESSOR. XFLNAM, TAD FNMSKP/(SKP) /ALLOW EXTENSION TEST FNMSKP, SKP /LEAVE TXTCNT AT -3 / "DEVICE" PSEUDO-OP PROCESSOR. XDVICE, ISZ TXTCNT /BUMP TXTCNT TO -2 DCA TXTZP2 /DISALLOW EXTENSION TEST TAD FNMSKP/(SKP) /GET "SKP" INSTRUCTION JMP DORFIN /CONTINUE THERE / TEXT PROCESSING CONTINUES HERE AFTER ANY CHARACTERS ARE TOSSED. TNXT, TAD CHAR /GET DELIMITER CIA /INVERT AND DCA TSTAON /SAVE FOR DELIMITER MATCHING TNXTCH, JMS GIVTXT /GET A CHARACTER JMS I ROR6/[XROR6] /MOVE TO RAR /THE LEFT JMS GIVTXT /GET NEXT TAD RESULT /ADD ON PREVIOUS BLKEXT, JMS I PUTWD/[XPUTWD] /OUTPUT IT JMS I PRTBUF/[XPRTBF] /PRINT SOURCE LINE ISZ TXTCNT /OUTPUTTED ENOUGH? JMP TNXTCH /NO, GO DO ANOTHER PAIR TXTZP2, 0000 /**** EXTENSION TEST ALLOWED **** SKP JMP TXTXIT /FINISH UP NL7777 /ALLOW ONLY DCA TXTCNT /ONE MORE PAIR DCA TXTZP2 /DON'T ALLOW ANOTHER EXTENSION TEST JMS TOSSIT /THROW AWAY ANY FURTHER ALPHANUMERICS TAD CHAR /GET DELIMITER TAD (-".!200) /IS DELIMITER A "."? SZA CLA /SKIP IF SO JMP BLKEXT /GIVE NULL EXTENSION VALUE / WE CAN ATTEMPT TO SCAN AN EXTENSION. JMP TNXTCH /KEEP GOING / COMES HERE IF DOING "TEXT" OR "SIXBIT". DOTEXT, JMS I GCH/[XGCH] /GET NEXT CHARACTER SZA /END OF LINE? TAD TSTAON /NO, ALLOW DELIMITER CHECK SNA CLA /END OF STRING? JMP ZERTST /YES, FINISH UP TAD INVRT /GET INVERSION BIT ANGOOD, TAD CHAR /ADD ON LATEST CHARACTER AND L77/[77] /JUST 6-BIT JMP I GIVTXT /RETURN / COMES HERE TO FINISH UP TEXT PROCESSING. ZERTST, TAD RESULT /GET THE VALUE ZERSWT, NOP /**** /J **** SZA JMS I PUTWD/[XPUTWD] /OUTPUT AN EXTRA WORD TXTXIT, JMS TOSSIT /TOSS ANY EXTRA ALPHANUMERICS TEOS /ARE WE AT ? JMS I GCH/[XGCH] /NO, GET ANOTHER CHARACTER NL7775 /RESET FOR DCA TXTCNT /DEVICE, FILENAME JMP I (NEWT1) /GO TEST REST OF LINE THERE TSTAON, .-. /TEST IF VALID P?S/8 ALPHANUMERIC TAD CHAR /GET LATEST CHARACTER SZA /? TAD L7741/[-37] /NO, ALPHA? SPA CLA /SKIP IF NOT JMP I TSTAON /JUMP IF SO TAD CHAR /GET CHARACTER AGAIN TAD (-":!200) /BIAS FOR TEST CLL /CLEAR LINK FOR TEST TAD L12/["9-"0+1] /ADD LEGAL RANGE SNL CLA /SKIP IF NUMERIC ISZ TSTAON /BUMP RETURN JMP I TSTAON /RETURN PAGE RELOC /SEE WHERE WE ARE ASMSIZE=.-ASMCODE%200 /NUMBER OF BLOCKS IN THIS OVERLAY OVLYBLK=OVLYBLK+ASMSIZE /NEXT OVERLAY BLOCK STOCOD, *7777 /END OF AN *7777 /OVERLAY *STOCOD /RESTORE ORIGIN RELOC 200 /WHERE IT GOES IN FIELD 0 STOBLK= OVLYBLK /BLOCK NUMBER FOR OVERLAY XSYMWK= . /BEGINNING OF OVERLAY HERE BLPTR, JMP I .+1/(XSYMW2) /MESSAGE ADDRESS SAVED HERE BLPTR2, XSYMW2 /TEMPORARY / SUB-TITLE INTERCEPT ROUTINE (ALSO USED BY CROSS-REFERENCE OVERLAY). BLBAK, JMS I PCRLF/[XPCRLF] /DO A , NOW BLBZAP, SKP /**** TRIVIAL SUB-TITLE BLURB **** 0000 JMS I PCRLF/[XPCRLF] /DO ANOTHER TAD BLPTR /GET MESSAGE POINTER DCA BLPTR2 /SET IT UP BLLOOP, TAD I BLPTR2 /GET A PAIR JMS I ROR6/[XROR6] /BSW IT JMS I P6CH/[XP6CH] /PRINT IT TAD I BLPTR2 /GET AGAIN AND L77/[77] /JUST RIGHT HALF SNA /? JMP BLOUT /YES JMS I P6CH/[XP6CH] /NO, PRINT IT ISZ BLPTR2 /BUMP TO NEXT JMP BLLOOP /GO DO NEXT BLOUT, JMS I PCRLF/[XPCRLF] /DO A , JMS I PCRLF/[XPCRLF] /DO ANOTHER DBLZAP, 0000 /**** TRIVIAL SUB-TITLE BLURB **** SKP JMS I PCRLF/[XPCRLF] /DO ANOTHER TAD BL0001/(NL0001) /MAKE IT DO TWO LESS DCA I PNZAP8/(SLNZP8) /, SEQUENCES JMP I .+1/(NOFRM2+1) /GO BACK TO HEADER ROUTINE NOFRM2+1 /THROUGH HERE PNZAP8, SLNZP8 /WHERE TO PUT ZAP BL0001, NL0001 /INSTRUCTION CONSTANT BLPRT, .-. /SUB-TITLE PRINT ROUTINE DCA BLPTR /SAVE ADDRESS OF MESSAGE TAD I PPRTTITLE/(PRTTITLE) /GET POTENTIALLY ZAPPED WORD TAD MXNOPRTN/(-XNOPRTN) /IS IT ZAPPED TO REALLY PRINT TITLES? SNA CLA /SKIP IF SO JMP I BLPRT /RETURN IF INTACT TAD BLJMP/(NOFRM2&177+JMPIC)/GET ZAP INSTRUCTION DCA I BLZAP1/(NOFRM2-1) /ZAP IT IN TAD BLBACK/(BLBAK) /GET RETURN DCA I BLZAP2/(NOFRM2) /ZAP IT IN ALSO ISZ BLPRT /BUMP TO SUCCESSFUL JMP I BLPRT /RETURN BLJMP, NOFRM2&177+JMPIC /"JMP I NOFRM2" BLZAP1, NOFRM2-1 /WHERE TO PUT IT BLBACK, BLBAK /RETURN ADDRESS BLZAP2, NOFRM2 /WHERE IT GOES PPRTTIT,PRTTITL /WHERE /N ZAP MAY BE MXNOPRT,-XNOPRTN /WHAT COULD BE THERE / CONTROL WILL RETURN TO HERE AFTER ENTIRE CROSS-REFERENCE IS OVER! NOTLAX, TAD TITSTOP/(NOFRM2+1&177+JMPC) /PREVENT FURTHER DCA I PNOPTIT/(NOPTITLE) /TITLES AND SUB-TITLES TAD TITST2/(XPCRLF&177+JMPIC) /FAKE OUT A DCA I PNOPTT2/(NOPTT2) /RETURN TO US TAD AOUR/(OURADR) /GET OUR RETURN ADDRESS DCA I PCRLF/[XPCRLF] /INTO A HANDY HEADER JMP I .+1/(SLNZP8) /THIS WILL ACTUALLY DO THE EJECT SLNZP8 /THROUGH HERE OURADR, TAD I OSWMX/(SWMX) /GET /M-/X SPA CLA /SKIP IF /M NOT SET JMP SLMSET /JUMP IF /M IS SET TAD ERRTOT /GET ERROR COUNT CRIOP, SZA CLA /SKIP IF NO ERRORS JMP I L7600/[SBOOT] /FORGET IT TAD I OSWMX/(SWMX) /\ AND L7377/(7377) / >ELIMINATE /P DCA I OSWMX/(SWMX) // SLMSET, TAD ERRTOT /STORE THE ERROR COUNT DCA I PCRLF/[XPCRLF] /FOR BITMAP (TO DECIDE TO CHAIN TO BIN) TAD I ONEXT/(LNEXT) /GET NEXT PROCESS ADDRESS DCA TMP /SET IT UP TAD OUTPTR /GET CURRENT OUTPUT POINTER TAD BUSD/(-BDFLST-2) /COMPARE TO MAGIC VALUE SNA CLA /SKIP IF NOT /D AND "%", "$" USED JMP I TMP /ON TO NEXT IF ALL TRUE TAD I OSWAL/(SWAL) /\ AND L7377/(7377) / >FORCE OFF /D SWITCH DCA I OSWAL/(SWAL) // JMP I TMP /GO DO IT TITSTOP,NOFRM2+1&177+JMPC /"JMP NOFRM2+1" PNOPTIT,NOPTIT /WHERE TO INHIBIT TITLES TITST2, XPCRLF&177+JMPIC /"JMP I XPCRLF" PNOPTT2,NOPTT2 /WHERE TO CREATE FUDGED RETURN OSWAL, SWAL /POINTER TO /A-/L SWITCHES OSWMX, SWMX /POINTER TO /M-/X SWITCHES ONEXT, LNEXT /WHERE NEXT ADDRESS IS L7377, 7377 /CONSTANT 7377 BUSD, -BDFLST-2 /MAGIC VALUE IF /D AND BOTH FILES USED PCRBLB, CRFBLB /POINTER TO CROSS-REFERENCE SUB-TITLE XFUDGE, "X^100+"--200 /USE "X-" PAGES IN CROSS-REFERENCE PAGEX, DAYBLB+13 /WHERE TO PUT IT PCRFUN, CRFUN /WHERE OVERLAY FUNCTION IS PCRBLK, CRFOVB /WHERE OVERLAY BLOCK NUMBER IS PCRERRP,CRERRP /WHERE ADDRESS WITHIN XREF OVERLAY IS CPAGNUM,PAGNUM /WHERE PAGE NUMBER IS CHECKX, AND I OSWAL/(SWAL) /JUST /L AND I OSWMX/(SWMX) /JUST /L AND /X SNA CLA /SKIP IF BOTH SET JMP NOTLAX /JUMP IF OTHERWISE NL2000 /CHECK FOR /N AND I OSWMX/(SWMX) /AND JUST /N SNA CLA /SKIP IF SET JMP AOUR+1 /JUMP IF NOT TAD XFUDGE/("X^100+"--200) /MAKE IT PRINT DCA I PAGEX/(DAYBLB+13) /"PAGE X-" DCA I CPAGNUM/(PAGNUM) /START AT PAGE X-1 TAD PCRBLB/(CRFBLB) /SETUP FOR JMS BLPRT /CROSS-REFERENCE SUB-TITLE AOUR, OURADR /HERE JUST IN CASE TAD I PCRERRP/(CRERRP) /GET XREF ADDRESS CONSTANT TAD CFUN /ADD ON OFFSET DCA CFUN /STASH IT NL7777 /INDICATE CLOSE JMS I CFUN /CALL PUTREF ROUTINE ISZ CBLK /DONE ENOUGH? JMP .-3 /NO, KEEP GOING TAD I PCRFUN/(CRFUN) /GET OUR NEXT FUNCTION WORD DCA CFUN /SET IT UP TAD I PCRBLK/(CRFOVB) /GET OUR NEXT BLOCK DCA CBLK /SET IT UP JMS I CRIOP/(SYSIO) /CALL I/O ROUTINES 0400 /TO READ IN CFUN, PUTREF-CRFERR /THE CROSS-REFERENCE CBLK, -200 /SORT OVERLAY ZBLOCK .+177&7600-. /EMPTY SPACE PAGE XSYMW2, ISZ LSTSW /FORCE LISTING ON JMS I PEJECT/[DEJECT] /FORCE AN EJECT DCA ECHOSW /FORCE ECHO ON DCA RCDCNT /FOR "AND" INSTRUCTIONS TESTES, TAD I SRTSRC/(SWMX) /TEST FOR /S AND L40/[40] /AND JUST /S SNA /SKIP IF SET DCA I SRTMOVE/(SRTCALL) /INHIBIT SYMBOL SORT SNA CLA /SKIP IF SET JMP TESTP /TEST FOR /P OR LPT: TAD I PSWAL/(SWAL) /TEST FOR /A SMA CLA /SKIP IF SET JMP DOUSER /JUMP IF NOT DCA I SRTCOMP/(SLAZP1) /ALLOW ALL SYMBOLS TO PRINT OUT DCA I SLA1/(SLAZP2) /PREVENT THE TRIVIAL BLURB JMP TESTP /DON'T MODIFY THE BLURB DOUSER, TAD UMSG /\ DCA I PSBLB2/(SYMBLB+2) / \ TAD PSBLB2/(SYMBLB+2) / \ DCA I SLSZP1/(PSYMBLB) / >SETUP FOR USER BLURB ISZ PSBLB2/(SYMBLB+2) / / TAD UMSG+1 / / DCA I PSBLB2/(SYMBLB+2) // TESTP, TAD I SRTSRC/(SWMX) /TEST FOR /P AND P400/(400) /AND JUST /P SZA CLA /SKIP IF NOT SET JMP DOPZAP /JUMP IF SET TAD I PLSEP/(LSEP) /TEST FOR TAD L7764/(-14) /AN LPT: SNA CLA /SKIP IF WE DON'T HAVE LPT: JMP DOLPTZP /JUMP IF WE HAVE ONE JMP SQUISH /JUMP IF NOT LPT: SRTMOVE,SRTCALL /SORT MOVE ROUTINE TAD SRTCDF/(CDF) /ADD ON "CDF" INSTRUCTION DCA SCDFT1 /SAVE AS TARGET FIELD SZL /SKIP IF NO ARGUMENT PRESENT TAD I SRTMOVE /GET ARGUMENT JMS SRTSRC /SETUP SOURCE POINTER ISZ SRTMOVE /BUMP AROUND DCA SCDFS1 /SAVE SOURCE FIELD TAD L7774/[-4] /SET FOR DCA SRTCOMP /FOUR WORDS SCDFS1, CDF 00 /GET INTO SOURCE FIELD TAD I SXR /GET A WORD SCDFT1, CDF 00 /GOTO TARGET FIELD DCA I TXR /STASH A WORD ISZ SRTCOMP /DONE ALL YET? JMP SCDFS1 /NO, GO BACK SRTCDF, CDF 00 /MAKE SURE JMP I SRTMOVE /RETURN SRTCOMP,SLAZP1 /SORT COMPARE ROUTINE TAD SRTCDF/(CDF) /ADD ON CDF INSTRUCTION DCA SCDFT2 /SAVE AS TARGET FIELD SZL /SKIP IF NO ARGUMENT PRESENT TAD I SRTCOMP /GET ARGUMENT JMS SRTSRC /SETUP SOURCE POINTER ISZ SRTCOMP /BUMP AROUND DCA SCDFS2 /SAVE SOURCE FIELD NL7775 /SET FOR DCA ANY /THREE WORDS NL4000 /SETUP FOR 1777 MASK NXTCOMP,CLL CMA RAR /1777 FIRST TIME, 3777 FOLLOWING TIMES DCA SRTMOVE /SAVE MASK SCDFS2, CDF 00 /GET INTO SOURCE FIELD TAD I SXR /GET WORD AND SRTMOVE /JUST SYMBOL BITS CLL CIA /COMPLEMENT FOR TEST DCA SRTSRC /SAVE IT SCDFT2, CDF 00 /GOTO TARGET FIELD TAD I TXR /ADD ON TARGET WORD AND SRTMOVE /JUST SYMBOL BITS TAD SRTSRC /COMPARE TO FIRST SZA CLA /SKIP IF THEY MATCH JMP SWAPIT /JUMP IF THEY DON'T ISZ ANY /DONE ALL YET? JMP NXTCOMP /NO, GO BACK SWAPIT, SZL /SKIP IF SOURCE GREATER THAN TARGET ISZ SRTCOMP /BUMP RETURN OTHERWISE CDF 00 /MAKE SURE JMP I SRTCOMP /RETURN SRTSRC, SWMX /SOURCE SETUP ROUTINE SNL /SKIP IF AN ARGUMENT ISZ SRTSRC /ELSE TAKE SKIP RETURN SNL /SKIP IF ARGUMENT PRESENT JMP .+5 /JUMP IF NO ARGUMENT CMA /MAKE INTO A SYMBOL NUMBER DCA SYMNUM /STASH IT JMS I SETSYM/[XSETSM] /SETUP POINTERS RDF /GET DATA FIELD TAD SRTCDF/(CDF) /MAKE INTO CDF INSTRUCTION JMP I SRTSRC /RETURN DUMBLB, TEXT "NO USEFUL OUTPUT!" UMSG, TEXT "USER" L7110, 7110 /CONSTANT 7110 L7764, 7764 /CONSTANT 7764 PLSEP, LSEP /POINTER TO LPT: TEST PSBLB2, SYMBLB+2 /WHERE "USER" MESSAGE GOES PSWAL, SWAL /POINTER TO /A-/L P400, 400 /CONSTANT 0400 SLA1, SLAZP2 /WHERE TO INHIBIT TRIVIAL MESSAGE SLP0, 7606 /CORRECT AMOUNT FOR 8 COLUMNS SLP1, COLIMT /WHERE TO PUT IT SLP2, SYMPAG /WHERE TO ZAP FOR 8*55 SYMBOLS PER PAGE SLP3, JMS I P45CH/[XP45CH] /WIDENING INSTRUCTION SLP4, LINEXT-2 /WHERE TO PUT IT SLSZP1, PSYMBLB /WHERE TO CHANGE SYMBOL MESSAGE ADDRESS DOPZAP, TAD SLP0/(-172) /ALLOW FOR DCA I SLP1/(COLIMT) /8 COLUMNS TAD L7110/(-670) /USE 440 SYMBOLS DCA I SLP2/(SYMPAG) /PER PAGE DOLPTZP,TAD SLP3/(JMS I P45CH/[XP45CH]) /ALLOW WIDER DCA I SLP4/(LINEXT-2) /OUTPUT FORMAT SQUISH, DCA TMP /ASSUME NO DCA RESULT /SYMBOLS PRESENT DCA SYMNUM /LOCATE BEGINNING JMS I SETSYM/[XSETSM] /OF SYMBOL TABLE RDF /GET DATA FIELD OF SYMBOL TABLE START SNA CLA /SKIP IF NOT FIELD 0 TAD L200/[200] /GET ADJUSTMENT FACTOR DCA THRWSM /SAVE ADJUSTMENT FACTOR RDF /GET DATA FIELD AGAIN TAD SQUCDF /MAKE IT A CDF INSTRUCTION DCA SQUCDF /STORE CORRECT DATA FIELD TAD SXR /GET STARTING INDEX DCA TXR /SAVE IT NL0001 /START AT THE BEGINNING SQULUP, JMS I GETSYM/[GETSM] /GET A SYMBOL JMP STRESET /ALL DONE ISZ RESULT /COUNT THIS SYMBOL TAD NM2 /TEST FOR A PERMANENT SPA CLA /SKIP IF NOT PERMANENT SYMBOL SLAZP1, JMP SQULUP /**** /A **** 0000 SQUCDF, CDF 00 /GET INTO CORRECT DATA FIELD TAD NM1 /\ DCA I TXR / \ TAD NM2 / \ DCA I TXR / \MOVE SYMBOL TO TAD NM3 / /ITS NEW HOME DCA I TXR / / TAD SVAL / / DCA I TXR // CDF 00 /BACK TO FIELD 0 ISZ TMP /COUNT THIS SYMBOL TAD THRWSM /GET ADJUSTMENT FACTOR TAD TXR /GET INDEX CMA /TEST FOR END OF FIELD SZA CLA /SKIP IF END OF FIELD JMP SQULUP /JUMP IF NOT TAD XPUT45/(10) /BUMP TO TAD SQUCDF /NEXT FIELD DCA SQUCDF /PUT IT BACK DCA THRWSM /ZERO ADJUSTMENT FACTOR NL7777 /RESET DCA TXR /POINTER JMP SQULUP /AND GO GET ANOTHER STRESET,TAD TMP /GET NEW SYMBOL COUNT CIA /MAKE NEGATIVE DCA MSTSIZ /AND SAVE FOR LATER TAD MSTSIZ /RECOVER NUMBER OF SYMBOLS SZA CLA /SKIP IF NO SYMBOLS SRTCALL,JMP SYMSORT /**** NOT /S **** 0000 JMP I .+1/(STATPR) /NOW GO PRINT THE STATISTICS STATPR /THROUGH HERE THRWSM, .-. /SYMBOL THROWAWAY ROUTINE DCA ANY /SAVE COUNT JMP THRAGN /START THERE THROW1, TAD EQUSW /GET SYMBOL START (OR 0) JMS I GETSYM/[GETSM] /GET A SYMBOL JMP I THRWSM /NO MORE SYMBOLS, RETURN IMMEDIATE DCA EQUSW /CLEAR RESET THRAGN, ISZ ANY /DONE ALL YET? JMP THROW1 /NO, DO ANOTHER ISZ THRWSM /BUMP RETURN ADDRESS JMP I THRWSM /RETURN XPUT45, 10 /RADIX 45 MESSAGE PRINTER /USED AS A CONSTANT 0010 BY SQUISH CIA /\ IAC / \ SNA CLA / \SETUP FOR SINGLE TAD NOS/(-"S!300) / /A LINE ITEM TAD L4000/(4000) / / DCA XPUTMP // XPUTLP, TAD I XPUT45 /GET A PAIR ISZ XPUT45 /BUMP POINTER SNA /END OF MESSAGE? JMP XPUTOUT /YES SPA /NO, FIXUP NEEDED? TAD XPUTMP /YES, ADD ON APPROPRIATE FUDGE JMS I P45CH/[XP45CH] /GO PRINT THE PAIR JMP XPUTLP /NOW GO GET NEXT PAIR XPUTOUT,JMS I PCRLF/[XPCRLF] /TERMINATE LINE WITH JMS I PCRLF/[XPCRLF] /A DOUBLE SPACE JMP I XPUT45 /AND RETURN NOS, -"S!300 /MAKES MESSAGES LOOK NICE XPUTMP, .-. /TEMPORARY L4000, 4000 /CONSTANT 4000 SYMBLB, TEXT "COMPLETE SYMBOL TABLE LISTING" / TEXT "COMPUSER SYMBOL TABLE LISTING"; IF USER MESSAGE BLSMSG, TEXT "TWO PASS ASSEMBLY ";3740 / TEXT "ONE PASS ASSEMBLY ";3740; IF ONE PASS STBLB, TEXT "ASSEMBLY STATISTICS" CRFBLB, TEXT "CROSS REFERENCE TABLE ";3740 ZBLOCK .&7600+177-. /GET TO END OF PAGE SYMSORT,TAD MSTSIZE /GET SYMBOL TABLE SIZE DCA SRTHGH /SAVE AS LIMIT TAD SRTHGH /GET LIMIT CMA /COMPLEMENT FOR TEST SNA /SKIP IF MORE THAN ONE SYMBOL JMP PRSTAB /ELSE PRINT THE SYMBOL TABLE STL CMA RAR /CALCULATE SZL /HEAP IAC /LIMIT DCA SRTLOW /SAVE IT SRTH1, TAD SPNM1/(NM1-1) /SETUP DCA TXR /TARGET POINTER STL /SHOW ARGUMENT PRESENT JMS I PSRTMOV/(SRTMOV)/MOVE A SYMBOL SRTLOW, .-. /LOWER SORT LIMIT SRTH3, TAD SRTLOW /GET LOWER LIMIT DCA SRTIX2 /SAVE SRTH4, TAD SRTIX2 /GET OLD UPPER INDEX DCA SRTIX1 /SAVE AS NEW LOWER INDEX TAD SRTIX2 /GET INDEX AGAIN CLL RAL /DOUBLE IT DCA SRTIX2 /SAVE AS NEW UPPER INDEX SNL /SKIP IF NOT TOO BIG JMP SRTH8 /JUMP IF TOO BIG TAD SRTIX2 /COMPARE CLL CIA /TO TAD SRTHGH /LIMIT SNA /SKIP IF NOT EQUAL JMP SRTH7 /JUMP IF EQUAL SZL CLA /SKIP IF LOWER JMP SRTH8 /JUMP IF GREATER NL7777 /BACKUP TAD SRTIX2 /GET INDEX AGAIN JMS SRTTGT /SETUP TARGET JMS I PSRTCOM/(SRTCOM)/COMPARE SRTIX2, .-. /UPPER INDEX JMP SRTH7 /JUMP IF SOURCE GREATER THAN TARGET NL7777 /INCREMENT TAD SRTIX2 /UPPER DCA SRTIX2 /INDEX SRTH7, TAD SRTIX2 /GET INDEX AGAIN DCA .+4 /SAVE IT TAD SRTIX1 /GET LOWER INDEX JMS SRTTGT /SETUP TARGET POINTERS JMS I PSRTMOV/(SRTMOV)/MOVE SYMBOL .-. /HOLDS THE ARGUMENT JMP SRTH4 /CONTINUE SRTH8, TAD SRTIX1 /GET LOWER INDEX DCA SRTIX2 /MAKE IT UPPER INDEX TAD SRTIX2 /GET NEW UPPER INDEX STL RAR /DIVIDE SZL /BY IAC /TWO DCA SRTIX1 /STASH NEW INDEX TAD SRTIX2 /COMPARE CLL CIA /TO LOWER TAD SRTLOW /LIMIT SNA CLA /SKIP IF NOT EQUAL JMP SRTH8A /JUMP IF EQUAL TAD SRTIX1 /GET LOWER INDEX JMS SRTTGT /SETUP TARGET POINTERS CLL /SHOW NO ARGUMENT IS PRESENT JMS I PSRTCOM/(SRTCOM)/COMPARE SYMBOLS JMP SRTH8B /JUMP IF SOURCE IS GREATER THAN TARGET SRTH8A, TAD SRTIX2 /GET UPPER INDEX JMS SRTTGT /SETUP TARGET POINTERS CLL /SHOW NO ARGUMENT PRESENT JMS I PSRTMOV/(SRTMOV)/MOVE SYMBOL JMP SRTH2 /GO AROUND AGAIN SRTH8B, TAD SRTIX2 /GET UPPER INDEX JMS SRTTGT /SETUP TARGET POINTERS JMS I PSRTMOV/(SRTMOV)/MOVE SYMBOL SRTIX1, .-. /LOWER INDEX JMP SRTH8 /AND LOOP AROUND SRTH2, ISZ SRTLOW /HEAP CREATION DONE? JMP SRTH1 /JUMP IF NOT NL7777 /RESET DCA SRTLOW /LOWER LIMIT TAD SPNM1/(NM1-1) /SETUP DCA TXR /TARGET STL /SHOW ARGUMENT PRESENT JMS I PSRTMOV/(SRTMOV)/MOVE SYMBOL SRTHGH, .-. /UPPER LIMIT TAD SRTHGH /GET UPPER LIMIT JMS SRTTGT /SETUP TARGET POINTERS JMS I PSRTMOV/(SRTMOV)/MOVE SYMBOL -1 /WHERE IT GOES ISZ SRTHGH /DECREMENT UPPER LIMIT TAD SRTHGH /GET UPPER LIMIT CMA /TEST FOR END OF SORT SZA CLA /SKIP IF END JMP SRTH3 /JUMP IF NOT END NL7777 /TARGET SYMBOL NUMBER JMS SRTTGT /SETUP TARGET POINTER CLL /SHOW NO ARGUMENT PRESENT JMS I PSRTMOV/(SRTMOV)/MOVE SYMBOL JMP PRSTAB /GO PRINT TABLE SRTTGT, .-. /SETUP TARGET POINTER ROUTINE CMA /MAKE INTO SYMBOL NUMBER DCA SYMNUM /STASH IT JMS I SETSYM/[XSETSM] /SETUP POINTERS TAD SXR /GET SYMBOL LOCATION DCA TXR /PUT IN TARGET REGISTER TAD SPNM1/(NM1-1) /SETUP DEFAULT DCA SXR /SOURCE LOCATION RDF /GET SOURCE DATA FIELD CDF 00 /BACK TO FIELD 0 STL /ASSUME AN ARGUMENT WILL BE PRESENT JMP I SRTTGT /RETURN PSRTCOM,SRTCOM /POINTER TO COMPARE ROUTINE PSRTMOV,SRTMOV /POINTER TO MOVE ROUTINE SPNM1, NM1-1 /POINTER TO NM1 (AUTO-INDEX) PSYMBLB,SYMBLB /**** /S AND NOT /A **** SYMBLB+2 PBLPRT, BLPRT /POINTER TO BLPRT ROUTINE PPSTB2, PRSTB2 /POINTER TO PRSTB2 PBLFXC, BLFIXCM /POINTER TO BLFIXCM PBLDUN, BLDUN /WHERE BLDUN IS /BLFIX, BLADR /FIXUP POINTER /PGETTIT,SLLRL4 /POINTER TO GET A TITLE ROUTINE FOR RELOCATION PRSTAB, TAD PSYMBLB /GET MESSAGE POINTER JMS I PBLPRT/(BLPRT) /SET IT UP FOR PRINTING JMP I PPSTB2/(PRSTB2) /NO TITLES! / TAD I BLFIX /GET A POINTER TO BE RELOCATED / SNA /END OF LIST? / JMP I PBLDUN/(BLDUN) /JUMP IF SO / TAD I PGETTIT/(SLLRL4)/GET RELIABLE POINTER / DCA I BLFIX /STORE BACK RELOCATED VALUE / ISZ BLFIX /BUMP TO NEXT / JMP .-6 /GO DO ANOTHER PAGE BLDUN, NL0001 /SETUP FOR /L AND I BL7604/(SWAL) /AND JUST /L SZA CLA /SKIP IF NOT SET JMP BLFIXCM /CONTINUE THERE TAD I BL7604/(SWAL) /GET /A-/L AND BL2002/(2002) /JUST /B, /K SZA CLA /SKIP IF NONE OF ABOVE JMP BLUSE2 /JUMP IF ANY OF THEM / NL0001 /SETUP /X MASK / AND I BL7605/(SWMX) /JUST /X / SZA CLA /SKIP IF /X NOT SET / JMP BLUSE2 /JUMP IF SET TAD BLONE /\ DCA I BLSM0/(BLSMSG) / \MOVE IN THE ONE TAD BLONE+1 / /PASS MESSAGE DCA I BLSM1/(BLSMSG+1)// BLUSE2, TAD BL7765/(-12-1) /SETUP DCA I PTITLEN/(TITLEN)/LENGTH WORD IN TITLE TAD I BLSM0/(BLSMSG) /GET A WORD DCA I BLADR/(BLURB) /PUT A WORD ISZ BLSM0/(BLSMSG) /BUMP TO NEXT ISZ BLADR/(BLURB) /BUMP POINTER ISZ BL7765/(-12-1) /DONE TOO MANY? JMP .-5 /NO, GO BACK BLFIXCM,TAD BLFXLEN/(-24-1) /SETUP DCA I PSTTLEN/(STTLEN)/NEW LENGTH DCA I PPAGNUM/(PAGNUM)/START ON PAGE S-1 DCA I POVZP1/(OVFZP1) /PREVENT ANY DCA I POVZP2/(OVFZP2) /OVERFLOW PAGES PRSTB2, NL0001 /INITIALIZE TABLE PRSTB3, JMS I GETSYM/[GETSM] /GET A SYMBOL JMP LINEXT /NO MORE THIS GO-AROUND JMS I PRTSYM/[XPRTSM] /PRINT THE SYMBOL NAME TAD NMFLGS /GET SYMBOL FLAGS CLL RAL /MOVE OVER SPA SZL /UNDEFINED SYMBOL? JMP TRYRST /NO, TRY OTHERS TAD L7774/[-4] /\ DCA NM1 / \ JMS I P6CH/[XP6CH] / \ TAD LSTAR/("*&77) / \PRINT " **** " IN JMS I P6CH/[XP6CH] / /PLACE OF THE VALUE ISZ NM1 / / JMP .-3 / / JMS I P6CH/[XP6CH] // JMP PSTCMN /BRANCH AROUND TRYRST, SNL /SKIP IF MRI OR PSEUDO-OP JMP TRYPRM /EITHER PERMANENT OR USER SMA CLA /SKIP IF PSEUDO-OP TAD PR7711/("M-"D) /GOOD AS 6-BIT "M-"D! TAD L4/["D&77] /USE AT LEAST "D" JMP SAVRCH /FINISH THERE TRYPRM, AND NM2 /AND OFF FIXTAB BIT SPA CLA /SKIP IF USER SYMBOL TAD L20/("P&77) /USE "P" SAVRCH, DCA RCHAR /SETUP REAR CHARACTER TAD NM2 /GET PERMANENT WORD RAL /FIXTAB BIT TO LINK CLA /CLEAN UP TAD NM3 /GET DEFINED BY COMMA WORD SMA SNL CLA /SKIP IF EITHER PERMANENT OR DEFINED BY COMMA TAD LEQUAL/("=&77) /GET AN "=" CHARACTER DCA FCHAR /PUT IN FRONT TAD SVAL /GET SYMBOL'S VALUE JMS I PRTFLD/[XPRFLD] /PRINT IT PSTCMN, TAD PR7711/(-67) /SET UP TO JMS I PTHRWSM/(THRWSM)/THROW AWAY 54 SYMBOLS JMP LINEXT /NO MORE TO THROW AWAY! TAD COLCT /GET CURRENT COLUMN TAD COLIMT /TOO FAR? SMA CLA /SKIP IF NOT JMP LINEXT /JUMP IF SO JMS I P45CH/[XP45CH] /PRINT 2 S JMS I P6CH/[XP6CH] /**** LPT: OR /P **** JMS I P45CH/[XP45CH] JMP PRSTB3 /GO BACK LINEXT, NL0001 /RESET DCA EQUSW /SYMBOL ROUTINE ISZ SCLCNT /DONE A WHOLE PAGE OF SYMBOLS? JMP THRWAY /NO, THROW AWAY MORE PREVIOUS SYMBOLS TAD EXTHRA /\ TAD SYMPAG / >THROW AWAY AN ADDITIONAL PAGE DCA EXTHRA // TAD PR7711/(-67) /RESET DCA SCLCNT /SYMBOL COUNTER THRWAY, TAD SCLCNT /GET SYMBOL COUNT CIA /INVERT IT TAD EXTHRA /ADD ON PAGE DROP COUNT JMS I PTHRWSM/(THRWSM)/REMOVE THAT MANY JMP STATPR /WE'RE DONE JMS I PCRLF/[XPCRLF] /PRINT A , JMP PRSTB3 /KEEP GOING BLADR, BLURB/-XGBLURB /WHERE BLURB IS PTITLEN,TITLEN/-XGBLURB /WHERE LENGTH WORD IS PSTTLEN,STTLEN/-XGBLURB /WHERE NEW TITLE LENGTH IS /PSTPZAP,STPZAP/-XGBLURB /WHERE LENGTH REFERENCE IS PPAGNUM,PAGNUM/-XGBLURB /WHERE PAGNUM IS POVZP1, OVFZP1/-XGBLURB /WHERE OVFZP1 IS POVZP2, OVFZP2/-XGBLURB /WHERE OVFZP2 IS 0 /THIS ENDS THE LIST COLIMT, 7700 /**** /P **** 7606 SYMPAG, 7355 /**** /P **** 7110 SCLCNT, 7711 /SYMBOL LINE COUNTER PR7711, 7711 /55 SYMBOLS PER COLUMN CONSTANT EXTHRA, 7710 /EXTRA THROWAWAY PAGE COUNT PTHRWSM,THRWSM /POINTER TO THRWSM ROUTINE LEQUAL, "=&77 /"=" CONSTANT LSTAR, "*&77 /CONSTANT 0052 L20, "P&77 /CONSTANT 0020 BL7765, -12-1 /THIS WILL MOVE ONE TOO MANY, WHO CARES! BLONE, TEXT "ONE " /PASS ONE MESSAGE BLFXLEN,7754-1 /NEW MESSAGE LENGTH BL2002, 2002 /B, /K MASK BL7604, SWAL /WHERE /A-/L IS BL7605, SWMX /WHERE /M-/X IS BL7757, SFILES /CONSTANT 7757 BLSM0, BLSMSG /MESSAGE POINTER BLSM1, BLSMSG+1 /MESSAGE INTERNAL POINTER PSTBLB, STBLB /POINTER TO STATISTICS BLURB BLBDIF, DUMBLB-STBLB /INTER-MESSAGE DIFFERENCE PBLBZAP,BLBZAP /WHERE TO ALLOW EXTRA , PDBLZAP,DBLZAP /WHERE TO INHIBIT EXTRA , ZBLOCK .&7600+166-. /GET NEAR END OF THE PAGE STATPR, JMS I PEJECT/[DEJECT] /DO AN EJECT DCA ECHOSW /FORCE ECHO ON TAD I BL7757/(SFILES) /GET FIRST FILE ARGUMENT SLAZP2, SZA CLA /**** /A **** 0000 JMP .+5 /JUMP IF ANY FILES TAD I PBLBZAP/(BLBZAP) /MAKE IT NOT DCA I PDBLZAP/(DBLZAP) /DO AN EXTRA , DCA I PBLBZAP/(BLBZAP) /DO AN EXTRA , TAD BLBDIF/(DUMBLB-STBLB) /GET MESSAGE OFFSET TAD PSTBLB/(STBLB) /GET MESSAGE ADDRESS JMS I SBLPRT/(BLPRT) /GO PRINT SUB-TITLE MESSAGE L21, 21 /HERE JUST IN CASE FTEMP1, TAD ERRTOT /GET ERROR COUNT FTEMP2, SNA CLA /SKIP IF ANY FTEMP3, JMP PRNO /JUMP IF NONE TAD DECZP1/(DECPRT&177+JMPIC) /GET RETURN INSTRUCTION DCA I PDECZAP/(DECZAP) /GO ZAP IT IN TAD ERRTOT /GET ERROR COUNT JMS I PRTDEC/[DECPRT] /ALMOST PRINT IT DCA FTEMP1 /SAVE FIRST ASCII DIGIT TAD DECZP2/(JMS I P6CH/[XP6CH]) /RESTORE ZAPPED INSTRUCTION DCA I PDECZAP/(DECZAP) /TO FORMER VALUE TAD TMP /GET DECPRT'S TEMPORARY DCA FTEMP2 /SAVE IT TAD I PDECPTR/(DECPTR) /GET DECPRT'S POWER POINTER DCA FTEMP3 /SAVE IT TAD FTEMP1 /RESTORE ASCII DIGIT DECZP2, JMS I P6CH/[XP6CH] /PRINT TITLES AND FIRST DIGIT TAD OURNXT/(NXTADR) /SETUP NEXT ADDRESS DCA I PRTDEC/[DECPRT] /IN HEADER OF DECPRT TAD FTEMP2 /RESTORE DCA TMP /DECPRT TEMPORARY TAD FTEMP3 /RESTORE DCA I PDECPTR/(DECPTR) /POWER POINTER JMP I .+1/(DECZAP+1) /NOW GO BACK TO DECPRT DECZAP+1 /THROUGH HERE PRNO, TAD SNO/("N-300^45+"O-300) /GET "NO" JMS I P45CH/[XP45CH] /GO PRINT TITLES AND IT NXTADR, JMS I P6CH/[XP6CH] /PRINT A TAD ERRTOT /GET ERRORS AGAIN JMS I PUT45/(XPUT45) /AND PRINT MESSAGE "E-300^45+"R-300 /\ "R-300^45+"O-300 / \ "R-300^45+"S-300+4000 / \ "D-300 / \ "E-300^45+"T-300 / >"ERRORS DETECTED" "E-300^45+"C-300 / / "T-300^45+"E-300 / / "D-300^45 / / 0000 // TAD OFPCNT /GET NUMBER OF LINKS GENERATED JMS I PRTDEC/[DECPRT] /AND PRINT THEM TAD OFPCNT /GET THEM AGAIN JMS I PUT45/(XPUT45) /AND PRINT MESSAGE "L-300 /\ "I-300^45+"N-300 / \ "K-300^45+"S-300+4000 / \ "G-300 / \ "E-300^45+"N-300 / >"LINKS GENERATED" "E-300^45+"R-300 / / "A-300^45+"T-300 / / "E-300^45+"D-300 / / ZTEM, 0000 // TAD I P4KSYMS/(SYMS4K) /\ SNA / \ JMP .+6 / \ CLL / \ TAD RESULT / \ SNL / \ CLA / \ DCA RESULT / >CALCULATE AMOUNT OF CORE NEEDED NL2000 / / TAD RESULT / / TAD L377/(377) / / RTL / / RTL / / RAL / / AND L37/[37] // JMS I PRTDEC/[DECPRT] /PRINT NUMBER OF K JMS I PUT45/(XPUT45) /PRINT MESSAGE "K-300^45 /\ "M-300^45+"E-300 / \ "M-300^45+"O-300 / \ "R-300^45+"Y-300 / \ "U-300 / \"K MEMORY "T-300^45+"I-300 / /UTILIZED" "L-300^45+"I-300 / / "Z-300^45+"E-300 / / "D-300^45 / / 0000 // TAD OUTPTR /GET OUTPUT POINTER SMA /FILES? TAD BDFUDGE/(-BDFLST+SFILES)/NO, USE SWITCHES TAD L21/(21) /ADD ON OFFSET DCA ZTEM /SAVE COUNT TAD ZTEM /GET IT BACK JMS I PRTDEC/[DECPRT] /GO PRINT IT TAD ZTEM /GET IT AGAIN JMS I PUT45/(XPUT45) /PRINT OUT "F-300 /\ "I-300^45+"L-300 / \ "E-300^45+"S-300+4000 / \ "C-300 / >"FILES CREATED" "R-300^45+"E-300 / / "A-300^45+"T-300 / / "E-300^45+"D-300 // 0000 /THIS ENDS THE MESSAGE TAD MSTSIZ /GET NUMBER OF SYMBOLS CIA /MAKE POSITIVE DCA ZTEM /AND SAVE TAD ZTEM /RECOVER NUMBER OF SYMBOLS JMS I PRTDEC/[DECPRT] /AND PRINT THEM TAD ZTEM /GET NUMBER AGAIN JMS I PUT45/(XPUT45) /AND PRINT MESSAGE "S-300 /\ "Y-300^45+"M-300 / \ "B-300^45+"O-300 / >"SYMBOLS" "L-300^45+"S-300+4000 / / 0000 // TAD I OINTFPT/(INTFPT) /GET FILE RESET DCA TMP /STASH IT DCA I TMP /DESTROY INPUT FILES DCA I OUTPTR /DESTROY UNNEEDED OUTPUT FILES JMS I PEJECT/[DEJECT] /DO FINAL EJECT NL0001 /SETUP /L, /X MASK JMP I .+1/(CHECKX) /CONTINUE THERE CHECKX /THROUGH HERE PUT45, XPUT45 /POINTER TO RADIX 45 PRINT ROUTINE BDFUDGE,-BDFLST+SFILES /OFFSET CONSTANT SNO, "N-300^45+"O-300 /"NO" IN RADIX 45 DECZP1, DECPRT&177+JMPIC /"JMP I DECPRT" PDECZAP,DECZAP /WHERE TO PUT IT PDECPTR,DECPTR /WHERE DECPRT'S POWERS POINTER IS OURNXT, NXTADR /OUR RETURN ADDRESS SBLPRT, BLPRT /POINTER TO BLURB PRINT SETUP ROUTINE P4KSYMS,SYMS4K /POINTER TO FIELD 0 SYMBOL USAGE WORD L377, 377 /CONSTANT 0377 OINTFPT,INTFPT /WHERE INPUT RESET VALUE IS PAGE RELOC STOEND= . /END OF SYMBOL TABLE OVERLAY STOSIZ= .-STOCOD%200 /NUMBER OF BLOCKS IN THIS OVERLAY OVLYBLK=OVLYBLK+STOSIZ /UPDATE BLOCK FOR NEXT OVERLAY SYMTAB, *7777 /END OF AN *7777 /OVERLAY SUDOBLK=OVLYBLK /SYMBOL TABLE BLOCK NFLAG= 2000 /NON-MEMORY REFERENCE FLAG PFLAG= 4000 /PERMANENT SYMBOL FLAG MFLAG= 4000 /MEMORY REFERENCE FLAG SFLAG= 6000 /PSEUDO-OP FLAG VFLAG= 4000 /VALUED PSEUDO-OP FLAG *SYMTAB /RESTORE ORIGIN "A-300^45+"S-300+SFLAG /ASMIFM "M-300^45+"I-300+PFLAG "F-300^45+"M-300 MASSIF "A-300^45+"S-300+SFLAG /ASMIFN "M-300^45+"I-300+PFLAG "F-300^45+"N-300 NASSIF "A-300^45+"S-300+SFLAG /ASMIFZ "M-300^45+"I-300+PFLAG "F-300^45+"Z-300 ZASSIF "A-300^45+"S-300+SFLAG /ASMSKP "M-300^45+"S-300+PFLAG "K-300^45+"P-300 SKPASM "D-300^45+"T-300+SFLAG /DTORG "O-300^45+"R-300+PFLAG "G-300^45 XDTORG "E-300^45+"N-300+SFLAG /ENBITS "B-300^45+"I-300+PFLAG "T-300^45+"S-300 XPSDRET / "I-300^45+SFLAG /I / PFLAG / 0 / EYE "L-300^45+"M-300+SFLAG /LMODE "O-300^45+"D-300+PFLAG "E-300^45 XLMODE "N-300^45+"O-300+SFLAG /NOBITS "B-300^45+"I-300+PFLAG "T-300^45+"S-300 XPSDRET "P-300^45+"M-300+SFLAG /PMODE "O-300^45+"D-300+PFLAG "E-300^45 XPMODE "S-300^45+"E-300+SFLAG /SEGMNT "G-300^45+"M-300+PFLAG "N-300^45+"T-300 XSGMNT 0000 /THIS ENDS THE LIST PAGE "C-300^45+"O-300+SFLAG /CONSOLE "N-300^45+"S-300+PFLAG "O-300^45+"L-300 XCNSOL+VFLAG "D-300^45+"A-300+SFLAG /DATE "T-300^45+"E-300+PFLAG 0000 XDATE+VFLAG "D-300^45+"E-300+SFLAG /DECIMAL "C-300^45+"I-300+PFLAG "M-300^45+"A-300 RAD10 "D-300^45+"E-300+SFLAG /DEVICE "V-300^45+"I-300+PFLAG "C-300^45+"E-300 XDVICE "E-300^45+"J-300+SFLAG /EJECT "E-300^45+"C-300+PFLAG "T-300^45 XEJECT "E-300^45+"N-300+SFLAG /ENDBIN "D-300^45+"B-300+PFLAG "I-300^45+"N-300 XENDBIN "E-300^45+"N-300+SFLAG /ENPUNCH "P-300^45+"U-300+PFLAG "N-300^45+"C-300 XPUNCH "E-300^45+"R-300+SFLAG /ERROR "R-300^45+"O-300+PFLAG "R-300^45 XERROR "E-300^45+"X-300+SFLAG /EXPUNGE "P-300^45+"U-300+PFLAG "N-300^45+"G-300 XPUNGE "F-300^45+"I-300+SFLAG /FIELD "E-300^45+"L-300+PFLAG "D-300^45 XFLD "F-300^45+"I-300+SFLAG /FILENAME "L-300^45+"E-300+PFLAG "N-300^45+"A-300 XFLNAM "F-300^45+"I-300+SFLAG /FIXMRI "X-300^45+"M-300+PFLAG "R-300^45+"I-300 MAKMRI "F-300^45+"I-300+SFLAG /FIXTAB "X-300^45+"T-300+PFLAG "A-300^45+"B-300 XFXTAB "I-300^45+SFLAG /I PFLAG 0000 EYE "I-300^45+"F-300+SFLAG /IFDEF "D-300^45+"E-300+PFLAG "F-300^45 IFDF "I-300^45+"F-300+SFLAG /IFNDEF "N-300^45+"D-300+PFLAG "E-300^45+"F-300 IFNDF "I-300^45+"F-300+SFLAG /IFNZRO "N-300^45+"Z-300+PFLAG "R-300^45+"O-300 IFNZER "I-300^45+"F-300+SFLAG /IFZERO "Z-300^45+"E-300+PFLAG "R-300^45+"O-300 IFZER "N-300^45+"O-300+SFLAG /NOPUNCH "P-300^45+"U-300+PFLAG "N-300^45+"C-300 XNOPUN "O-300^45+"C-300+SFLAG /OCTAL "T-300^45+"A-300+PFLAG "L-300^45 RAD8 "P-300^45+"A-300+SFLAG /PAGE "G-300^45+"E-300+PFLAG 0000 XPAGE "P-300^45+"A-300+SFLAG /PAUSE "U-300^45+"S-300+PFLAG "E-300^45 XPAUSE "P-300^45+"Q-300+SFLAG /PQS "S-300^45+PFLAG 0000 XPSDRET "R-300^45+"E-300+SFLAG /RELOC "L-300^45+"O-300+PFLAG "C-300^45 XRELOC "S-300^45+"I-300+SFLAG /SIXBIT "X-300^45+"B-300+PFLAG "I-300^45+"T-300 XSXBIT "S-300^45+"K-300+SFLAG /SKIP "I-300^45+"P-300+PFLAG 0000 XSKIP "T-300^45+"E-300+SFLAG /TEXT "X-300^45+"T-300+PFLAG 0000 XTEXT "T-300^45+"I-300+SFLAG /TITLE "T-300^45+"L-300+PFLAG "E-300^45 XTITLE "X-300^45+"L-300+SFLAG /XLIST "I-300^45+"S-300+PFLAG "T-300^45 XLISTI "Z-300^45+SFLAG /Z PFLAG 0000 XPSDRET "Z-300^45+"B-300+SFLAG /ZBLOCK "L-300^45+"O-300+PFLAG "C-300^45+"K-300 ZBLK "A-300^45+"C-300+NFLAG /ACL "L-300^45+PFLAG 0000 ACL "A-300^45+"N-300+MFLAG /AND "D-300^45+PFLAG 0000 AND 0000 "A-300^45+"S-300+NFLAG /ASC "C-300^45+PFLAG 0000 ASC "A-300^45+"S-300+NFLAG /ASR "R-300^45+PFLAG 0000 ASR "B-300^45+"S-300+NFLAG /BSW "W-300^45+PFLAG 0000 BSW "C-300^45+"A-300+NFLAG /CAF "F-300^45+PFLAG 0000 CAF "C-300^45+"A-300+NFLAG /CAM "M-300^45+PFLAG 0000 CAM "C-300^45+"D-300+NFLAG /CDF "F-300^45+PFLAG 0000 CDF "C-300^45+"I-300+NFLAG /CIA "A-300^45+PFLAG 0000 CIA "C-300^45+"I-300+NFLAG /CIF "F-300^45+PFLAG 0000 CIF "C-300^45+"I-300+NFLAG /CINT "N-300^45+"T-300+PFLAG 0000 CINT "C-300^45+"L-300+NFLAG /CLA "A-300^45+PFLAG 0000 CLA "C-300^45+"L-300+NFLAG /CLL "L-300^45+PFLAG 0000 CLL "C-300^45+"M-300+NFLAG /CMA "A-300^45+PFLAG 0000 CMA "C-300^45+"M-300+NFLAG /CML "L-300^45+PFLAG 0000 CML "C-300^45+"U-300+NFLAG /CUF "F-300^45+PFLAG 0000 CUF "D-300^45+"A-300+NFLAG /DAD "D-300^45+PFLAG 0000 DAD "D-300^45+"C-300+MFLAG /DCA "A-300^45+PFLAG 0000 DCA 0000 "D-300^45+"C-300+NFLAG /DCM "M-300^45+PFLAG 0000 DCM "D-300^45+"D-300+NFLAG /DDZ "Z-300^45+PFLAG 0000 DDZ "D-300^45+"L-300+NFLAG /DLD "D-300^45+PFLAG 0000 DLD / "D-300^45+"L-300+NFLAG /DL0001 / "0-225^45+"0-225+PFLAG / "0-225^45+"1-225 / DL0001 "D-300^45+"P-300+NFLAG /DPIC "I-300^45+"C-300+PFLAG 0000 DPIC "D-300^45+"P-300+NFLAG /DPSZ "S-300^45+"Z-300+PFLAG 0000 DPSZ "D-300^45+"S-300+NFLAG /DST "T-300^45+PFLAG 0000 DST "D-300^45+"T-300+NFLAG /DTCA "C-300^45+"A-300+PFLAG 0000 DTCA "D-300^45+"T-300+NFLAG /DTLA "L-300^45+"A-300+PFLAG 0000 DTLA "D-300^45+"T-300+NFLAG /DTLB "L-300^45+"B-300+PFLAG 0000 DTLB "D-300^45+"T-300+NFLAG /DTRA "R-300^45+"A-300+PFLAG 0000 DTRA "D-300^45+"T-300+NFLAG /DTRB "R-300^45+"B-300+PFLAG 0000 DTRB "D-300^45+"T-300+NFLAG /DTSF "S-300^45+"F-300+PFLAG 0000 DTSF "D-300^45+"T-300+NFLAG /DTXA "X-300^45+"A-300+PFLAG 0000 DTXA "D-300^45+"V-300+NFLAG /DVI "I-300^45+PFLAG 0000 DVI "E-300^45+"A-300+NFLAG /EAE "E-300^45+PFLAG 0000 EAE "G-300^45+"L-300+NFLAG /GLK "K-300^45+PFLAG 0000 GLK "G-300^45+"T-300+NFLAG /GTF "F-300^45+PFLAG 0000 GTF "H-300^45+"L-300+NFLAG /HLT "T-300^45+PFLAG 0000 HLT "I-300^45+"A-300+NFLAG /IAC "C-300^45+PFLAG 0000 IAC "I-300^45+"N-300+MFLAG /INC "C-300^45+PFLAG 0000 INC 0000 "I-300^45+"O-300+NFLAG /IOF "F-300^45+PFLAG 0000 IOF "I-300^45+"O-300+NFLAG /ION "N-300^45+PFLAG 0000 ION "I-300^45+"O-300+NFLAG /IOT "T-300^45+PFLAG 0000 IOT "I-300^45+"S-300+MFLAG /ISZ "Z-300^45+PFLAG 0000 ISZ 0000 "J-300^45+"M-300+MFLAG /JMP "P-300^45+PFLAG 0000 JMP 0000 "J-300^45+"M-300+MFLAG /JMS "S-300^45+PFLAG 0000 JMS 0000 "K-300^45+"C-300+NFLAG /KCC "C-300^45+PFLAG 0000 KCC "K-300^45+"C-300+NFLAG /KCF "F-300^45+PFLAG 0000 KCF "K-300^45+"I-300+NFLAG /KIE "E-300^45+PFLAG 0000 KIE "K-300^45+"R-300+NFLAG /KRB "B-300^45+PFLAG 0000 KRB "K-300^45+"R-300+NFLAG /KRS "S-300^45+PFLAG 0000 KRS "K-300^45+"S-300+NFLAG /KSF "F-300^45+PFLAG 0000 KSF "L-300^45+"A-300+NFLAG /LAS "S-300^45+PFLAG 0000 LAS "L-300^45+"S-300+NFLAG /LSR "R-300^45+PFLAG 0000 LSR "M-300^45+"Q-300+NFLAG /MQA "A-300^45+PFLAG 0000 MQA "M-300^45+"Q-300+NFLAG /MQL "L-300^45+PFLAG 0000 MQL "M-300^45+"U-300+NFLAG /MUY "Y-300^45+PFLAG 0000 MUY "N-300^45+"M-300+NFLAG /NMI "I-300^45+PFLAG 0000 NMI "N-300^45+"O-300+NFLAG /NOP "P-300^45+PFLAG 0000 NOP "N-300^45+"O-300+NFLAG /NOPSKP "P-300^45+"S-300+PFLAG "K-300^45+"P-300 NOPSKP "O-300^45+"P-300+NFLAG /OPR "R-300^45+PFLAG 0000 OPR "O-300^45+"S-300+NFLAG /OSR "R-300^45+PFLAG 0000 OSR "P-300^45+"C-300+NFLAG /PCE "E-300^45+PFLAG 0000 PCE "P-300^45+"C-300+NFLAG /PCF "F-300^45+PFLAG 0000 PCF "P-300^45+"L-300+NFLAG /PLS "S-300^45+PFLAG 0000 PLS "P-300^45+"P-300+NFLAG /PPC "C-300^45+PFLAG 0000 PPC "P-300^45+"S-300+NFLAG /PSF "F-300^45+PFLAG 0000 PSF "R-300^45+"A-300+NFLAG /RAL "L-300^45+PFLAG 0000 RAL "R-300^45+"A-300+NFLAG /RAR "R-300^45+PFLAG 0000 RAR "R-300^45+"C-300+NFLAG /RCC "C-300^45+PFLAG 0000 RCC "R-300^45+"D-300+NFLAG /RDF "F-300^45+PFLAG 0000 RDF "R-300^45+"F-300+NFLAG /RFC "C-300^45+PFLAG 0000 RFC "R-300^45+"I-300+NFLAG /RIB "B-300^45+PFLAG 0000 RIB "R-300^45+"I-300+NFLAG /RIF "F-300^45+PFLAG 0000 RIF "R-300^45+"M-300+NFLAG /RMF "F-300^45+PFLAG 0000 RMF "R-300^45+"P-300+NFLAG /RPE "E-300^45+PFLAG 0000 RPE "R-300^45+"R-300+NFLAG /RRB "B-300^45+PFLAG 0000 RRB "R-300^45+"S-300+NFLAG /RSF "F-300^45+PFLAG 0000 RSF "R-300^45+"T-300+NFLAG /RTF "F-300^45+PFLAG 0000 RTF "R-300^45+"T-300+NFLAG /RTL "L-300^45+PFLAG 0000 RTL "R-300^45+"T-300+NFLAG /RTR "R-300^45+PFLAG 0000 RTR "S-300^45+"A-300+NFLAG /SAM "M-300^45+PFLAG 0000 SAM "S-300^45+"C-300+NFLAG /SCA "A-300^45+PFLAG 0000 SCA "S-300^45+"C-300+NFLAG /SCL "L-300^45+PFLAG 0000 SCL "S-300^45+"G-300+NFLAG /SGT "T-300^45+PFLAG 0000 SGT "S-300^45+"H-300+NFLAG /SHL "L-300^45+PFLAG 0000 SHL "S-300^45+"I-300+NFLAG /SINT "N-300^45+"T-300+PFLAG 0000 SINT / "S-300^45+"K-300+NFLAG /SKB / "B-300^45+PFLAG / 0000 / SKB "S-300^45+"K-300+NFLAG /SKON "O-300^45+"N-300+PFLAG 0000 SKON "S-300^45+"K-300+NFLAG /SKP "P-300^45+PFLAG 0000 SKP "S-300^45+"M-300+NFLAG /SMA "A-300^45+PFLAG 0000 SMA "S-300^45+"N-300+NFLAG /SNA "A-300^45+PFLAG 0000 SNA "S-300^45+"N-300+NFLAG /SNL "L-300^45+PFLAG 0000 SNL "S-300^45+"P-300+NFLAG /SPA "A-300^45+PFLAG 0000 SPA "S-300^45+"R-300+NFLAG /SRQ "Q-300^45+PFLAG 0000 SRQ "S-300^45+"T-300+NFLAG /STA "A-300^45+PFLAG 0000 NL7777 "S-300^45+"T-300+NFLAG /STL "L-300^45+PFLAG 0000 STL "S-300^45+"U-300+NFLAG /SUF "F-300^45+PFLAG 0000 SUF "S-300^45+"W-300+NFLAG /SWAB "A-300^45+"B-300+PFLAG 0000 SWAB "S-300^45+"W-300+NFLAG /SWBA "B-300^45+"A-300+PFLAG 0000 SWBA "S-300^45+"W-300+NFLAG /SWP "P-300^45+PFLAG 0000 SWP "S-300^45+"Z-300+NFLAG /SZA "A-300^45+PFLAG 0000 SZA "S-300^45+"Z-300+NFLAG /SZL "L-300^45+PFLAG 0000 SZL "T-300^45+"A-300+MFLAG /TAD "D-300^45+PFLAG 0000 TAD 0000 "T-300^45+"C-300+NFLAG /TCF "F-300^45+PFLAG 0000 TCF "T-300^45+"F-300+NFLAG /TFL "L-300^45+PFLAG 0000 TFL "T-300^45+"L-300+NFLAG /TLS "S-300^45+PFLAG 0000 TLS "T-300^45+"P-300+NFLAG /TPC "C-300^45+PFLAG 0000 TPC "T-300^45+"S-300+NFLAG /TSF "F-300^45+PFLAG 0000 TSF "T-300^45+"S-300+NFLAG /TSK "K-300^45+PFLAG 0000 TSK 7777 /THIS TERMINATES THE TABLE PAGE / ADDITIONAL LINC MODE SYMBOLS ENABLED BY /8, /9. "A-300^45+"D-300+NFLAG /ADA "A-300^45+PFLAG 0000 1100 "A-300^45+"D-300+MFLAG /ADD "D-300^45+PFLAG 0000 2000 "A-300^45+"D-300+NFLAG /ADM "M-300^45+PFLAG 0000 1140 "A-300^45+"P-300+NFLAG /APO "O-300^45+PFLAG 0000 0451 "A-300^45+"T-300+NFLAG /ATR "R-300^45+PFLAG 0000 0014 "A-300^45+"X-300+NFLAG /AXO "O-300^45+PFLAG 0000 0001 "A-300^45+"Z-300+NFLAG /AZE "E-300^45+PFLAG 0000 0450 "B-300^45+"C-300+NFLAG /BCL "L-300^45+PFLAG 0000 1540 "B-300^45+"C-300+NFLAG /BCO "O-300^45+PFLAG 0000 1640 "B-300^45+"S-300+NFLAG /BSE "E-300^45+PFLAG 0000 1600 "C-300^45+"H-300+NFLAG /CHK "K-300^45+PFLAG 0000 0707 "C-300^45+"L-300+NFLAG /CLR "R-300^45+PFLAG 0000 0011 "C-300^45+"O-300+NFLAG /COM "M-300^45+PFLAG 0000 0017 "D-300^45+"I-300+NFLAG /DIS "S-300^45+PFLAG 0000 0140 "D-300^45+"J-300+NFLAG /DJR "R-300^45+PFLAG 0000 0006 "D-300^45+"S-300+NFLAG /DSC "C-300^45+PFLAG 0000 1740 "E-300^45+"S-300+NFLAG /ESF "F-300^45+PFLAG 0000 0004 "E-300^45+"X-300+NFLAG /EXC "C-300^45+PFLAG 0000 0740 "F-300^45+"L-300+NFLAG /FLO "O-300^45+PFLAG 0000 0454 / "H-300^45+"L-300+NFLAG /HLT / "T-300^45+PFLAG / 0000 / HLT "I-300^45+"A-300+NFLAG /IAAC "A-300^45+"C-300+PFLAG 0000 6171 "I-300^45+"A-300+NFLAG /IACA "C-300^45+"A-300+PFLAG 0000 6167 "I-300^45+"A-300+NFLAG /IACF "C-300^45+"F-300+PFLAG 0000 6175 "I-300^45+"A-300+NFLAG /IACS "C-300^45+"S-300+PFLAG 0000 6163 "I-300^45+"B-300+NFLAG /IBAC "A-300^45+"C-300+PFLAG 0000 6143 "I-300^45+"B-300+NFLAG /IBZ "Z-300^45+PFLAG 0000 0453 "I-300^45+"C-300+NFLAG /ICON "O-300^45+"N-300+PFLAG 0000 6141 "I-300^45+"C-300+NFLAG /ICS1 "S-300^45+"1-225+PFLAG 0000 6151 "I-300^45+"C-300+NFLAG /ICS2 "S-300^45+"2-225+PFLAG 0000 6153 "I-300^45+"L-300+NFLAG /ILES "E-300^45+"S-300+PFLAG 0000 6145 "I-300^45+"M-300+NFLAG /IMBS "B-300^45+"S-300+PFLAG 0000 6155 "I-300^45+"N-300+NFLAG /INTS "T-300^45+"S-300+PFLAG 0000 6147 "I-300^45+"O-300+NFLAG /IOB "B-300^45+PFLAG 0000 0500 "I-300^45+"S-300+NFLAG /ISSP "S-300^45+"P-300+PFLAG 0000 6165 "I-300^45+"T-300+NFLAG /ITAC "A-300^45+"C-300+PFLAG 0000 6157 "I-300^45+"Z-300+NFLAG /IZSA "S-300^45+"A-300+PFLAG 0000 6173 / "J-300^45+"M-300+MFLAG /JMP / "P-300^45+PFLAG / 0000 / JMP 0000 "J-300^45+"S-300+MFLAG /JSR "R-300^45+PFLAG 0000 6000 "K-300^45+"B-300+NFLAG /KBD "D-300^45+PFLAG 0000 0515 "K-300^45+"S-300+NFLAG /KST "T-300^45+PFLAG 0000 0415 "L-300^45+"A-300+NFLAG /LAM "M-300^45+PFLAG 0000 1200 "L-300^45+"D-300+NFLAG /LDA "A-300^45+PFLAG 0000 1000 "L-300^45+"D-300+NFLAG /LDF "F-300^45+PFLAG 0000 0640 "L-300^45+"D-300+NFLAG /LDH "H-300^45+PFLAG 0000 1300 "L-300^45+"I-300+NFLAG /LIF "F-300^45+PFLAG 0000 0600 "L-300^45+"I-300+NFLAG /LINC "N-300^45+"C-300+PFLAG 0000 6141 "L-300^45+"M-300+NFLAG /LMB "B-300^45+PFLAG 0000 0600 "L-300^45+"M-300+NFLAG /LMR "R-300^45+PFLAG 0000 6151 "L-300^45+"S-300+NFLAG /LSW "W-300^45+PFLAG 0000 0517 "L-300^45+"Z-300+NFLAG /LZE "E-300^45+PFLAG 0000 0452 "M-300^45+"S-300+NFLAG /MSC "C-300^45+PFLAG 0000 0000 "M-300^45+"T-300+NFLAG /MTB "B-300^45+PFLAG 0000 0703 "M-300^45+"U-300+NFLAG /MUL "L-300^45+PFLAG 0000 1240 / "N-300^45+"O-300+NFLAG /NOP / "P-300^45+PFLAG / 0000 / NOP "P-300^45+"D-300+NFLAG /PDP "P-300^45+PFLAG 0000 0002 "Q-300^45+"A-300+NFLAG /QAC "C-300^45+PFLAG 0000 0005 "Q-300^45+"L-300+NFLAG /QLZ "Z-300^45+PFLAG 0000 0455 "R-300^45+"C-300+NFLAG /RCG "G-300^45+PFLAG 0000 0701 "R-300^45+"D-300+NFLAG /RDC "C-300^45+PFLAG 0000 0700 "R-300^45+"D-300+NFLAG /RDE "E-300^45+PFLAG 0000 0702 "R-300^45+"O-300+NFLAG /ROL "L-300^45+PFLAG 0000 0240 "R-300^45+"O-300+NFLAG /ROR "R-300^45+PFLAG 0000 0300 "R-300^45+"S-300+NFLAG /RSW "W-300^45+PFLAG 0000 0516 "R-300^45+"T-300+NFLAG /RTA "A-300^45+PFLAG 0000 0015 "S-300^45+"A-300+NFLAG /SAE "E-300^45+PFLAG 0000 1440 / "S-300^45+"A-300+NFLAG /SAM / "M-300^45+PFLAG / 0000 / SAM "S-300^45+"C-300+NFLAG /SCR "R-300^45+PFLAG 0000 0340 "S-300^45+"E-300+NFLAG /SET "T-300^45+PFLAG 0000 0040 "S-300^45+"F-300+NFLAG /SFA "A-300^45+PFLAG 0000 0024 "S-300^45+"H-300+NFLAG /SHD "D-300^45+PFLAG 0000 1400 / "S-300^45+"K-300+NFLAG /SKP / "P-300^45+PFLAG / 0000 / SKP "S-300^45+"N-300+NFLAG /SNS "S-300^45+PFLAG 0000 0440 "S-300^45+"R-300+NFLAG /SRO "O-300^45+PFLAG 0000 1500 / "S-300^45+"T-300+NFLAG /STA / "A-300^45+PFLAG / 0000 / 1040 "S-300^45+"T-300+NFLAG /STB "B-300^45+PFLAG 0000 0414 "S-300^45+"T-300+MFLAG /STC "C-300^45+PFLAG 0000 4000 "S-300^45+"T-300+NFLAG /STD "D-300^45+PFLAG 0000 0416 "S-300^45+"T-300+NFLAG /STH "H-300^45+PFLAG 0000 1340 "S-300^45+"W-300+NFLAG /SWD "D-300^45+PFLAG 0000 0457 "S-300^45+"X-300+NFLAG /SXL "L-300^45+PFLAG 0000 0400 "T-300^45+"A-300+NFLAG /TAC "C-300^45+PFLAG 0000 0003 "T-300^45+"M-300+NFLAG /TMA "A-300^45+PFLAG 0000 0023 "T-300^45+"W-300+NFLAG /TWC "C-300^45+PFLAG 0000 0417 "T-300^45+"Y-300+NFLAG /TYP "P-300^45+PFLAG 0000 0514 "U-300^45+NFLAG /U PFLAG 0000 0010 "U-300^45+"M-300+NFLAG /UMB "B-300^45+PFLAG 0000 0640 "W-300^45+"C-300+NFLAG /WCG "G-300^45+PFLAG 0000 0705 "W-300^45+"R-300+NFLAG /WRC "C-300^45+PFLAG 0000 0704 "W-300^45+"R-300+NFLAG /WRI "I-300^45+PFLAG 0000 0706 "X-300^45+"O-300+NFLAG /XOA "A-300^45+PFLAG 0000 0021 "X-300^45+"S-300+NFLAG /XSK "K-300^45+PFLAG 0000 0200 "Z-300^45+"T-300+NFLAG /ZTA "A-300^45+PFLAG 0000 0005 "Z-300^45+"Z-300+NFLAG /ZZZ "Z-300^45+PFLAG 0000 0455 7777 /THIS ENDS THE ENTIRE TABLE PAGE SYMSIZE=.-SYMTAB%200 /NUMBER OF BLOCKS IN SYMBOL TABLE OVLYBLK=OVLYBLK+SYMSIZE /UPDATE OVERLAY BLOCK NUMBER CRFBLK= OVLYBLK /CROSS-REFERENCE OVERLAY BLOCK NUMBER (RELATIVE) CRFOV, *7777 /END OF AN *7777 /OVERLAY *CRFOV /RESTORE ORIGIN RELOC 400 /WHERE IT BELONGS DCA ECHOSW /FORCE ECHO ON GRILUP, TAD I GRIPTR /GET A PAIR JMS I ROR6/[XROR6] /MOVE OVER JMS GRTRIM /PRINT IT TAD I GRIPTR /GET AGAIN JMS GRTRIM /PRINT LOW-ORDER ISZ GRIPTR /BUMP TO NEXT PAIR JMP GRILUP /GO DO NEXT GRTRIM, .-. /TRIM AND PRINT ROUTINE AND L77/[77] /JUST SIX-BIT SNA /SKIP IF NORMAL CHARACTER JMP I PNOTLAX /JUMP IF END JMS I P6CH/[XP6CH] /PRINT IT JMP I GRTRIM /RETURN GRIPTR, GRIMSG /GRIPE MESSAGE POINTER PNOTLAX,NOTLAX /POINTER TO WHERE TO GO NEXT GRIMSG, TEXT "**** CREF NOT FULLY IMPLEMENTED YET! ****" PAGE RELOC /TURN OFF RELOCATION CRFSIZE= .-CRFOV%200 /SIZE OF THIS OVERLAY $*$*$*$*$*$*$*$*$*$*$*$*$*$*$*$ /THAT'S ALL FOLK!