ASMB,R,L,C * * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. 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. * * *************************************************************** * HED RTE XL GENERATOR SEGMENT 2 NAM L20G2,5 92071-1X079 REV 2041 800715 * * NAME: RTE XL GENERATOR SEGMENT 2 * SOURCE: 92071-18079 * PGMR: B.C. * ENT L20G2 * * EXT EXEC,.ENTR EXT OPEN,CLOSE,READF,WRITF,RWNDF EXT L.BUF,LNKDR,CNUMO,LOCF * EXT DSTRG,IPBUF,STRNG,DIPBF EXT OP?,IPTN2,ASTRX EXT EXIT,#ENPT EXT SDCB3,IERR3,F3 EXT ODCB2 EXT CLOS3,NLIB * EXT SEGNM,COMFG,LNKDR,SIDCK EXT FWFM,LWFM,BPFWA,COMAD,COMLG EXT TDBP,LDBP,CSDBP,CUDBP * EXT READ,FLERR,NAMRR,DRKEY,SPACE,MOVE EXT DLOCC,LOCC,DBLOC,BPLOC EXT L.OUT,L.INT,L.LUN,OPSNP EXT L.REL,L.CLS,L.ADD,L.LDF,L.MAT EXT LBS.L,CBP.L,IGN.L,NM1.L,NM2.L,NM3.L EXT TH1.L,TH2.L,NOR.L,PRI.L,PGT.L,FXN.L,PGL.L EXT FXS.L,.CBT,CNUMD EXT ERRCT,CONSL,STCR1 EXT BPR.L,CROM,PRERR,LENTF EXT CBCOM,CFWSY,C$SCP,C$SC#,RECOF,SLOCC * SUP PRESS EXTRANIOUS LISTING * SKP * F5 DEF FILE5 FILE5 BSS 3 FILE NAME TYPE5 NOP F5SC NOP F5DSC NOP * RDCB5 BSS 144 IERR5 NOP DDCB5 DEF RDCB5 * SKP L20G2 LDA SEGNM CPA P3 SECOND TIME INTO SEGMENT? JMP NXTOP YES * * INITIALIZE LOADER LIBRARY * * DO NOT REMOVE ANY OF THE NEXT 22 WORDS * JSB L.INT NO DEF *+9 DEF FWFM+0 1ST WORD OF FREE SPACE DEF LWFM+0 LAST WORD OF FREE SPACE DEF B1677 FIRST WORD OF BASE PAGE ( DECREASING ) DEF COMAD+0 ADDR OF SYSTEM COMMON = 0 IF LOCAL DEF COMLG+0 LENGTH OF SYSTEM COMMON OR 0 DEF B2000 LOAD POINT ADDRESS DEF CROM TOP OF MEMORY DEF TABLE TABLE OF ADDRESSES OF SUBR. * CCA STA LNKDR SYSTEM LINK DIRECTION STA COMFG UNLABEL COMMON IN FLAG * LDA B2000 STA LOCC * JSB SPACE LDA P10 STA CONSL ECHO ON CONSOLE LDB DMES4 SYSTEM RELOCATION JSB DRKEY OUTPUT MESSAGE JSB SPACE * SKP NXTOP JSB READ READ INPUT JMP EXIT END OF FILE LDA OP? GET THE OPCODE CPA MS IS IT A MULTIPLE SCAN? JMP MSERC YES CPA SE IS IT SEARCH? JMP SERCH YES CPA RE IS IT RELOCATION? JMP RELOC YES CPA DI IS IT DISPLAY? JMP DISP YES CPA LO IS IT SET LOCC? JMP LOSET YES CPA BL IS IT SET BLOCC? JMP BPSET YES CPA EN IS IT END? JMP END YES CPA CO IS IT UNLABEL COMMON? JMP UNCOM YES CPA LE IS IT LENTRY ( LIST ENTRY PT ) ? JMP LENTY YES WHAT? CLA JSB LDRER WHAT IS IT ?? JMP NXTOP * DMES4 DEF MES4 MES4 ASC 5,* SYS REL * SEG3 ASC 3,L20G3 * SKP * END JSB DSUND DISPLAY ANY UNDEFINED LDA SEGNM CPA P3 IS IS 2ND TIME INTO SEGMENT? JMP EN120 YES , SYS. COM. RELOCATION LDA CBP.L REAL CURRENT BASE PAGE INA STA TCBPL TEMPORY CURRENT BASE PAGE LDB A GET CURRENT REAL BP ADB LDBP ADD LOWER DUMMY BP EN100 STB TSDBP DUMMY BP LOCATION LDA B,I GET VALUE LDB TCBPL JSB STCR1 OUTPUT LDA TCBPL INA STA TCBPL LDB TSDBP INB CPB TDBP RSS JMP EN100 * EN120 ISZ SEGNM * LDA SEGNM CPA P1 CPA P1 END SYS. RELOCATION? RSS YES JMP EN300 NO * JSB L.ADD FIND ADDRESS OF $STRT DEF *+5 DEF $STRT DEF VALUA DEF SADDR DEF RESLT LDA RESLT GET RESULT SZA JSB MSENT MISSING SYSTEM ENTRY POINT LDA VALUA ADDRESS OF $STRT LDB P3 JSB STCR1 PUT ADDRESS OF $STRT IN LOC 3 LDA JMP3I JMP 3,I LDB P2 LOCATION 2 JSB STCR1 PUT JMP 3,I IN LOC 2 * JSB EXEC DEF *+3 DEF P8 DEF SEG3 LOAD SEGMENT 3 * EN300 JMP NXTOP GET NEXT OPERATION * * * D$LCO DEF $LCOM $LCOM ASC 3,$LCOM * D$BCO DEF $BCOM $BCOM ASC 3,$BCOM * SKP * MSSUB NOP * MSERC CLA IS A MULTIPLE SCAN STA MULT CMA STA LBS.L JMP DOPRS * RELOC CLA NOW SET A FEW FLAGS STA LBS.L NOT A LIBRARY SCAN JMP DOPRS NOW GO DO THE PARSE SERCH CCA NOW SET A FEW FLAGS STA LBS.L IS A LIBRARY SEARCH STA MULT NOT A MULTIPLE SCAN * DOPRS CLA SET A FEW FLAGS STA IGN.L DON'T IGNOR THIS MODULE STA TP67F CLEAR PROG TYPE 6 OR 7 FLAG STA SMDNM CLEAR SEARCH MODULE NAME STA MODFD CLEAR MODULE FOUND FLAG STA INDFG CLEAR INDEX FLAG STA TMPBP CLEAR TEMPORARY BP COUNTER CCA STA NM1.L NAM MUST BE FIRST STA NOR.L SUBR LOADED IN THIS SCAN LDA LOCC STA TH2.L * JSB NAMRR NO PARSE THE INPUT SSA WAS THERE ANYTHING TO PARSE ? JMP WHAT? NO INPUT LDA DIPBF CHECK FOR ASCII ADA P3 LDA A,I AND P3 CPA P3 IS IT ASCII? RSS YES JMP WHAT? NO , WHAT IS IT * LDA N6 GET THE WORD COUNT JSB MOVE MOVE THE NAMR TO THE DCB AREA DEF IPBUF+0 SOURCE DEF FILE5 DESTINATION LDA TYPE5 GET THE TYPE WORD AND P3 KEEP ONLY THE LEAST 2 BITS STA TYPE5 * JSB NAMRR GET POSSIBLE MODULE NAME SSA IS THERE A NAME? JMP OPREL NO NAME , GO OPEN REL FILE * LDA DIPBF CHECK FOR LEGAL FILE NAME ADA P3 LDA A,I AND P3 SZA,RSS IS IT A NULL PARM? JMP OPREL YES , NULL DO SEARCH CPA P3 IS THIS A ASCII NAME? RSS YES , SAVE IT JMP MODNM NO, ERROR ILLGAL MODULE NAME LDA N3 MOVE FILE NAME JSB MOVE MOVE IT TO MDNAM DEF IPBUF+0 DMDNM DEF MDNAM CLA,INA STA SMDNM SET FLAG TO SEARCH FOR IT * * OPREL JSB OPEN OPEN THE FILE ! DEF *+7 DEF RDCB5 DCB DEF IERR5 ERROR FLAG DEF FILE5 ASCII FILE NAME DEF IPTN1 READ OPTION DEF F5SC SECURITY CODE DEF F5DSC CART REF # SSA,RSS ANY ERROR IN THE READ ? JMP L.MOR NO LDB F5 YES , GET THE FILE NAME JSB FLERR AND REPORT JMP CLSRF * L.MOR JSB L.RED READ A RELOCATABLE RECORD DEF *+2 DEF FLAG * LDA FLAG SSA IS IT EOF? JMP CKMUL YES , CHECK FOR MULTIPLE SCAN * JSB L.CLS GO CLASSIFY THE REL. RECORD DEF *+3 DEF TYPE DEF SBFLD SUBFIELD REC , GEN=0 SSA RTN REC TYPE , 0=OK , -1=CK SUM ERR JMP RELER CHECK SUM ERROR * LDA SBFLD GET SUB FIELD CPA P9 IS IT AN INDEX REC? RSS YES , SET FLAG AND IGNOR INDEX REC JMP EXPNM NO STA INDFG SET 9 INTO INDEX REC FLAG JMP L.MOR IGNOR CURRENT INDEX AND GET NEXT REC * EXPNM LDA TYPE GET REC TYPE CPA P5 END REC? RSS YES JMP CKNAM NO , CHECK FOR NAM LDB INDFG GET INDEX FLAG CPB P9 IS PREVIOUS REC AN INDEX REC? JMP CKMUL YES , THIS IS THE END OF FILE * CKNAM LDA TYPE CPA P1 JMP REL RELOCATE THE NAM REC TO SET UP PROG TYPE * LDA PGT.L GET PROGRAM TYPE CPA P5 IS IT A SEGMENTED PROGRAM? JMP SEGER ERROR , SEGMENTED PROGRAM NOT ALLOWED DURING GEN CPA P7 IS IT A TYPE 7 SUBROUTINE ? STA TP67F YES SET THE PROGRAM TYPE 6 OR 7 FLAG CPA P6 STA TP67F * LDA SMDNM SZA,RSS IS THERE A MODULE NAME? JMP REL NO MODULE NAME LDA NM2.L YES , SEARCH FOR NAME MODULE INA RAL LDB DMDNM ADDRESS OF MODULE NAME RBL JSB .CBT COMPARE THEM DEF P5 NOP JMP SMDFD NAME MATCHED NOP NAME NOT MATCHED NOP NAME NOT MATCHED LDA TMPBP ADA CBP.L RESTORE CBP.L SINCE SUBR NOT MATCHED STA CBP.L JMP ENAM SMDFD CLA,INA STA MODFD SET MODULE NAM FOUND JMP REL * * SEGER LDA P12 ERROR MESSAGE 'SEGMENTED PROG. NOT ALLOWED JSB LDRER JMP CLSRF GO CLOSE THE REL. FILE * SKP * SPC 1 REL JSB L.REL NO, SO GO PROCESS RECORD ! DEF *+2 DEF FLAG * LDA FLAG GET ERROR FLAG SZA ANY ERROR? RSS YES JMP REL2 NO * RELER CMA,INA SET ERROR CODE TO POSITIVE JSB LDRER PRINT ERROR JMP CLSRF CLOSE RELOCATABLE FILE * REL2 CLA STA INDFG CLEAR INDEX FLAG LDA TYPE GET REC TYPE CPA P5 IS IT AN END? JMP RELED YES CPA P2 IS IT AN ENT? JMP CKENT YES CPA P1 NAM RECORD? RSS YES JMP L.MOR NO LDB DLBUF YES , NAM RECORD ADB P7 POINT TO BP LENGTH LDA B,I GET LENGTH OF BP STA TMPBP SAVE IT JMP L.MOR GET NEXT RECORD * CKENT LDA SEGNM SZA JMP TRSC SEE IF SYS. COM. LDB TP67F CPB P7 JMP T67SB YES , TYPE 6 OR 7 SUBROUTINE CPB P6 JMP T67SB TRSC CPA P3 IS IT SYSTEM COMMON ? JMP SCOMT YES , TAG SYMBOL AS SYSTEM COMMON CPA P5 LOADING MEM. RES. LIBRARY ? JMP TRMRL YES , TAG SYMBOL AS MEM. RES. JMP L.MOR * TRMRL LDA P8 SET TAG TO BIT 3 MEM. RES. STA TAGSM JMP TAGEN * T67SB LDA B40 STA TAGSM SET TAG TO BIT 5 TYPE 6,7 SUBR. JMP TAGEN * SCOMT LDA P16 STA TAGSM SET TAG TO BIT 4 SYSTEM COMMON * TAGEN LDA IGN.L SZA IGNORE THIS MODULE? JMP L.MOR YES LDB DLBUF NO , GET # OF ENTRIES INB LDA B,I FROM WD 2 OF ENT RECORD AND B17 CMA,INA STA CNT10 NEGATE # OF ENT SYMBOL ADB P2 POINT TO 1ST SYMBOL MRTAG STB SYMAD SAVE THE SYMBOL ADDRESS * JSB L.ADD DEF *+5 SYMAD DEF * DEF VALUA DEF SADDR DEF RESLT LDA RESLT SZA JMP ERSYM LDB SADDR SYMBOL ADDRESS ADB P3 LDA B,I GET WORD 4 OF SYMBOL TABLE AND P3 GET S FIELD CPA P2 IS IT UNDEFINED? JMP ERSYM YES, NEXT SYMBOL LDA B,I NO ,GET WORD 4 OF SYMBOL TABLE AGAIN IOR TAGSM TAG SYM NOT TO BE IN SNAP BIT 5 STA B,I OR TAG AS SYSTEM COMMON ERSYM ISZ CNT10 RSS JMP L.MOR LDB SYMAD ADB P4 JMP MRTAG MATCH NEXT SYMBOL * RELED LDA IGN.L GET FLAG SZA,RSS ANYTHING LOADED? JMP CKLD YES JMP ENAM NO * CKLD ISZ SUBLD YES, A SUBROUTINE IS LOADED LDB SEGNM CPB P3 LOADING SYSTEM COMMON? RSS YES , GIVE WARNING IF NOT TYPE 6 MODULE JMP PMAP NO LDA PGT.L GET PROGRAM TYPE CPA P6 IS MODULE TYPE 6? JMP PMAP YES, GO ON LDA P17 LOADED A NON TYPE 6 MODUEL DURING SYS COM JSB LDRER GIVE WARNING SKP * * PRINT MODULE BOUNDS * PMAP JSB BUFCL BLANK OUT L.BUF BLNK2 ASC 1, * LDB NM2.L GET MODULE NAME LDA B,I CMA,INA JSB MOVE DEF NM2.L+2 DEF L.BUF+0 * JSB CNUMO CONVERT LOWER BOUND ADDRESS DEF *+3 DEF TH1.L+0 DEF L.BUF+3 * LDA TH2.L GET HIGH ADDRESS +1 OF THIS LOAD STA LOCC STORE IT IN LOCC LDA TH1.L CCA SUBTRACT -1 LDB PGL.L PROGRAM LENGTH SZB IF ZERO SSB OR NEGATIVE JMP ADTH2 ADDING LWA IS CORRECT (NO LINKS) ADA TH1.L ELSE ADD CURR PROG RELOC ADDR ADA B ADD LENGTH RSS ADTH2 ADA TH2.L ADD LWA PROG STA ADDR STORE IT TEMPORARY JSB CNUMO CONVERT UPPER BOUND ADDRESS DEF *+3 DEF ADDR DEF L.BUF+6 * LDB NM3.L LDA B,I SZA,RSS IS IT ZERO? JMP PM10 YES , NO COMMENTS CMA,INA JSB MOVE DEF NM3.L+2 DEF L.BUF+10 * PM10 JSB SPACE LDA P120 LDB DLBUF JSB DRKEY PRINT BOUNDS * JSB BUFCL BLANK OUT L.BUF ASC 1, * LDA BP STA L.BUF * JSB CNUMO DEF *+3 DEF BPR.L+0 DEF L.BUF+2 * LDA P10 LDB DLBUF JSB DRKEY JSB SPACE * LDA LENTF SZA,RSS LIST ENTRY POINTS ? JMP ENAM NO JSB BUFCL YES , BLANK OUT L.BUF ASC 1, * CLA STA ADDR STA PNTR * PM20 JSB L.LDF DEF *+4 DEF ADDR DEF PNTR DEF N1 JUST GIVE ME THE SYMBOL FOR THIS MODULE LDA ADDR SZA,RSS IS THIS THE END JMP ENAM0 YES * LDA ADDR STA PMSY1 STA PMSY2 JSB L.ADD DEF *+5 PMSY1 DEF ADDR DEF VALUA DEF SADDR DEF RESLT * LDA N3 JSB MOVE PMSY2 DEF ADDR DEF L.BUF+1 LDA L.BUF+3 AND HIMSK IOR B40 ADD BLANK TO 3RD WORD STA L.BUF+3 * JSB CNUMO DEF *+3 DEF VALUA DEF L.BUF+5 * LDA P16 LDB DLBUF JSB DRKEY JMP PM20 ENAM0 JSB SPACE * ENAM CCA EXPECT ANOTHER NAM STA NM1.L CLA STA TP67F CLEAR TYPE 6 OR 7 FLAG STA INDFG CLEAR INDEX FLAG STA TMPBP CLEAR TEMPORARY BP COUNTER JMP L.MOR * CKMUL LDA MULT IS IT A MULTIPLE SCAN? ISZ NOR.L SSA YES JMP CLSRF NOT A MULTIPLE SCAN OR NOTHING LOADED JSB RWNDF REWIND THE FILE DEF *+3 DEF RDCB5 DEF IERR5 * CCA STA NOR.L RESET TO NO SUBR LOADED JMP L.MOR * CLSRF JSB CLOSE DEF *+2 DEF RDCB5 CLOSE THE RELOCATION * LDA SMDNM SZA,RSS SEARCHING FOR MODULE NAM? JMP CKSLB NO LDA MODFD YES SZA WAS THE MODULE FOUND? JMP CKSLB YES LDA P27 NO , GIVE ERROR JSB LDRER CKSLB LDA SNPLB SZA SEARCHING LIBRARY IN SNAP? JMP MSSUB,I YES , RETURN TO LBLOK JMP NXTOP NO * * MODNM LDA P25 ILLEGAL MODULE NAME IN SEARCH COMND JSB LDRER JMP NXTOP * * SKP * * * GET LIST ENTRY POINTS LENTRIES,ON * ,OF * LENTY JSB NAMRR GET OPTION ON OR OF SSA END OF INPUT ? JMP WHAT? YES , NO OPTION CLB NO LDA IPBUF CPA ON IS IT ON OPTION? JMP LENON YES CPA OF IS IT OF OPTION? JMP LENOF YES JMP WHAT? OPTION ERROR LENON INB SET ON OPTION LENOF STB LENTF STORE IN LIST ENT FLAG JMP NXTOP NEXT COMMAND * * * DISPLAY UNDEF * DISP JSB DSUND JMP NXTOP * * * WHICH LDA FLAG SZA,RSS JMP DSPBP DISPLAY BPLOCC * * DISPLAY LOCC * LDA DLOCC GET ADDRESS OF LOCC STA DSP50 JMP DSP30 GO CONVERT AND PRINT IT * * DISPLAY BPLOCC * DSPBP LDA CBP.L STA BPLOC LDA DBLOC STA DSP50 DSP30 JSB CNUMO CONVERT TO OCTAL # DEF *+3 DSP50 DEF LOCC DEF ADDR LDA P6 LDB DADDR JSB DRKEY PRINT LOCC VALUE JSB SPACE JMP NXTOP * * * SKP * * LOCC,VALUE * LOSET CCA COMPLEMENT A SET LOCC STA FLAG JMP GTVAL * * SET BPLOCC * * BPLOCC,VALUE * BPSET CLA CLEAR A SET BPLOCC STA FLAG GTVAL JSB NAMRR GET LOCC VALUE SSA,RSS END OF STRING ? RSS NO JMP WHICH YES, GO PRINT VALUE CCA LDB DIPBF ADB P3 LDA B,I GET INPUT TYPE CPA P1 IS IT NUMERIC? RSS JMP ILBND ILLEGAL BOUNDS ADB N3 POINT BACK TO VALUE LDA B,I GET VALUE SSA POSITIVE? JMP ILBND NO , ERROR STA TLOCC SAVE IT TEMPORY LDB FLAG SZB,RSS JMP BPLO STA B LDA P16 CMB,INB ADB LOCC SSB,RSS NEW LOCC BIGGER THAN OLD LOCC? JSB LDRER NO , GIVE WARNING MESSAGE LDA TLOCC STA LOCC JSB SPACE JMP NXTOP * BPLO LDB M2000 GET -2000B ADB A ADD NEW BP SSB,RSS WITHIN BP RANGE? JMP ILBND NO , BOUNCE IT LDA LNKDR GET LINK DIRECTION CPA N1 SYSTEM LINK? JMP BPSY YES LDA CSDBP NO , GET CURRENT SYS DUMMY BP CMA,INA NEGATE ADA TLOCC ADD NEW BP ADA LDBP ADD LOW DUMMY BP BOUND SSA,RSS NEW BP OVERFLOWED INTO SYS DUM BP? JMP L.A20 YES , BP OVERFLOWED LDA TLOCC NO , SET NEW CURRENT USER DUMMY BP ADA LDBP STA CUDBP JMP BPRP BPSY LDA TLOCC GET NEW BP ADA LDBP ADD LOW DUMMY BP BOUND CMA,INA NEGATE ADA CUDBP ADD CURRENT USER DUMMY BP SSA,RSS OVERFLOWED INTO USER BP? JMP L.A20 YES , BASE PAGE OVERFLOWED LDA TLOCC NO ADA LDBP STA CSDBP SET NEW CURRENT SYS DUMMY BP BPRP LDA TLOCC STA BPLOC OK , REPLACE IT AT USER'S RISK STA CBP.L JSB SPACE JMP NXTOP * ILBND LDA P21 ILLEGAL BOUNDS JSB LDRER JMP NXTOP * SKP * * UNLABEL COMMON BLOCK * LEGAL CALL AFTER SYSTEM COMMON * UNCOM LDA P4 IS IT CALLED FROM AFTER SYSTEM COMMON? CPA SEGNM RSS YES JMP WHAT? NO , IT IS A ERROR ISZ COMFG YES , IS IT THE FIRST TIME? JMP WHAT? NO , CALLED MORE THAN ONCE JSB NAMRR GET SIZE OF UNLABEL COMMON SSA JMP BCMER END OF RECORD NO INPUT SIZE LDB DIPBF ADB P3 LDA B,I GET INPUT TYPE CPA P1 IS IT NUMERIC? RSS YES JMP BCMER NO ERROR LDA IPBUF LOAD THE SIZE SSA POSITIVE? JMP BCMER NO , ERROR CLO CLEAR OVERFLOW LDB LOCC ADA LOCC BUMP LOCC FOR THE UNLABEL COMMON SIZE SOS SKIP IF OVERFLOW SET? JMP OKCOM NO OVERFLOW LDA P3 YES , OVERFLOW JSB LDRER GIVE ERROR MESSAGE LDA B7777 SET MAX SIZE OKCOM STA LOCC STB CBCOM START ADDR FOR BLANK COMMON * UNC10 LDA LOCC AND M2000 SAVE PAGE NUMBER CPA LOCC RSS ADA B2000 SAVE ADDRESS OF $FWSY STA LOCC STA CFWSY SAVE FIRST WORD OF SYSTEM CLB DIV B2000 ADA N1 STA C$SCP ALF,ALF ALS,ALS MULTIPY BY 1024 STA C$SC# * JMP DZPRV * * BCMER LDA P24 JSB LDRER JMP UNC10 * D$FWS DEF $FWSY $FWSY ASC 3,$FWSY * D$SC# DEF $SC# $SC# ASC 3,$SC# * D$SCP DEF $SCPG $SCPG ASC 3,$SCPG * D$LCB DEF $LCBP $LCBP ASC 3,$LCBP * $STRT ASC 3,$STRT SKP * * FIXUP .ZPRV & .ZRNT * * * FIND ADDRESS OF $LIBX * AND SAVE RPL VALUE OF JSB $LIBX * DZPRV LDA RECOF STA TEMP1 SAVE OUTPUT RECORD OFFSET CLA STA RECOF TEMPORARY SET TO 0 FOR DUMMY WRITE LDB B101 IN ORDER TO POST OUTPUT DCB TO DISC JSB STCR1 * LDA TEMP1 STA RECOF RESTORE OUTPUT RECORD OFFSET * LDA $LIBX JSB LADD FIND SYMBOL STA B SAVE RESULT IN B SZB IS DRIVER ENTRY POINT THERE? JSB MSENT NO , ERROR DISPLAY IT LDA VALUA LOAD WORD 5 STA JBLBX SAVE RPL CODE FOR JSB $LIBX * * * FIND .ZPRV IN SYMBOL TABLE * LDA .ZPRV JSB LADD CPA P2 JMP FNDFX .ZPRV UNDEFINDED JMP DZRNT .ZPRV NOT THERE , GO ON FNDFX LDA SADDR STA SYMCH SYMBOL TO MATCH * * SET UP TEMP1 TO FIND THE FIXUP * LDB FXN.L LAST ENTRY OF FIXUP STB TEMP1 NXFIX LDB TEMP1 JSB FDFIX FIND FIXUP JMP DLIBR FINISH DO ZRENT INA FOUND MATCHING ENTRY (A)=ADDRESS OF FIXUP STA ADFEX AND SAVE IT * * JSB RDOUT READ OUTPUT FILE FOR DEF EXIT DEF *+3 DEF ADFEX ADDRESS TO READ ( DEF EXIT ) DEF AEXIT * * LDA N1 ADDRESS OF DEF EXIT LDB ADFEX JSB STCR1 * LDA JBLBX LDB AEXIT JSB STCR1 OUTPUT JSB $LIBX,I * * ISZ AEXIT * JSB RDOUT READ OUTPUT FILE FOR EXIT+1 DEF *+3 DEF AEXIT DEF TEMP2 LDA TEMP2 IOR M1000 MERGE BIT 15 LDB AEXIT PUT IN DEF SUB,I JSB STCR1 * JMP NXFIX * * $LIBR DEF *+1 ASC 3,$LIBR * $LIBX DEF *+1 ASC 3,$LIBX * .ZPRV DEF *+1 .ZPV1 ASC 3,.ZPRV * * .ZRNT DEF *+1 .ZRN1 ASC 3,.ZRNT * D$CKS DEF $CKSM $CKSM ASC 3,$CKSM * SKP DLIBR LDA $LIBR JSB LADD STA B SAVE RESULT IN B SZB IS ENTRY POINT THERE? JSB MSENT NO , ERROR ISZ SADDR ISZ SADDR POINT TO WD 4 OF $LIBR ISZ SADDR LDA SADDR,I LOAD WD 4 ALF,ALF ROTATE IT BECAUSE L.MAT ROTATES IT BACK STA TYPE SAVE IT IN TYPE LDA VALUA LOAD WD 5 STA VALUR SAVE IT FOR LATER * JSB L.MAT DEF *+5 DEF .ZPV1 DEF TYPE DEF VALUR DEF RESLT * * FIND .ZRNT * DZRNT LDA .ZRNT JSB LADD CPA P2 JMP FNFIX .ZRNT UNDEFINED GO FIND ANY FIXUP JMP XCHN .ZRNT NOT THERE , JUST GO ON * FNFIX LDA SADDR ADDRESS OF .ZRNT IN SYMBOL TABLE STA SYMCH SYMBOL ADDRESS TO MATCH * * SET UP TEMP1 TO FIND THE FIXUP * LDB FXN.L LAST ENTRY OF FIXUP STB TEMP1 NXTFX LDB TEMP1 JSB FDFIX FIND FIXUP JMP XCHN FINISH CHANGE .ZPRV & .ZRENT INA STA ADFEX ADDRESS OF DEF EXIT * JSB RDOUT DEF *+3 DEF ADFEX ADDRESS OF DEF EXIT DEF AEXIT CONTENT OF DEF EXIT (ADDRESS OF EXIT) * LDA JBLBX LDB AEXIT JSB STCR1 OUTPUT JSB $LIBX,I * ISZ AEXIT JSB RDOUT READ OUTPUT FILE FOR EXIT + 1 DEF *+3 DEF AEXIT ADDRESS OF EXIT+1 DEF TEMP2 CONTENTS OF EXIT+1(DEF TDB) * LDA TEMP2 DEF TDB LDB ADFEX ADDRESS OF DEF EXIT JSB STCR1 OUTPUT DEF TDB * JSB L.MAT DEF *+5 DEF .ZRN1 POINT .ZRNT TO $LIBR DEF TYPE DEF VALUR DEF RESLT * JMP NXTFX DO NEXT FIXUP * * CHANGE .ZPRV AND .ZRNT TO RSS (2001) * XCHN LDA .ZPRV JSB SWRSS * LDA .ZRNT JSB SWRSS * * SKP * * OUTPUT THE SNAP * CLA CLEAR REC. OFSET FOR SYSTEM FILE STA RECOF * JSB OPSNP REOPEN THE SNAP FILE * JSB BUFCL NOP LDA B2000 CONTENTS OF $LCOM STA L.BUF+3 LDA CBCOM CONTENTS OF $BCOM STA L.BUF+4 LDA CFWSY CONTENTS OF $FWSY STA L.BUF+5 * JSB WRITF OUTPUT REC 1 OF SNAP FILE DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF L.BUF+0 DEF P20 JSB CSPER CHECK SNAP FILE WRITE ERROR * * OUTPUT SYSTEM ENTRY POINTS * CLA,INA 1ST TIME FLAG STA TEMP2 * SNP2 CLA STA PNTR STA CNT10 * LDA P3 STA L.BUF+0 GSYEN JSB L.LDF GET A SYSTEM ENTRY DEF *+4 DEF ADDR DEF PNTR DEF P1 GIVE ME ALL OF THEM LDA ADDR SZA,RSS JMP ESYEN END OF SYMBOL TABLE STA ADDRX STA B LDA B,I AND M7777 MASK OUT PRINT IT BIT STA B,I ADB P3 POINT TO WORD 4 OF SYMBOL LDA B,I LOAD WORD 4 AND CHECK AND B40 TO SEE IF SHOULD BE EXCLUDED FROM SNAP SZA JMP GSYEN YES , EXCLUDED FROM SNAP CLE LDA B,I GET WORD 4 AGAIN? AND HIMSK ALF,ALF STA TEMP3 SAVE WORD 4 TEMPORARY CPA P4 IS IT AN RP SYMBOL? JMP GRP YES CPA P3 IS IT AN ABSOLUTE RSS YES JMP GCK NO GRP CME SET TO INDICATE RPL OR ABS LDA B,I GET WD 4 AGAIN AND P16 MASK SYS. COM. BIT SZA SYS. COM. SYMBOL? JMP CKSCM YES LDA TEMP3 STA B,I REPLACE WD 4 WITH 3=ABS , 4=RP JMP GSUM GCK LDA B,I LOAD WD 4 AGAIN AND P8 SZA,RSS IS IT MEM. RES. SYMBOL? JMP CKSCM NO , CHECK SYS COM SYMBOL CLA YES , MEM RES. SYMBOL STA B,I PUT 0 IN WORD 4 JMP GSUM * CKSCM LDA TEMP2 CPA P1 PASS 1? JMP GSYEN YES , NEXT SYMBOL LDA B,I GET WORD 4 AGAIN AND P16 SZA SYSTEM COMMON ENTIES? LDA P2 YES , SET SYMBOL AS SYSTEM COMMON SEZ WAS IT AN RPL OR ABS? LDA TEMP3 YES STA B,I RESTORE WORD 4 SZA,RSS SYS. COM. ENTRY? JMP GSUM NO INB YES , DO SYS. COM. CK SUM ISZ #SCEP BUMP # OF SYS COM ENTRY PT. LDA B,I GET S. C. VALUE ADA CKSC ADD SC CHECK SUM RAL JSB SUMSY ADD IN THE SYMBOLS STA CKSC ADB N1 * GSUM STB TEMP1 SAVE ADDRESS OF SYM TBL WD 4 INB LDA B,I ADA SIDCK ARITHMETIC SUM FOR SYSTEM CHECK WD RAL ROTATE IT JSB SUMSY ADD IN THE THE SYMBOLS STA SIDCK AND SAVE IT * LDA N5 JSB MOVE MOVE SYSTEM ENTRY TO OUTPUT BUFFER ADDRX NOP DEF L.BUF+1 LDA L.BUF+3 AND HIMSK IOR B40 ADD BLANK TO 3RD WORD STA L.BUF+3 * LDA B40 STA TEMP1,I EXCLUDE SYMBOL FROM NEXT PASS * JSB WRITF OUTPUT ENTRY TO SNAP FILE DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF L.BUF+0 DEF P6 JSB CSPER CHECK FOR SNAP FILE WRITE ERROR * ISZ CNT10 JMP GSYEN GET ANOTHER ENTRY POINT * ESYEN LDA CNT10 LDB TEMP2 CPB P1 1ST PASS? RSS YES JMP PASS2 STA #MREP # OF ENTRY PT 1ST PASS LDA SIDCK CHECK SUM FOR RPL'S STA CKRPL SAVE IT ISZ TEMP2 SET PASS 2 FLAG JMP SNP2 DO SYS MODULE & SYS COM ENT PT. * PASS2 STA #ENPT SAVE # OF ENTRY 2ND PASS * LDA #SCEP GET # OF SYS COM ENT. PT. CMA,INA NEGATE IT STA #SCEP * LDA CKSC SUBTRACT OUT SYSTEM COMMON CKSUM CMA,INA FROM SYS. ID CKSUM ADA SIDCK AND STORE BACK TO CKSUM STA SIDCK * * FIND & PATCH $CKSM * LDA D$CKS LDB SIDCK JSB FSYMB JSB MSENT MISSING SYSTEM ENTRY POINT * * GET LIBRARY FILE NAME * JSB SPACE LDA P12 LDB DMS65 PRINT " LIB FILES ? " JSB DRKEY * JSB LOCF DEF *+4 DEF SDCB3+0 DEF IERR3+0 DEF RECLB+0 GET LIBRARY REC # * RDLIB JSB READ GET LIBRARY FILE NAME JMP EXIT LDA OP? CPA EN JMP OTBP CPA LI JMP LIBRY GO GET A LIBRARY NAME LIERR CLA JSB LDRER WHAT IS IT?? JMP OTBP * LIBRY JSB NAMRR PARSE THE INPUT SSA JMP LIERR LDA IPBUF SZA CPA BLNK2 JMP LIERR * LDA N6 JSB MOVE DEF IPBUF+0 DEF LIBFL * JSB WRITF DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF LIBFL+0 ADDRESS OF LIBRARY FILE DEF P6 JSB CSPER CHECK FOR SNAP FILE WRITE ERROR * ISZ NLIB BUMP UP THE NUMBER OF LIBRARY JMP RDLIB * * OUTPUT SYSTEM BP TO SNAP * OTBP JSB LOCF DEF *+4 DEF SDCB3+0 DEF IERR3+0 DEF RECBP+0 GET BP REC # * LDA CBP.L INA STA CSYBP CMA,INA ADA B2000 CLB DIV P128 CMA,INA STA CNT20 NEGATIVE COUNT OF THE # OF 128 WD RECORDS STB ZTEM5 # OF WD REMAINING * LDA CSYBP ADA LDBP MBP STA PNTR ADDRESS OF DUMMY BP STA ADDBP * LDA CNT20 SZA,RSS JMP FINBP BP # LESS THAN 128 * JSB WRITF DEF *+5 DEF SDCB3+0 DEF IERR3+0 ADDBP NOP DEF P128 JSB CSPER CHECK FOR SNAP FILE WRITE ERROE * ISZ CNT20 RSS JMP LSTBP LDA PNTR ADA P128 JMP MBP MORE BP LSTBP LDA PNTR ADA P128 LAST REMAINING BP STA PNTR * FINBP LDA ZTEM5 FINISH BP OUTPUT SZA,RSS JMP ENDBP NO BP LINK * LDA PNTR STA ADBP JSB WRITF DEF *+5 DEF SDCB3+0 DEF IERR3+0 ADBP NOP DEF ZTEM5 JSB CSPER CHECK FOR SNAP FILE WRITE ERROR * ENDBP LDA CSYBP # OF LINKS ON BP CMA,INA NEGATE ADA B2000 STA LCLBP # OF LABELED COMMON LINK ON BP * LDA D$LCB LDB CSYBP JSB FSYMB FIND & PATCH $LCBP JSB MSENT * LDA P2 STA IPTN2 REOPEN THE SNAP FILE WITH UPDATA MODE JSB OPSNP OPEN THE SNAP FILE * JSB READF READ IN HEADER RECORD DEF *+6 DEF SDCB3+0 DEF IERR3+0 DEF STRNG+0 DEF P20 DEF LEN * LDB DSTRG LDA #ENPT ADA #MREP ADD # SYS. ENT. STA B,I INB ADA #SCEP SUBRTACT OUT # OF S.C. ENT PT STA B,I LEAVING # OF SYS. ENT PT. INB LDA NLIB # OF LIBRARY STA B,I ADB P4 LDA CKRPL CK SUM FOR RPL STA B,I INB LDA LCLBP # LABELED COMMON LINKS ON BP STA B,I INB LDA SIDCK SYSTEM CHECK SUM SZA,RSS IF SYS CK SUM IS ZERO SET IT TO 1 INA STA B,I INB LDA CKSC CK SUM FOR SYSTEM COMMON ADA B2000 SPECIAL CASE ADD $LCOM RAL ADA CBCOM ADD $BCOM RAL ADA CFWSY ADD $FWSY RAL STA CKSC SAVE IT FOR SYS. CKSUM PATCH STA B,I ADB P4 LDA RECLB LIB ENTRIES REC # STA B,I ADB P3 LDA RECBP BASE PAGE ENTRIES REC # STA B,I ADB P3 STB CNT20 * * LDA N19 STA CNT10 CHECKSUM FOR HEADER RECORD LDB DSTRG LDA B,I GET FIRST VALUE CKSUM INB ADA B,I ADD NEXT VALUE ISZ CNT10 FINISH ? JMP CKSUM NO ADD NEXT WORD STA CNT20,I REC 1 CKSUM IN WORD 20 * JSB RWNDF REWIND TO RECORD 1 DEF *+3 DEF SDCB3+0 DEF IERR3+0 * JSB WRITF WRITE OUT HEADER RECORD DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF STRNG+0 DEF P20 * JSB CSPER CHECK FOR SNAP FILE WRITE ERROR * JSB CLOS3 * * LDA D$SCC LDB CKSC JSB FSYMB FIND & PATCH $SCCK JSB MSENT * LDA D$LCO LDB B2000 JSB FSYMB FIND & PATCH LABEL COMMON JSB MSENT * LDA D$BCO LDB CBCOM JSB FSYMB FIND & PATCH UNLABEL COMMON JSB MSENT * LDA D$FWS LDB CFWSY JSB FSYMB FIND & PATCH $FWSY JSB MSENT * LDA D$SC# LDB C$SC# JSB FSYMB FIND & PATCH $SC# JSB MSENT * LDA D$SCP LDB C$SCP JSB FSYMB FIND & PATCH $SCPG JSB MSENT * LDB CBCOM CMB,INB ADB CFWSY SIZE OF BLANK COMMON LDA D$BC# JSB FSYMB FIND & PATCH $BC# JSB MSENT * CLB LDA SLOCC CPA B7777 MAX SIZE? INA YES , INA TO GET CORRECT PAGE STA SLOCC AND SAVE DIV B2000 STA ZTEM5 SYS SZ IN PAGES STA B ADB N1 LDA D$SC0 PHYSICAL PAGE # OF SYS COM - 1 JSB FSYMB FIND & PATCH $SC0 JSB MSENT * JSB CNUMD DEF *+3 DEF ZTEM5 DEF ME76 * JSB SPACE LDA P24 LDB MES76 JSB DRKEY PRINT SYSTEM SIZE IN PAGES * LDA SLOCC ADA LOCC CLB DIV B2000 STA SLOCC SAVE $USER PAGE # STA B PHYSICAL PAGE # OF 1ST USER PARTITION ADB N1 LDA D$USE JSB FSYMB FIND & PATCH $USER JSB MSENT * LDA ZTEM5 SYS SZ CMA,INA ADA SLOCC TOTAL SZ ADA N1 SUBTRACT BASE PAGE STA ZTEM5 SYS COM SZ * JSB CNUMD DEF *+3 DEF ZTEM5 DEF ME77 * JSB SPACE LDA P28 LDB MES77 JSB DRKEY * LDA SLOCC ADA N1 SUBTRACT BASE PAGE STA ZTEM5 JSB CNUMD DEF *+3 DEF ZTEM5 DEF ME78 * JSB SPACE LDA P26 LDB MES78 JSB DRKEY PRINT TOTAL SZ * LDA SLOCC TOTAL SZ IN PAGES CLB DIV P32 GET # OF 32K CHUNKS ADB N1 SUBTRACT BASE PAGE STB ZTEM5 CLB PUT IN LOC 0 JSB STCR1 * LDA ZTEM5 MPY P1024 LDB P1 PUT IN LOC 1 JSB STCR1 * LDA P128 STA SEGNM NORMAL TERMINATION JMP EXIT * * MES76 DEF *+1 ASC 9,* SYS SZ IN PAGES ME76 BSS 3 * MES77 DEF *+1 ASC 11,* SYS COM SZ IN PAGES ME77 BSS 3 * MES78 DEF *+1 ASC 10,* TOTAL SZ IN PAGES ME78 BSS 3 * SKP * DMS65 DEF MES65 MES65 ASC 6,* LIB FILES * D$SCC DEF $SCCK $SCCK ASC 3,$SCCK * D$BC# DEF $BC# $BC# ASC 3,$BC# * D$SC0 DEF $SC0 $SC0 ASC 3,$SC0 * D$USE DEF $USER $USER ASC 3,$USER * SKP * * * * CHECK FOR ANY UNDEFS * * JSB UNDF? * NO UNDEFS * YES THERE ARE UNDEFS * UNDF? NOP CLA STA PNTR STA PRTFG CLEAR 1ST TIME PRINT FLAG JSB L.LUN GET UNDEFINED EXTERNAL DEF *+4 DEF ADDR DEF PNTR DEF FLAG SZB UNDEF ? ISZ UNDF? YES , UNDEFS JMP UNDF?,I NO * * * CHECK FOR ANY SNAP FILE ERROR * * A = ERROR CODE FROM WRITF * JSB CSPER * CSPER NOP SSA,RSS ANY ERROR? JMP CSPER,I NO , RETURN LDB F3 ADDRESS OF SNAP FILE NAME JSB FLERR JMP CSPER,I RETURN * * SKP * * * LDRER OUTPUTS ERRORS TO THE LIST DEVICE * * CALLING SEQUENCE: * A-REG = +VE ERROR CODE * JSB LDRER * RETURN * * LDRER NOP MPY P3 CALCULATE OFFSET INTO LIST OF ERROR CODE ADA EMESS ADD STARTING ADDRESS OF LIST STA B AND SAVE IN B-REG FOR OUTPUT LDA P6 LENGTH OF MESSAGE IN CHARACTERS JSB DRKEY PRINT IT ISZ ERRCT BUMP UP ERROR COUNT JSB ASTRX PRINT ****** JSB SPACE JMP LDRER,I AND RETURN * * EMESS DEF *+1 ASC 3,?? WHAT IS IT ?? ASC 3,CK SUM CHECK SUM ERROR ASC 3,IL REC ILLEGAL RECORD ASC 3,OV MEM MEMORY OVERFLOW ASC 3,OV FIX FIXUP TABLE OVERFLOW ASC 3,OV SYM SYMBOL TABLE OVERFLOW ASC 3,CM BLK COMMON BLOCK ERROR ASC 3,DU ENT DUPLICATE ENTRY POINTS ASC 3,RE SEQ RECORD OUT OF SEQUENCE ASC 3,IL REC ILLEGAL RELOCATABLE ASC 3,RF EMA ILLEGAL REFERENCE TO EMA ASC 3,RF EMA ILLEGAL REFERENCE TO EMA ASC 3,IL SEG SEGMENTED PROG. NOT ALLOWED ASC 3,SNP ER SNAP FILE ERROR ASC 3, FREE FOR NEW ERROR MSG 14 ASC 3,MS ENT MISSING SYSTEM ENTRY POINT ASC 3,LOC WR WARNING LOCC SET BACKWARD ASC 3,NT TP6 WARNING NOT TYPE 6 MODULE DURING SYS COM ASC 3, FREE FOR NEW ERROR MSG 18 ASC 3, FREE FOR NEW ERROR MSG 19 ASC 3,UN EXT UNDEFINED EXTERNAL ASC 3,IL BND ILLEGAL BOUND IN LOCC OR BPLOCC ASC 3, FREE FOR NEW ERROR MSG 22 ASC 3,OV BSE BASE PAGE LINKAGE OVERFLOW ASC 3,BNK CM BLANK COMMON ERROR ASC 3,MOD NM ILLEGAL MODULE NAME IN SEARCH COMND ASC 3, FREE FOR NEW ERROR MSG 26 ASC 3,NO MOD SPECIFIED MODULE NAM NOT FOUND * SKP * * OUTPUT CONSECUTIVE CORE LOCATIONS * * LDA START STARTING ADDRESS * LDB END ENDING ADDRESS * JSB SETCR DATA WILL BE AT STRNG * SETCR NOP STA ZTEM5 STARTING ADDRESS CMA,INA NEGATE STARTING ADDRESS ADA B ADD ENDING ADDRESS INA ADD 1 FOR TOTAL # TO OUTPUT CMA,INA NEGATE FOR COUNT STA CNT10 LDA DLBUF ADDRESS OF DATA STA CNT20 SET10 LDA CNT20,I GET DATA LDB ZTEM5 GET ADDRESS JSB STCR1 OUTPUT ISZ CNT20 NEXT DATA WORD ISZ ZTEM5 NEXT ADDRESS ISZ CNT10 ANY MORE OUTPUT ? JMP SET10 YES JMP SETCR,I NO * SKP SKP * * DISPLAY UNDEF * DSUND NOP CLA STA PNTR STA PRTFG CLEAR 1ST TIME PRINT FLAG DSP10 JSB L.LUN GET A UNDEFINED EXTERNAL DEF *+4 DADDR DEF ADDR ADDRESS OF 3 WORD UNDEF DEF PNTR GET THE ADDRESS DEF FLAG LDA ADDR SZA,RSS IS THERE A UNDEFINED JMP DSUND,I NO , FINISH LDA ADDR,I GET SYMBOL STA TEMP4 SAVE IT AND M7777 MASK PRINT IT BIT STA ADDR,I FOR COMPARISON LDA ADDR RAL LDB .ZPRV RBL JSB .CBT DEF P5 NOP JMP DSP70 NOP NOP LDA ADDR RAL LDB .ZRNT RBL JSB .CBT DEF P5 NOP JMP DSP70 NOP NOP LDA TEMP4 RESTORE WORD 1 WITH FORMER PRINT IT BIT STA ADDR,I LDA PRTFG WANT TO PRINT HEADER? SZA JMP DSP60 NO JSB SPACE YES LDA P20 STA PRTFG JSB LDRER DSP60 LDA P5 LDB ADDR GET SYMBOL ADDRESS JSB DRKEY GO PRINT IT JMP DSP10 GO GET ANOTHER SYMBOL * DSP70 LDA TEMP4 GET WORD 1 STA ADDR,I AND RESTORE IT JMP DSP10 * PRTFG NOP TEMP4 NOP * * SKP * * * SWITCH .ZPRV AND .ZRNT TO RSS ( 2001B ) * * CALL SEQUENCE * LDA ADDRESS OF SYMBOL * JSB SWRSS * SWRSS NOP JSB LADD LDA SADDR ADDRESS OF SYMBOL IN TABLE ADA P3 LDB P4 BLF,BLF STB A,I PUT SYMBOL AS RP IN WD 4 INA LDB B2001 STB A,I RSS ( 2001B ) IN WD 5 JMP SWRSS,I * * * SUM IN THE SYMBOLS FOR THE CHECK SUM * * (A) = CHECK SUM VALUE * (B) = POINTS TO WORD 5 OF SYMBOL * JSB SUMSY * SUMSY NOP ADB N2 POINT BACK TO WORD 3 OF SYMBOL TBL ADA B,I ADD TO CHECK SUM RAL ROTATE ADB N1 POINT BACK TO WORD 2 OF SYMBOL TBL ADA B,I ADD TO CHECK SUM RAL ROTATE ADB N1 POINT BACK TO WORD 1 OF SYMBOL TBL ADA B,I ADD TO CHECK SUM RAL ROTATE JMP SUMSY,I RETURN * * SKP * THE BUFCL SUBROUTINE STUFFS A 60 WORD BUFFER WITH CALL+1 * * * CALLING SEQUENCE: * A = IGNORED * JSB BUFCL * CALL+1 = DATA TO STUFFED * * RETURN: CONTENTS OF A AND B ARE DESTROYED * BUFCL NOP LDB DLBUF LDA N60 STA WDCNT SET BUFFER LENGTH = 60 LDA BUFCL,I GET STUFF DATA STA B,I CLEAR BUFFER WORD INB ISZ WDCNT ALL WORDS CLEAR? JMP *-3 NO - CONTINUE CLEARING ISZ BUFCL JMP BUFCL,I RETURN * WDCNT NOP TEMPORARY WORD COUNTER * * * * * MISSING SYSTEM SYMBOL -- ERROR MESSAGE * MSENT NOP LDA PRERR SZA PRINT ERROR? JMP MSENT,I NO , PRINTED PREVIOUSLY LDA P15 YES JSB LDRER PRINT " MS ENT " CCA STA PRERR SET ERROR PRINTED FLAG JMP MSENT,I * * SKP * TO ALLOCATE A BASE PAGE LINK * * * JSB TABLE ENTRY #1,I L.ABP * DEF RETRN * DEF DUMY RETURNS DUMMY BP ADDRESS NEG = ERROR * DEF REAL RETURNS REAL BP ADDRESS * DBP NOP RBP NOP L.ABP NOP JSB .ENTR DEF DBP LDA LNKDR GET LINK DIRECTION CPA N1 IS IT A SYSTEM LINK ? JMP L.A10 YES LDA CBP.L GET REAL BP ADA LDBP ADD LOWER BOUND FOR DUMMY BP CPA CSDBP HAS IT REACH SYS BP AREA? JMP L.A20 YES , ERROR STA DBP,I INA STA CUDBP LDA CBP.L GET CURRENT USER REAL BP STA RBP,I INA STA CBP.L UPDATE CURRENT REAL BP JMP L.ABP,I RETURN * * SYSTEM LINK ALLOCATION * L.A10 LDA CBP.L GET REAL BP ADA LDBP ADD LOWER BOUND FOR DUMMY BP CPA CUDBP HAS IT REACH USER BP AREA? JMP L.A20 YES , ERROR STA DBP,I NO , STORE DUMMY BP ADA N1 STA CSDBP UPDATE CURRENT SYS DUM BP LDA CBP.L STA RBP,I STORE REAL BP ADA N1 STA CBP.L UPDATE CURRENT SYS REAL BP JMP L.ABP,I * L.A20 CCA ERROR STA DBP,I LDA P23 JSB LDRER BASE PAGE LINKAGE OVERFLOW JMP EXIT * * * SKP * * TO SCAN DUMMY BASE PAGE ( OR EXISTING BASE PAGE ) * FOR AN EXISTING BASE LINK. * * JSB TABLE ENTRY #2,I L.SCN * DEF RETRN * DEF VALUE VALUE TO SCAN FOR (REAL BP) * DEF BPADR +/- ADDRESS TO USE / NOT FOUND * VALAD NOP ADDRESS OF VALUE BPADR NOP L.SCN NOP JSB .ENTR DEF VALAD LDA VALAD,I GET VALUE TO SCAN FOR LDB TDBP SCAN SYS DUMMY BP L.S20 CPB CSDBP IS IT EQUAL TO CURRENT SYS DUM BP JMP L.S30 YES , TRY USER BASE PAGE CPA B,I IS IT EQUAL TO SEARCH VALUE JMP FNDSY YES , SYSTEM BP LINK ADB N1 NO, ADD LINK DIRECTION FOR NEXT BP VALUE JMP L.S20 NO CONTINUE SEARCH FNDSY CMB,INB CALCULATE REAL BP ADDRESS ADB TDBP ADD TOP OF DUMMY BP ADDRESS CMB,INB DIFFERENCE BETWEEN CURRENT AND TOP DUM BP ADB B1777 SUBTRACT FROM TOP OF REAL BP STB BPADR,I THIS IS THE REAL LINK JMP L.SCN,I RETURN * L.S30 LDB LDBP LOWER BOUND FOR USER DUMMY BP ADB BPFWA SET USER BP LOCATION L.S60 CPB CUDBP IS IT EQUAL CURRENT USER DUM BP? JMP NOTF YES , RETURN NOT FOUND CPA B,I JMP FNDUS YES , FOUND USER BP INB NO , GET NEXT ADDRESS JMP L.S60 IS IT EQUAL TO CURRENT BP? FNDUS LDA LDBP FOUND USER BP CMA,INA ADB A STB BPADR,I JMP L.SCN,I * NOTF CCB NOT FOUND STB BPADR,I JMP L.SCN,I * SKP * * ROUTINE TO FIND SYSTEM SYMBOL AND PATCH UP ITS VALUE * * CALLING SEQUENCE * * LDA ADDRESS OF SYMBOL * LDB VALUE TO PATCH IN * JSB FSYMB * ERROR RETURN * NORMAL RETURN * FSYMB NOP STB PVAL SAVE PATCH VALUE JSB LADD FIND SYMBOL SZA ANY ERROR JMP ERTN YES , ERROR LDA PVAL PATCH VALUE LDB VALUA JSB STCR1 ISZ FSYMB NORMAL RETURN ERTN JMP FSYMB,I * PVAL NOP SKP * * FIND SYMBOL IN SYMBOL TABLE * * CALLING SEQUENCE * LDA ADDRESS OF SYMBOL IN ASCII * JSB LADD * NORMAL RETURN * (A)=RESULT * * LADD NOP STA SYBAD JSB L.ADD DEF *+5 SYBAD NOP DEF VALUA DEF SADDR DEF RESLT LDA RESLT JMP LADD,I * VALUA NOP SADDR NOP RESLT NOP * * * * SUBROUTINE TO FIND FIXUP ENTRIES * * (A)=ADDRESS OF .ZPRV/.ZRNT * (B)=CURRENT POINTER TO FIXUP ENTRY * * CALLING SEQUENCE * JSB FDFIX * END OF SEARCH * FOUND MATCHING ENTRIES * FDFIX NOP FD10 CPB FXS.L END OF FIXUP? JMP FDFIX,I INB LDA B,I GET FIXUP ENTRY WORD 2 CPA SYMCH IS IT A MATCHING ENTRY JMP FOND YES ADB P3 JMP FD10 GET NEXT ONE * FOND ADB P3 STB TEMP1 ADB N4 POINT TO WD 1 OF FIXUP LDA B,I ADDRESS OF DEF EXIT ISZ FDFIX JMP FDFIX,I * * * * READ A WORD FROM THE OUTPUT FILE * * JSB RDOUT * DEF *+3 * DEF DADD ADDRESS TO READ * DEF DVAL CONTENTS OF ADDRESS * DADD NOP DVAL NOP RDOUT NOP JSB .ENTR DEF DADD * CLB LDA DADD,I GET ADDRESS ADA P128 REC # =(ADDRESS+128)/128 DIV P128 QUOTIENT IN A = RECORD # ADA RECOF ADD RECORD OFFSET STA RECN THIS IS THE RECORD # INB REMAINDER IN B+1 = WORD POSITION STB WORDN THIS THE WORD POSITION IN THE RECORD * JSB READF DEF *+7 DEF ODCB2 DEF IERR5 DEF RDCB5 DEF P128 DEF RTEMP DEF RECN * LDA WORDN ADA N1 ADA DDCB5 LDB A,I STB DVAL,I JMP RDOUT,I * * RECN NOP RTEMP NOP WORDN NOP * SKP * * ROUTINE TO READ IN A RELOCATABLE RECORD . * * JSB L.RED * DEF *+2 * DEF FLAG 0/-1 OK/EOF * * DFLAG NOP L.RED NOP JSB .ENTR DEF DFLAG RREAD JSB READF READ THE NEXT REL RECORD DEF *+6 DEF RDCB5 DEF IERR5 DEF L.BUF+0 RELOCATABLE RECORD BUFFER ! DEF P60 DEF LEN ACTUAL RECORD LENGTH READ * SSA,RSS ANY ERROR? JMP FNXT2 NO STA DFLAG,I JMP L.RED,I * FNXT2 STA DFLAG,I LDA LEN GET THE RECORD LENGTH READ SZA,RSS ZERO RECORD LENGTH ? JMP RREAD YES, SO TRY AGAIN SSA,RSS NO, WAS IT A NEG LENGTH ( -1 ) JMP L.RED,I NO , RETURN STA DFLAG,I YES , SET EOF JMP L.RED,I * * SKP SKP * TABLE DEF L.ABP+0 DEF L.SCN+0 DEF L.OUT+0 * * SKP * P1 DEC 1 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P8 DEC 8 P9 DEC 9 P10 DEC 10 P12 DEC 12 P15 DEC 15 P16 DEC 16 P17 DEC 17 P20 DEC 20 P21 DEC 21 P23 DEC 23 P24 DEC 24 P25 DEC 25 P26 DEC 26 P27 DEC 27 P28 DEC 28 P32 DEC 32 P60 DEC 60 P120 DEC 120 P128 DEC 128 P1024 DEC 1024 * N1 DEC -1 N2 DEC -2 N3 DEC -3 N4 DEC -4 N5 DEC -5 N6 DEC -6 N19 DEC -19 N60 DEC -60 * B17 EQU P15 B40 EQU P32 B101 OCT 101 B1677 OCT 1677 B1777 OCT 1777 B2000 EQU P1024 B2001 OCT 2001 B7777 OCT 77777 * M2000 OCT -2000 M1000 OCT 100000 * BL ASC 1,BL BP ASC 1,BP CO ASC 1,CO DI ASC 1,DI EN ASC 1,EN LE ASC 1,LE LI ASC 1,LI LO ASC 1,LO MS ASC 1,MS OF ASC 1,OF ON ASC 1,ON RE ASC 1,RE SE ASC 1,SE * HIMSK OCT 177400 M7777 EQU B7777 * JMP3I JMP 3,I * SKP * #MREP NOP # OF RP,ABS & MEM RES ENT. PT. #SCEP NOP # OF SYS. COM. ENTRY PT. ADDR NOP NOP NOP ADFEX NOP AEXIT NOP CKRPL NOP CK SUM FOR RPL CKSC NOP CK SUM FOR SYS. COM. CNT10 NOP CNT20 NOP CSYBP NOP FLAG NOP INDFG NOP 0/9 NOT AN INDEX REC/THIS IS AN INDEX REC IPTN1 DEC 1 OPEN NON EXECLUSIVE FOR REL & SEARCH JBLBX NOP JSB $LIBX,I LCLBP NOP # OF LABELED COMMON LINKS ON BP LEN NOP LEN OF RELOCATABLE RECORD MODFD NOP 0/1 MODULE NOT FOUND/MODULE FOUND MULT NOP 0/-1 YES/NO , NOT A MULTIPLE SCAN PNTR NOP RECBP NOP REC # OF BASE PAGE LINKS RECLB NOP REC # OF LIBRARY SBFLD NOP SUBFIELD REC , GEN=0 SMDNM NOP 0/1 NO NAME/SEARCH FOR MODULE NAME SNPLB NOP SUBLD NOP ANY SUBROUTINE LOADED DURING A SNAP LIB SCAN SYMCH NOP TAGSM NOP TAG BIT 4 = SYS COM , BIT 5 = NOT INCLUDED IN SNAP TCBPL NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TMPBP NOP TLOCC NOP TSDBP NOP TYPE NOP TYPE OF MODULE TP67F NOP VALUR NOP ZTEM5 NOP * * MDNAM NOP NOP NOP DLBUF DEF L.BUF+0 * LIBFL BSS 6 A EQU 0 B EQU 1 * END L20G2