File LNKLSD.MA (MACREL macro assembler source file)

Directory of image this file is from
This file as a plain text file

/LNKLSD - LINK LSD PROCESSOR
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1977,1978 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/

/LINK LSD PROCESSING AND SECTAB BUILDING XLIST NOPUNCH .INCLUDE LNKMAN.MA ENPUNCH XLIST .RSECT LNKLSD / / START OF PASS ONE / CREATE GST AND SECTAB / / .ENTRY STPAS1 STPAS1, TAD SECTAB /SET UP SECT TABLE POINTER DCA SECPTR JMS IMTP /INITIALIZE MODTAB POINTERS CHKLIB, AC2 /CHECK FOR NEW OVERLAY OR LEVEL TAD MODPTR /GET MODTAB WORD WITH DCA TEMP1 /OVERLAY & LEVEL CDF 10 TAD I TEMP1 DCA OVRL TAD OVRL SPA /IS IT A LIB? JMP YIAL /YES- SKIP IT FOR NOW AND (777 CIA /SAME AS BEFORE? TAD OVRLVL SNA CLA JMP SAMOL /YES TAD OVRL /NO AND (777 DCA OVRLVL /CHANGE TO NEW VALUE DCA LSDSTR /CLEAR "START OF LSD" SAMOL, JMS PLSDH /PROCESS LSD HEADER JMS PROLSD /PROCESS LSD FOR MODULE YIAL, CLA JMS ADVPTR /ADVANCE MODTAB POINTERS JMP CHKLIB /DO NEXT MODULE TAD UNDCNT /ARE THERE STILL SOME UNDEFINED SZA CLA /SYMBOLS JMS PROLIB /DO LIBRARY LSD'S
TAD GSTCDF /SCAN GST FOR ENTRY POINTS DCA GCDF /AND RELATE TO THEIR TAD GST /RESPECTIVE SECT OVERLAY DCA GSTPTR /AND LEVEL YIAL1, AC4 /GET WORD 5 OF GST ENTRY TAD GSTPTR JMS I CGGST AND (17 TAD (-14 SZA CLA /ENTRY POINT? JMP YIAL3 /NO TAD GSTPTR /YES, SAVE CURRENT POSITION DCA TEMP1 TAD GCDF DCA TEMP2 IAC /GET SECT GST NUMBER TAD GSTADR /FROM NEXT WORD JMS I CGGST SNA /GST #? JMP YIAL2 /NO, FORGET IT JMS I CCGSTA /CALCULATE ITS ADDRESS TAD GSTADR /GET ITS OVERLAY AND LEVEL TAD (7 JMS I CGGST SNA /NON-ZERO? JMP YIAL2 /NO, FORGET IT DCA TEMP3 /YES, SAVE TAD TEMP2 /SET UP FOR OLD POSITION DCA GCDF TAD TEMP1 TAD (7 /BUT AT O-L WORD (WORD 10) DCA GSTADR AC4000 /SET AC TO 4000 TAD TEMP3 /GET OVERLAY LEVEL JMS I CPUTG /PUT IN ENTRY POINT'S LEVEL WORD ISZ TRNCNT /BUMP COUNT OF ENTRY POINTS YIAL2, TAD TEMP2 DCA GCDF /SET UP OLD POSITION TAD TEMP1 DCA GSTPTR YIAL3, JMS INCPTR /BUMP GST POINTERS JMS TSTBOT /DONE ALL? JMP YIAL1 /NO, TRY AGAIN
/USE TRNCNT TO COMPUTE SIZE OF TRANVC SECT IF IT EXISTS TAD TRNCNT SNA CLA /ANY TRANSFER VECTORS NEEDED? JMP TRANXT /NO CMA DCA PASS2 /SET PASS2 FOR SEARCH ROUTINE JMS SFOR /YES, FIND TRANVC TRANVC CDF 10 TAD GINDEX /SEARCH FOR IT IN SECT TABLE JMS SSEC SKP JMP TRANXT /NOT IN SECT TABLE, PRAY FOR BEST TAD POINT2 /FOUND TAD (5 DCA POINT2 /SET TO SIZE WORD TAD TRNCNT CLL RTL /# TIMES 4 = SIZE DCA TEMP2 TAD I POINT2 SNA /ANY SIZE THERE? JMP TRANXT-2 /NO, SET TO SIZE NEEDED CLL CML CIA /YES, COMPARE AGAINST TAD TEMP2 /SIZE NEEDED SZL SNA CLA /LARGE ENOUGH? JMP TRANXT /YES TAD TEMP2 DCA I POINT2 /SET TO NEW SIZE TRANXT, CDF JMS CHKOVR /CHECK FOR NO MISSING OVERLAY #'S JMP ADJ /GO SORT SECT TABLE, AFTER ADJUSTING /SECTAB POINTERS TRANVC, TEXT "TRANVC" *.-1 PAGE
/CHECK FOR MISSING OVERLAY NUMBERS CHKOVR, 0 TAD (SOCNTB+1 DCA POINT1 /SET UP POINTER TAD (-200+1 DCA TEMP1 /SET UP LOOP COUNTER CHK0, TAD I POINT1 /GET OVERLAY COUNT SNA CLA /0? JMP CHK2 /YES, ALL OK CLL /NO TAD POINT1 TAD (-SOCNTB-20 SNL CLA /IS OVERLAY IN MAIN? E35==.; JMS I COS8ER /YES, ERROR TAD POINT1 /NO, SET UP TO CHECK OVERLAY 0 OF LEVEL AND (7760 DCA POINT2 CHK1, TAD POINT1 CIA TAD POINT2 SNA CLA /AT THIS POINT IN TABLE? JMP CHK2 /YES, DON'T BOTHER TESTING TAD I POINT2 /NO, CHECK THIS OVERLAY # SNA CLA /OK? E36==.; JMS I COS8ER /NO, ERROR, A 0 OVERLAY COUNT IN THIS LEVEL ISZ POINT2 /BUMP POINTER JMP CHK1 /TRY AGAIN CHK2, ISZ POINT1 /BUMP PICKUP POINTER ISZ TEMP1 /BUMP LOOP COUNTER JMP CHK0 /LOOP JMP I CHKOVR /DONE
/PROCESS LSD HEADER PLSDH, 0 TAD (INBUF+1 /ADDR OF INPUT BUFFER DCA INPTR JMS REMOD /READ IN A MODULE JMS IPTRTB /INIT PTR TABLE JMS GETLSD /GET FILE TYPE TAD (-2202 SZA CLA / .RB? E07==.; JMS I COS8ER /NO, ERROR PLSDH1, JMS GETLSD /GET COUNT OF NEXT PREFACE ENTRY SNA /0? JMP I PLSDH /YES, DONE IAC /NO, INCREMENT DCA COUNT1 /SAVE JMS GETLSD /GET ENTRY TYPE TAD (-1 SNA JMP ADDABS /1=ABS SA TAD (-1 SNA JMP ADDLSD /2=LSD SA TAD (-2 SNA JMP RBSPEC /4=RB SPEC LEVEL TAD (-6 SNA CLA JMP JSW /12=JSW SKP PLSDH2, JMS GETLSD CLA PLSDH3, ISZ COUNT1 JMP PLSDH2 JMP PLSDH1 /DONE ENTRY, TRY NEXT /
NOSEC, CLA /HERE IF NOT SECT OR GOT SECT POINTER TAD GSTADR JMS I CGGST /GET 5TH WORD DCA TEMP4 /GST WRD WITH FLAGS ISZ GSTADR /BUMP TO "FIELD" WORD TAD TEMP4 /FLD PTR BAD? AND (1000 SNA CLA JMP NOFLG /NO-HOW ABOUT ADDR PTR? NOSEC1, TAD GSTADR JMS I CGGST /GET WORD 5 WHICH CONTAINS A FLD OR REF JMS GETREF /GET CORRECTED REFERENCE AND (3777 JMS I CPUTG /PUT BACK INTO GST ENTRY TAD TYPE SNA CLA /CHECKING A SECT? JMP FIX5 /NO TAD I TEMP3 /YES FIX SECTAB REF DCA I TEMP2 /STORE GST# IN SECTAB FIELD WORD JMP FIX5 NOFLG, TAD TEMP4 AND (400 /ADDR REF PTR BAD? SNA CLA JMP NOFLG1 /NO, CHECK FOR FIELD WORD BAD AND NOT A SECT CLA IAC /TRY WORD6 TAD GSTADR JMS I CGGST /LOOK AT WORD 6 FOR FLAG JMS GETREF /GET CORRECTED REFERENCE AND (3777 JMS I CPUTG /PUT BACK INTO GST ENTRY TAD TYPE SNA CLA /CHECKING A SECT? JMP FIX5 /NO, GO ON TO NEXT ENTRY IN POINTER TABLE ISZ TEMP2 /YES, BUMP TO SECTAB ADDRESS WORD TAD I TEMP3 DCA I TEMP2 /STORE GST# IN SECTAB ADDRESS WORD JMP FIX5 /GO ON TO NEXT ENTRY IN POINTER TABLE NOFLG1, TAD TYPE /CHECK SZA CLA /IF A SECT JMP FIX5 /YES, EXIT JMP NOSEC1 /NO, NEED TO FIX GST ENTRY / PAGE
/ /HERE IF SYMBOL IS DEFINED (FROM FNDP1) DEFND, JMS EXMTYP /WAS IT DEFINED MORE THEN ONCE? JMP I RETS /NO DCA SFLG /YES TAD GSTADR JMS I CGGST /GET OLD TYPE AND (17 TAD (-1 SNA CLA /WAS OLD TYPE SEC. REF.? JMP INSDEF /YES, INSERT NEW DEFINITION TAD SFLG /NO SNA CLA /SECTS CAN BE DEF TWICE JMP DDEF /NOT A SECT-MAY BE AN ERROR TAD GINDEX JMS SSEC /FIND SYMBOL IN SECTAB TAD (5 /LEN IN 6TH WORD OF SECTAB TAD POINT2 DCA POINT2 TAD WORD4 AND (100 SZA CLA /CONCAT OR OVERLAP JMP CONCAT /GUESS! TAD I INPTR /LEN IN LSD ENTRY SNA /ZERO? JMP DEFND2 /REJECT FOR NOW CIA CLL /NO, MAKE - DCA TEMP1 /SAVE TAD I POINT2 SNA /ZERO? JMP DEFND1 /YES, LSD MUST BE LARGER TAD TEMP1 /COMBINE WITH LSD LENGTH SZL CLA /IF LINK=0, LSD IS BIGGER JMP DEFND2 /OK DEFND1, TAD I INPTR /LSD IS LARGER, SET NEW LENGTH DCA I POINT2 /IN SECTAB DEFND2, JMS GETLSD /GET LENGTH CLA /THROW IT AWAY JMS GETLSD /GET ORIGIN CLA /THROW IT AWAY JMP I RETS /DONE CONCAT, TAD I POINT2 /CONCATENATE, ADD CURRENT SECT LENGTH JMP DEFND1 /TO LSD LENGTH / / PAGE
/ENTER SYMBOL INTO GST ENTSYM, 0 /BUT 1ST SEE IF THERE'S ROOM TAD BOTCDF CIA TAD MXFLD SZA CLA /IN TOP FIELD? JMP .+6 /NO TAD GSTHI /YES CIA TAD GSTBOT SNA CLA /AT TOP LOCATION? JMP GOFERR /YES TAD GSTBOT /NO, SET UP FOR STORE DCA GSTPTR TAD GSTPTR DCA GSTADR TAD BOTCDF TAD (CDF DCA GCDF TAD GSTBOT /BUMP POINTERS FOR NEXT STORE TAD (10 DCA GSTBOT TAD GSTBOT CIA TAD TOPLOC SZA CLA /END OF AVAILABLE MEMORY IN FIELD? JMP .+5 /NO DCA GSTBOT /YES, SET TO 0 OF NEXT FIELD TAD (10 TAD BOTCDF DCA BOTCDF ACM3 /3 WORDS OF SYMBOL DCA COUNT1 TAD (SYM1-1 DCA XR6 CDF TAD I XR6 /GET 2 CHARACTERS CDF 10 JMS I CPUTG /PUT SYMBOL INTO GST ISZ COUNT1 /DONE ALL 3? JMP .-5 /NO JMS I CPUTG /ZERO 4TH WORD JMP I ENTSYM /DONE, SO FAR / / GOFERR, JMS I CFERR /GLOBAL OVERFLOW GOFMSG / PAGE
/(PART OF INSDEF) SECTYP, JMS GETLSD /GET LEN FROM LSD DCA SLEN /SAVE IT FOR LATER USE ACM2 TAD TYPE AND (17 SNA CLA /IS IT AN ASECT? JMP ASEC /YES -WRD6 CONTAINS AN ABS ORG TAD WORD4 /GET BITS 0-2 --FLAGS AND (7000 /0- NO RESTRICTION CLL RTL /1- ABS FLD RTL /2- ABS ADR TAD (FLGTAB /3 - SAME PAGE DCA TEMP1 /4 - SAME FLD CDF 0 TAD I TEMP1 CDF 10 DCA TEMP1 JMP I TEMP1 /DISPATCH OFF OF FLGTAB / /HERE IF DEFINING AN ASECT ASEC, TAD (6000 /ASECT ORG IS ABS. TAD TYPE /SET FLAGS FOR FIELD AND ADDRESS DCA TYPE TAD WORD4 /ABS FLD IS IN 0-5, NEED REARRANGING DCA EOLSD /SAVE TAD WORD4 /FIRST CLEAR OUT FIELD BITS AND (177 DCA WORD4 TAD EOLSD /NOW PROCESS AND (7600 RTL CLL; RTL /4 LEFT SZL /LINK SET? TAD (20 /YES, ADD IN 20 SPA /AC0 SET? TAD (4010 /YES ADD IN 10, CLEAR BIT 0 JMP ABSADR+3 /ABSOLUTE FIELD RESTRICTION ABSFLD, AC4000 /SET ABS FLD FLAG TAD TYPE DCA TYPE JMS GETLSD /GET ABS FLD VALUE FROM LSD JMS I CPUTG /STORE FLD JMS I CPUTG /CAN HAVE ONLY ONE ABS., SO ADDRESS IS SET TO 0 JMP LSTWRD /CONTINUE ON, PROCESS LEVEL AND OVERLAY /SAME FIELD RESTRICTION SAMFLD, JMS GETLSD /GET REF PTR FROM LSD JMS RCRP /FIX REF. PTR 1000 /SET "FIELD REF. POINTER BAD" JMP ABSFLD+4 /STORE LSD SYMBOL NUMBER /
/ABSOLUTE ADDRESS RESTRICTION ABSADR, AC2000 /SET ABS ADR FLAG TAD TYPE DCA TYPE JMS I CPUTG /CLEAR FLD DATA JMS GETLSD /GET ABS ADR FROM LSD JMP ABSFLD+5 /STORE RESTRICTED ADDRESS /SAME PAGE RESTRICTION SAMPAG, JMS I CPUTG /CLEAR FLD DATA JMS GETLSD /GET ADDRESS DATA (LSD #) JMS RCRP /SET "ADDRESS REFERENCE POINTER BAD" 400 JMP ABSFLD+5 /STORE LSD SYMBOL NUMER /FLAG TABLE LSD "FLD SPEC" FLGTAB, ABSFLD+3 /0 - NO RESTRICTION ABSFLD /1 - ABSOLUTE FIELD ABSADR /2 - ABSOLUTE ADDRESS SAMPAG /3 - SAME PAGE SAMFLD /4 - SAME FIELD / / DONE WITH AN LSD / NOW CHECK FOR FORWARD REFERENCES / THAT NEED FIXING / .ENTRY EOLSD / EOLSD, 0 TAD (PTRTAB /SET UP POINTER DCA POINT1 TAD (-400 /NO. OF ENTRIES IN TAB DCA COUNT2 /SET UP COUNT TRYNXT, DCA TYPE /SET TYPE TO 0 FOR FLAG TAD I POINT1 /GET ENTRY SPA /DOES IT NEED FIXING? JMP FIX /ENTRY HAS A REF. THAT NEEDS TO BE FIXED FIX5, CLA /NO ISZ POINT1 /BUMP POINTER ISZ COUNT2 /AND COUNTER JMP TRYNXT /LOOK FOR ANOTHER THAT NEEDS FIXING JMS FIXSA /FIX STARTING ADDRESS, IF NECESSARY JMP I EOLSD /DONE /
/NEEDS FIXING FIX, AND (3777 /REMOVE FLAG DCA TEMP1 /SAVE REFERENCE POINTER TAD TEMP1 JMS I CCGSTA /CALCULATE GST ADDRESS AC4 /WANT 5TH WORD TAD GSTADR JMS I CGGST /GET THAT WORD AND (17 /MASK TO TYPE BITS TAD (-1 /IS THIS A SECT? SPA SNA JMP NOSEC /NO TAD (-10 /MAYBE (SECTS ARE BETWEEN 1 AND 11) SMA SZA CLA /WELL? JMP NOSEC /DEFINITELY NOT A SECT ISZ TYPE /SECT, SET TYPE TO 1 AS A FLAG TAD TEMP1 JMS SSEC /SEARCH SECTAB SKP /FOUND ENTRY E08==.; JMS I COS8ER /ERROR, NOT FOUND AC2 /BUMP TO FIELD WORD OF SECTAB TAD POINT2 /POINTER TO ENTRY DCA TEMP2 /SAVE JMP NOSEC / PAGE
/EXAMINE TYPE /EXIT CALL+1 IF NOT A DEFINITION / CALL+2 IF A DEFINITION EXMTYP, 0 JMS GETLSD /GET WORD FROM LSD DCA WORD4 TAD WORD4 AND (17 /GET TYPE DCA TYPE /SAVE TYPE CMA TAD TYPE /FIELD OR SECONDARY ENTRY SPA SNA JMP EXRTN /YES TAD (-11 /SECT? SPA JMP EXRTN-1 /YES TAD (-4 SMA CLA /EXTERNAL? JMP EXRTN /YEP CLA /FALL THRU FOR GLOBAL OR ENTRY ISZ EXMTYP EXRTN, JMP I EXMTYP / /
/ENTER A SECT IN SECTAB ENTSEC, 0 CLA CLL TAD (6 TAD SECPTR /MAKE SURE ANOTHER ENTRY WILL FIX TAD (-7600 /LAST LOC THAT CAN BE USED BY SECTAB SZL CLA JMP SOFERR /YOU JUST RAN OUT OF ROOM ISZ SECCNT /BUMP TOTAL COUNT OF SECTS TAD TEMP1 /COMPUTE SECT COUNT IN OVERLAY TAD (SOCNTB DCA SOCNT CDF ISZ I SOCNT /INCR. SECT CNT IN OVRL CDF 10 CMA TAD SECPTR DCA XR3 /SET UP XR3 TO STORE DATA IN SECTAB ACM2 DCA COUNT1 /SET COUNTER TO -2 TAD GINDEX DCA I XR3 /STORE GST SYM INDEX TAD TYPE AND (7400 DCA I XR3 /STORE ABS FLD, ABS ADDR, SAME FLD, SAME ADDR BITS ACM2 TAD TYPE /SUBTRACT 2 FROM TYPE AND (17 /MASK CLL RTR /PUT IN BITS 0-3 RTR DCA TEMP1 /SAVE TAD (5 /COMPUTE LOCATION OF FIELD DATA IN GST TAD GSTPTR DCA GSTADR TAD GSTADR JMS I CGGST /GET THE FIELD WORD DCA I XR3 /STORE IN SECTAB ISZ GSTADR /BUMP POINTER ISZ COUNT1 /GOT BOTH WORDS? JMP .-5 /NO, GO BACK AND GET ADDRESS WORD AND STORE TAD GSTADR JMS I CGGST /GET LEVEL & OVERLAY DATA FROM GST TAD TEMP1 /COMBINE IN "TYPE" CODE DCA I XR3 /PUT IN SECTAB TAD SLEN /GET SECT'S LENGTH DCA I XR3 /PUT IN SECTAB TAD XR3 IAC DCA SECPTR /SET GST POINTER FOR NEXT ENTRY JMP I ENTSEC /DONE / / SOFERR, JMS I CFERR /SECT TABLE OVERFLOW SOFMSG
.ENTRY NFP1 /HERE IF SEARCHING FOR A SYMBOL AND NOT FOUND DURING PASS 1 NFP1, JMS ENTSYM /ENTER SYMBOL INTO GST JMS EXMTYP /DETERMINE SYMBOL TYPE JMP NONDEF /NOT A DEFINITION DCA SFLG /EXMTYP RETURNS WITH SECT FLG IN AC JMP INSDEF /GO INSERT DEFINITION / / / / PAGE /
/ / / / / CHANGE REF PTRS WHICH ARE RELATIVE TO A MODULE / TO BE RELATIVE TO THE BEGINNING OF / OF THE GST / RCRP, 0 DCA TEMP3 /SAVE LSD REFERENCE NUMBER CDF 0 TAD I RCRP /GET FLAG THAT NEEDS TO BE SET CDF 10 TAD TYPE /GET TYPE CODE DCA TYPE /SAVE ISZ RCRP /BUMP RETURN ADDRESS TAD PTPTR TAD (-PTRTAB /COMPUTE LSD # OF CURRENT POINTER CIA TAD TEMP3 /IT'S A BACK REF IF TEMP>LSD# OF CURRENT POINTER SPA SNA CLA /IS IT A BACK REF? JMP BAKREF /OF COURSE TAD I PTPTR /NO - MUST FLAG RAL /IF NOT ALREADY FLAGGED CLL CML RAR DCA I PTPTR /FLAG REFERENCE TAD TEMP3 /GET LSD REFERENCE NUMBER JMP .+3 /RETURN FOR STORAGE BAKREF, TAD TEMP3 /HERE IF A BACKWARD REFERENCE JMS GETREF /GET THE GST NUMBER WHICH CORRESPONDS JMP I RCRP /TO THIS LSD # AND EXIT / /
/HERE IF SEARCHING FOR A SYMBOL DURING PASS1 AND SYMBOL NOT FOUND, /SYMBOL INSERTED BUT NOT YET DEFINED NONDEF, AC4 /5TH WORD IN GST ENTRY IS TYPE TAD GSTPTR DCA GSTADR /INSERT SYMBOL TYPE TAD TYPE /GET TYPE TAD (-17 SZA /ZTERN? IAC /NO SNA /EXTERNAL? CMA /YES, STORE AS GLOBAL (15) TAD (16 /NO, RESTORE VALUE TAD (200 /NOT DEFINED FLAG JMS I CPUTG /PUT IN GST JMS I CPUTG /CLEAR FIELD JMS I CPUTG /CLEAR ADDRESS JMS I CPUTG /CLEAR LVL-OVR ISZ UNDCNT /INCR UNDEFINE COUNT JMP I RETS /RETURN FROM SEARCH .ENTRY FNDP1 /HERE IF SEARCHING FOR A SYMBOL AND FOUND DURING PASS1 FNDP1, AC4 /5TH WORD IN GST ENTRY IS TYPE AND FLAG TAD GSTPTR JMS I CGGST /DETERMINE IF SYMBOL IN GST IS DEFINED AND (200 /GET UNDEF FLAG SNA CLA JMP DEFND /IT IS DEFINED, CHECK FOR ERRORS, RESOLVE SECT LENGTH JMS EXMTYP /EXAM LSD ENTRY'S TYPE JMP ND /NOT A DEFINITION DCA SFLG /DEFINITION, SAVE SECT FLAG CMA TAD UNDCNT DCA UNDCNT /DECREMENT UNDEF COUNT /INSERT DEFINITION INSDEF, ISZ GSTADR /SETUP FOR WORD 6 (FIELD/LSD REF #) TAD SFLG /SECT? SZA CLA JMP SECTYP /YES, PROCESS DATA RELATIVE TO SECT /(FLAGS, ADDRESS, FLD, LENGTH) TAD WORD4 /NO, BITS 0-7 CONTAIN AND (7760 /INDEX OF CLL RTR /REFERENCE SECT RTR /PUT IN 4 TO 11 OF AC JMS I CPUTG /PUT IN GST AC4000 /SET AC TO 4000 DCA I PTPTR /FLAG LSD/GST POINTER ENTRY JMS GETLSD /GET VALUE OR OFFSET FROM LSD JMS I CPUTG /AND STORE IN ADDRESS WORD JMP LSTWR1 /STORE A 0 IN WORD 7
LSTWRD, TAD WORD4 /GET WORD 4 AND (40 SNA CLA /OVERLAY AND LEVEL IN LSD? JMP LSTWR0 /NO, GET FROM MODULE TABLE JMS GETLSD /YES, GET FROM LSD DCA TEMP1 /SAVE TAD TEMP1 /MANIPULATE A LITTLE AND (700 RTR CLL DCA TEMP2 TAD TEMP1 AND (17 TAD TEMP2 SKP LSTWR0, TAD OVRLVL /OVERLAY&LEVEL FROM MODULE TABLE DCA TEMP1 /SAVE TAD TEMP1 LSTWR1, JMS I CPUTG /STORE IN WORD 7 AC4 TAD GSTPTR DCA GSTADR TAD TYPE /INSERT TYPE WITH ALL ITS FLAGS JMS I CPUTG /INTO WORD 5 TAD SFLG SZA CLA /SECT? JMS ENTSEC /YES- MAKE ENTRY IN SECTAB JMP I RETS /END OF SEARCH / /HERE IF FOUND A SYMBOL, IS DEFINED AND NOT A SECT (FROM DEFND) /AND THIS SYMBOL IS A DEFINITION DDEF, JMS GETLSD /GET VALUE DCA TEMP1 /SAVE TAD WORD4 /GET TYPE AND FLAGS TAD (-15 SZA CLA /GLOBAL ONLY(NO LSD REF)? JMP DDERR /NO, ERROR TAD (6 /YES, NOW GET WORD 7 TAD GSTPTR /OF GST ENTRY JMS I CGGST /(VALUE) CIA TAD TEMP1 /VALUE IN LSD SZA CLA /SAME? JMP DDERR /NO, ERROR ND, JMP I RETS /YES, OK / PAGE
DDERR, JMS ERRMSG /DOUBLE DEFINITION ERROR DDMSG CDF 10 JMP I RETS /
/ /HERE TO FIX STARTING ADDRESS IF GIVEN AS AN LSD FIXSA, 0 AC2 TAD STRTFD SZA CLA /SA NEED FIXING? JMP I FIXSA /NO TAD STRTAD /YES, GET LSD JMS GETREF /GET GST# DCA STRTAD /PUT BACK CLA CLL CMA RTL /-3 DCA STRTFD /INTO FIELD WORD JMP I FIXSA /
/HERE IF ABSOLUTE ADDRESS IN LSD PREFACE ADDABS, TAD STRTFD IAC SZA CLA /FIELD=-1 JMP PLSDH3 /NO, ALREADY HAVE AN ADDRESS, IGNORE THIS ONE JMS GETLSD /GET STARTING FIELD DCA STRTFD JMS GETLSD /GET STARTING ADDRESS DCA STRTAD JMP PLSDH1 /DONE /HERE IF SYMBOLIC STARTING ADDRESS ADDLSD, TAD STRTFD IAC SZA CLA /FIELD=-1? JMP PLSDH3 /NO, ALREADY HAVE AN ADDRESS CLA CLL CMA RAL /-2 DCA STRTFD /PUT IN STARTING FIELD JMS GETLSD /GET LSD OF SA DCA STRTAD /PUT IN SA JMS GETLSD /GET OFFSET DCA SAOFF /SAVE FOR LATER JMP PLSDH1 /DONE /HERE IF RB SPEC RBSPEC, JMS GETLSD /GET COARSE SPEC TAD (-RBSPEK SZA CLA /OK? E09==.; JMS I COS8ER /NO ISZ COUNT1 /BUMP COUNTER JMP PLSDH3 /DONE /HERE IF JSW JSW, TAD JSWRD SZA CLA /JSW =0? JMP PLSDH3 /NO, IGNORE JMS GETLSD /GET JSW DCA JSWRD /STORE JMP PLSDH1 /DONE / / PAGE
/ /PROCESS LIBRARIES PROLIB, 0 JMS IMTP /INIT MODTAB POINTER TAD (LIBTB /SET UP POINTER DCA MTLF1 /INTO LIBRARY TABLE LOKMOR, AC2 TAD MODPTR /GET POINTER TO WORD WITH LIB FLAG (WORD 3) DCA TEMP3 TAD I TEMP3 SMA CLA /IS LIB FLAG SET? JMP LFAL1 /NO / STRTLP, TAD MTLF1 /SETUP POINTER DCA MTLF IAC / DCA LIBFLG /INDICATES WHICH MODULE IS BEING PROCESSED DCA DEFFLG /INDICATES IF ANYTHING /WAS DEFINED THIS GO ROUND DCA INPTR /ZERO POINTER INTO LSD TAD I MODPTR /GET LENGTH AND DEVICE AND (7760 /LEN OF MODULE CIA CLL RTR RTR CIA DCA LIBLEN /STORE FOR AWHILE DCA RELBLK /SET START BLOCK OF LSD TO 0 JMS REMOD /READ IN LIB MODULE NXTMD0, CDF 0 TAD I MTLF /GET ENTRY IN LIBRARY TABLE CDF 10 AND LIBFLG /HAS THIS LIB MOD BEEN INSERTED SNA CLA /INTO THE GST? JMP NXTMOD /NO JMS SKPLIB /YES- GO TO NEXT JMP ENDLIB /EOF FOUND JMP GRFNL1 /SET UP FOR NEXT LSD NXTMOD, TAD INPTR /HERE FROM SKPLIB IF EOF NOT FOUND DCA LSDSTR /START OF LSD TAD RELBLK /SAVE CURRENT DCA RELBL1 /LSD BLOCK # CDF 10 JMS PROHDR /SKIP OVER HEADER ISZ PASS2 /PRETEND THIS IS PASS 2
NXTS, TAD I INPTR /GET SYMBOL SNA CLA /END OF LSD? JMP GRFNL /YES, CHECK FOR ANY UNDEFINED SYMBOLS LEFT JMS I (SEARCH /IS THIS SYMBOL IN GST JMP NSYM /NO - HOW ABOUT NEXT? AC4 /SYMBOL WAS FOUND TAD GSTPTR /BUT IS IT UNDEFINED JMS I CGGST /GET FLAGS WORD (WORD 5) AND (200 SNA CLA /UNDEFINED BIT SET? JMP NSYM /NO -TRY NEXT SYMBOL JMS EXMTYP /IT WAS-NOW IS SYMBOL IN LSD JMP NSYM /A DEFINITION?-- NO CLA /YES IT IS- THEN WE WANT THIS LIB MOD CDF 0 TAD I MTLF /GET CONTENTS OF TABLE ENTRY TAD LIBFLG /PUT FLG IN MODTAB DCA I MTLF /TO SHOW THIS AC4 TAD RELBL1 CIA /IS BEGINNING OF LSD STILL IN CORE? TAD I (RB SPA SNA CLA JMP NXTS1 /YES GO ADD LSD TO GST TAD RELBL1 /NO- READ IT BACK INTO CORE DCA RELBLK TAD RELBLK DCA I (RB /BUT FIRST RESTORE ITS BLOCK NO DCA LSDSTR /ZERO LSD ADDRESS JMS REMOD /READ THE MODULE NXTS1, CDF 10 JMS IPTRTB /INIT PTR TABLE DCA PASS2 /LET'S GO BACK TO BEING PASS 1 DCA OVRLVL /LIB GOES INTO ROOT, SO SET OVERLAY AND LEVEL TO 0 ISZ DEFFLG /PUT UP FLAG BECAUSE SOMETHING WAS DEFINED JMS PROBOT /GO PROCESS LSD GRFNL, JMS NXTBLK /SKIP OVER TEXT JMP ENDLIB /EOF FOUND GRFNL1, TAD LIBFLG /YES, GET READY FOR NEXT LSD CLL RAL /BY PUSHING BIT LEFT 1 SNA /IF PUSHING INTO LINK IAC /SET BACK TO 1 DCA LIBFLG /SAVE SZL /WAS IT PUSHED INTO LINK (12 PASSES)? JMS BMPMTL /YES, BUMP LIBRARY POINTER JMP NXTMD0 /LOOK AT NEXT LIB LSD /
/HERE IF END OF FILE FOUND ENDLIB, TAD UNDCNT /ANYTHING LEFT TO DEFINE SNA CLA JMP GOHOME /NO - GO HOME TAD DEFFLG /YES, ANYTHING BEEN DEFINED THIS SNA CLA /GO ROUND? JMP LFAL /NO - GO LOOK FOR ANOTHER LIBRARY CDF 0 /PROCESS THIS LIB AGAIN DCA I (RB CDF 10 JMP STRTLP / LFAL, JMS BMPMTL /BUMP TAD MTLF /POINTER INTO DCA MTLF1 /LIBRARY TABLE LFAL1, JMS ADVPTR /TRY NEXT MODULE JMP LOKMOR JMP UNDERR /OUTPUT ANY UNDEFINED SYMBOLS / GOHOME, CDF 0 / GOHOM1, JMP I PROLIB /EXIT LIBRARY PROCESSOR / / RELBL1, 0 /RELATIVE BLOCK OF LSD MTLF1, 0 /POINTER INTO LIBRARY TABLE / / / PAGE
/BUMP MTLF BMPMTL, 0 ISZ MTLF /BUMP MTLF TAD MTLF TAD (-LIBTB-200 SNA CLA /AT END OF TABLE? E10==.; JMS I COS8ER /YES, ERROR JMP I BMPMTL /NO, OK /BUMP FOR NEXT SYMBOL NSYM, JMS ILSDP /MOVE PTR TO NEXT LSD ENTRY JMP NXTS /GET NEXT SYMBOL / / / /HERE IF PROCESSED ALL LIBRARIES AND STILL HAVE UNDEFINED SYMBOLS UNDERR, TAD GSTCDF /PROCESSED ALL LIBRARIES DCA GCDF /BUT STILL HAVE TAD GST /SOME UNDEFINED SYMBOLS DCA GSTPTR NXTGST, AC4 /SO LETS PRINT THEM TAD GSTPTR /ALL- BUT FIRST WE MUST FIND JMS I CGGST /THEM, PULL FLAG WORD FROM GST ENTRY AND (200 SZA CLA /UNDEFINED BIT SET? JMP UNDEF /YES JMS INCPTR /LOOK AT NEXT GST ENTRY, BUMP POINTER JMS TSTBOT /DONE JMP NXTGST /NO, CHECK NEXT JMP GOHOME /YES, TRY TO CONTINUE UNDEF, JMS ERRMSG UNDMSG /UNDEFINED SYMBOL JMP UNDEF-4 /PROCESS NEXT SYMBOL /
/ /TYPE OUT ERROR MESSAGE ERRMSG, 0 CDF 0 /SET DF=0 JMS CRLF /NEW LINE TAD (NOP /1ST TIME DCA .-2 /ONLY ACM3 /SET AC TO -3 DCA COUNT1 /SAVE AS COUNT CMA TAD I ERRMSG /GET ARGUMENT DCA XR1 /SAVE IN AUTO INDEX TAD I XR1 JMS TTYO /OUTPUT THE MESSAGE TAD I XR1 JMS TTYO TAD (240 JMS TTYO /AND A SPACE TAD GSTPTR /GET POINTER INTO GST DCA GSTADR /SAVE TAD GSTADR JMS I CGGST /GET 1ST 2 CHARACTERS SMA /MINUS? JMP GNTC+2 /NO, OUTPUT AS IS DCA TEMP1 /YES, SAVE TAD (244 JMS TTYO /TYPE "$" TAD TEMP1 AND (3777 /MASK OFF "$" BIT JMP GNTC+2 /OUTPUT REST OF NAMME GNTC, TAD GSTADR JMS I CGGST /GET 1ST 2 CHAR DCA TEMP1 /SAVE TAD TEMP1 RTR CLL /6 RIGHT RTR RTR JMS FIXCHR /FIX CHARACTER IF NECESSARY JMS TTYO /TYPE IT TAD TEMP1 /NOW 2ND HALF JMS FIXCHR JMS TTYO ISZ GSTADR /BUMP PICKUP POINTER ISZ COUNT1 /DONE? JMP GNTC /NO JMS CRLF ISZ ERRMSG JMP I ERRMSG /RETURN TO CALL+2 /
/ UNDMSG, 325;323 /UNDEFINED SYMBOL DDMSG, 304;323 /DOUBLE DEFINITION ERROR GOFMSG, TEXT "SYMBOL TABLE OVERFLOW" SOFMSG, TEXT "SECT TABLE OVERFLOW" / / / PAGE
/ COME HERE TO SORT THE NULL TABLE / LOW TO HI / SNULL, CDF 0 TAD I (NULTAB SNA /IS NULL TABLE EMPTY? JMP RETP1 /YES-CARRY ON CIA DCA NTAB+1 /1ST WORD OF NULTAB=LEN ACM2 DCA COUNT4 /SORT FIELD & PAGE TAD SNULL DCA SCDF /CHANGE FIELD OF SORT JMS SSORT NTAB, NULTAB+1 /ADDRESS OF TABLE 0 /LENGTH OF TABLE 1 /LENGTH OF TABLE ENTRY 0 /WORD OFFSET 7700 /MASK SZL CLA /COMPARE TYPE ISZ COUNT4 /DONE 2 PASSES? SKP /NO JMP RETP1 /YES TAD (37 /SET SORT FOR 7-11 (FLD) DCA NTAB+4 JMP NTAB-3 /GO FOR 2ND PASS .EXTERNAL RETP1
/ GENERAL PURPOSE BUBBLE SORT / / CALLING SEQUENCE: / JMS SSORT / ADDRESS OF TABLE TO SORT / LENGTH OF TABLE / LEN OF TABLE ENTRY / WORD OFFSET TO SORT ON / WORD MASK / COMPARE TYPE / RETURN / SSORT, 0 TAD SSORT DCA XR1 CDF 0 TAD I SSORT DCA TABLE /ADDRESS OF TABLE TO SORT CMA TAD I XR1 /LEN OF TABLE SNA /LENGTH OF 1? JMP EXIT /YES, NO SORT NEEDED CIA DCA TABCNT TAD I XR1 /LEN OF ENTRY DCA LENENT TAD I XR1 /WORD OFFSET DCA WORD TAD I XR1 /MASK DCA MASK TAD I XR1 /TYPE OF COMPARE DCA S1 SCDF, CDF 10 A4, DCA EXCNT /0 COUNT OF EXCHANGES TAD TABCNT DCA COUNT1 /NO. OF COMPARES TAD TABLE /PRODUCE OFFSET TO 1ST WORD TAD WORD DCA POINT1 /FOR 1ST POINTER JMP A2+2 /BYPASS NEXT 2 WORDS A2, TAD POINT2 /COMPLETE BUMP OF 1ST POINTER DCA POINT1 TAD LENENT /SET 2ND POINTER TO NEXT POSITION IN TABLE TAD POINT1 DCA POINT2 TAD MASK /GET MASK IAC SNA CLA /MASK=-1? JMP BIGADD /YES, RANGE OF 1 TO 4096 TAD I POINT1 /GET 1ST WORD AND MASK /MASK TO INTERESTED BITS CIA CLL CML /NEGATE DCA TEMP1 /SAVE TAD I POINT2 /GET 2ND WORD AND MASK /MASK TO INTERESTED BITS
TAD TEMP1 /COMPARE S1, SMA CLA /GETS CHANGED TO SNL FOR TYPE&OVRL JMS EXCHNG /EXCHANGE ENTRIES ISZ COUNT1 /OK WAY THEY ARE- MORE? JMP A2 /YES TAD EXCNT SZA CLA /ANY CHANGES THIS PASS? JMP A4 /YES, START ANOTHER PASS JMP RETSS /NO- RETURN EXIT, ISZ XR1 /EXIT IF LENGTH OF TABLE = 1 ISZ XR1 /BUMP 4 TIMES ISZ XR1 ISZ XR1 RETSS, TAD KCDF10 DCA SCDF /SET SCDF BACK TO CDF+10 JMP I XR1 /EXIT / BIGADD, CLA CLL CML /HERE IF 1 TO 4096 TAD I POINT1 SZA /0? CIA /NO, COMPLEMENT DCA EXCHNG /SAVE TAD I POINT2 SNA /0? CML /YES, COMPLEMENT LINK TAD EXCHNG /COMPARE THE TWO JMP S1 /DO THE SKIP / TABLE, 0 /TABLE ADDRESS TABCNT, 0 /WORD OFFSET MASK, 0 /MASK EXCNT, 0 /COUNT OF EXCHANGES THIS PASS LENENT, 0 /LENGTH OF ENTRY WORD, 0 /WORD OFFSET KCDF10, CDF+10 /
/ /EXCHANGE TWO ENTRIES EXCHNG, 0 TAD WORD CIA TAD POINT1 /CURRENT POINTER - WORD OFFSET = 1 POSITION DCA TEMP1 /1ST WORD TAD WORD CIA TAD POINT2 /CURRENT POINTER - WORD OFFSET = 1 POSITION DCA TEMP2 /2ND WORD TAD LENENT CIA DCA COUNT2 /LENGTH CONTEX, TAD I TEMP1 /GET 1ST WORD DCA TEMP3 /SAVE TAD I TEMP2 /GET 2ND WORD DCA I TEMP1 /STORE IN PLACE OF 1ST TAD TEMP3 /STORE 1ST DCA I TEMP2 /IN PLACE OF 2ND ISZ TEMP1 /BUMP POINTERS ISZ TEMP2 ISZ COUNT2 /DONE WHOLE ENTRY? JMP CONTEX /NO ISZ EXCNT /YES, SET A FLAG JMP I EXCHNG /EXIT / / PAGE
NOSEX, JMS I CFERR /NO SECTS NSMSG /
ADJ, JMS ADJPTR /ADJUST SECTAB POINTERS SECSOR, ACM3 /SORT SECTAB DCA COUNT4 /3 PASSES TAD SECTAB /START OF TABLE DCA STAB TAD SECCNT /# OF ENTRIES SNA /ANY EXIST? JMP NOSEX /NO DCA STAB1 JMS SSORT /SORT SECTAB BY LEN,RESTRICTIONS,&OVRLAY-LVL STAB, 0 /TABLE ADDRESS STAB1, 0 /LENGTH OF TABLE 6 /LENGTH OF ENTRY STAB3, 5 /WORD OFFSET STAB4, 7777 /MASK STAB5, SNL SZA CLA /COMPARE ISZ COUNT4 /DONE ALL PASSES? SKP /NO JMP BUBBLE /YES, BUBBLE UP INDEPENDENT SECTS IAC TAD COUNT4 SNA CLA JMP OVLM /3RD PASS IAC /2ND PASS DCA STAB3 /SET OFFSET TO 1 TAD (7400 /SET MASK TO 7400 JMP OVLM1 OVLM, AC4 /3RD PASS DCA STAB3 /SET WORD OFFSET TO 4 FOR TYPE & OVERLAY TAD (SZL CLA DCA STAB5 /SET COMPARE TO SNL CLA TAD (0177 / SET MASK TO 177 OVLM1, DCA STAB4 JMP STAB-1 /DO A SECOND SORT / /IMAGE AND ALLOCATE CORE / / / /
PAGE
/ADJUSTS SECTAB POINTERS SO THEY /ARE ALL POINTING FORWARDS ADJPTR, 0 CDF 10 NXTFLD, TAD SECCNT /NO. OF ENTRIES IN SECTAB CIA DCA COUNT2 /SAVE AS (-) DCA INCR /CLEAR INCR FOR FIELD TEST IAC TAD SECTAB /START OF SECTAB (+1 = FLAG WORD ENTRY) JMP .+4 NXTEN, DCA INCR AC4 /BUMP TO NEXT SECTAB ENTRY TAD POINT1 DCA POINT1 /SAVE ADDRESS OF FLAG WORD TAD I POINT1 /GET FLAGS WORD DCA TEMP1 /SAVE TAD TEMP1 NXTEN2, ISZ POINT1 /BUMP POINTER TO "FIELD" WORD (OR ADDRESS IF 2ND TIME) SPA CLA /DOES NEXT WORD CONTAIN ABSOLUTE FIELD? JMP CONT /YES, DON'T BOTHER PROCESSING FIELD WORD TAD I POINT1 /GET ENTRY REF POINTER FROM FIELD WORD SNA /DOES IT EXIST? JMP CONT /NO, FORGET IT DCA TEMP3 /YES, SAVE ACM2 /BACK UP TO CURRENT ENTRY GST# TAD POINT1 DCA TEMP2 NEXGST, TAD TEMP3 /COMPUTE GST ADDRESS OF RESTRICTION JMS I CCGSTA AC4 TAD GSTADR JMS I CGGST /GET TYPE AND (17 TAD (-12 SPA /SECT? JMP GOTSEC /YES TAD (-3 /NO SZA IAC SZA CLA /GLOBAL OR ENTRY? E20==.; JMS I COS8ER /NO, ERROR CHKGST, TAD INCR IAC TAD GSTADR JMS I CGGST /GET GST# FROM FIELD OR ADDRESS WORD DCA TEMP3 /SAVE TAD TEMP3 CIA TAD I TEMP2 SNA CLA /SAME AS SECT IN SECTAB? E21==.; JMS I COS8ER /YES, ERROR JMP NEXGST /NO, PROCESS GST#
GOTSEC, CLA TAD INCR TAD ANDI DCA VARINS /SET UP AND INSTRUCTION TAD GSTADR JMS I CGGST /GET TYPE AGAIN VARINS, HLT /AN AND INSTRUCTION GOES HERE SZA CLA /FIELD OR ADDRESS POINTER BAD? JMP CHKGST /YES, GO AROUND LOOP AGAIN TAD TEMP3 /NO, DONE, STORE THIS GST# DCA I POINT1 CONT, TAD INCR SZA CLA /IF INCR=0 ADJUST ADDR PTR JMP TSTNE /ELSE;DO NEXT ENTRY ISZ INCR /SET INCR TO 1 TAD TEMP1 /GET FLAGS WORD RAL /EXTRACT BIT 1 JMP NXTEN2 /BUMP POINTER TO ADDRESS, TRY AGAIN TSTNE, ISZ COUNT2 /MORE ENTRIES? JMP NXTEN /YES, SET BACK TO FLD FLAG TEST JMP I ADJPTR / ANDI, AND .+1 1000 400 INCR, 0 / NSMSG, TEXT "NO SECTS" PAGE
/BUBBLE UP INDEPENDENT SECTS WHICH ARE OBJECTS OF "SAME AS" BUBBLE, TAD SECTAB DCA TEMP1 /START OF CURRENT O/L BUBB0, TAD TEMP1 DCA POINT1 /SET UP POINTER TO SECTAB CDF 10 BUBB1, TAD POINT1 IAC DCA POINT2 /SET UP POINTER TO 2ND WORD IN SECTAB ENTRY TAD I POINT2 AND (7400 SNA CLA /ANY "SAME AS" OR ABS. RESTRICTION BITS SET? JMP BUBB2 /NO, END OF SCAN TAD POINT1 /YES, KEEP GOING TAD (6 /BUMP POINTER DCA POINT1 TAD POINT1 CIA TAD SECPTR SZA CLA /END OF SECTAB? JMP BUBB1 /NO BUBXIT, JMP SNULL /YES, EXIT BUBBLE, SORT NULL TABLE /ALLOCATE CORE BUBB2, TAD POINT1 DCA TEMP2 /BOTTOM OF BUBBLED SECTS TAD TEMP1 /SCAN AGAIN DCA POINT1 BUBB3, TAD POINT1 IAC DCA POINT2 TAD I POINT2 AND (6000 SZA CLA /ANY ABSOLUTE BITS? JMP BUBB4A /YES, NO BUBBLE NEEDED FOR THIS SECT TAD I POINT2 AND (1000 SZA CLA /"SAME FIELD" SET? JMP BUBB4 /YES TAD I POINT2 /NO AND (400 SNA CLA /"SAME PAGE" SET? JMP BUBB5 /NO, DONE WITH THIS OVERLAY ISZ POINT2 /YES, BUMP POINT2 (TWICE FOR ADDRESS"
BUBB4, ISZ POINT2 /(ONCE FOR FIELD) TAD I POINT2 /GET "FIELD" OR "ADDRESS" SECT JMS SSEC /FIND IT IN SECT TABLE NOP TAD POINT2 /RETURN ADDRESS IN POINT2 CIA CLL CML TAD TEMP2 SZL CLA /IS THIS SECT BEYOND BOTTOM OF BUBBLED SECTS? JMS BUB /YES, BUBBBLE IT UP BUBB4A, TAD POINT1 /BUMP POINTER TAD (6 DCA POINT1 TAD POINT1 CIA TAD SECPTR SZA CLA /DONE TABLE? JMP BUBB3 /NO JMP BUBXIT /YES, EXIT BUBB5, TAD POINT1 /DONE WITH THIS OVERLAY, SCAN FOR NEXT TAD (6 DCA POINT1 /BUMP POINTER TAD POINT1 CIA TAD SECPTR SNA CLA /AT END OF TABLE? JMP BUBXIT /YES, EXIT TAD POINT1 /NO IAC DCA POINT2 TAD I POINT2 AND (7400 SNA CLA /ANY "SAME AS" OR ABS. RESTRICTION BITS SET? JMP BUBB5 /NO TAD POINT1 /YES, SET UP FOR NEW O/L JMP BUBB0-1
BUB, 0 TAD (-6 DCA COUNT1 /SET UP FOR 6 LOOPS BUB0, CMA TAD POINT2 /COMPUTE ADDRESS TO BE MOVED TO DCA TEMP3 TAD I POINT2 /GET VALUE DCA TEMP4 /SAVE IT BUB1, TAD I TEMP3 /GET ENTRY TO BE MOVED DOWN ISZ TEMP3 DCA I TEMP3 /PUT IN NEW LOCATION ACM2 /DECREMENT MOVE POINTER TAD TEMP3 DCA TEMP3 TAD TEMP3 CIA CLL CML TAD TEMP2 SZL SNA CLA /AT INSERTION POINT? JMP BUB1 /NO TAD TEMP4 /YES DCA I TEMP2 /PUT IN NEW VALUE ISZ TEMP2 /BUMP STORAGE POINTER ISZ POINT2 /BUMP PICKUP POINTER ISZ COUNT1 /DONE 6? JMP BUB0 /NO JMP I BUB PAGE



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search