ASMB,R,L,C * * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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-L GENERATOR SEGMENT 2 NAM RTLG2,5 92070-1X079 REV.2026 800508 * * NAME: RTE L GENERATOR SEGMENT 2 * SOURCE: 92070-18079 * PGMR: B.C. * ENT RTLG2 * * EXT EXEC,.ENTR EXT OPEN,CLOSE,READF,WRITF,POSNT,RWNDF EXT L.BUF,LNKDR,CNUMO,CNUMD * EXT DSTRG,IPBUF,STRNG,ISTRC,DIPBF EXT OP?,IPTN2,ABOR,ASTRX EXT EXIT,#ENPT EXT SDCB3,IERR3,F3 EXT ODCB2 EXT CLOS3,NLIB,CROM,AFWBG,ABGBP * EXT SEGNM,COMFG,LNKDR,BGFLG,SIDCK EXT FWFM,LWFM,BPFWA,COMAD,COMLG EXT TDBP,LDBP,CSDBP,CUDBP * EXT READ,FLERR,NAMRR,DRKEY,SPACE,MOVE EXT DLOCC,LOCC,DBLOC,BPLOC,NUMID,ADDID EXT L.OUT,L.INT,L.LUN,OPSNP EXT L.REL,L.CLS,L.ADD,L.LDF,L.MAT,L.SYE EXT LBS.L,CBP.L,IGN.L,NM1.L,NM2.L,NM3.L,NM4.L EXT TH1.L,TH2.L,NOR.L,PRI.L,PGT.L,FXN.L,PGL.L EXT SRIPX,FXS.L,.CBT EXT ERRCT,CONSL,AINT,IP3,WRDCT,STCR1 EXT BPR.L,CROM,PRERR,MAXAD,LENTF,INL.L * 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 RTLG2 LDA SEGNM CPA P5 SECOND TIME INTO SEGMENT? JMP TIME2 YES * * INITIALIZE LOADER LIBRARY * * DO NOT REMOVE ANY OF THE NEXT 22 WORDS * IDNAM JSB L.INT NO DEF *+9 DEF FWFM+0 1ST WORD OF FREE SPACE DEF LWFM+0 LAST WORD OF FREE SPACE DEF B1777 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 TIME2 CCA STA INL.L SET USE INDIRECT LINKS FOR JSB INST. NXTOP JSB READ READ INPUT JMP EXIT END OF FILE LDA OP? GET THE OPCODE LDB OUTID SLB,RSS OUT OF ID SEGMENTS? JMP CMPAR NO , GO ON CPA EN YES , IS THE COMMAND 'END' ? JMP END YES , IT IS AN END JMP RTERR NO , GIVE ' NO ID ' ERROR MESSAGE CMPAR 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 NE IS IT NEXT RT PROG? JMP END YES , DO IT LIKE AN END CPA ST IS IT START UP PROG? JMP SRTPR YES CPA SC IS IT USE SYSTEM COMMON? JMP SCOM YES CPA DB IS IT DBUG ? JMP DBUG 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,RTLG3 * SKP * END LDA LNKDR GET LINK DIRECTION CPA N1 SYSTEM LINK? JMP EN90 YES * LDA NOR.L CPA N1 ANYTHING RELOCATED? JMP EN75 NO LDA PRENT YES , IS THERE A PRIMARY ENTRY POINT? SZA,RSS JMP TAERR NO , TRANSFER ADDRESS ERROR * LDA APNDB SZA,RSS WANT TO APPEND DBUG? JMP CKUDF NO JSB L.SYE YES DEF *+6 ENTER .DBUG INTO SYM TBL AS UNDEFINED DEF DB1X ADDRESS OF .DBUG DEF P2 DEF ZERO DEF P1 DEF RESLT * CKUDF JSB UNDF? CHECK FOR UNDEF JMP OTUBP NO , UNDEFS EVERYTHING IS FINE * JSB OPSNP YES , OPEN THE SNAP FILE * JSB MRLOK SEARCH SNAP FOR MEM RES ENT. PT. LDA TH2.L STA LOCC UPDATE LOCC * LDA SCOMF GET SYS COM FLAG STA SCBIT SAVE IT FOR ID SEG SC BIT SZA USER SPECIFIED SYS COM? JSB SYLOK YES , GET SYS COM ENTRIES LDA TH2.L STA LOCC UPDATE LOCC SCNAG CLA STA SCOMF STA SUBLD CLEAR ANY SUBROUTINE LOADED IN LIB SCAN JSB LBLOK SEARCH THE SNAP LIBRARY LDA TH2.L STA LOCC UPDATE LOCC * JSB SYLOK SEARCH SNAP FOR SYSTEM ENTRIES LDA TH2.L STA LOCC UPDATE LOCC JSB UNDF? ANY UNDEFINED? JMP OKCL3 NO , UNDEFINED EVERTHING OK LDA SUBLD YES , UNDEFINED SZA ANY SUBROUTINE LOADED DURING THE LIB SCAN? JMP SCNAG YES , TRY LIBRARY SCAN AGAIN JSB DSUND NO , DISPLAY ANY UNDEFINED OKCL3 JSB CLOS3 * * OUTPUT USER BP LINKS * OTUBP LDA STRUP SZA,RSS IS THIS THE START UP PROG? JMP OUTBP NO LDA ADDID ID SEGMENT ADDRESS LDB ABOOT ADDRESS OF $BOOT JSB STCR1 * OUTBP LDB CBP.L GET CURRENT USER LINK CPB BPFWA USED ANY LINKS? JMP EN55 NO ADB N1 STB TCBPL YES , OUTPUT THEM ADB LDBP ADD LOWER BOUND OF DUMMY BP EN50 STB TSDBP SAVE DUMMY BP LOCATION LDA B,I GET THE LINK VALUE LDB TCBPL GET THE BP ADDRESS JSB STCR1 OUTPUT THE LINK LDA TCBPL GET THE ADDRESS CPA BPFWA ARE WE FINISH? JMP EN55 YES ADA N1 NO STA TCBPL SAVE THE REAL BP ADDRESS LDB TSDBP GET THE NEXT VALUE ADB N1 JMP EN50 PLAY IT AGAIN SAM * EN55 LDA BGLOD GET FLAG FOR BG LOAD SZA,RSS IS THIS A BG LOAD? JSB SRFI3 NO , CHECK IF THIS A INTERRUPT PROG JSB BUFCL NOP * JSB CKDUP CHECK FOR DUPLICATE PROG NAM JMP DUPGM YES , DUP PROG NAM * CCA STA L.BUF+0 ID 1 LIST LINKAGE LDA STRUP GET STARTUP FLAG SZA,RSS JMP EN70 NOT STARTUP LDA TEMP1 STA L.BUF+1 ID 2 LDA TEMP2 STA L.BUF+2 ID 3 LDA TEMP3 STA L.BUF+3 ID 4 LDA TEMP4 STA L.BUF+4 ID 5 LDA TEMP5 STA L.BUF+5 ID 6 EN70 LDA PRIOR STA L.BUF+6 ID 7 PROIRITY LDA PRENT STA L.BUF+7 ID 8 PRIMARY ENTRY POINT LDA PNAME STA L.BUF+12 ID 13 PROG NAME CHAR 1 & 2 LDA PNAME+1 STA L.BUF+13 ID 14 PROG NAME CHAR 3 & 4 LDA PNAME+2 AND HIMSK STA L.BUF+14 ID 15 PROG NAME CHAR 5 LDA M1000 LDB SCBIT SZB USING SYSTEM COMMOM? IOR B4000 YES , SET SC BIT STA L.BUF+15 ID 16 MR BIT & SC BIT LDA LOMAN STA L.BUF+20 ID 21 LOW MAIN LDA TH2.L STA L.BUF+21 ID 22 HIGH MAIN + 1 STA L.BUF+22 ID 23 SET TO HIGH MAIN + 1 LDA LOBP STA L.BUF+23 ID 24 LOW BP LDA CBP.L STA L.BUF+24 ID 25 HIGH BP + 1 CLA,INA STA L.BUF+28 ID 29 CONSOLE LU = 1 * ISZ #PGM LDB ADDID LDA #PGM CPA P22 # OF PROG EXCEEDS 22 ? JMP EN73 YES , DON'T PUT ID ADDRESS ADA N1 ADA DIDNM BUFFER ADDRESS STB A,I ID NAM ADDRESS EN73 STB A ADB P29 STB ADDID JSB SETCR OUTPUT THE ID SEGMENT ISZ ADDID * LDA NUMID USED UP ONE ID SEGMENT ADA N1 STA NUMID * LDA BGFLG LOADED A BACKGND PROG? SZA,RSS JMP EN75 NO * LDA ADDID YES , FILL CONTENT OF $BGRS ADA N30 WITH ID SEGMENT ADDRESS LDB ABGRS JSB STCR1 * EN75 LDA CBP.L STA BPFWA UPDATE 1ST WORD OF BP EN80 LDA BGFLG LOADING BACKGND? SZA JMP BGPRG YES LDA OP? GET OP CODE CPA EN END FOR RT PROG? JMP ENDRT YES , END RT PROG JMP RT10 NO , NEXT RT PROG * TAERR LDA P19 NO TRANSFER ADDRESS ERROR JSB LDRER JMP EN75 * DUPGM LDA P22 DUPLICATE PROG NAM JSB LDRER PRINT " DU PGM " JMP EN75 * EN90 JSB DSUND DISPLAY ANY UNDEFINED LDA CBP.L REAL CURRENT BASE PAGE INA STA TCBPL TEMPORY CURRENT BASE PAGE LDB CSDBP GET CURRENT SYS. DUM BP CPB TDBP HAVE WE RELOCATED ANYTHING? JMP EXIT NO , BYE BYE 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 * ISZ SEGNM * LDA SEGNM CPA P1 RSS YES , LOAD SEGMENT 3 JMP EN110 NO * JSB EXEC DEF *+3 DEF P8 DEF SEG3 * EN110 CPA P6 CPA P6 LABEL COMMON FLAG? RSS YES JMP EN120 NO LDA D$LCO LDB LOCC JSB FSYMB FIND & PATCH ADDRESS OF LABEL COMMON JSB MSENT MISSING SYSTEM ENTRY POINT JMP EN300 * EN120 CPA P7 BLANK COMMON FLAG? RSS YES JMP EN300 NO LDA D$BCO LDB LOCC STB CBCOM SAVE ADDRESS OF $BCOM JSB FSYMB FIND & PATCH ADDRESS OF BLANK COMMON JSB MSENT MISSING SYSTEM ENTRY POINT CLA STA INL.L CLEAR USE OF INDIRECT FOR JSB INST. * * EN300 JMP NXTOP GET NEXT OPERATION * * * D$LCO DEF $LCOM $LCOM ASC 3,$LCOM * D$BCO DEF $BCOM $BCOM ASC 3,$BCOM * D$BOT DEF $BOOT $BOOT ASC 3,$BOOT * SKP * * ENDRT CLA,INA STA BGFLG LDA LOCC STA CFWBG SAVE ADDRESS OF FWBG LDB AFWBG JSB STCR1 PATCH $FWBG (1ST WD OF BACKGND) * LDA BPFWA STA CBGBP SAVE ADRESS OF BPFWA LDB ABGBP JSB STCR1 PATCH $BGBP (1ST WD OF BACKGND BP) * LDA P2 STA IPTN2 REOPEN THE SNAP FILE WITH UPDATE 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 P12 DEF LEN * LDB DSTRG LDA #ENPT # OF SYS. MODULE & SYS COM ENT. PT. ADA #MREP ADD # OF RP,ABS,MR ENTRY POINT STA B,I INB LDA #MREP # OF RP,ABS & MEM RES ENT. PT. ALF,ALF SHIFT TO UPPER BYTE IOR NLIB # OF LIBRARY IN SNAP STA B,I INB LDA CROM LAST WORD OF MEMORY STA B,I INB LDA LOCC CONTENTS OF $FWBG STA B,I ADB P3 LDA BPFWA CONTENTS OF $BGBP STA B,I ADB P4 LDA SIDCK SYS ID CHECK STA B,I INB STB CNT20 SAVE ADDRESS OF CK SUM * LDA N10 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 YES , PUT IT IN WD 12 OF RECORD 1 * 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 P12 * JSB CSPER CHECK FOR SNAP FILE WRITE ERROR * * JMP BGPRG GET BACKGND PROG 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 TP7FG CLEAR PROG TYPE 7 FLAG STA SMDNM CLEAR SEARCH MODULE NAME STA MODFD CLEAR MODULE FOUND FLAG CCA STA NM1.L NAM MUST BE FIRST STA NOR.L SUBR LOADED IN THIS SCAN STA FSCOM DON'T ACCEPT SYS. COM. COMMD AFTER THIS STA FDBUG DON'T ACCEPT DBUG COMMD AFTER THIS LDA LOCC STA TH2.L * LDB REL1S SSB,RSS 1ST REL COMMD IN PROG LOAD? JMP SNPCK NO STA LOMAN YES , SAVE LOCC IN LOMAN FOR ID SEG LDA CBP.L GET CURRENT BASE PAGE AND SAVE FOR ID SEG STA LOBP LOW BP FOR ID SEG CLA STA REL1S CLEAR 1ST REL COMMD * * IF PROGRAM STARTS ON SAME PAGE AS THE END OF MEMORY RESIDENT LIBRARY * THEN FORCE JSB EXT DIRECT INSTRUCTIONS TO USE AN INDIRECT LINK. * THIS PREVENTS A SHARED ROUTINE FROM BEING INTERRUPTED ON THE CALL! * CLB LDA CFWRT ADA N1 CALCULATE LAST WORD OF MEM RES. LIB. AND B7600 STA TEMOP LDA TH2.L FIRST INSTRUCTION WORD OF PROGRAM AND B7600 ISOLATE PAGE BITS CPA TEMOP SAME PAGE AS MEM RES LIB? CCB YES STB INL.L 0/-1, NO/YES FORCE JSB EXT TO INDIRECT * SNPCK LDA SNPLB GET SNAP LIBRARY FLAG SZA SEARCHING SNAP LIBRARY JMP MVIPB YES JSB NAMRR NO PARSE THE INPUT SSA WAS THERE ANYTHING TO PARSE ? JMP WHAT? NO INPUT * MVIPB 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 * LDA SNPLB GET SNAP LIBRARY FLAG SZA SEARCHING SNAP LIBRARY JMP OPREL YES 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 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 TP7FG YES SET THE PROGRAM TYPE 7 FLAG * LDA SMDNM SZA,RSS IS THERE A MODULE NAME? JMP CKMRP 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 JMP ENAM NAME NOT MATCHED JMP ENAM NAME NOT MATCHED SMDFD CLA,INA STA MODFD SET MODULE NAM FOUND * CKMRP LDB SEGNM CPB P5 LOADING MEMORY RESIDENT? RSS YES , ALLOW TYPE 6 MODULE ONLY JMP REL NO * LDA PGT.L GET PROGRAM TYPE CPA P6 IS MODULE TYPE 6? JMP REL YES CPA P14 IS IT TYPE 14? JMP REL YES CPA P30 IS IT TYPE 30 , RTE IV SSGA? JMP REL YES LDA LBS.L GET SEARCH FLAG SSA IS THIS A SEARCH ? JMP RELFD YES , FILE FORWARD LDA P17 NO , THIS IS NOT A TYPE 6,14,30 MODULE JSB LDRER GIVE ERROR JMP CLSRF GO CLOSE THE REL. FILE * SEGER LDA P12 ERROR MESSAGE 'SEGMENTED PROG. NOT ALLOWED JSB LDRER JMP CLSRF GO CLOSE THE REL. FILE * RELFD JSB L.RED READ A RELO RECORD DEF *+2 DEF FLAG * LDA FLAG SSA IS IT EOF? JMP CKMUL YES , CHECK FOR MULT. SCAN * JSB L.CLS GO CLASSIFY THE REL RECORD DEF *+3 DEF TYPE DEF SBFLD SUBFIELD RED , GEN = 0 SSA RTN REC TYPE , 0=OK , -1=CK SUM ERR JMP RELER CHECK SUM ERROR * LDA TYPE CPA P5 IS IT AN END RECORD JMP RELED YES JMP RELFD NO , SPACE FORWARD TO NEXT SUBROUTINE 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 LDA TYPE GET REC TYPE CPA P5 IS IT AN END? JMP RELED YES CPA P2 IS IT AN ENT? RSS YES JMP L.MOR NO LDA TP7FG CPA P7 JMP TP7SB YES , TYPE 7 SUBROUTINE LDA SEGNM CPA P6 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 * TP7SB LDA B40 STA TAGSM SET TAG TO BIT 5 JMP TAGEN * SCOMT LDA P16 STA TAGSM SET TAG TO BIT 4 SYSTEM COMMON * TAGEN LDB DLBUF 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 ANY THING LOADED? SZA,RSS RSS JMP ENAM NO * ISZ SUBLD YES, A SUBROUTINE IS LOADED LDA PRI.L GET PRIMARY ENTRY POINT ADDRESS SZA,RSS DOES IT HAVE ONE? JMP PMAP NO LDB PRIFG YES CPB N1 IS IT THE FIRST ONE? JMP PREN1 YES JSB DEBUG NO , CHECK IF THE DEBUG MODULE JMP PMAP PREN1 LDB P1 STB PRIFG STA PRENT YES SAVE THE ADDRESS FOR THE RT PROG LDB NM4.L,I GET THE PROGRAM PRIORTY STB PRIOR AND SAVE IT FOR THE ID SEGMENT LDB NM2.L LDA B,I CMA,INA JSB MOVE GET THE PROGRAM NAME DEF NM2.L+2 DEF PNAME AND SAVE IT * 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 TP7FG CLEAR TYPE 7 FLAG 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 * * * USE SYSTEM COMMON FOR PROGRAM * SCOM LDA SEGNM SZA,RSS IS IT SYSTEM REL. PHASE? JMP WHAT? YES , NOT ALLOWED LDA FSCOM GET ACCEPT SCOM COMMD FLAG SZA ACCEPT IT? JMP SCERR NO , SEQUENCE ERROR CLA,INA SET USE SYSTEM COMMON FLAG STA SCOMF JSB L.INT INIT LIBRARY DEF *+9 TO USE SYSTEM COMMON DEF FWFM+0 DEF LWFM+0 DEF BPFWA+0 DEF CBCOM+0 ADDRESS OF BLANK COMMON DEF LENBC LENGTH OF BLANK SYSTEM COMMON DEF LOCC+0 DEF CROM+0 DEF TABLE+0 JMP NXTOP * SCERR LDA P18 SCOM MUST BE SPECIFIED BEFORE JSB LDRER ANY RELOCATION JMP NXTOP * * * SKP * * SET FLAG FOR AUTOMATIC APPEND OF DBUG * DBUG LDA SEGNM SZA,RSS IS IT SYSTEM REL. PHASE? JMP WHAT? YES , DBUG NOT ALLOWED LDA FDBUG GET ACCEPT DB FLAG SZA ACCEPT IT ? JMP DBERR NO , OUT OF SEQUENCE CLA,INA YES STA FDBUG SET FLAG STA DBFLG SET USE DBUG FLAG STA APNDB SET APPEND DBUGR JMP NXTOP * DBERR LDA P26 JSB LDRER JMP NXTOP * * * 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 * SKP SPC 1 * * START UP PROGRAM PARAMETERS * SRTPR LDA SEGNM SZA,RSS IS IT SYS. REL. PHASE? JMP WHAT? YES, NOT ALLOWED CLA,INA SET STARTUP FLAG STA STRUP JSB NAMRR GET NEXT INPUT SSA JMP NXTOP END OF STRING LDA IPBUF STA TEMP1 JSB NAMRR GET NEXT INPUT SSA JMP NXTOP END OF STRING LDA IPBUF STA TEMP2 JSB NAMRR GET NEXT INPUT SSA JMP NXTOP END OF STRING LDA IPBUF STA TEMP3 JSB NAMRR GET NEXT INPUT SSA JMP NXTOP END OF STRING LDA IPBUF STA TEMP4 JSB NAMRR GET NEXT INPUT SSA JMP NXTOP END OF STRING LDA IPBUF STA TEMP5 JSB SPACE JMP NXTOP * * SKP * * 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 STA FSCOM FLAG NOT TO ACCEPT SCOM COMMD 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 SEGMENT 5 * UNCOM LDA P7 IS IT CALLED FROM AFTER LABEL 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 STA LENBC ADA LOCC BUMP LOCC FOR THE UNLABEL COMMON SIZE STA LOCC UNC10 LDA D$FWR LDB LOCC STB CFWRT SAVE ADDRESS OF $FWRT JSB FSYMB FIND & PATCH $FWRT (1ST WD RT PROG) JSB MSENT MISSING SYSTEM ENTRY POINT JMP DZPRV * BCMER LDA P24 JSB LDRER JMP UNC10 * D$FWR DEF $FWRT $FWRT ASC 3,$FWRT * D$SYB DEF $SYBP $SYBP ASC 3,$SYBP * D$FWB DEF $FWBG $FWBG ASC 3,$FWBG * D$BGB DEF $BGBP $BGBP ASC 3,$BGBP * D$ROM DEF $ROM $ROM ASC 3,$ROM * D$BGR DEF $BGRS $BGRS ASC 3,$BGRS * $STRT ASC 3,$STRT SKP * * GENERAL CLEANUP AND OUTPUT SYSTEM SNAP * * * FIND ADDRESS OF $LIBX * AND CONSTRUCT JSB $LIBX,I * DZPRV LDA $LIBX JSB LADD FIND SYMBOL STA B SAVE RESULT IN B SZB IS DRIVER ENTRY POINT THERE? JSB MSENT NO , ERROR DISPLAY IT * JSB L.SCN SCAN FOR A BASE PAGE DEF *+3 DEF VALUA DEF BPADR * LDA BPADR SSA,RSS BASE PAGE ALLOCATED JMP CNST5 YES * JSB L.ABP NO ALLOCATE A BP DEF *+3 DEF DUMBP DEF BPADR * LDA VALUA STA DUMBP,I UPDATE DUMMY BP WITH LINK * * POST BASE PAGE LINK TO DISC FILE * LDB BPADR JSB STCR1 * CNST5 LDA BPADR IOR IJSB ADD JSB 0,I CODE STA JBLBX JSB $LIBX,I * * 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 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 RTPRG .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 * RTPRG 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 * LDA D$SYB LDB CBP.L INB STB CSYBP SAVE ADDRESS OF $SYBP JSB FSYMB JSB MSENT MISSING SYSTEM ENTRY POINT * LDA BPFWA GET 1ST WORD OF BP STA CBP.L SET REAL USER BP FOR RT PROG. CLA,INA STA LNKDR SET USER LINKS = 1 * LDA D$RTB LDB BPFWA STB CRTBP SAVE ADDRESS OF $RTBP JSB FSYMB FIND & PATCH 1ST WD OF RT BP JSB MSENT MISSING SYSTEM ENTRY POINT * LDA D$ROM FIND & PATCH $ROM LDB CROM JSB FSYMB FIND & PATCH $ROM JSB MSENT MISSING SYSTEM ENTRY POINT * LDA D$FWB CLB JSB FSYMB FIND ADDRESS OF $FWBG JSB MSENT MISSING SYSTEM ENTRY POINT LDA VALUA SAVE ADDRESS OF $FWBG STA AFWBG * LDA D$BGB CLB JSB FSYMB FIND ADDRESS OF $BGBP JSB MSENT MISSING SYSTEM ENTRY POINT LDA VALUA STA ABGBP SAVE ADDRESS OF $BGBP * LDA D$BGR CLB JSB FSYMB JSB MSENT MISSING SYSTEM ENTRY POINT LDA VALUA STA ABGRS SAVE ADDRESS OF $BGRS * LDA D$BOT CLB JSB FSYMB FIND & PATCH ADDRESS OF $BOOT JSB MSENT MISSING SYSTEM ENTRY POINT LDA VALUA STA ABOOT SAVE ADDRESS OF $BOOT * 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 JSB STCR1 PUT JMP 3,I IN LOC 2 * * OUTPUT THE SNAP * JSB OPSNP REOPEN THE SNAP FILE * JSB BUFCL NOP LDA CFWRT CONTENTS OF $FWRT STA L.BUF+4 LDA CSYBP CONTENTS OF $SYBP STA L.BUF+5 LDA CRTBP CONTENTS OF $RTBP STA L.BUF+7 LDA CBCOM CONTENTS OF $BCOM STA L.BUF+8 LDA LENBC LENGTH OF BLANK COMMON STA L.BUF+9 * JSB WRITF OUTPUT REC 1 OF SNAP FILE DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF L.BUF+0 DEF P12 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 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 LDA B,I GET WORD 4 AGAIN? AND HIMSK ALF,ALF CPA P4 IS IT AN RP SYMBOL? JMP GRP YES CPA P3 IS IT AN ABSOLUTE RSS YES JMP GCK NO GRP 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 STA B,I RESTORE WORD 4 * GSUM STB TEMP1 SAVE ADDRESS OF SYM TBL WD 4 INB LDA B,I ADA SIDCK ARITHMETIC SUM FOR SYSTEM CHECK WD 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 RP,ABS & MEM RES ENT. PT. ISZ TEMP2 SET PASS 2 FLAG JMP SNP2 DO SYS MODULE & SYS COM ENT PT. * PASS2 STA #ENPT SAVE # OF SYSTEM ENTRY POINTS * * 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 * 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 LDA 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 * 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 FINBP LDA PNTR ADA P128 JMP MBP MORE BP * FINBP LDA PNTR ADA P128 STA ADBP JSB WRITF DEF *+5 DEF SDCB3+0 DEF IERR3+0 ADBP NOP DEF ZTEM5 JSB CSPER CHECK FOR SNAP FILE WRITE ERROR JSB CLOS3 * SKP * * RELOCATE REAL TIME PROGRAMS * LDA NUMID STA CNMID * RT10 JSB SPACE LDA P14 STA CONSL ECHO TO CONSOLE LDB MES50 REL RT PROG RT20 JSB DRKEY JSB SPACE CCA STA NOR.L SET NOTHING LOADED FLAG * LDA NUMID SZA OUT OF ID SEGMENT? JMP RT30 NO CLA,INA YES, SET OUT OF ID FLAG STA OUTID JMP NXTOP * RT30 CLA STA SCOMF CLEAR USE SYSTEM FLAG STA FSCOM CLEAR ALLOW SYS. COM FLAG STA FDBUG CLEAR ALLOW DBUG FLAG STA PRENT CLEAR PRIMARY ENTRY POINT STA STRUP CLEAR START UP FLAG STA DBFLG CLEAR DBUG FLAG STA APNDB CLEAR APPEND DBUGR FLAG STA TEMP1 CLEAR TEMP1 TO TEMP5 STA TEMP2 STA TEMP3 STA TEMP4 STA TEMP5 * CCA 1ST PRIMARY ENTRY PT. STA PRIFG STA REL1S SET 1ST REL COMMD FOR PROG LOAD * JSB L.INT DEF *+9 DEF FWFM+0 DEF LWFM+0 DEF BPFWA+0 DEF ZERO+0 DEF ZERO+0 DEF LOCC+0 DEF CROM+0 DEF TABLE * JMP NXTOP * RTERR LDA P14 JSB LDRER OUT OF ID SEGMENT JMP EXIT1 * * DMS65 DEF MES65 MES65 ASC 6,* LIB FILES * MES50 DEF *+1 ASC 7,* REL RT PROG * D$RTB DEF $RTBP $RTBP ASC 3,$RTBP SKP * BGPRG LDA BGLOD CHECK IF FIRST BG PROG SZA JMP EXIT1 NO , WE ARE FINISH. CLA,INA SET BGLOD TO 1 STA BGLOD * LDA P14 STA CONSL LDB MES70 REL BG PROG JMP RT20 * EXIT1 LDB CFWBG GET START OF BG PROG CMB,INB NEGATE ADB CROM ADD TOP OF MEMORY * LDA CBGBP GET START OF BG BASE PAGE CMA,INA NEGATE ADA CSYBP ADD START OF SYSTEM BASE PAGE * ADA B ADD BOTH CLB DIV P128 DIVIDE BY 128 TO GET # OF BLOCK ADA P2 ROUND UP BY TWO MPY CNMID MULTIPLY BY THE # OF ID SEGMENT STA ZTEM5 * JSB CNUMD CONVERT BLOCK SIZE TO DECIMAL DEF *+3 DEF ZTEM5 DEF ME80 * JSB SPACE LDA P28 LDB MES80 JSB DRKEY PRINT SWAP FILE SIZE FOR THE SYSTEM * LDA CFWRT ADA N1 STA ZTEM5 JSB CNUMO DEF *+3 DEF ZTEM5 DEF ME75 JSB SPACE LDA P14 LDB MES75 JSB DRKEY PRINT SYSTEM SIZE * LDA CFWRT CMA,INA ADA CFWBG STA ZTEM5 JSB CNUMO DEF *+3 DEF ZTEM5 DEF ME82 JSB SPACE LDA P14 LDB MES82 PRINT REAL TIME SIZE JSB DRKEY * LDA CRTBP CMA,INA ADA CBGBP STA ZTEM5 JSB CNUMO DEF *+3 DEF ZTEM5 DEF ME84 JSB SPACE LDA P16 LDB MES84 JSB DRKEY PRINT REAL TIME BP SIZE * LDA CFWBG CMA,INA ADA CROM STA ZTEM5 JSB CNUMO DEF *+3 DEF ZTEM5 DEF ME86 JSB SPACE LDA P14 LDB MES86 JSB DRKEY PRINT BACKGND SIZE * LDA CBGBP CMA,INA ADA CSYBP STA ZTEM5 JSB CNUMO DEF *+3 DEF ZTEM5 DEF ME88 JSB SPACE LDA P16 LDB MES88 JSB DRKEY PRINT BACKGND BP SIZE * LDA MAXAD ADA N2 LENGTH OF SYSTEM IN WORD 0 CLB JSB STCR1 * LDA P2 LDB P1 1ST ADDRESS TO LOAD JSB STCR1 * LDA P128 STA SEGNM SIGNAL NORMAL TERMINATION * JMP EXIT * MES70 DEF *+1 ASC 7,* REL BG PROG * MES80 DEF *+1 ASC 8,* SWAP FILE SZ ME80 NOP NOP NOP ASC 3, BLOCK * MES75 DEF *+1 ASC 4,* SYS SZ ME75 BSS 3 * MES82 DEF *+1 ASC 4,* RT SZ ME82 BSS 3 * MES84 DEF *+1 ASC 5,* RT BP SZ ME84 BSS 3 * MES86 DEF *+1 ASC 4,* BG SZ ME86 BSS 3 * MES88 DEF *+1 ASC 5,* BG BP SZ ME88 BSS 3 SKP * * THIS SUBR HANDLES THE SPECIAL PROCESING REQUIRED FOR THE * RTE-L DBUGR PACKAGE. DEBUG IS CALLED AFTER THE RECORD IS * PROCESSED ONLY IF THE LAST MODULE WAS LOADED AND HAS A PRIMARY * ENTRY POINT. A CHECK IS MADE TO SEE IF THE LATEST MODULE WAS * 'DBUGR'. IF SO DBURG'S PRIMARY ENTRY POINT IS SAVED IN THE * PROGRAM ID SEGMENT AND THE ACTUAL PRIMARY ENTRY POINT IS SAVED * IN '.DBUG'. * DEBUG NOP LDA DBFLG IS DEBUG ALLOWED? SZA,RSS WELL? JMP DEBUG,I NO, SO FORGET IT * LDB NM2.L GET PROG NAME 1,2 INB LDA B,I CPA DB1 CHARS =D,B? RSS YES - CONTINUE JMP DEBUG,I RETURN = PROG IS NOT 'DBUGR' INB LDA B,I CPA DB2 CHARS =U,G? RSS YES - CONTINUE JMP DEBUG,I RETURN - PROG IS NOT 'DBUGR' INB GET PROG NAME 5 LDA B,I CPA DB3 CHAR = R? RSS YES - CONTINUE JMP DEBUG,I RETURN - PROG IS NOT 'DBUGR' * JSB L.ADD FIND ADDRESS OF DBUGR IN LST DEF *+5 DEF DB1X ADDRESS OF SYMBOL NAME DEF VALUX DEF SADDX SYMBOL TABLE ADDRESS DEF RESLX RESULT RETURNED SZA IS 'DBUGR' FOUND? NOP NO , THIS IS AN ERROR CONDITION LDA PRENT GET THE PROGRAM'S PRIMARY ENTRY LDB VALUX AND SET INTO .DBUG ENTRY POINT JSB STCR1 OUTPUT WORD TO DISC LDA PRI.L NOW SET THE PRIMARY ENTRY STA PRENT OF 'DEBUG' INTO THE ID SEGMENT JMP DEBUG,I RETURN * VALUX BSS 1 RESLX BSS 1 SADDX BSS 1 DB1 ASC 1,DB DB2 ASC 1,UG DB3 ASC 1,R DB1X ASC 3,.DBUG * SKP * * CHECK FOR INTERRUPT RT PROGRAM * SRFI3 NOP CLA STA WRDCT LDA DPNAM ADDRESS PROGRAM NAME SRFI4 JSB SRIPX GO SEARCH PROGRAM NAME TABLE RSS FOUND NAME JMP SRFI3,I END OF TABLE LDA IP3,I COMPARES,GET SC AND B77 SZA,RSS JMP SRFI4 ADA AINT ADDRESS OF INTERRUPT TABLE ADA N16 LDB A LDA ADDID CMA,INA JSB STCR1 LDA IP3,I AND M400 ZERO OUT SELECT CODE STA IP3,I JMP SRFI4 * 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 * * CHECK FOR DUPLICATE PROGRAM NAME * * JSB CKDUP * ERROR RTN DUP PROGRAM NAME * NORMAL RTN * CKDUP NOP LDA #PGM SZA,RSS JMP OKRTN OK TO RETURN NOTHING TO CHECK CMA,INA NEGATE # OF PROGRAMS STA ZTEM4 LDA DIDNM ADDRESS OF IDNAMS STA ZPTN LDA PNAME+2 AND HIMSK STA PNAME+2 CKD10 LDA DPNAM STA TLOCC LDA N3 STA ZTEM5 LDA ZPTN,I GET ID SEGMENT ADDRESS ADA P12 STA AEXIT ADDRESS OF ID SEG PROG NAM RDNXT JSB RDOUT DEF *+3 DEF AEXIT ADDRESS OF ID DEF ZTEM3 * LDA ZTEM3 CHAR OF NAM CPA TLOCC,I EQUAL TO CURRENT PROG NAM RSS YES JMP NXNM NO , NO NEED TO CHECK OTHER CHAR ISZ AEXIT GET NEXT CHAR ISZ TLOCC ISZ ZTEM5 ANY MORE CHARACTERS JMP RDNXT YES JMP DURTN NO , DUPLICATE PROG NAM * NXNM ISZ ZPTN ISZ ZTEM4 JMP CKD10 OKRTN ISZ CKDUP DURTN JMP CKDUP,I * SKP * * PLACE RP , ABS & MEM RES ENTRY INTO SYM TABLE * MRLOK NOP JSB POSNT DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF P2 DEF P2 POSITION TO REC 2 OF SNAP FILE SSA ERROR? JMP MRFMP YES * LDA #MREP GET # OF MEM RES ENTRY PT. CMA,INA STA CNT10 * NXMR JSB READF READ AN ENTRY DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF SNAME+0 DEF P10 SSA ERROR? JMP MRFMP YES * LDA SNAME+4 GET WORD 4 OF SNAP ALF,ALF PLACE IN UPPER BYTE FOR SYM. TBL. STA SNAME+4 RESTORE IT * LDA SNAME+1 GET CHARACTER 1 IOR M1000 SET BIT 15 STA SNAME+1 RESTORE IT JSB L.SYE STUFF SYMBOL TABLE DEF *+6 DEF SNAME+1 DEF SNAME+4 DEF SNAME+5 DEF ZERO DEF RESLT LDA RESLT SSA,RSS ANY ERROR? JMP BMPMR NO CMA,INA ERROR , LST OV JSB LDRER JMP EXIT * BMPMR ISZ CNT10 JMP NXMR JMP MRLOK,I * MRFMP LDA P13 JSB LDRER JMP MRLOK,I SKP * * SEARCH THE SNAP FOR SYSTEM ENTRY POINTS * SYLOK NOP * LDA #MREP ADA P2 STA IREC JSB POSNT POSITION TO START OF SYSTEM ENT DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF IREC DEF P2 SSA ERROR? JMP SNFMP YES * LDA #ENPT GET # OF SYSTEM ENTRIES CMA,INA STA CNT10 * NXENT JSB READF READ AN ENTRY DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF SNAME+0 DEF P10 SSA ERROR? JMP SNFMP YES * LDB SCOMF GET SYS COMMON FLAG LDA SNAME+4 CHECK IF THIS IS A SYS COM ENTRY CPA P2 IS IT A SYSTEM COMMON ENTRY? RSS YES JMP FIXEN NO * SZB,RSS USER SPECIFED SYS COM? JMP UPCNT NO , NEXT ENTRY CLA YES STA SNAME+4 PLACE IN WORD 4 OF SYM TABLE LDA SNAME+1 GET CHAR 1 IOR M1000 SET BIT 15 STA SNAME+1 RESTORE IT JSB L.SYE STUFF SYM TABLE DEF *+6 DEF SNAME+1 DEF SNAME+4 DEF SNAME+5 DEF ZERO DEF RESLT LDA RESLT SSA,RSS ANY ERROR? JMP UPCNT NO CMA,INA YES , ERROR LST OV JSB LDRER JMP EXIT * FIXEN SZB SEARCH SYSTEM ENTRY? JMP UPCNT NO JSB L.MAT YES, FIXUP PREVIOUS REFERENCES DEF *+5 DEF SNAME+1 DEF SNAME+4 DEF SNAME+5 DEF RESLT UPCNT ISZ CNT10 JMP NXENT NO , READ NEXT ENTRY JMP SYLOK,I * SNFMP LDA P13 JSB LDRER JMP SYLOK,I * SNAME BSS 10 SKP * * SEARCH THE SNAP LIBRARY FOR UNDEFS * LBLOK NOP JSB RWNDF DEF *+3 DEF SDCB3+0 DEF IERR3+0 * LDA #ENPT GET # OF ENTRY POINT ADA #MREP ADD # OF MR , ABS , RP ENTRY POINTS INA STA IREC LIBRARY RECORD # * JSB POSNT POSITION TO LIBRARY RECORD DEF *+5 DEF SDCB3+0 DEF IERR3+0 DEF IREC DEF IRB * LDA NLIB GET # OF LIBRARY SZA,RSS IS IT NON ZERO? JMP LBL20 NO , IT IS ZERO EXIT CMA,INA YES , THERE IS AN LIBRARY STA CNT30 * RSLIB JSB READF READ SNAP LIBRARY DEF *+6 DEF SDCB3+0 DEF IERR3+0 DEF IPBUF+0 DEF P6 DEF LEN * CLA,INA STA ISTRC SET NAMRR COUNTER STA SNPLB SET FLAG TO RETURN HERE * JSB MSSUB GO SEARCH THE SNAP LIBRARY * ISZ CNT30 ANY MORE LIBRARY? JMP RSLIB YES LBL20 CLA NO STA SNPLB JMP LBLOK,I * IREC NOP IRB NOP * 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 REL 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,NO ID NO MORE ID SEGMENTS ASC 3,MS ENT MISSING SYSTEM ENTRY POINT ASC 3,LOC WR WARNING LOCC SET BACKWARD ASC 3,IL MRL MEMORY RESIDENT IS NOT TYPE 6,14,30 ASC 3,SCM SQ SYS COM MUST BE BEFORE ANY RELOCATION ASC 3,TR ADD NO TRANSFER ADDRESS ASC 3,UN EXT UNDEFINED EXTERNAL ASC 3,IL BND ILLEGAL BOUND IN LOCC OR BPLOCC ASC 3,DU PGM DUPLICATE PROGRAM NAME 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,DB SEQ DBUG COMMD MUST BE SPECIFY BEFORE ANY RELOCATION 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 RAL LDB .ZPRV RBL JSB .CBT DEF P5 NOP JMP DSP10 NOP NOP LDA ADDR RAL LDB .ZRNT RBL JSB .CBT DEF P5 NOP JMP DSP10 NOP NOP 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 * PRTFG 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 * * 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 # 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 P10 DEC 10 P12 DEC 12 P13 DEC 13 P14 DEC 14 P15 DEC 15 P16 DEC 16 P17 DEC 17 P18 DEC 18 P19 DEC 19 P20 DEC 20 P21 DEC 21 P22 DEC 22 P23 DEC 23 P24 DEC 24 P25 DEC 25 P26 DEC 26 P27 DEC 27 P28 DEC 28 P29 DEC 29 P30 DEC 30 P60 DEC 60 P120 DEC 120 P128 DEC 128 * N1 DEC -1 N2 DEC -2 N3 DEC -3 N4 DEC -4 N5 DEC -5 N6 DEC -6 N10 DEC -10 N16 DEC -16 N30 DEC -30 N60 DEC -60 * B17 EQU P15 B40 OCT 40 B77 OCT 77 B1777 OCT 1777 B2000 OCT 2000 B2001 OCT 2001 B4000 OCT 4000 B7600 OCT 76000 * M400 OCT -400 M2000 OCT -2000 M1000 OCT 100000 * BL ASC 1,BL BP ASC 1,BP CO ASC 1,CO DB ASC 1,DB DI ASC 1,DI EN ASC 1,EN LE ASC 1,LE LI ASC 1,LI LO ASC 1,LO MS ASC 1,MS NE ASC 1,NE OF ASC 1,OF ON ASC 1,ON RE ASC 1,RE SC ASC 1,SC SE ASC 1,SE ST ASC 1,ST * HIMSK OCT 177400 M7777 OCT 77777 * JMP3I JMP 3,I IJSB JSB 0,I * SKP * #PGM NOP # OF PROGRAMS #MREP NOP # OF RP,ABS & MEM RES ENT. PT. ABGRS NOP ABOOT NOP ADDR NOP NOP NOP ADFEX NOP AEXIT NOP APNDB NOP 0/1 NO DBUG/APPEND DBUG BGLOD NOP CBCOM NOP CBGBP NOP CFWBG NOP CFWRT NOP CNMID NOP CRTBP NOP CSYBP NOP CNT10 NOP CNT20 NOP CNT30 NOP DBFLG NOP DUMBP NOP FDBUG NOP FLAG NOP FSCOM NOP 0=ACCEPT SCOM , -1=NOT ACCEPT SCOM IPTN1 DEC 1 OPEN NON EXECLUSIVE FOR REL & SEARCH JBLBX NOP JSB $LIBX,I LEN NOP LEN OF RELOCATABLE RECORD LENBC NOP LENGTH OF BLANK COMMON LOBP NOP LOW BP FOR RT PROG LOMAN NOP LOW MAIN FOR RT PROG MODFD NOP 0/1 MODULE NOT FOUND/MODULE FOUND MULT NOP 0/-1 YES/NO , NOT A MULTIPLE SCAN OUTID NOP 0/1 NO/YES OUT OF ID SEGMENTS PNTR NOP PRENT NOP PRIMARY ENTRY PT. FOR RT PROG. PRIFG NOP FLAG TO INDICATE FIRST ENTRY POINT PRIOR NOP PRIORTY REL1S NOP 0/-1 NOT 1ST REL COMMD / YES 1ST REL COMMD SBFLD NOP SUBFIELD REC , GEN=0 SCBIT NOP 0/1 DON'T SET SC IN ID/ SET SC IN ID SCOMF NOP 0/1 DO NOT USE / USE SYSTEM COMMON SMDNM NOP 0/1 NO NAME/SEARCH FOR MODULE NAME SNPLB NOP STRUP NOP STARTUP PROG FLAG 1=YES 0=NO 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 TEMOP NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP TEMP4 NOP TEMP5 NOP TLOCC NOP TSDBP NOP TYPE NOP TYPE OF MODULE TP7FG NOP VALUR NOP ZERO NOP ZPTN NOP ZTEM3 NOP ZTEM4 NOP ZTEM5 NOP * DPNAM DEF PNAME PNAME NOP NOP NOP * MDNAM NOP NOP NOP DLBUF DEF L.BUF+0 * DIDNM DEF IDNAM LIBFL BSS 6 A EQU 0 B EQU 1 * END RTLG2