File LNKBN1.MA (MACREL macro assembler source file)

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

/LNKBN1 - LINK BINARY MODULE #1
/
/
/
/
/
/
/
/
/
/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 BINARY MODULE #1 XLIST NOPUNCH .INCLUDE LNKMAN.MA ENPUNCH XLIST .RSECT LNKBN1 .ENTRY CCCB CCCB, TAD OUTFIL /START HERE CDF SNA /ANY OUTPUT SPECIFIED? JMP I (7600 /NO, EXIT JMP CCCB1 /YES, PROCEED
/ BYTSWP, 0 RTR RTR RTR JMP I BYTSWP / BUTTNG, CLA CMA /SET XR1 BACK TO UL2 TAD XR1 DCA XR1 TAD I XR0 /SET UL2 TO UL1, THEN DELETE ENTRY #1 DCA I XR1 TAD XR0 TAD (-CCB-177 SZA CLA /END OF BUFFER? JMP .-5 /NO ISZ I (CCB /YES, BUMP(DECREMENT) CCB COUNT BUTT1, CLA CLL CMA RTL /-3 TAD XR2 /PUSH BACK STORAGE POINTER DCA XR2 CLA CMA TAD COUNT3 DCA COUNT3 CMA TAD COUNT3 SNA CLA /WORTH SORTING AGAIN? JMP PLAXIT /NO JMP SORTED /MAKE ANOTHER PASS ON TRIPLETS NOCMPR, ISZ XR1 /NO COMPARISON NEEDED ISZ XR1 /BUMP AROUND LL'S AND UL'S ISZ XR0 NXTONE, ISZ XR0 ISZ TEMP1 /ANY MORE TO DO? JMP MRGLP /YES MERGED, JMP PLAXIT /NO CCCB2, TAD OPTAB+1 RAR SNL CLA /DOING AN RTS8 SYSTEM (/X) ? JMP .+3 /NO CMA TAD CURBLK /YES, DOUBLE LENGTH OF OVERLAY AREA TAD CURBLK TAD TEMP3 /COMBINE WITH LENGTH OF MAIN JMP MORCCB /CREATE BINARY FILE .EXTERNAL MORCCB
/ABCDE TO ACDEB00 FLD59, 0 CLL RAL /MOVE AC LEFT 1 TAD (7740 /PUT "A" IN LINK AND (37 /CLEAR UNUSED BITS TAD (3760 /PUT "B" IN AC0 SPA /"B"? IAC /YES, PUT "B" IN AC11 AND (17 /MASK OFF GARBAGE SZL /"A"? TAD (20 /YES, PUT "A" IN 7 CLL RTL /LEFT 2 JMP I FLD59 /DONE /ABCDE TO CDEBA0 FLD80, 0 CLL RAL /MOVE AC LEFT 1 TAD (7740 /PUT "A" IN LINK AND (37 /CLEAR UNUSED BITS TAD (3760 /PUT "B" IN AC0 SPA /"B"? IAC /YES, PUT "B" IN AC11 RTL /PUT "B" IN 9, "A" IN 10 AND (76 /MASK OFF UNWANTTED BITS JMP I FLD80 /DONE
PAGE
/BUILD CORE CONTROL BLOCK CCCB1, JMS I CIOHAN /GET HANDLER FOR SAVE FILE TAD (CCB DCA XR2 /CREATE CCB TAD STRTFD JMS FLD59 /REARRANGE FOR CDF-CIF TAD (CIF CDF DCA I XR2 /STORE STARTING FIELD IN CCB TAD STRTAD DCA I XR2 /STORE STARTING ADDRESS IN CCB TAD JSWRD DCA I XR2 /STORE JOB STATUS WORD IN CCB TAD SECTAB DCA POINT1 /SET UP POINTER FOR SECTABLE PROCESSING DCA COUNT3 /ZERO COUNTER FOR TRIPLETS TAD SECCNT CIA DCA COUNT1 /SET UP COUNTER FOR SECTABLE PROCESSING LOOP, CDF 10 /SET DF=1 AC4 TAD POINT1 DCA POINT2 /SET POINT2 TO POINT TO OVERLAY # TAD I POINT2 /GET OVERLAY # AND (177 SZA CLA /0? JMP LOOP1 /NO, DON'T BOTHER ISZ POINT2 /YES, BUMP TO SECT SIZE TAD I POINT2 SNA JMP LOOP1 /IGNORE 0 LENGTH SECTS DCA CSIZE /SAVE SECT SIZE TAD I POINT1 /GET INDEX INTO GST AND (3777 JMS I CCGSTA /COMPUTE GST ADDRESS TAD GSTADR TAD (5 JMS I CGGST /GET SECT'S FIELD DCA CFLD /SAVE TAD GSTADR IAC JMS I CGGST /GET SECT'S ADDRESS DCA CADDR /SAVE JMS PLACE /CREATE AND PROCESS TRIPLET LOOP1, TAD POINT1 /BUMP POINTER TAD (6 DCA POINT1 CDF ISZ COUNT1 /DONE WITH ALL SECTS? JMP LOOP /NO
CONVRT, TAD (CCB+3 /YES, CONVERT TRIPLETS TO DCA XR0 /2 WORD PAIRS TAD (CCB+3 DCA XR1 TAD I (CCB DCA TEMP1 MERGLP, TAD I XR0 /GET FIELD JMS FLD80 /REARRANGE DCA TEMP2 /SAVE TAD I XR0 /GET LOW ADDRESS DCA TEMP3 /SAVE TAD TEMP3 /THEN STORE DCA I XR1 /IN CCB TAD TEMP3 /GET LOW ADDRESS CIA /SUBTRACT FROM TAD I XR0 /HIGH ADDRESS TO GET LENGTH CLL RAR /POSTION TAD TEMP2 /ADD IN FIELD DCA I XR1 /STORE IN CCB ISZ TEMP1 /DONE ALL TRIPLETS? JMP MERGLP /NO TAD I (CCB /YES, CHECK SIZE OF CCB TAD (40 SPA CLA /OK? E32==.; JMS I COS8ER /NO, TOO MANY 2 WORD PAIRS CADDR=TEMP2 CSIZE=TEMP3
/PROCESS CCB TO FIGURE OUT LENGTH OF MAIN PROCES, TAD (CCB+4 DCA XR0 /SET UP POINTER DCA TEMP3 /ZERO BLOCK COUNT TAD I (CCB DCA COUNT1 /SET UP COUNTER PROSS1, TAD I XR0 /GET FIRST WORD OF PAIR JMS BYTSWP /EXCHANGE HALVES OF AC AND (37 /MASK TO PAGE BITS SNA /IF 0, MAKE 37 TAD (37 IAC /CONVERT TO BLOCKS RAR CLL TAD TEMP3 /ADD TO BLOCK COUNT DCA TEMP3 ISZ XR0 /BUMP POINTER TO NEXT PAIR ISZ COUNT1 /DONE? JMP PROSS1 /NO /NOW MODIFY QUSRLV APPROPRIATELY CDF 10 TAD TEMP3 RAL CLL DCA I (QUSRLV+3 /SET LENGTH TO BLOCK COUNT*2 TAD (-7 DCA COUNT1 TAD (QUSRLV+6 DCA TEMP1 MOD1, TAD TEMP3 /GET LENGTH OF MAIN TAD I TEMP1 /ADD IN CURRENT RELATIVE BLOCK DCA I TEMP1 /STORE BACK AC4 TAD TEMP1 /BUMP TO NEXT RELATIVE BLOCK WORD DCA TEMP1 ISZ COUNT1 JMP MOD1 /PROCESS NEXT JMP CCCB2 /NOW FIX CURRENT BLOCK NUMBER / PAGE
PLACE, 0 CDF /FIRST FORM TRIPLET(FLD,LOW ADDRESS,HI) TAD CFLD /GET CURRENT FIELD DCA I XR2 /STORE IN BUFFER TAD CADDR /GET LOW ADDRESS AND (7400 /MASK TO EVEN PAGE DCA I XR2 /STORE IN BUFFER TAD CSIZE /GET SIZE TAD (177 /MAKE MULTIPLE OF 200 TAD CADDR /ADD LOW ADDRESS TO MAKE HIGH AND (7600 DCA I XR2 /PUT IN BUFFER ISZ COUNT3 /BUMP COUNTER SORTCB, TAD COUNT3 CIA /SET UP COUNT DCA I (CCB TAD (CCB+3 DCA P1 /SET P1 TO 1ST ENTRY-1 IAC TAD I (CCB SNA /ANY TO SORT? PLAXIT, JMP I PLACE /ONLY 1, DON'T BOTHER DCA TEMP1 /YES, SET UP LOOP COUNT OUTRLP, AC3 /SET P2 TO 2ND ENTRY-1 TAD P1 DCA P2 TAD TEMP1 /SET UP INNER LOOP COUNT DCA TEMP2 INERLP, TAD P1 /SET UP XR0 DCA XR0 TAD P2 DCA XR1 /SET UP XR1 TAD I XR0 /GET FIRST ENTRY (FIELD) CIA CLL TAD I XR1 SNA CLA /SAME AS 2ND ENTRY'S FIELD? JMP TIE /YES SZL /NO, IS 1ST ENTRY HIGHER? JMP SWITCH /NO, SWITCH ENTRIES TIENTY, AC3 /YES, BUMP 2ND ENTRY POINTER TO NEXT TAD P2 DCA P2 SWNTRY, ISZ TEMP2 /ANY MORE ENTRIES TO PROCESS? JMP INERLP /YES AC3 /NO, BUMP 1ST ENTRY POINTER TO NEXT TAD P1 DCA P1 ISZ TEMP1 /ANY MORE ENTRIES TO PROCESS? JMP OUTRLP /YES JMP SORTED /NO, TABLE IS SORTED
TIE, TAD I XR0 /FIELDS ARE SAME, CHECK LOW ADDRESSES CIA CLL TAD I XR1 SZL CLA /1ST ENTRY LOWER THAN 2ND? JMP TIENTY /YES SWITCH, JMS SWSUBR /NO, SWAP ENTRIES JMS SWSUBR JMS SWSUBR CLA CLL CMA RTL /-3(BACK UP 1ST ENTRY POINTER) TAD P1 DCA P1 JMP SWNTRY /CHECK FOR MORE ENTRIES TO PROCESS SWSUBR, 0 ISZ P1 ISZ P2 TAD I P1 DCA TEMP4 TAD I P2 DCA I P1 TAD TEMP4 DCA I P2 JMP I SWSUBR P1=TXTWRD P2=TXTPTR
SORTED, TAD I (CCB /HERE WHEN SORTED, GET READY TO MERGE IAC DCA TEMP1 TAD (CCB+3 DCA XR1 /SET UP POINTER TO ENTRY 1 TAD (CCB+6 DCA XR0 /SET UP POINTER TO ENTRY 2 MRGLP, TAD I XR0 /GET FIELD OF ENTRY 1 CIA TAD I XR1 SZA CLA /SAME AS FIELD OF ENTRY 2? JMP NOCMPR /NO, BYPASS REST OF STUFF ISZ XR1 /YES, BUMP OVER LOW LIMIT OF ENTRY 2 TAD I XR1 /GET HIGH LIMIT OF ENTRY 2 SNA /NON-ZERO? JMP BUMPX0 /NO, HI LIMIT OF 2 GREATER THAN 1'S CIA CLL TAD I XR0 /COMPARE AGAINST LOW LIMIT OF ENTRY 1 SNA CLA /UL2=LL1 - ABUTTING JMP BUTTNG SZL CLA JMP NXTONE /UL2<LL1 - NORMAL CLA CMA /UL2>LL1 - INCLUSIVE TAD XR1 DCA XR1 /SET BACK TO UL2 CLA CLL CML /SET LINK TAD I XR1 SZA /IF ZERO DON'T BOTHER COMPLEMENTING CIA DCA XR3 /SAVE TAD I XR0 /UL1 SNA /IF 0, COMPLEMENT LINK CML TAD XR3 /COMBINE WITH PREVIOUS VALUE SNA SZL CLA JMP BUTTNG+3 /UL2=>UL1,DELETE ENTRY 1 LESSTH, CLA CMA /UL2<UL1,SET UL2=UL1,DELETE ENTRY 1 TAD XR0 DCA XR0 JMP BUTTNG BUMPX0, ISZ XR0 /BUMP XR0 TWICE ISZ XR0 JMP BUTTNG+3 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