* TAPE 5 OF 5 - BEGIN * WHOW LDA D0 (A)=NO. OF WORDS PER ITEM ALS 1 (A)=NO. OF CHARS, PER ITEM STA NTID NTID=NO. OF CHARS. TO BE OUTPUT SUB HOLF SPL JMP WERR LDA ID FIRST WORD JST WSNG OUTPUT IT LDA ID+1 2ND WORD JST WSNG OUTPUT IT LDA ID+2 3RD WORD JST WSNG OUTPUT IT LDA ID+3 4TH WORD JST OA00 OUTPUT IT JMP W420 TO CHECK NEXT DATA * WSNG PZE 0 JST OA00 OUTPUT (A) LDA NTID NO. OF CHARS, REMAINED TO BE OUTPUT SUB K102 STA NTID NTID=NTID-2 SNZ JMP W420 ALL FINISHED, CHECK NEXT ITEM JMP* WSNG SOME HOLLERITH CHARS, REMAINED W403 LDA TID+2 REAL OUTPUT JST OA00 LDA TID+1 JMP W406 W404 LDA TID+2 DOUBLE PRECISION OUTPUT JST OA00 LDA TID+1 JST OA00 W405 LDA TID INTEGER OUTPUT W406 JST OA00 LDA T0W4 ERA IM ANA K105 SNZ JMP *+3 * TO BE OUTPUT, RETURN WERR JST ER00 BCI 1,DM DATA AND DATA NAME MODE DO NOT AGREE W420 LDA I SUB K102 STA I I = I-2 CAS KPRM NOP JMP W4M MORE TO DO SUB G TEST FOR COMPLETE SZE JMP W4P LDA K104 JST TS00 LDA T1W4 STA RPL JST CH00 INPUT NEXT CHARACTER SUB K5 ='254 (,) SZE SKIP IF CHAR = COMMA JMP A1 CHECK FOR (CR) JMP W4 PROCESS NEXT DATA GROUP W4P LDA K134 JST TS00 JMP W4E W4S JST FS00 FLUSH BUFFER IF NECESSARY LDA AF POSITION WITHIN COMMON BLOCK LRL 14 LDA K106 FORMAT BCD OUTPUT LGL 6 LLL 6 STA OCI IAB ANA K116 STA OCI+1 JST FL00 FETCH LINK LDA DP+4,1 SSM ALR 1 SSM ARR 1 LRL 8 ERA OCI+1 STA OCI+1 LDA DP+3,1 IAB LDA DP+4,1 LLL 8 STA OCI+2 LDA DP+2,1 IAB LDA DP+3,1 LLL 8 STA OCI+3 LDA DP+2,1 LGL 2 ADD K103 LGL 6 STA OCI+4 LDA K128 STA OCNT JST STXI I POINTS TO DATA TABLE LDA DP-1,1 SET A TO VARIABLE STA A JST FA00 JMP W4O W4T LDA K101 =1 (=REL) IAB LDA RPL JST AF00 DEFINE AFT (AT=REL. AF=RPL) LDA I SET POINTER IN DATA POOL STA 0 LDA RPL STA DP,1 DP(I) = RPL OF VARIABLE ADD D0 STA RPL JMP W4C * * * * ********************************* * *BLOCK DATA SUBPROGRAM PROCESSOR* * ********************************* * SET BLOCK DATA FLAG AND OUTPUT FORCE LOAD CODE R3 LDA LSTF =0 IF FIRST STATEMENT IN THE SUBPROGRAM SZE JMP *+3 JST ER00 ERROR...NOT FIRST STATEMENT BCI 1,BL 'BLOCK DATA' NOT FIRST STATEMENT STA BDF SET BLOCK DATA FLAG ON (NON-ZERO) JST CH00 INPUT NEXT CHARACTER JMP A1 CHECK FOR (CR) AND EXIT * * * * * * * * *************************** * *TRACE STATEMENT PROCESSOR* * *************************** * SETS TRACE TAG ON VARIABLES OR SETS TRACE FLAG TRAC JST XN00 EXAMINE NEXT CHARACTER SZE SKIP IF CHAR, WAS A DIGIT JMP TRAD JUMP IF CHAR. WAS A LETTER JST IS00 INPUT STATEMENT NO. LDA A STATEMENT NO. POINTER STA TRF SET TRACE FLAG ON JMP A1 TEST FOR (CR) AND EXIT * TRAD JST NA00 INPUT NAME JST STXA SET INDEX TO NAME ENTRY LDA DP+4,1 TT(A) TRACE TAG CHS STA DP+4,1 JMP B1 (,) OR (CR) TEST * (RETURN TO TRAC IF (,) ) * * * * ******************** * *OUTPUT OBJECT LINK* * ******************** OL00 DAC ** JST CN00 CALL NAME CRA STA DF DF = 0 LDA ID (A) = IP JST OA00 OUTPUT +BS * JMP* OL00 * * ***************** * *OUTPUT I/O LINK* * ***************** * GENERATE I/O DRIVER LINKAGE CODE. NAME OF * CALLED ROUTINE IS CHANGED IF UNIT DESIGNATOR * IS A CONSTANT. OI00 DAC ** JST IV00 INPUT INT VAR/CON LDA NT SNZ IF NT = 0 JMP OI20 GO TO 0I20 LDA ID IF ID CR 9 SUB K126 G0 TU OI20 SMI JMP OI20 * FORM F$RN OR F$WN LDA NAMF+1 ANA K116 ADD ID ADD K60 ='260 (SP) STA NAMF+1 OI10 JST CN00 CALL NAME JMP* OI00 RETURN OI20 LRL 32 LDA OMI7 OUTPUT OA JST OB00 (LOAD A (UNIT N0.)) JMP OI10 FO TO OI10 * * * *********** * *CALL NAME* * *********** * SET UP NAME AND GENERATE CODE FOR CALLING IT. CN00 DAC ** JST FS00 FLUSH JST PRSP SET PRINT BUFFER TO SPACES LDA K147 SET UP OCI FOR CALL STA OCI LDA NAMF+1 OCI = NAMF STA PRI+9 IAB ALSO TO PRINT BUFFER LDA NAMF STA PRI+8 LRL 8 STA OCI+1 LLL 16 STA OCI+2 LDA NAMF+2 STA PRI+10 IAB LDA NAMF+1 LLL 8 STA OCI+3 LLL 16 STA OCI+4 LDA K128 ='14 STA OCNT OCNT = 6 LDA CN90 STA PRI+5 LDA CN90+1 STA PRI+6 LDA RPL JST OR80 DAC PRI SR2 JMP *+3 INHIBIT SYMBOLIC OUTPUT CALL F4$SYM OUTPUT SYMBOLIC LINE, DAC PRI IRS RPL RPL = RPL + 1 JST PRSP SET PRINT BUFFER TO SPACES JST FS00 FLUSH JMP* CN00 RETURN K147 OCT 55000 CN90 BCI 2,CALL * ************* * *OUTPUT PACK* * ************* * OUTPUT THE PACK WORD WHEN IT IS FULL. PKF PZE 0 PACK FLAG T0OK PZE 0 OK00 DAC ** CAS CRET IF (A) = C/R JMP *+2 JMP OK30 GO TO OK30 IRS PKF PKF = PKF + 1 JMP OK20 IF NON-ZERO, GO TO OK20 OK10 ADD T0OK (A) = (A) + T0 LRL 16 STA DF IAB JST OA00 OUTPUT ABS JMP* OK00 OK20 LGL 8 STA T0OK LDA K123 PKF = - 1 STA PKF JMP* OK00 RETURN OK30 LDA PKF IF PKF = 0 SNZ JMP* OK00 RETURN LDA K8 ELSE (A) = SPACE, STA PKF JMP OK10 GO TO OK10 * * * *********** * *OUTPUT OA* * *********** * GENERAL OUTPUT ROUTINE. MAKES CHECKS AGAINST * THE ASSIGNMENT TABLE ENTRY TO PROCESS DUMMY, * EXTERNAL, RELATIVE, ABSOLUTE OR STRING * REFERENCES PROPERLY. T1OB PZE 0 OB00 DAC ** STA FTOP FTOP = (A) IAB STA T1OB JST STXA ESTABLISH A SNZ IF A = 0 JMP OB08 GO TO OB08 JST FA00 FETCH ASSIGNS LDA SOF SPECIAL OUTPUT FLAT SZE JMP OB60 SUBSCRIPT CONSTANT DEFLECTION LDA AF STA T1OB T0 = AF LDA AT SUB K105 IF AT = 'DUM' SNZ JMP OB15 GO TO OB15 LDA IU SUB K101 IF IU = 'SUB' SNZ JMP OB40 GO TO OB40 OB06 LDA AT CAS K104 IF AT = 'COM' JMP *+2 JMP OB20 GO TO OB20 CAS K101 JMP *+2 IF AT = 'REL' JMP OB10 GO TO OB10 LDA K103 IAB LDA RPL JST AF00 DEFINE AF AND AT LDA AT IF AT = 'STR-RE' SUB K103 SNZ JMP OB10 GO TO OB10 CRA STA AF AF = 0 OB08 LDA K102 STA DF SET FLAG TO OUTPUT SYMBOLIC LDA FTOP JST OA00 OUTPUT ABSOLUTE JMP* OB00 RETURN OB10 LDA T1OB STA AF LDA FTOP JST OR00 OUTPUT REL JMP* OB00 RETURN OB15 LDA FTOP CHS REVERSE INDIRECT BIT STA FTOP JMP OB10 GO TO OB10 OB20 JST FS00 OUTPUT COMMON REOUEST LDA T1OB PACK ADDRESS INTO BLOCK LRL 14 LDA FTOP LGR 10 ADD K150 LLL 6 STA OCI LLL 8 STA OCI+1 JST SAV JST FL00 LDA DP+2,1 STA PRI+13 SET COMMON NAME INTO PRINT BUFFER LLR 8 STA OCI+4 LLL 8 LDA DP+3,1 STA PRI+12 SET COMMON NAME INTO PRINT BUFFER LLR 8 STA OCI+3 LLL 8 LDA DP+4,1 ANA K111 ='037777 CAS *+1 LOOK FOR BLANK COMMON OCT 020240 ERA K122 ERA HBIT STA PRI+11 SET NAME INTO PRINT BUFFER LLR 8 STA OCI+2 LLL 8 LDA OCI+1 LLL 8 STA OCI+1 LDA K128 ='14 STA OCNT JST RST LDA 0 STA A RESTORE A TO POINT AT NAME LDA RPL SET RPL MINUS SSM TO DISABLE WORD OUTPUT STA RPL LDA FTOP OUTPUT WORD TO LIST JST OR00 SYMBOLIC COMMAND LDA RPL RESTORE AND SSP INCREMENT PROGRAM AOA COUNTER FOR COMMON STA RPL OUTPUT JST FS00 CLOSE OUT BLOCK JMP* OB00 EXIT OB30 LDA DP+4,1 SSM ALR 1 SSM ARR 1 STA NAMF LDA DP+3,1 STA NAMF+1 LDA DP+2,1 STA NAMF+2 JST CN00 JMP* OB00 OB40 LDA AT SUB K102 SNZ JMP OB30 JMP OB06 OB50 OCT 140000 * OB60 CRA STA SOF RESET SPECIAL OUTPUT FLAG LDA AT ADDRESS TYPE CAS K105 TEST FOR DUMMY JMP OB06 PROCESS NORMALLY JMP OB61 JMP OB06 PROCESS NORMALLY OB61 LDA T1OB STA FTOP CRA JMP OB08+1 * K150 OCT 700 * * * ************** * OUTPUT TRIADS* * ************** * PROCESSES THE TRIAD TABLE, HANDLES FETCH * GENERATION AND RELATIONAL OPERATOR CODE * GENERATION, DRIVES OUTPUT ITEM. ASSIGNS * AND OUTPUT TEMP STORES. T0OT PZE 0 T2OT PZE 0 T1OT PZE 0 T3OT PZE 0 TEMP STORE FOR P OT00 DAC ** JST SAV LDA L0 STA I I = L0 CRA STA T0OT T0 = 0 STA IFLG OT06 STA T1OT T1 = I OT10 LDA I SUB K103 I = I-3 STA I STA T2OT T2 = I SUB L SPL JMP OT60 IF FINISHED, GO TO OT60 JST STXI LDA DP+2,1 SSP CHECK P (I) CAS K139 X JMP *+2 JMP OT10 CAS K138 H JMP *+2 JMP OT10 CAS K142 I JMP *+2 JMP OT50 CAS K143 T JMP *+2 JMP OT40 CAS K151 Q JMP *+2 JMP OT35 STA T3OT SAVE P LDA DP+1,1 STA A A = O1(I) CAS T1OT JMP *+2 JMP OT30 CAS L0 JMP OT16 JMP OT99 MAYBE SPECIAL LOAD FOR (A=) STATEMENT JMP OT16 OT18 JST STXI LDA DP,1 STA A A = O2 (I) LDA DP+2,1 SSP JST OM00 OUTPUT ITEM(P(I),A = 02(I)) OT22 JST STXI LDA DP+2,1 SMI JMP OT28 CRA ASSIGN TEMP STOR STA NT NT = 0 LDA K102 STA IU IU = VAR LDA T0OT LRL 6 LDA TCF ID = LRL 3 TS-IM-TCF-T0 LDA MFL STA IM LLL 9 JST OR80 DAC ID LDA K77 STA ID IRS T0OT T0 = T0+1 JST AS00 ASSIGN ITEM JST STXI LDA A STA DP,1 O2(I) = A LDA K153 SSM SURPRESS TRACE OF TEMPORARY STORAGE JST OM00 OUTPUT ITEM (=,A) OT28 LDA I JMP OT06 OT30 JST STXA LDA DP+2,1 SSP IF P (A) = 0 SZE JMP OT32 OT16 LDA K152 GENERATE FETCH JST OM00 OUTPUT ITEM OT32 LDA T3OT CHECK FOR RELATIONALS SUB K125 ='10 SPL JMP OT18 NOT LOGICAL OR6RATOR SUB K106 =6 SMI JMP OT18 NOT A LOGICAL QPERATOR STA 0 SET INDEX = -1 TO -6 LDA K103 =3 (LOG) STA MFL SET MODE TO LOGICAL CRA STA A SET FOR OCTAL ADDRESS JMP *+7,1 BRANCH TO OPERATOR PROCESSOR JMP OT3G .LT. JMP OT3E .LE. JMP OT3C .EQ. JMP OT3B .GE. JMP OT3A .GT. LDA OMJ4 .NE. =ALS 16 JST OA00 OUTPUT ABSOLUTE LDA OMJ6 =ACA JMP OT3D OT3A LDA OMJ7 *TCA JMP OT3F OT3B LDA OMK1 =CMA JMP OT3F OT3C LDA OMJ4 = ALS 16 JST OA00 LDA OMK2 =SSC JST OA00 OUTPUT ABSOLUTE LDA OMK3 =AOA OT3D JST OA00 OUTPUT ABSOLUTE JMP OT22 OT3E LDA OMJ2 =SNZ JST OA00 OUTPUT ABSOLUTE LDA OMK4 =SSM OT3F JST OA00 OUTPUT ABSOLUTE OT3G LDA OMJ5 =LGR 15 JMP OT3D * OT35 LDA DP+1,1 STA ID JST NF00 LDA K78 NAMF = F $AR STA NAMF+1 JST OL00 OUTPUT OBJECT LINK JMP OT18 GO TO OT18 OT40 LDA DP,1 ADD DO STA I I = 02 (I) + DO JST DQ00 DO TERMINATION OT45 LDA T2OT STA I I = T2 JMP OT28 OT50 LDA DP,1 ADD DO I=O2(I)+DO STA I IF I = DO SUB DO SZE GO TO OT45 JST DS00 DO INITIALIZE JMP OT45 GO TO OT45 OT60 JST RST LDA L0 RESET TRIAD TABLE STA L JMP* OT00 * OT99 LDA T3OT SUB K153 CODE FOR = SZE JMP OT16 NOT SPECIAL LOAD STA MFL SPECIAL LOAD, SET MFL=0 JMP OT18 OUTPUT A STORE K77 BCI 1,T$ T$ K78 BCI 1,AR AR K142 OCT 27 K143 OCT 30 K151 OCT 32 K152 OCT 31 * ************* * *OUTPUT ITEM* * ************* * * DRIVES BASIC OUTPUT ROUTINES. HANDLES SPECIAL * SUBSCRIPT PROCESSING, GENERATES NECESSARY * MODE CONVERSION CALLS AND HANDLES MODE * CHECKING. IN-LINE ARITHMETIC CODE IS * GENERATED WHERE POSSIBLE. OTHERWISE CALLS * TO ARITHMETIC ROUTINES ARE GENERATED. * T0OM PZE 0 T1OM PZE 0 T2OM PZE 0 T8OM PZE 0 T9OM PZE 0 TXOM PZE 0 * *-------------OUTPUT ITEM OM00 DAC ** RETURN ADDR STA T8OM SSP STA T0OM R(0)=(A)='P' CODE CAS K134 JMP *+2 JMP OMD1 LDA TXOM CAS K101 JMP OME1 JMP OME5 OM05 CRA STA T1OM T(1)=0 STA T9OM T(9)=0 LDA A STA T2OM T(2)=A SZE JMP OM07 LDA MFL JMP OM13 OM07 CAS L0 JMP *+2 JMP OML1 CAS ABAR JMP OM76 A .LE. ABAR....WITHIN TRIAD TABLE JMP *+1 OM10 JST STXA SET INDEX=A LDA DP,1 ARS 9 SES IM=MODE OF ITEM ANA K107 OM13 STA IM OM14 LDA MFL SET MFL,IM AS DIGITS INTO NAMF ALS 8 ADD IM ERA OM90 ADD '0''0' STA NAMF+1 LDA K130 STA 0 INDEX=-6 LDA T0OM CAS OM50+6,1 CHECK FOR SPECIAL OPERATOR JMP *+2 '1 JMP* OM52+6,1 'P'='Q',',','0','A'F', OR 'E' IRS 0 JMP *-4 LDA MFL SNZ JMP OM62 SPECIAL LIBRARY FIX FOR ( A= ) CAS IM CHECK FOR MODE MIXING JMP *+2 JMP OMA1 ITEM MODE SAME AS CURRENT MODE OM20 LDA K103 JST OM44 CHECK MODE FOR LOG LDA K102 =2 (MODE CODE FOR REAL) CAS MFL MODE OF EXPRESSION JMP *+2 JMP OM26 IF MODE=REAL, ALLOW COMPLEX MODE MIXING CAS IM MODE OF ITEM JMP *+2 JMP OM26 IF MODE=REAL, ALLOW COMPLEX MODE MIXING LDA K105 JST OM44 TEST FOR MODE = COMPLEX OM26 LDA T0OM OPERATOR BEING PROCESSED CAS K153 JMP *+2 JMP OM36 T(0)='=' (ALLOW INTEGER MODE) LDA K101 JST OM44 TEST FOR MODE=INTEGER LDA IM CAS MFL JMP OM38 CONVERT MODE OF ACCUMULATOR JMP *+1 OM30 JST NF00 SET LBUF+2 TO SPACES LDA T0OM STA 0 LDA A9X4,1 PICK-UP PRINT CODE FOR 'P' OPERATOR ARS 6 ANA K100 ='377 SNZ JMP OM46 MODE MIXING ERROR LGL 8 ERA OM91 ADD '$' STA NAMF LDA K134 STA T0OM T(0)=',' JMP OM40 * OM36 LDA K105 JST OM44 CHECK FOR MODE=COMPLEX OM38 LDA IM STA MFL JST NF00 SET LBUF+2 TO SPACES LDA OM92 'C$' STA NAMF OM40 JST CN00 OUTPUT....CALL NAMF LDA MFL STA IM SET ITEM MODE TO CURRENT MODE LDA NAMF CAS OM96 JMP OM14 JMP* OM00 JMP OM14 OUTPUT ARGUMENT ADDRESS * *-----SUBROUTINE TO CHECK FOR ILLEGAL IM OR MFL MODES, OM44 DAC ** RETURN ADDR, CAS IM CHECK FOR IM0(A) JMP *+2 JMP OM46 ERROR CAS MFL CHECK FOR MFL=(A) JMP* OM44 JMP OM46 ERROR JMP* OM44 OM46 JST ER00 NON-RECOVERABLE ERROR...... BCI 1,MM MODE MIXING ERROR * *------SPECIAL 'P' OPERATOR TABLE OM50 OCT 32 'Q' OCT 17 ',' OCT 00 '0' OCT 22 'A' OCT 31 *F' OCT 20 'E' OM52 DAC OMB3 ('Q') DAC OMB3 (',') DAC OMB3 ('0') DAC OM56 ('A') DAC OM60 ('F') DAC OM70 ('E') * * OM56 LDA OMI1 SET T(1) = ADD* JMP OMB1 * OM60 JST STXA SET INDEX = A LDA DP+1,1 LGR 14 SET UV=IU(A) STA IU JST STXI SET INDEX=I LDA DP+2,1 P(I) ANA K133 ='77 SNZ JMP OM64 (POSSIBLE DUMMY ARRAY FETCH) OM62 LDA IM STA MFL SET CURRENT MODE TO ITEM MODE LGL 8 ADD IM ERA OM90 STA NAMF+1 LDA IU SUB K101 CHECK FOR IU=1 (SUBROUTINE) SZE JMP OMA1 LDA OMI2 SET T(1) = JST JMP OM66 OM64 LDA IU SUB K103 CHECK FOR IV=3 (ARRAY) SZE JMP OM62 LDA K101 SET CURRENT MODE TO INTEGER STA MFL LDA OMI3 SET T(1) = LDA* OM66 STA T1OM JMP OMB3 * OM70 LDA K101 CAS IM CHECK ITEM MODE EQUALS INTEGER JMP *+2 JMP OM74 LDA K105 CHECK FOR MODE = COMPLEX JST OM44 JMP OM20 OM74 LDA K103 CHECK FOR MODE = LOGICAL JST OM44 JMP OM30 OUTPUT SUBROUTINE CALL * OM76 JST STXA INDEX=A LDA DP,1 02(A) STA T2OM T(2)=02(A) LDA DP+2,1 P(A) ANA K133 ='77 SNZ JMP OM84 P(A)='0' (SUBSCRIPTED VARIABLE) CAS K139 JMP *+2 JMP OM80 P(A) = 'X' (END OF ARRAY CALCULATION) CAS K138 JMP *+2 JMP OMHW OM78 LDA T2OM P(4)= 'H' (HOLLERITH DATA) STA A RESET A JMP OM10 * OM80 JST STXI INDEX=I LDA T2OM STA DP+1,1 O1(I) = T(2) CRA STA T1OT SET T(1) OF OUTPUT TRIADS TO ZERO LDA A SAVE A STA T1OM CRA SET A=0 (NOT SYMBOLIC) STA A LDA RPL ADD K102 AF = RPL+ 2 STA AF LDA OMI4 =ADD INSTRUCTION JST OR00 OUTPUT RELATIVE LDA RPL ADD K102 AF = RPL P+ 2 STA AF LDA OMI5 = JMP INSTR, JST OR00 OUTPUT RELATIVE LDA T1OM STA A RESTORE A STA SOF SET SPECIAL OUTPUT FLAG TO NON-ZERO CRA = DAC INSTR. STA T1OM LDA K101 STA AT JMP OM88 OM84 LDA DP+1,1 O1(A) STA A A=O1(A) CAS L0 JMP *+2 JMP OM86 A=L(0)....CONSTANT SUBSCRIPT ONLY LDA OMI0 T(1) = INDIRECT BIT STA T1OM JMP OM10 * OM86 LDA T2OM A=T(2) STA A STA 0 STA SOF LDA DP,1 T(2) = 02(A) STA T2OM OM88 JST STXA INDEX=A LDA DP+1,1 O1(A) STA T9OM T(9)=O1(A) JMP OM78 OMHW LDA T2OM STA AF CRA STA A JST OR00 JMP* OM00 * OM90 OCT 130260 '00' OM91 OCT 000244 ' $' OM92 OCT 141644 'C$' OM93 OCT 152322 'TR' OM94 OCT 000021 'C' CODE OM95 OCT 017777 (MASK) OM96 BCI 1,N$ OM97 BCI 1,-1 * OMA1 LDA IM CHECK FOR IM=LOGICAL CAS K103 JMP *+2 JMP OMC1 IM=LOGICAL CAS K101 CHECK FOR IM=INTEGER JMP *+2 JMP OMA3 IM=INTEGER JMP OM30 * OMA3 LDA T0OM CHECK FOR T,0) = '+' CAS K103 =3 JMP *+2 JMP OMA4 T(0)= '*' CAS OM94 T(0) = 'C JMP *+2 JMP OMA6 OUTPUT 'TCA' CAS K101 JMP OMA5 LDA OMI4 =ADD INSTR. JMP OMB1 OMA4 LDA T2OM VALUE OF A SUB K126 ='12 KNOWN LOCATION OF A FOR 2 SZE SMP IF MULTIPLIER IS A CONSTANT OF 2 JMP OM30 COUPLE TO THE MULTIPLY SUBROUTINE STA A SET A AND AF TO ZERO (FOR LISTING FLAGS) STA AF LDA *+3 ALS 1 INSTRUCTION JST OA00 OUTPUT ABSOLUTE JMP* OM00 EXIT UUTPUT ITEM ALS 1 (INSTRUCTION TO BE OUTPUT) OMA5 CAS K102 CHECK FOR T(0) = '-' JMP OMA7 LDA OMI6 =SUB INSTR, JMP OMB1 OMA6 CRA STA A CAUSE OCTAL ADDR LISTING STA AF LDA *+3 TCA JST OA00 OUTPUT ABSOLUTE JMP* OM00 EXIT TCA OMA7 CAS K153 CHECK FOR T(0) = '=' JMP *+2 JMP OMA9 OUTPUT A STA INSTR, SUB K152 CHECK FOR T(0) = 'F' SZE JMP OM30 OMA8 LDA OMI7 =LDA INSTR, JMP OMB1 OMA9 LDA OMI8 =STA INSTR, OMB1 ADD T1OM T(1) = T(1) + INSTR. STA T1OM OMB3 LDA T2OM SET A=T(2) STA A LDA T9OM OUTPUT INSTR. WITH T(1) AND T(9) IAB LDA T1OM JST OB00 OUTPUT OA LDA T8OM CHECK FOR T(8) = '=' CAS K153 ='16 JMP* OM00 JMP *+2 JMP* OM00 EXIT LDA TRFA POINTER TO FIRST VARIABLE OR ARRAY STA A PROCESSED IN EXPRESSION JST TRSE OUTPUT TRACE COUPLING IF REQUIRED JMP* OM00 EXIT OUTPUT ITEM * * OMC1 LDA T0OM CAS K152 CHECK FOR T(0) = 'F' JMP *+2 JMP OMA8 OUTPUT A LDA INSTR. CAS K153 CHECK FOR T(0) = '=' JMP *+2 JMP OMA9 OUTPUT A STA INSTR, CAS OM94 CHECK FOR T(0) = 'C' JMP *+2 JMP OM30 OUTPUT COMPLEMENT CODING CAS K106 JMP *+2 JMP OMC5 OUTPUT AN ANA INSTR. CAS K107 JMP OM46 ERROR JMP OM30 JMP OM46 ERR0R OMC5 LDA OMI9 =ANA INSTR. JMP OMB1 OMD1 IRS TXOM T0 = T0+1 JMP OM05 OME1 CRA STA DF DF = 0 JST OA00 OUTPUT ABSOLUTE OME5 CRA STA TXOM T0 = 0 JMP OM05 * TRSE DAC 0 SUBROUTINE TO OUTPUT TRACE COUPLING JST STXA SET INDEX = A SZE LDA DP+4,1 CHECK STATUS OF TRACE TAG SPL JMP TRS7 SR4 JMP TRS7 LDA TRF CHECK STATUS OF TRACE FLAG SNZ JMP* TRSE TRS7 JST NF00 SET LBUF TO 'F$', LSUF+2 TO SPACES LDA OM93 ='TR' STA NAMF+1 JST CN00 OUTPUT.....CALL NAMF JST STXA SET INDEX = A LDA DP+4,1 ANA OM95 STA T1OM LDA DP+3,1 STA T8OM LDA DP+2,1 STA T9OM CRA STA DF LDA DP,1 MERGE IM WITH ITEM NAME ARS 9 LGL 13 ERA T1OM JST OA00 OUTPUT ABSOLUTE (FIRST 2 CHAR.) LDA T8OM JST OA00 OUTPUT ABSOLUTE (NEXT 2 CHAR.) LDA T9OM JST OA00 OUTPUT ABSOLUTE (LAST 2 CHAR.) JMP* TRSE * *.................INSTRUCTION TABLE OMI0 OCT 100000 INDIRECT BIT OMI1 OCT 114000 ADD* OMI2 OCT 020000 JST OMI3 OCT 104000 LDA* OMI4 OCT 014000 ADD OMI5 OCT 002000 JMP OMI6 OCT 016000 SUB OMI7 OCT 004000 LDA OMI8 OCT 010000 STA OMI9 OCT 006000 ANA OMJ1 OCT 102000 JMP* OMJ2 OCT 101040 SNZ OMJ3 OCT 101400 SMI OMJ4 ALS 16 OMJ5 OCT 040461 LGR 15 OMJ6 OCT 141216 ACA OMJ7 OCT 140407 TCA OMK1 OCT 140401 CMA OMK2 OCT 101001 SSC OMK3 OCT 141206 AOA OMK4 OCT 140500 SSM OMK5 OCT 042000 JMP 0,1 OMK6 OCT 000000 DAC ** ALS 1 ALS1 TCA TCA OMK7 OCT 176000 STG OMK9 CAS 0 CAS STA* 0 SUB* 0 DAC* ** OCT 131001 OCT 030000 SUBR CAS* 0 OMK8 OCT 0 (///) OML1 LDA K101 STA AT JMP OT10 * * ************ * *OUTPUT REL* * ************ * ALSO DRIVES SYMBOLIC INSTRUCTION OUTPUT. OR00 DAC ** STA FTOP LDA K102 DF = NON ZER0 STA DF CODE = 2 OR10 STA CODE LDA RPL LIST RPL SSP JST OR80 DAC PRI OR12 LDA DF IF DF NOT ZERO SZE JMP OR20 GO TO OR20 LDA OR18 ='147703 STA PRI+5 LDA OR19 SET 'OCT' INTO PRINT IMAGE STA PRI+6 LDA FTOP OR13 JST OR80 DAC PRI+8 OR15 LDA RPL IF RPL PLUS SMI JST OW00 OUTPUT WORD SR2 JMP *+3 SURPRESS SYMBOLIC OUTPUT CALL F4$SYM LIST LINE DAC PRI JST PRSP SET PRINT BUFFER TO SPACES JMP* OR00 RETURN OR18 OCT 147703 (0)(C) OR19 OCT 152240 (T)(SP) OR20 JST SAV LDA OR90 SEARCH OP-CODE LIST TCA STA XR PUT BCI IN PRINT IMAGE LDA FTOP SSP SZE JMP OR24 LDA AT CAS K103 SUB K106 ADD K102 CMA ANA K107 STA CODE OR24 LDA FTOP CAS OR91+NINS,1 JMP *+2 JMP *+3 IRS XR JMP *-4 LDA OR92+NINS,1 STA PRI+5 LDA OR93+NINS,1 STA PRI+6 JST RST LDA A SZE JMP OR30 LDA AF ANA K111 MASK OUT HIGH BITS OF ADDRESS JMP OR13 OR30 JST STXA LDA DP,1 SMI JMP OR40 LDA K149 STA PRI+8 SET =' INTO LISTING LDA DP,1 CHECK IM (A) LGL 4 SPL SKIP IF NOT COMPLEX JMP *+4 LGL 2 SPL SKIP IF INTEGER OR LOGICAL JMP *+3 LDA DP+2,1 JMP *+2 LIST EXPONENT AND PART OF FRACTION LDA DP+4,1 LIST INTEGER VALUE JST OR80 CONVERT OCTAL DAC PRI+9 JMP OR15 OR40 LDA DP+4,1 CONVERT AND PACK INTO ALR 1 SSM SYMBOLIC IMAGE ARR 1 SSM STA PRI+8 LDA DP+3,1 STA PRI+9 LDA DP+2,1 STA PRI+10 JMP OR15 * *********** * *OUTPUT ABS* * *********** OA00 DAC ** STA FTOP LDA OA00 STA OR00 CRA JMP OR10 * ******************* * *OUTPUT STRING-RPL* * ******************* OS00 DAC 00 STA AF LDA OMK7 STA FTOP LDA OS00 STA OR00 SET RETURN INTO OUTPUT REL LDA K104 STA CODE STA STFL STRING FLAG = NON ZERO JST PRSP SET PRINT BUF. TO SPACES JMP OR20 JMP-OUTPUT REL FOR SYMBOLIC AND BINARY OR80 DAC ** IAB LDA* OR80 STA OR89 CRA LRR 2 IRS OR80 JST OR85 JST OR85 JST OR85 JMP* OR80 OR85 DAC ** ADD K140 LLR 3 LGL 5 ADD K140 LLL 3 STA* OR89 IRS OR89 CRA JMP* OR85 OR89 PZE 0 OR90 DAC NINS K200 EQU OMI7 K201 EQU OMI5 K202 EQU OMI8 K203 EQU OMI4 K204 EQU OMI6 K205 EQU OMJ3 K206 EQU OMJ1 K207 EQU OMK5 OR91 EQU OMI1 OR92 BCI 22,ADJSLDADJMSULDSTANJMSNSMLLLRACTCCMSSAOSSJMDA BCI 2,ALTC BCI 9,STCASTSUDAERSUCA// OR93 BCI 22,D*T A*D P B A A A P*Z I 1515A A A C A M PXC BCI 2,S1A BCI 9,G S A*B*C*R/BRS*/ NINS EQU 32 * PRSP DAC ** SUBR. T0 SET PRINT BUF. T0 SPACES LDA PRSK =-40 STA 0 LDA KASP (SP)(SP) STA PRI+40,1 IRS 0 JMP *-2 JMP* PRSP EXIT PRSK OCT 177730 =-40 * * ************************************* * *OUTPUT SUBROUTINE/COMMON BLOCK NAME* * ************************************ * OUTPUT AN EXTERNAL REFERENCE NAME. * ON00 DAC ** STA ONT1 SAVE ADDRESS JST FS00 FLUSH BUFFER IF NECESSARY JST STXA SET INDEX=A LDA ONT1 SUBR. ENTRY ADDR. LRL 14 STA ONT1 SAVE S/C BITS LDA ON02 ='600 (=BLOCK CODE NO.) LLL 6 STA OCI FILL BUFFER LRL 8 JST STXA SET INDEX=A LDA DP+4,1 FIHST 2 CHAR. 0F NAME ANA K111 ='037777 CAS *+1 OCT 020240 ERA K122 ERA HBIT ='140000 LRR 8 STA OCI+1 BUFFER LRL 8 LDA DP+3,1 SECOND 2 CHAR. OF NAME LRR 8 STA OCI+2 BUFFER LRL 8 LDA DP+2,1 LAST 2 CHAR. OF NAME LRR 8 STA OCI+3 BUFFER LLL 8 LGL 2 ADD ONT1 S/C BITS LGL 6 STA OCI+4 BUFFER CRA SET SIZE = 0 STA OCI+5 8UFFER LDA K128 ='14 STA OCNT SET 8LOCK SIZE (DOUBLED) JST FS00 FLUSH BUFFER JMP* ON00 EXIT ON02 OCT 600 BLOCK CODE NUMBER (6) ONT1 OCT 0 TEMP STORE * K149 BCI 1,=' K140 OCT 26 * OW00 DAC ** JST SAV LDA RPL SUB ORPL SPL TCA CAS K101 JST FS00 FLUSH BUFFER IF DIFFERENCE IN RPL'S N0T 1 NOP LDA OCNT ADD K103 CAS K146 NOP JST FS00 FLUSH BUFFER LDA OCNT ADD K103 STA OCNT OCNT = OCNT+3 SUB K103 ARR 1 OCI (OUTPUT CARD IMAGE) STA XR SMI LEFT OR RIGHT POS, JMP OW20 JST PU00 LRL 8 IF BUFFER FULL IMA OCI,1 ANA K116 CALL FLUSH (FS0O) ERA OCI,1 OW10 STA OCI,1 IAB STA OCI+1,1 LDA PRI+16 IAB LDA PRI+14 USE LOW BIT OF PRI+14 DATA LLL 9 LGR 1 STRIP OFF HIGH BIT OF BLOCK CODE TYPE NO, LLL 3 SET DIGITS IN PRI+17, PRI+19 JST OR80 DAC PRI+16 LDA PRI+14 LRL 6 LGL 1 SHIFT ADDR. TO RIGHT BY 1 BIT LLL 5 JST OR80 SET DIGITS IN PRI+15, PRI+16 DAC PRI+14 LDA KASP (SP)(SP) SR1 JMP OW14 STA PRI+15 OVERWRITE BINARY DATA IN STA PRI+16 PRINT BUFFER WITH SPACES STA PRI+17 IF NO BINARY LISTING IS WANTED STA PRI+18 OW14 STA PRI+14 JST RST LDA RPL STA ORPL ORPL=RPL CRA IMA STFL INDICATE WORD WAS KEY TO LOADER SNZ THEN LEAVE RPL ALONE IRS RPL RPL = RPL+1 JMP* OW00 STFL PZE 0 OW20 JST PU00 JMP OW10 ORPL PZE 0 PU00 DAC ** LDA CODE COMBINE CODES TO CAS K104 =4 NOP JMP PU10 SZE SKIP IF ABS JMP PU10 JUMP IF REL. LRL 8 LDA FTOP PU08 LRL 4 STA PRI+14 SAVE FOR LISTING IAB STA PRI+16 LRR 12 RESTORE POSITION JMP* PU00 PU10 LRL 4 LDA AF LRL 4 ERA FTOP JMP PU08 PU20 LRL 4 LDA AF ANA K111 LRL 4 IMA AF ANA K114 ERA AF JMP PU08 K114 OCT 14000 K146 OCT 117 * * * ****************** * *FLUSH SUBROUTINE* * ****************** FS00 DAC ** LDA OCNT BUFFER OCCUPANCY SIZE JST SAV SAVE INDEX REGESTER SUB K104 CHECK FOR OCNT .GT. 4 SPL JMP FS20 SKIP OUTPUT IF BUFFER IS EMPTY ADD K105 ADD 1/2 AT B14 ARS 1 DIVIDE BY 2 TCA STA OCNT OCNT = -WORDS/BUFFER SUB K101 =1 STA PCNT BUFFER SIZE INCLUDING CHECKSUM LDA OCI FIRST WORD IN BUFFER LRL 12 CAS K102 =2 JMP *+2 JMP FS30 BLOCK TYPE = 2 (RELOCATABLE CODE) * EVERY TIME A BLOCK OF OBJECT OUTPUT IS DUMPED, THE FIRST * 3 WORDS OF THE BLOCK IS INSERTED IN THE SYMBOLIC OUTPUT * ALONG WITH AN EOB OPERATOR CODE IF SENSE SWITCH 1 1S DOWN. * TO INHIBIT THIS LINE, REPLACE FROM FS10 TO AND INCLUDING * FS11 WITH (FS10 CRA ). FS10 SS1 JMP FS11 N0 BINARY LISTING UNLESS SSW-1 IS DOWN CALL F4$SYM DAC PRI OUTPUT WHATEVER MIGHT BE IN SYMBOLIC BUF. LDA FS41 =(E)(O) STA PRI+5 ENTER 'EOB' INTO LISTING LDA FS41+1 =(B)(SP) STA PRI+6 LDA OCI JST OR80 ENTER FIRST WORD FROM BUFFER INTO LISTING DAC PRI+8 LDA OCI+1 JST OR80 ENTER WORD 2 FROM BUFFER INTO LISTING DAC PRI+12 LDA OCI+2 JST OR80 ENTER WORD 3 FROM BUFFER INTO LISTING DAC PRI+16 CALL F4$SYM OUTPUT SYMBOLIC BUFFER DAC PRI JST PRSP RESET SYMBOLIC BUFFER TO SPACES FS11 CRA STA 0 COMPUTE CHECKSUM FS12 ERA OCI,1 MERGE BUFFER WORD INTO CHECKSUM IRS 0 INCREMENT BUFFER POSITION IRS OCNT DECREMENT BUFFER SIZE JMP FS12 STA OCI,1 SET CHECKSUM INTO BUFFER LDA PCNT = NO. OF WORDS IN BUFFER IMA 0 ADD FS40 = OCI+1,1 CALL F4$OUT PUNCH BUFFER FS20 LDA RPL SET UP BUFFER FOR NEXT OUTPUT LRL 8 ADD K145 =#'2000 (BLOCK CODE 2) STA OCI IAB STA OCI+1 SET FIRST 2 WORDS OF BUFFER LDA K103 =O STA OCNT RESET BUFFER OCCUPANCY SIZE JST RST RESET INDEX REGISTER JMP* FS00 EXIT * FS30 LGL 6 MERGE BUFFER SIZE INTO BLOCK HEADER SUB OCNT BUFFER SIZE ADD K101 =1 (ACCOUNT FOR CHECKSUM) LLR 6 LGR 6 LLL 6 BRING IN UPPER HALF OF ADDRESSES STA OCI STORE INTO BUFFER JMP FS10 COMPUTE CHECKSUM * FS40 DAC OCI+1,1 FS41 BCI 2,EOB 'EOB' K145 OCT 20000 BLOCK TYPE 2 CODE C499 OCT 060000 * OCI BSS 40 40 WORD CARD IMAGE INPUT BUFFER PRI BSS 40 40 WORD PRINT BUFFER BCI 20, BSS 30 COMPILER PATCH AREA * * *********************** * *IOS (AND IOL) GO HERE* * *********************** * END A0