File FIN3.MA (MACREL macro assembler source file)

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

/11 FIN3.PA CREATES OVRK.SV AND OVRI.SV	POST FT-1
/ 8-MAR-78	ADDED SUPPORT OF AUXILIARY SECT CHUNK
/ 15-AUG-78	CHECK ST BIT TO SEE IF PRINT ST
	.INCLUDE MGLOB.MA
	.ASECT FIN3,LEVEL=1,OVERLAY=12
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1977 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.
/
/
/
/
/
/
/
/
/
/

.EXTERNAL ASEMLV,BACKUP,BRANCH,CREF,CRLF,DPRINT,ENTER,EOS,ERROR,EXPR .EXTERNAL FSCHEK,GETCHR,GETKAR,GETSYM,LETTER,LISTER,LOOKUP,ORIG,OUT,PARSYM .EXTERNAL PASS3,POP,PUSH,PUNBIT,PUTBIT,PUTSYM,PUXBIN,READLN,ROTL6,SCAN .EXTERNAL LOAD,BUKETS,CLOSO,NEWPAG,TAB,GETSYM,PUTSYM,CRLF,OPRINT,BRAN FIELD 3 / THE PASS 3 FIN OVERLAY AND ITS EXTENSION OVERLAY *2000 RELOC 6400 13 /OVERLAY NUMBER JMS I (LOAD /LOAD THE EXTENSION TO THIS OVERLAY 2000+11 / ISZ PAGENO /GO TO NEW PAGE TAD I (LISTWD RAL CLL RAR DCA I (LISTWD /ALLOW LISTING TAD (BUKETS-1 DCA XR2 /GET SET TO GO THROUGH BUCKETS / / LINK ALL CHAINS TOGETHER / / THIS SHOULDN'T HURT SINCE WE DON'T EXPECT TO DO ANY / NEW ENTERS ON PASS 4. / UNFORTUNATELY, WE CAN'T UNLINK THE PERMANENT SYMBOLS / BECAUSE THEY ARE STILL NEEDED IF WE GET A KREF PASS. TAD I XR2 /GET START OF NEXT CHAIN, FIELD 0 SNA /IS THERE A CHAIN IN THIS BUCKET? JMP .-2 /NO, BUT THERE MUST BE SOME SYMBOL DCA SYMNUM /YES, SAVE 15-BIT PTR TO START OF CHAIN TAD SYMNUM JMP FD3 FB3, JMS I (CNVADR /CONVERT TO 12-BIT POINTER DCA LPTR /POINT TO 15-BIT PTR TO NEXT CHUNK TAD I LPTR /GET PTR TO NEXT CHUNK SZA /IS THIS THE END OF THE CHAIN? JMP FB3 /NO, KEEP LOOKING TAD NXTPTR /YES DCA I LPTR /LINK THIS CHAIN TO NEXT ONE CDF 0 TAD NXTPTR FD3, DCA TEMP FC3, TAD XR2 TAD MMM SNA CLA JMP DONE /AT END OF BUCKETS TAD I XR2 /GET NEXT CHAIN SNA /IS THERE ONE? JMP FC3 /NO DCA NXTPTR /YES, THIS IS THE NEXT POINTER TAD TEMP JMP FB3 NXTPTR, 0
DONE, DCA NUM TAD WIDTH /GET WIDTH TAD L10 /BUMP BY 8 TAD M40 /DIVIDE BY 40 ISZ NUM SMA JMP .-3 M40, SMA SZA CLA /ALWAYS SKIPS L10, 10 TAD NUM AND QQ7 /DON'T ALLOW MORE THAN 7 COLUMNS SNA IAC /BUT AT LEAST ONE DCA COLNUM /AND STORE AWAY NUMBER OF COLUMNS / / GET POINTERS TO START OF EACH COLUMN ON THIS PAGE / / / 'SYMNUM' IS THE CURRENT CHUNK / DLUP, TAD (PTRTBL DCA CPTR TAD COLNUM CIA DCA COLKNT STA /66(8)=54(10) ITEMS PER COLUMN DCA ROWKNT JMP D2 D4, TAD (-66 DCA ROWKNT TAD I CPTR SNA CLA JMP DEND /PREMATURE END ISZ CPTR TAD NXTPTR D2A, DCA SYMNUM D2, TAD SYMNUM JMS I (CNVADR DCA LPTR /GET POINTER TO PTR TO NEXT CHUNK TAD LPTR TAD (5 DCA LPTR2 /GET POINTER TO FLAG WORD TAD I LPTR2 /GET FLAG WORD AGAIN AND (1200 /CHECK PERM BIT AND LOCAL BIT SZA CLA STA /DON'T COUNT PERMANENT OR LOCAL SYMBOLS NOCNT, TAD ROWKNT DCA ROWKNT TAD I LPTR /GET PTR TO NEXT CHUNK SNA JMP D3 ISZ ROWKNT JMP D2A DCA NXTPTR /*** BUG IF LAST ENTRY ENDS AT BOTTOM OF COLUMN TAD SYMNUM D3, CDF 0 DCA I CPTR /SET NEXT ITEM ISZ COLKNT /LAST COLUMN? JMP D4 /NO DEND, TAD I CPTR /SAVE LAST ITEM AS NEXT DCA SYMNUM DCA I CPTR /ALWAYS END WITH 0 JMS I (STPRNT /PRINT PAGE OF SYMBOL TABLE TAD SYMNUM /ANY MORE? SZA CLA JMP DLUP /YES, GO PRINT NEXT PAGE TAD (-OUTCRS-1 /OUTPUT LAST BUFFER DCA KNT /BY WRITING CTRL/Z FOLLOWED BY ZEROES TAD (32 /^Z JMS I QQLISTER /WRITE ENOUGH TO DUMP BUFFER ISZ KNT /INCLUDING ^Z JMP .-2 CIF CDF 10 JMS I (CLOSO JMP I (NEX LPTR2, 0 CPTR, 0 /POINTS INTO PTRTBL COLKNT, 0 COLNUM, 0 ROWKNT, 0 MMM, -BUKETS-77 PAGE
STPRNT, 0 TAD I (LISTWD AND (20 SZA CLA JMP 2$ TAD SUBPAG JMS I (NEWPAG ISZ SUBPAG /GO TO NEXT SUB-PAGE NUMBER 2$: TAD (-66 DCA KNT /66 ROWS FE, TAD (PTRTBL DCA COLPTR /POINT AT POINTER FOR FIRST COLUMN SKP /NO TAB FIRST TIME THRU FI, JMS I (TAB TAD I COLPTR SNA JMP ENDROW /AT END OF ROW JMS I (CNVADR DCA LPTR /GET POINTER TO PTR TO NEXT CHUNK TAD I LPTR DCA NXTL /GET 15-BIT PTR TO NEXT CHUNK TAD LPTR DCA XR2 /POINT INTO CHUNK TAD I XR2 /PULL OUT NAME DCA NAME1 TAD I XR2 DCA NAME2 TAD I XR2 DCA NAME3 CDF 0 TAD I COLPTR JMS I (GETSYM TAD I (LISTWD AND (20 SZA CLA JMP 3$ JMS I (PRN /PRINT NAME JMS I (TAB JMS I (XPRINT /PRINT STUFF JMS I (TAB /PRINT EXTRA TAB FOR WIDE SPACING 5$: TAD FLAG AND QQ70 SNA CLA /SECT? JMP FH /NO DCA SYMVAL /YES, ZERO PC FOR SECTS TAD FLAG AND QQ70 TAD QM10 SZA CLA JMP 3$ TAD SYMSCT JMS I (CNVADR TAD (2 DCA PRNT2 STA /SET MIN TO -1 FOR A-SECTS DCA I PRNT2 CDF 0 3$: TAD I COLPTR JMS I (PUTSYM /WRITE IT BACK FH, TAD NXTL SNA JMP FG /NO MORE CHUNKS JMS I (CNVADR DCA LPTR TAD LPTR TAD (5 DCA LPTR3 /POINT TO FLAG TAD I LPTR3 /GET FLAG AND (1200 SNA CLA JMP OKST2 /NOT PERMANENT OR LOCAL TAD I LPTR /GET PTR TO NEXT CHUNK DCA NXTL JMP FH OKST2, TAD NXTL FG, CDF 0 DCA I COLPTR /SET NEXT ITEM ISZ COLPTR /POINT TO NEXT COLUMN JMP FI
NXTL, 0 COLPTR, 0 LPTR3, 0 ENDROW, TAD COLPTR TAD (-PTRTBL SNA CLA JMP I STPRNT /DONE TAD I (LISTWD AND (20 SNA CLA JMS I (CRLF ISZ KNT /ANY MORE ROWS? JMP FE /YES JMP I STPRNT /NO, DONE WITH THIS PAGE SUBPAG, 0 /SYMBOL TABLE SUB-PAGE NUMBER
/ 'PRNT2' PRINTS TWO MACREL SIXBIT CHARS (PACKED INTO WORD IN AC) PRNT2, 0 DCA SYMTEM TAD SYMTEM CLL RTR RTR RTR JMS I (PRNT6 TAD SYMTEM JMS I (PRNT6 JMP I PRNT2 SYMTEM, 0 PAGE RELOC
.ASECT FIN3X,LEVEL=1,OVERLAY=10 FIELD 3 *2000 /EXTENSION OVERLAY 11 /OVERLAY I PRN, 0 PRNAME, TAD NAME1 SPA JMP PRDOL JMS I (PRNT2 TAD NAME2 JMS I (PRNT2 TAD NAME3 JMS I (PRNT2 JMP I PRN PRDOL, RAL CLL RAR /REMOVE DOLLAR BIT DCA NAME1 TAD (44 /$ JMS I QQLISTER JMP PRNAME
XPRINT, 0 TAD SYMVAL DCA PRTVAL TAD FLAG AND (4 SZA CLA JMP LSD /DO SPECIAL STUFF FOR LSD ENTRIES TAD FLAG AND QQ7 TAD (-1 SZA CLA JMP .+3 DCA PRTVAL /MACRO - PRINT 0 AS VALUE TAD ("M-40 /CODE CHARACTER IS "M" TAD QQ40 XP2, JMS I QQLISTER /PRINT SPACE BEFORE VALUE TAD QQ40 JMS I QQLISTER TAD FLAG SMA CLA JMP I (UNDF /UNDEFINED VALUE TAD PRTVAL STL JMS I (OPRINT /PRINT VALUE XP3, TAD FLAG AND QQ70 CLL RTR RAR JMS I (BRAN NOTSCT /0 NOT A SECT AS /1 RS /2 FS /3 DS /4 ZS /5 XS /6 NOTSCT /7 UNUSED XS, TAD ("X-"Z ZS, TAD ("Z-"D DS, TAD ("D-"F FS, TAD ("F-"R RS, TAD ("R-"A AS, TAD ("A DCA XCNT TAD (4040 JMS I (PRNT2 TAD XCNT JMS I QQLISTER TAD (2305 /SE JMS I (PRNT2 TAD (0324 /CT JMS I (PRNT2 XRET, JMP I XPRINT PRTVAL, 0
LSD, TAD FLAG AND (3 JMS I (BRAN XENTRY XGLOB XEXT XZTE XENTRY, TAD ("E-"G /"E" MEANS ENTRY XGLOB, TAD ("G /PRINT "G" BEFORE VALUE JMP XP2 /TO INDICATE A GLOBAL XCNT, 0 XZTE, TAD ("0-"* /HACK: ZTERNAL PRINTS AS A VALUE OF 0*** XEXT, DCA I (SNAM TAD I (SNAM SNA CLA TAD ("X-"Z TAD ("Z TAD PRTVAL /CHANGE "X" TO "Y" FOR A SECONDARY REFERENCE JMS I QQLISTER /X MEANS EXTERNAL, Z MEANS ZTERNAL TAD QQ40 JMS I QQLISTER /PRINT SPACE BEFORE UNKNOWN VALUE TAD (-4 DCA XCNT /GET SET TO PRINT 4 QUESTION MARKS TAD I (SNAM /CONVERT FIRST "*" TO "0" IN CASE OF ZTERNAL JMS STARS /THEN PRINT 3 STARS JMP XP3 STARS, 0 /PRINT 4 STARS TAD ("* /AC MAY BE NON-0 JMS I QQLISTER ISZ XCNT JMP .-3 JMP I STARS PAGE
NOTSCT, TAD FLAG AND QQ7 JMS I (BRAN REG MAC PSMAC PSOP ENT GLO EXT ZTE ENT, GLO, REG, TAD SYMSCT SNA CLA JMP ABS TAD ("+ JMS I QQLISTER TAD QQ40 JMS I QQLISTER TAD SYMSCT JMS I (CNVADR IAC DCA SNAM TAD I SNAM DCA NAME1 ISZ SNAM TAD I SNAM DCA NAME2 ISZ SNAM TAD I SNAM DCA NAME3 CDF 0 JMS I (PRN JMP I (XRET SNAM, 0
UNDF, TAD (-4 DCA I (XCNT JMS I (STARS /PRINT 4 STARS TAD ("? JMS I QQLISTER /THEN A QUESTION MARK JMS I (TAB TAD (7455 /THEN AN OBTRUSIVE ARROW JMS I (PRNT2 TAD (5555 JMS I (PRNT2 TAD ("- JMS I QQLISTER MAC, PSMAC, PSOP, EXT, ZTE, ABS, JMS I (TAB JMP I (XRET
/IMPORTANT CONVENTION: /THE NON-0 ITEMS IN PTRTBL ALWAYS POINT TO /SYMBOL TABLE CHUNKS WHICH ARE NOT PERMANENT SYMBOLS (FIXTABBED). PTRTBL, ZBLOCK 10 /UP TO 7 15-BIT POINTERS POINTING TO SYMBOL /WHICH STARTS A COLUMN. /ENDS WITH A 0. / 'PRNT6' PRINTS A SINGLE MACREL SIXBIT CHAR IN LOW ORDER AC PRNT6, 0 AND QQ77 SNA JMP I PRNT6 TAD (-34 /. SNA TAD (56-34 /CONVERT 34 TO 56 IAC SNA /$ TAD (44-33 /CONVERT 33 TO 44 TAD (33+40 AND QQ77 TAD QQ40 JMS I QQLISTER JMP I PRNT6 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