ASMB,R,L,C RTE 'XREF' CROSS-REFERENCE TABLE GENERATOR HED * RTE 'XREF' CROSS-REFERENCE TABLE GENERATOR 92067-16012 * * NAME: XREF * SOURCE: 92067-18012 * RELOC: 92067-16012 * PGMR: C.C.H.,S.P.K. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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. * * *************************************************************** * NAM XREF,3,99 92067-16012 REV.2001 791031 SUP EXT IFBRK EXT C.SOR,C.LST,C.TTY,OPN.C,WRT.C,RED.C,END.C EXT SPC.C,PRM.C,SUP.C,GMM.C,RWN.C,EOF.C * * THIS PROGRAM PRODUCES A CROSS REFERENCE TABLE FOR AN PROGRAM * WRITTEN IN HP-21XX ASSEMBLY LANGUAGE (HPAP). THE TABLE CON- * SISTS OF A LIST OF SYMBOLS, IN ALPHABETIC ORDER, EACH FOLLOWED * BY ITS LOCATION IN THE PROGRAM, AND A LIST OF REFERENCES TO * THAT SYMBOL. EACH LOCATION IS A 5-DIGIT SEQUENCE NUMBER, FOL- * LOWED BY THE NUMBER OF THE TAPE ON WHICH IT APPEARS. THESE TWO * ARE SEPARATED BY A SLASH. THE TAPE NUMBER IS NOT PRINTED WHEN * ONE TAPE ONLY EXISTS. * * THE METHOD USED IS TO READ IN THE HPAP SOURCE PROGRAM AND * BUILD A TABLE OF REFERENCES. THERE ARE TWO INTERNAL TABLES, THE * LABEL TABLE (LTAB) AND THE CROSS REFERENCE TABLE (XTAB). THESE * TABLES ARE ORGANIZED AS FOLLOWS: * * LTAB: EACH ENTRY CONTAINS THE LABEL NAME AS FOLLOWS: * WORD COUNT CHAR.1 * CHAR.2 CHAR.3 (OPTIONAL) * CHAR.4 CHAR.5 (OPTIONAL) * CHAR.6 CHAR.7 (OPTIONAL) * * THE WORD COUNT MAY BE 1,2,3, OR 4 * * XTAB: EACH ENTRY CONTAINS THE FOLLOWING: * -NUMBER OF WORDS IN ENTRY (-N-2) * LABEL SEQUENCE NUMBER * REF.1 " " LABELS ARE ADDED AS ENCOUNTERED; * ... * REF.N " " REST OF TABLE IS PUSHED DOWN. * * NO LINKAGE BETWEEN THE 2 TABLES IS REQUIRED BECAUSE THE ENTRIES * ARE IN THE SAME ORDER AND CORRESPOND 1 FOR 1. * NOTE THAT LTAB BEGINS IN LOW CORE AND XTAB IN HIGH CORE, SO THAT * BOTH ARE OPEN-ENDED. * * A LABEL WHICH HAS BEEN DEFINED BUT NEVER REFERENCED IS SIGNIFIED BY * A "@" IN COLUMN #1 PRECEEDING THE LABEL. * * A LABEL WHICH HAS BEEN DEFINED MORE THAN ONCE WILL HAVE A DEFINITION * FIELD OF HASH MARKS: "#####". * * A LABEL WHICH HAS BEEN REFERENCED BUT NEVER DEFINED WILL HAVE A * DEFINITION FIELD OF QUESTION MARKS "?????". * * ANY INSTRUCTION THAT WILL HAVE AN EFFECT UPON THE PROGRAM LISTING * AS ORG, ORB, ORR, IFN, IFZ, XIF, ECT. WILL BE DEFINED AS FOLLOWS: * " **XXX ***** NNNNN NNNNN " WHERE XXX IS THE TYPE OF INSTR. * AND NNNNN IS THE SEQUENCE NUMBER OF THE INSTRUCTION. * * A LITERAL INSTRUCTION WILL BE DEFINED AS A LABEL WITH ITS DEFINITION * FILLED WITH DOTS, OTHER SEQUENCE NUMBERS DEFINE WHERE THEY WERE USED. * * PARAMETERS: * *ON,XREF,SOURCE,LIST[,A[,B[,C]]] * NAMR NAMR * WHERE: * SOURCE AND LIST NAMR'S ARE FMGR NAMR OR LU#'S * A = 0 WILL ASK FOR NO ALPHA LIMITS. * A # 0 WILL ASK "ENTER LIMITS OR /E" * THE OPERATOR SHOULD ENTER TWO ALPHA CHARACTERS * REPRESENTING THE BEGINNING AND LAST SYMBOLS * OF THIS PASS. THE MESSAGE WILL CONTINUE AFTER * EACH PASS UNTIL A /E IS ENTERED. * * B = 0 WILL GIVE TAPE NUMBERS WITH SEQUENCE NUMBERS * B = N WILL GIVE NO TAPE NUMBERS THUS ALLOWING * LARGER SEQUENCE NUMBERS * B = -N XREF WILL NUMBER PAGES CONSECUTIVELY * FROM THE LAST RTE-ASMB PAGE NUMBER. * (TAPE NUMBERS WILL BE PRINTED.) * [ MORE THAN 16 TAPES: PROCESSING TERMINATES ! ] * * * C = 0 WILL GIVE 55 LINES PER PAGE. * C = N WILL GIVE N LINES PER PAGE. [040 CHARS.? SSA STB CCNT YES, SET = 40 MAX CHARS. LDA BLANK (A)= ASCII BLANK. MVEXT LDB NAMLN JSB A2BUF ISZ NAMLN JSB CHAR GET THE NEXT CHARACTER. LDB CCNT GET NUMBER OF CHARS. ALREADY MOVED. SZB EXTENSION BUFFER FULL ? CPA FEED NO. IF THIS CHARACTER IS A LINE FEED, JMP RAC THAT'S ALL. JMP MVEXT GO BACK FOR MORE. SPC 1 * END PROCESSOR * SPC 1 DOEND JSB SOP PROCESS ELEMENT FOLLOWING END. LDA TAPNO SET TAPE NUMBER STA TPCNT TO TAPE COUNT * SPC 1 * OUTPUT SECTION * SPC 1 LDA RUN GET RUN FLAG SZA NEW PASS: OPERATOR SPEC'D LIMITS? JMP *+3 YES, DON'T FORCE NEW HEADER. CCA SET LINE COUNT TO -1 TO FORCE PAGE EJECT STA LINES TITLE AT THE BEGINNING. LDA LABCT COMPLEMENT LABCT TO FACILITATE STA LBLCT CMA ITS USE AS A COUNTER. STA LABCT SPC 1 * SECTION TO PROCESS A SINGLE LABEL * SPC 1 DUMP ISZ LABCT ANY MORE LABELS ? JMP DOLAB YES. LDA LETOP GET LIMIT PARAMETER. SZA,RSS LIMITS SUPPLIED FROM KEYBOARD ? JMP STOP NO, TERMINATE XREF ISZ RUN SET RUN NOT EQUAL TO ZERO JMP RSTAR RETURN FOR NEXT LIMITS * DOLAB LDA MAXCC SET CCNT SO AS TO FORCE A STA CCNT BLANK LINE. JSB LINE * * SEARCH LABEL TABLE TO FIND THE FIRST LABEL, ALPHABETICALLY * * LDA MASK8 INITIALIZE TO A STA LABEL MAXIMUM. LDA FWA INITIALIZE LPNTR TO POINT AT STA PNTR1 FIRST ENTRY. LDA LTAB. SET LTAB. AS END OF TABLE CMA,INA POINTER. STA PNTR2 CLA INTIALIZE ORDNL TO STA ORDNL ZERO. DOLB1 ISZ ORDNL ADVANCE ORDNL. LDB PNTR1 TEST FOR END OF LTAB. ADB PNTR2 SSB,RSS SKIP IF NOT END OF LABEL TABLE. JMP GOTLB GO TO PRINT SECTION. * * MOVE CURRENT LABEL TO TEST ARRAY. * * LDA BLBL FIRST INITIALIZE TO BLANKS. STA TEST+1 STA TEST+2 STA TEST+3 STORE BLANKS IN TEST BUFFER LDA PNTR1 SET TEMP TO POINT AT CURRENT STA TEMP LABEL. LDB .TEST SET B TO POINT AT TEST ARRAY. LDA TEMP,I GET FIRST WORD OF LABEL IN A. AND MASK8 GET FIRST CHARACTER IN STA TEST TEST. XOR TEMP,I GET WORD COUNT IN HI-PART OF A. ALF,ALF ROTATE TO LO-PART. CMA,INA STORE AS NEGATIVE IN COUNT. STA COUNT DOLB2 ISZ TEMP ADVANCE LABEL POINTER. ISZ COUNT TEST FOR ANY MORE WORDS IN LABEL INB,RSS ADVANCE TEST POINTER, SKIP JMP COMPR GO TO COMPARISON SECTION. LDA TEMP,I GET NEXT WORD OF LABEL. STA 1,I AND MOVE IT TO TEST ARRAY. JMP DOLB2 SPC 1 * COMPARISON SECTION * SPC 1 COMPR LDA .LAB SET TEMP1 TO POINT STA TEMP1 AT LABEL LDB .TEST AND B TO POINT AT TEST LDA MIN4 SET COUNT TO -4 STA COUNT DOLB3 LDA TEMP1,I GET LABEL WORD IN A AND CMA,INA SUBTRACT IT FROM ADA 1,I TEST WORD. SSA IF TEST WORD IS SMALLER, GO TO JMP MOVE MOVE SECTION; SZA IF BIGGER GO TO JMP KEEP KEEP SECTION. ISZ COUNT TEST FOR ANY MORE WORDS. RSS YES. JMP KEEP NO--SHOULDN'T COME HERE ISZ TEMP1 ADVANCE LABEL POINTER INB AND TEST POINTER JMP DOLB3 MOVE LDA 1,I MOVE TEST WORD TO LABEL STA TEMP1,I ISZ TEMP1 ADVANCE INB POINTERS. ISZ COUNT ANY MORE WORDS IN TEST ? JMP MOVE YES. LDA PNTR1 SET UP ADDRESS OF BEST LABEL STA BESTL SO FAR. LDA ORDNL SET ORDINAL OF THAT STA BESTO LABEL ALSO. KEEP LDA TEMP SET PNTR1 TO NEXT LABEL, AND STA PNTR1 GO TO TEST THE JMP DOLB1 NEXT ONE. *