ASMB,R,L,C HED ** RTE-M ASMB - SEGMENT 1 ** * * * 9/24/76 * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAME : ASMB1 * SOURCE: 92064-18128 * RELOC : 92064-16041 * PRGMR : C.H., H.C., S.K. * NAM ASMB1,5,99 92064-16041 REV.1650 761001 * SUP ENT ASMB1 ENT ?LITI,?CMQ,?INSR,?HA3Z,?ENP,?EXP * EXT ?RSTA,?ERPR,?MOVE,?CHPI,?OPER,?PLIT,?ORGS EXT ?ASCN,?BPKU,?MSYM,?PKUP,?SYMK,?CHOP,?ENDS EXT ?MSYS,?SEGM,?PNCH,?V,?X,?POSN EXT ?ICSA,?TFLG,?LTFL,?CNTR EXT ?ARTL,?ASM1,?ORRP,?BNCN,?DCOD,?PRNT EXT ?LABE EXT ?OPLK,?NDOP,?NDSY,?ENER,?PRPG EXT ?BPSV,?GETA,?GETC,?SYMT * COM TEMP(322B) **************************** * # EQU TEMP SAME AS DATA ORIGIN VAL0 EQU TEMP+1 'ASCN' AND 'SYMK' DCNT EQU TEMP+4 ...1 EQU TEMP+7 .1 EQU ...1 .4 EQU TEMP+10 .5 EQU TEMP+11 .12 EQU .1+7 ..M1 EQU .12+6 .M2 EQU TEMP+21 L EQU ..M1+6 .9 EQU #+41B .29 EQU #+42B .M8 EQU #+43B .M15 EQU #+44B .M29 EQU #+45B BLNK EQU #+46B =40B(LOWER BLANK) .IL EQU #+47B .MBLN EQU #+50B .NO EQU #+51B BLNS EQU #+55B BIT15 EQU #+60B .E EQU #+61B .B EQU #+62B NAMI EQU #+71B LOC'N FOR TEMP SYMBOL STORAGE NAME EQU #+72B FOR USE BY 'OPLK' SUMP EQU #+100B RUNNING SUM FOR 'CHOP' CFRA EQU #+105B 'ASCN' CNTB EQU #+106B CODE EQU #+107B OPCODE TYPE(FROM OPTABLE) FLEX EQU CFRA (ASCN) INST EQU #+113B OPCODE FORMAT LAST EQU #+114B PEEK EQU #+116B LAST CHAR PICKED UP PLCN EQU #+117B PROGRAM LOCATION COUNTER PLEN EQU #+120B LIT LENGTH PASS 1/LIT ORG PASS 2 PNTR EQU #+121B POINTS AT LAST OR CURRENT CHAR. SCN1 EQU #+125B STATE LNG/OPCODE/OPERAND/LABEL(4) SYMI EQU #+132B ADDR CNTR FOR SYMBOL TBL (SYMK) SYMP EQU #+133B SYMBOL LNG/ AND LOC'N TEST EQU #+135B TEST CHARACTER ENT. EQU #+137B ENTC EQU #+140B ENTV EQU #+141B * * I/O STATEMENT BUFFER * IOBF EQU #+142B 50 WORDS + END OF STATEMENT BUFF * *(INPUT BUFFER 'BUFF' STARTS IN 11TH WORD)* BUFF EQU IOBF+12B PBUF EQU #+225B SAVES THE 'NAM' RECORD INFO. WCNT EQU PBUF WORD(BLK) CNT FOR BIN.RECRD. SPC 1 ASCN EQU ?ASCN BPKUP EQU ?BPKU CHOP EQU ?CHOP CHOPI EQU ?CHPI CNTR EQU ?CNTR ERPR EQU ?ERPR GETA EQU ?GETA GETC EQU ?GETC LTFLG EQU ?LTFL MOVE EQU ?MOVE MSYM EQU ?MSYM MSYMS EQU ?MSYS OPERR EQU ?OPER ORGSV EQU ?ORGS PKUP EQU ?PKUP PNCH EQU ?PNCH RSTA EQU ?RSTA SYMTS EQU ?SYMT X EQU ?X SPC 1 ASMB1 JSB RSTA LDA CODE CPA .12+3 'HED' STATE? JMP IXH YES STA ?ASM1 CLEAR 'CS' AND 'INIT' FLAGS CPA .12+1 (13) NAM ? JMP HI12 * * * NO NAM OR ORG * * LDA .NO 'NO'= NO ORG OR NAM STATEMENT JSB ERPR JMP HA32+1 IXH JSB INST,I GO TO HEDSB JMP ASMB1 * * * * PROCESS NAME FOR BINARY RECORD * * PNSAV OCT 0,0 FOR USE IN 'NAM' SETUP HI12 LDB SCN1+2 JSB MSYM MEASURE THE NAME STB HI14 STA PNSAV SAVE # OF CHARS IN THE PARAMETER LDB TEST GET CONTINUATOR STB PNSAV+1 AND SAVE IT LDB CSAD JSB MOVE MOVE IT TO THE 'NAM' RECORD HI14 NOP LDA PNSAV+1 GET THE CONTINUATOR CPA L+4 COMMA?(ANOTHER PARAMETER?) RSS YES JMP HI16 NO - GO TEST FOR END LDA PNSAV GET # OF CHARS IN CURRENT PARAME ADA PNTR INA STA PNTR SET POINTER TO NEXT PARAMETER JSB BPKUP SCAN TO NEXT PARAM. JSB MSYM MEASURE IT STA PNSAV SAVE # OF CHARS IN THE PARAMETER ALF,ALF INA FOR DECIMAL CONV ALF,ALF POSITION IT STA 1 PARAM. FOR 'ASCN' TO 'B' REG. LDA TEST GET CONTINUATOR STA PNSAV+1 AND SAVE IT LDA PNTR GET POSITION OF NUMBER JSB ASCN GO CONVERT THE NUMBER CLA ERROR RETURN, SET 'A' =0 STA PBF9,I ISZ PBF9 JMP HI14+1 PBF9 DEF PBUF+9 HI16 CPA BLNK LEGAL? RSS YES JSB OPERR NO - PRINT 'M' ERROR LDA PBUF+9 SZA,RSS IS TYPE=0(SYSTEM)? STA PBUF+10 YES, SET PRIORITY = 0. SPC 1 * * EXTENDED NAM RECORD PROCESSOR * SPC 1 LDA PNSAV GET # OF CHARS. IN CURRENT PARAM. ADA PNTR INA SET POINTER TO NEXT PARAMETER. STA PNTR SAVE FOR BUFFER MOVE. CMA,INA COMPUTE THE NUMBER OF ADA SCN1 ADDITIONAL CHARACTERS, IF ANY. SSA,INA MORE ? JMP HA32 NO. STA PNSAV YES. SAVE CHARACTER COUNT. LDA PNTR RELATIVE POINTER TO START JSB GETA OF NAM RECORD EXTENSION STB SRCAD SOURCE BUFFER. LDA PNSAV GET NUMBER OF CHARACTERS, LDB DSTAD AND DESTINATION ADDRESS JSB MOVE FOR DATA MOVE. SRCAD NOP LDA PNSAV CONVERT NUMBER OF INA CHARACTERS TO ARS NUMBER OF WORDS. ALF,ALF POSITION TO UPPER BYTE. ADA WCNT COMPUTE TOTAL NAM-REC WORD COUNT STA WCNT SAVE FOR PUNCH ROUTINE. * SKP HA32 JSB RSTA GO TO GET NEXT STATEMENT. LDA CODE GET OPCODE IDENTIFIER. CPA .12 IS IT THE 'END' STATEMENT ? JMP HB00 YES, GO TO 'END' PROCESSOR. CPA BLNK (40B) SUP/UNS? JMP HA32 IGNORE-PASS #1. CPA .32B REPLACEMENT CODE ? JMP HA71 YES, GO TO RPL PROCESSOR. CPA .100B USER MICROCODE (MIC)? JMP MIC YES, GO PROCESS. ADA ..M1+2 (-3) SSA ORR/ORB/ORG ? JMP HA64 YES, ROUTE TO PROCESSOR. CPA .12B NAM? JMP HA63 YES, ERROR ADA ..M1+2 (-3) SSA 'COM','ENT' OR 'EXT' ? JMP INST,I JUMP TO ROUTINE DESIGNATED IN INST CPA ...1+4 'EQU'? JMP HA56 TO EQU CPA .9 (11B) HED? JMP HA32 IGNORE-PASS #1. CPA .12 (14B) SKP? JMP HA32 IGNORE-PASS #1. CPA .12+1 (15B) SPC? JMP HA32 IGNORE-PASS #1. CPA .12+2 (16B) LST/UNL? JMP HA32 IGNORE-PASS #1. * * * TEST FOR LABEL FIELD * JSB LABEL LDA CODE OPCODE INDICATOR CPA DEX JMP HA40 IT'S A 'DEX' CPA BYT IS IT A 'BYT'? JMP HA40 YES, GO PROCESS. CPA .29 REP? JMP HA64 YES CPA ...1+6 (7) JMP HA54 TO ASC CPA .26B INTEGER ARITH(HARDWARE)? JMP HA70 YES.... CPA ...1+5 (6) ARITH MACRO? JMP INST,I YESM JUMP TO PROCESS IT.. ADA .M10 -10 SSA OCT OR DEC? JMP HA40 YES. SZA,RSS BSS? JMP HA3M TO BSS PROCESSOR. CPA ...1+3 (4) MEM REF? JMP HA3L YES,TEST FOR LITERAL LDA CODE GET OPCODE I.D. NUMBER. ADA M100B SUBTRACT 100 OCTAL. SSA,RSS CODE <100B ? JMP XMIC NO, IT'S A MICROCODE MACRO. HA3B CLA,INA TO ADD 1 TO PLCN * * * INCREMENT PROGRAM LOCN. CNTR. * * HA3Z ADA PLCN ADD CURRENT LOC'N. STA PLCN SAVE NEW PROG. LOC'N COUNT. JMP HA32 GO TO GET NEXT STATEMENT. .26B OCT 26 FOR HARDWARE ARITHMETIC SPC 1 * * PROCESS BSS * * HA3M JSB CHOPI EVALUATE OPERAND. JMP HA32 * ERROR * LDA 1 B TO A JMP HA3Z GO UPDATE PROG. LOC'N COUNT. HA3L LDA LTFLG SZA,RSS LITERAL PRESENT ? JMP HA3B NO LDA INST SLA IS LITERAL LEGAL WITH INST? JMP *+3 YES JSB OPERR NO 'M' ERROR JMP HA3B JSB ?PLIT PROCESS LITERAL NOP IGNORE ERROR JMP HA3B * .12B OCT 12 .32B OCT 32 .100B OCT 100 M100B OCT -100 .M10 DEC -10 BYT OCT 43 OPCODE I.D. NO. FOR 'BYT' DEX OCT 25 OP TYPE FOR 'DEX' CSAD DEF PBUF+3 POINTS AT PUNCH BUFFER DSTAD DEF PBUF+17 ADDR: NAM EXTENSION BUFFER. ENFLG NOP FLAG FOR PROCESSING ENTRY POINTS S BSS 1 * SKP * * PROCESS 'COMMON' DECLARATION * * CMQ LDA SCN1+2 STA PNTR SET POINTER STA TEST SET TEST (U) = 0. CMQA LDB PNTR JSB SYMCK GO TO CHECK FOR VALID SYMBOL. JMP HA32 ** ERROR ! GO TO GET NEXT STATEMENT. LDB PBF10,I SAVE CURRENT COM. LOC'N STB S FOR SYMBOL TABLE VALUE. LDB TEST GET CHARACTER FOLLOWING THE SYMBOL. CPB L+4 COMMA? JMP HM2 YES CPB BLNK END OF OPERAND ? JMP HM2 YES, IT'S = BLANK CPB L LEFT PAREN? RSS YES, = ( JMP HA55+1 NO. ERROR: 1ST PASS JSB BPKUP SKIP BLANKS STB TEMP+1 SAVE POINTER JSB MSYM MEASURE COM LENGTH STA TEMP SAVE NUMBER OF CHARACTERS JSB SPNTR ALIGN POINTER LDA TEST CPA L+1 RT PAREN? RSS YES, = ) JMP HA55+1 NO. 1RST PASS ERROR! STA PEEK LDB TEMP LDA LAST ADB ..M1 LENGTH-1 TO B REG CPA .B =B? (OCTAL VALUE) RSS YES-SKIP ADB .401B NO, SET FOR DECIMAL LDA TEMP+1 JSB ASCN GO TO ASCII CONVERSION ROUTINE JMP HA32 ERROR EXIT ADA PBF10,I BUMP LENGTH OF OOMMON STA PBF10,I * * * INSERT 'COMMON' SYMBOL INTO TABLE * HM3 LDA ...1+2 SET RELOC=COMMON LDB S VALUE TO B JSB INSR INSERT SYMBOL NOP ERROR EXIT LDA PEEK CPA BLNK BLANK? JMP HA32 YES, EXIT TO HA32 CPA L+4 COMMA? RSS YES JSB PKUP GET NEXT CHAR JSB ENDTS TEST FOR TERMINATION JMP CMQA HM2 ISZ PBF10,I STB PEEK SAVE TEST JMP HM3 * * PROCESS 'EXT' DECLARATION * EXP LDA SCN1+2 STA PNTR SET POINTER EXPA LDB PNTR JSB SYMCK GO TO CHECK FOR VALID SYMBOL. JMP HA32 ** ERROR: INVALID SYMBOL ! LDB CNTR VALUE TO B LDA ...1+3 (4) EXT INDIC. JSB INSR GO TO INSERTION ROUTINE JMP *+2 ERROR EXIT ISZ CNTR BUMP EXT CNTR LDA TEST JSB ENDTS TEST FOR TERMINATION JMP EXPA GO BACK, THERE'S ANOTHER 'EXT'!! * * * PROCESS 'ENT' DECLARATION * ENP LDA .10B SET ENFLG = 10B STA ENFLG LDA SCN1+2 STA PNTR SET POINTER ENPA LDB PNTR JSB SYMCK GO TO CHECK FOR VALID SYMBOL. JMP HA32 ** ERROR: INVALID SYMBOL ! LDA .210B SET 'U' & 'E' FIELDS = 1 CLB JSB INSR INSERT INTO THE SYMBOL TABLE NOP LDA TEST JSB ENDTS TEST FOR TERMINATION JMP ENPA ENDTS NOP TEST FOR TERMINATION CPA BLNK OF COM,ENT OR EXT JMP HA55E CPA L+4 COMMA? RSS YES JMP HA55+1 NOT AN ERROR EXIT JSB BPKUP SCAN TO NEXT CHAR. JMP ENDTS,I * HA55E CLA STA ENFLG CLEAR 'ENT'FLAG JMP HA32 EXIT ON A BLANK SPC 1 * * PNTR+1+'A' TO PNTR * SPNTR NOP ADA PNTR INA STA PNTR JMP SPNTR,I * .10B OCT 10 .210B OCT 210 PBF10 DEF PBUF+10B ADDRESS: NAM-RECORD COMMON DECLARATION. SPC 1 HA63 LDA .IL NAM IS ILLEGAL AFTER START JMP HA55+2 TO ERPR * ************************************************* * * INSR: ADD ENTRY TO THE SYMBOL TABLE, W HACCOU * * * LINKAGE: A = TYPE B = VALUE ON INPUT * * * (OUTPUT) SYMP=NO.OF CHARS., SYMN=ENTRY FWA * * * L JSB INSR,I * * * L+1 ERROR RETN ('SO' OR 'DD'PRNTD)* * * L+2 NORMAL RETN * * ************************************************* .EN ASC 3,ENDDSO INSR NOP STA FLX1 SAVE TYPE STB NAME+3 SAVE VALUE JSB ?SYMK SYMBOL TABLE LOOKUP JMP INS1 NOT FOUND; GO TO INSERT. LDB ENFLG ALREADY THERE. SZB,RSS IN ENTRY PROC? JMP INSY NO ADA ..M1+3 (-4) CHECK SYMBOL TYPE: SSA IS IT ABS,REL,B.P.,OR COM ? JMP INSC YES ENERR LDA .EN 'EN' ERROR: WRONG TYPE, DUPLICATE OR JMP INSX REFERENCE TO EXT-DEFINED SYMBOL. INSY AND .1+6 ISOLATE SYMBOL TYPE. LDB FLEX GET CURRENT FW OF ENTRY. SSB,RSS UNDEFINED ENTRY POINT? JMP INSG NO LDB FLX1 YES, GET CURRENT SYMBOL TYPE CPB .1+3 EQUATING EXT TO ENT-DEFINED SYMBOL? JMP INSX-1 YES: 'DD' ERROR! ADA ..M1+3 NO, CHECK TYPE: SSA,RSS ABS,REL,B.P. REL,OR COM? JMP ENERR INVALID TYPE FOR ENT! LDA FLX1 GET SYMBOL TYPE. ALF,ALF POSITION TO BITS #8-11 IOR FLEX INCLUDE ORIGINAL DATA, ELA,CLE,ERA CLEAR UNDEFINED BIT. LDB NAME+3 SET VALUE INTO STB VAL0,I SYMBOL TABLE ENTRY. JMP INSEX-1 FINISH PROCESSING. INSG CPA .1+6 LITERAL? JMP INSR,I YES, EXIT CPA ...1+3 EXT? JMP *+4 YES, TEST LDA .EN+1 NO, 'DD' ERROR (MULTIPLE SYMBOL) INSX JSB ERPR JMP INSR,I GET OUT HERE CPA FLX1 ARE BOTH EXT'S? JMP INSR,I YES, FAKE 'DD'EXIT (FOR ARITH. MACRO'S). JMP *-5 GO TO ERROR PRNT INS1 LDA FLX1 ALF,ALF ADA NAME TYPE IN FIRST WORD STA NAME OF ENTRY LDB NAMI ADB TEMP+2 STB VAL0 SET LIMIT LDA ?NDOP LWA-1 FOR SYMBOL TABLE CMA,INA ADA SYMI TEST FOR SYMBOL TBL ADA TEMP+2 OVERFLOW SSA JMP *+3 NO LDA .EN+2 'SO' SYMBOL TABLE OVERFLOW JMP INSX 'SO' ERROR LDA NAME+3 MOVE VALUE STA 1,I UP LDA NAMI LDB 0,I ADD ENTRY (FROM *+6) STB SYMI,I TO SYMBOL CPA VAL0 JMP INS5 GO SET NEW END OF SYMBOL TABLE. INA ISZ SYMI JMP *-6 INS5 LDB SYMI STB ?NDSY SET NEW END OF SYMBOL TABLE. JMP INSEX EXIT. INSC LDA .4000 IOR TEMP+4,I STA TEMP+4,I SET ENTRY POINT TYPE INSEX ISZ INSR BUMP EXIT POINT FOR A+2 EXIT JMP INSR,I EXIT HERE * * ************************************ * * INSERT LITERAL INTO SYMBOL TABLE * * ************************************ LITIN NOP LDA ?ICSA GET LOC'N OF ASCI BUFFER STA SYMP+1 LDA ...1+6 (7) STA LTFLG LDB PLEN JSB INSR INSERT SYMBOL JMP LITIN,I ERROR RETN. ISZ PLEN BUMP LITERAL LOC'N CNTR ISZ LITIN JMP LITIN,I EXIT(NORMAL) * SKP * *********************** * * PROCESS OCT AND DEC * * *********************** HA40 CLB,INB B=1 CPA DEX CHECK CODE FOR 'DEX' ADB .1+1 B=3 IF CODE IS 'DEX' STB DCNT SET LOCN COUNT BUMPER CLA STA CNTB STA TEMP LDA SCN1+2 STA PNTR SET POINTER * * * PICK UP AND EXAMINE A CHARACTER * * HA41 JSB PKUP LDB DCNT GET COUNT BUMPER CPA L+4 COMMA? JMP HA44 YES, GO SCAN FOR NEXT PARAM. CPB .1+2 IS IT=3(I.E. DEX)? JMP HA42 YES CPA L+6 PERIOD? JMP HA48 YES, GO TEST FLT. POINT. CPA .E 'E' ? JMP HA48 YES, GO SEE IF DECIMAL PT., ALSO HA42 CPA BLNK END OF STATEMENT? JMP HA49 YES JMP HA41 * * * RESET FLT PT FLAG, SKIP BLANKS FOR NEXT CHAR * HA44 CLA STA TEMP JSB BPKUP LDB DCNT GET 'BUMP' COUNT JMP HA48+4 * * * FLT PT TEST FOR NUMBER USING BOTH . AND E * HA48 LDA TEMP ISZ TEMP SZA E OR '.' COUNTED YET? CLB YES, SET B=0. * ADB CNTB (HA48+4) STB CNTB ADD TO WORD COUNT JMP HA41 * * * END OF NUMERIC PSEUDO-OP PROCESSOR * HA49 LDA DCNT ADA CNTB SET A=NO OF LOCNS TO BE USED LDB CODE GET OPCODE I.D. NO. CLE PREPARE FOR REMAINDER TEST. CPB BYT BYTE? ERA YES, DIVIDE BY 2 SEZ ODD BYTE REMAINING? INA YES, ADD 1 TO WORD COUNT. JMP HA3Z EXIT * ******************************** * * PROCESS ASC (GET VALUE OF N) * * ******************************** HA54 LDA ...1+1 (2) 'ASC' INDIC.FOR CHOP JSB ?CHOP JMP HA3B * ERROR * SZA JMP HA55 ERROR-NOT ABS.VAL. SZB,RSS ZERO WORDS? JMP HA55 YES - * ERROR * ADB .M29 -29 LDA SUMP SSB SKIP IF >28 WORDS JMP HA3Z HA55 ISZ PLCN * ERROR EXIT * LDA .MBLN 'M' ERROR(BAD OPERAND) JSB ERPR TO PRINT ERROR DIAG. JMP HA32 * * ******************************************************** * * * * * SYMCK: CHECK FOR A VALID SYMBOL * * * ENTER: = DON'T CARE. * * * = 'PNTR' (RELATIVE POS'N 1RST CHAR.) * * * RETURN: P+1 - INVALID SYMBOL ('SY' ERROR PRINTED) * * * P+2 - VALID SYMBOL. * * * * * * * * ******************************************************** SYMCK NOP STB PNTSV SAVE 'PNTR' FOR LATER RESTORATION. JSB MSYMS GO TO MEASURE THE SYMBOL. STA SYMSZ SAVE CHARACTER COUNT. CMA,INA NEGATE THE COUNT, STA SMCNT AND SAVE FOR 'SYMTS' LOOP COUNT. LDA TEST GET CONTINUATOR CHARACTER AND STA SYTST SAVE FOR LATER RESTORATION. LDA PNTSV GET POINTER TO FIRST CHARACTER. JSB GETC GO TO GET THE CHARACTER. LDB SMCNT GET NEGATIVE SYMBOL SIZE. JSB SYMTS GO TO CHECK FOR LEGAL SYMBOL. RSS ** ERROR: SET RETURN TO P+1. ISZ SYMCK VALID: SET RETURN TO P+2. LDA PNTSV RESTORE FORMER CONTENTS STA PNTR OF CHARACTER POINTER. LDA SYMSZ GET SYMBOL MEASUREMENT. JSB SPNTR GO TO ALIGN 'PNTR' FOR NEXT USE. LDA SYTST RESTORE THE STA TEST ORIGINAL CONTINUATOR. JMP SYMCK,I RETURN: P+1=ERROR; P+2=O.K. * PNTSV NOP TEMP. STORAGE: 'PNTR'. SYMSZ NOP TEMP. STORAGE: SYMBOL SIZE. SMCNT NOP TEMP. STORAGE: -SYMSZ. SYTST NOP TEMP. STORAGE: 'TEST'. * * ********************** * * PROCESS EQU PSEUDO * * ********************** HA56 JSB LBCK CHECK FOR REQUIRED LABEL. JSB CHOPI EVALUATE OPERAND JMP HA32 * ERROR * CPA ...1+3 (4) EXT ? LDA ...1+4 (5) SET FOR NON-PNCH EXT STA TEMP NO STB TEMP+1 CLB,INB JSB MSYMS GO TO MEAS.SYMBOL, SET SYMP/SYMN LDA TEMP LDB TEMP+1 * * * SEND LABEL TO TABLE * JSB INSR TO SYMBOL TABLE INSERTION RTN NOP JMP HA32 * ******************************* * * ORB ORG ORR PROCESSOR JUMPS * * ******************************* HA64 JSB INST,I GO TO SUBROUTINE JMP HA32 HA70 LDB LTFLG GET LITERAL FLAG SZB IS A LITERAL IN THE OPERAND? JSB ?ARTL GO PROCESS THE LITERAL LDA .1+1 A=2 JMP HA3Z * ********************************** * * PROCESS REPLACEMENT CODE (ENT) * * ********************************** HA71 JSB LBCK CHECK FOR REQUIRED LABEL. JSB CHOPI EVALUATE OPERAND. JMP HA32 *ERROR* GET NEXT STATEMENT. STB TEMP+1 SAVE OPERAND. CLB,INB POINT TO 1RST CHAR. OF LABEL. JSB MSYMS MEASURE SYMBOL,SET SYMP/SYMN LDA .12+2 (16B)CODE-REPLACEMENT ENT RECORD. LDB TEMP+1 GET REPLACEMENT CODE VALUE. JSB INSR INSERT SYMBOL & VALUE IN TABLE. NOP (ERRORS ARE ALREADY NOTED) JMP HA32 GO GET NEXT STATEMENT. * * * LABEL PRESENCE DETECTOR * * LBCK NOP LDA SCN1+3 GET LABEL LENGTH. SZA LABEL PRESENT ? JMP LBCK,I YES, RETURN. * LDA .LB NO. GET ASCII ERROR CODE. JMP HA55+2 GO TO NOTE THE ERROR. .LB ASC 1,LB * SKP * ************************ * * PASS 1 END PROCESSOR * * ************************ DEF BUFF HB00 LDA ?TFLG GET TABLE OUTPUT FLAG SZA,RSS JMP HB08 TABLE NOT REQUESTED - FINISH PASS LDA HB00-1 ADA .1+3 STA HB00-1 SET HB00-1 = L(BUFF+4) LDA X GET FWA OF AVAILABLE MEMORY STA ENTV TO ENTV HBX LDA ENTV,I TEST 1ST WORD OF ENTRY SZA,RSS COMPLETED? JMP HB08 YES - GO TO FINISH PASS 1 JSB MBLNK SET UP BLANKS IN SYMBOL OUT AREA * * * GET RELOCATION INDIC. CHAR. LDA ENTV,I ALF,ALF AND ...1+6 (7) CPA ...1+6 LITERAL ENTRY? JMP HBY YES. CLB CPA .1+5 (6) REPLACEMENT CODE ENTRY ? LDB SBLN YES, GET ASCII S-BLNK. SZB,RSS SKIP IF INDICATOR PRESENT. JSB ?DCOD STB BUFF+3 * * * GET VALUE OF SYMBOL * LDB SUMP (NO.OF WORDS IN ENTRY) ADB ..M1 ADB ENTV STB ENTV LDA 1,I ISZ ENTV CLE SET E = 0 FOR OCTAL CONV. JSB ?BNCN * * * STORE ASCI VALUE INTO BUFF LDB HB00-1 GET L(BUFF+4) JSB ?V LDB FFUB SET PRINT PARAMETERS LDA .12+2 (14) JSB ?PRNT GO TO PRINT JMP HBX ENTRY DONE. HBY LDA SUMP NO.WDS IN ENTRY ADA ENTV + ADDR OF ENTRY STA ENTV = ADDR OF NEXT ENTRY JMP HBX SBLN ASC 1,S * SKP * * * ERRORS PRINTED * * HB08 JSB ?ENDS CLOSE OUT THE PASS SPC 1 * *********************** * * START PASS 2 HERE * * *********************** SPC 1 * * TEST FOR PUNCH OUTPUT * * JMP NMP YES - GO PUT OUT START OF BIN DK * HB11 JSB ?POSN POSITION SOURCE FILE TO BEGINNING * LDA *+2 PICK UP ENT CODE TO GET ASMB2 JMP ?SEGM GO TO GET NEXT SEGMENT ASC 1,2 * SKP * * MOVE ENT NAMES/ADDRESS TO PUNCH BUFFER. * * IF UNDEFINED, PRINT DIAGNOSTIC. HNP NOP LDA .10B FOR "ENT" TYPE = 10B STA ENFLG LDB .2000 FOR WORDS PER ENTRY = 4 LDA .M15 FOR 15 ENTRIES/RECORD JSB ENEXT CLA STA ENFLG JMP HNP,I