File MACLIT.MA (MACREL macro assembler source file)

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

/12	MACREL LITERAL OVERLAY
/ 8-MAR-78	KLUDGED IN AUXILIARY SECT CHUNK SUPPORT
/ 17-AUG-78	FIXED BUG WITH (ZL
/ 23-AUG-78	FSECT LITERALS
	.INCLUDE MGLOB.MA
	.ASECT MACLIT,LEVEL=2,OVERLAY=10
/
/
/
/
/
/
/
/
/
/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 PUNY,PAGE0,COMN,LITKOM,CURPAG,PUSHL,PRNDSH,OUTDAT,POPL .EXTERNAL LITKRF,CNVCNV FIELD 4 .GLOBAL ZSECTG,PURGEL,OUTLIT,KLU8,KLU11 *2000 RELOC 2400 31 ZSECTG, 0 TAD CURSCT JMS I (CNVADR DCA XR4 STL RAR /4000 TAD I XR4 DCA NAME1 TAD I XR4 DCA NAME2 TAD I XR4 DCA NAME3 ISZ XR4 TAD I XR4 /GET FLAG AND L100 SZA CLA JMP GENUN /SPECIAL: /GENERATE PAGE 0 LITERAL FOR UNNAMED SECTION DCA QUAL CDF 0 JMS I QQLOOKUP JMS I QQENTER JMS I QQGETSYM TAD ZLTLOC IAC DCA SYMVAL TAD FLAG SPA CLA JMP ZSGO TAD (4050 DCA FLAG /IT'S A ZSECT TAD FREEPTR SNA HLT DCA SYMSCT TAD SYMSCT JMS I (CNVADR DCA ZL TAD I ZL DCA FREEPTR DCA I ZL ISZ ZL STL RAR /RESTRICT LITERAL SECT DCA I ZL /TO THE SAME FIELD AS MAIN SECT ISZ ZL TAD CURSCT DCA I ZL ISZ ZL / TAD (4040 /THIS USELESS LINE WOULD GUARANTEE /THAT PAGE 0 LITERAL SECT WENT INTO ROOT DCA I ZL /NOT IN OVERLAY ISZ ZL DCA I ZL /NON-CONCATENATED CDF 0 ZSGO, JMS I QQPUTSYM TAD SYMNUM DCA I (ZSECTN / DCA ZLTLOC TAD I (ZSECTN JMP I ZSECTG
ZL, 0 SNA CLA JMP PRGEND /NO LITERALS / TAD I (ZSECTN / SNA JMS ZSECTG /GET SECT OF LITERALS JMS I QQGETSYM /*** MAY HAVE DONE IT ALREADY (INEFF) JMS I (PUNY /PASS 2 JMP ZOUT /NO TAD (3 /YES DCA FLG TAD QUAL AND QQ377 /GET LSDNUM TAD (NEWSCT /SWITCH TO NEW SECTION JMS I QQPUNBIT ZOUT, JMS I (OUTLIT PAGE0 PRGEND, JMP I ZL
GENUN, TAD TRMABS CMA TAD QQ200 DCA TRMABS /THESE LITERALS RUN DOWN FROM 177 DCA TRMREL /IN SAME ABSOLUTE SECTION TAD TRMABS JMS I (HGHSCT TAD ZLTLOC SNA JMP I (COMN /FIRST LITERAL CIA TAD TRMABS SMA CLA /NEW LOW? JMP I (LITKOM /NO JMP I (COMN /YES
ZLIT, TAD CURSCT JMS I QQGETSYM CIF 20 JMS I (KLU1 JMS ZL DCA ZLTLOC DCA I (ZSECTN JMP I (PURGO 0 LEX1, PC BINARY EXPREL EXPCOD CURSCT CSTYPE L100, HISEK FLG LEX2, FORM 0 .IF NE HISEK-100 <_ERROR_>
FLO2, TAD SYMSCT JMS I (CNVADR TAD (5 /POINT TO 5TH WORD OF AUXILIARY CHUNK DCA ZL TAD SYMVAL /SAVE AWAY LENGTH OF THIS FSECT DCA I ZL /BEFORE ADDING IN ANY LITERALS CDF 0 JMP I (FLO PAGE
PURGEL, 0 DCA KIND CIF 20 JMS I (KLU10 JMS OUTLIT LPAG, CURPAG NOL1, DCA CLTLOC DCA HGHLOC PURGO, JMP I PURGEL LLOC, 0 KIND, 0 /1 IF PURGING PAGE 0 LITERALS /0 IF PURGING CURRENT PAGELITERALS
LITKNT, 0 /COUNTER LITPTR, 0 /PTS INTO CURRENT PAGE LITERAL TABLE / TAD LOC OF LAST LITERAL GENERATED / JMS OUTLIT / PTR TO LITERAL TABLE OUTLIT, 0 DCA LLOC /SAVE LOC OF LAST LITERAL GENERATED TAD I OUTLIT DCA LPAG /SAVE LITERAL PAGE INCR OUTLIT JMS I (PUSHL LEX1 DCA EXPCOD TAD KIND SZA CLA JMP ZLO TAD CSTYPE TAD (-30 SNA CLA JMP I (FLO2 /WE ARE IN AN FSECT TAD LLOC /WHAT'S LAST LITERAL LOCATION? AND QQ177 /GET REL LOC ON PAGE CIA TAD QQ200 /CONVERT TO LITERAL NUMBER (1-77) CIA DCA LITKNT /NEG OF NO. OF LITERALS STA DCA INK JMP OF
ZLO,/ TAD ZLTLOC / CMA / DCA LITKNT TAD I (ZSECTN DCA CURSCT TAD (50 DCA CSTYPE DCA HISEK FLO, DCA LITKNT /LET -1 END TABLE CLA IAC DCA INK STA JMP OF2 OF, TAD LITKNT CIA CLL RAL /DOUBLE. (2 WORDS PER LITERAL) OF2, TAD LPAG /GET PTR TO END OF LITERAL TABLE DCA LITPTR DCA FORM TAD LINOUT JMS I QQPUSH DCA LINOUT TAD CSTYPE TAD (-30-1 TAD INK SNA CLA /NO DASHES ON CURRENT PAGE FSECT LITERALS JMP LITLP /AND NO ORIGIN CHANGE JMS I QQPASS3 SKP JMS I (PRNDSH /HACK: PRINT DASHES TAD LLOC JMS I QQORIG LITLP, JMS CMNMOV SZL DCA NAME2 SNL DCA EXPREL JMS CMNMOV SZL DCA EXPREL SNL DCA NAME2 TAD EXPREL IAC SNA CLA JMP 3$ /-1 ENDS TABLE AS WELL AS LITKNT TAD NAME2 JMS I (OUTDATA /GENERATE BINARY TAD PASS TAD (-4 SZA CLA JMP 2$ TAD LPAG TAD MPAGE0 JMS I (LITKRF 2$: ISZ LITKNT JMP LITLP 3$: STA CDF 10 DCA I LPAG CDF 0 JMS I QQPOP DCA LINOUT / TAD LLOC / TAD QQ200 / AND QQ7600 TAD PC JMS I QQHGHSCT JMS I (POPL LEX2 JMP I OUTLIT
CMNMOV, 0 CLL TAD INK TAD LITPTR DCA LITPTR /POINT TO VALUE OF LITERAL CDF 10 TAD I LITPTR /GET ABS VALUE CDF 0 JMP I CMNMOV INK, 0 /1 IF 0-PAGE, -1 IF CUR-PAGE /PAGE 0 LITERALS GO INTO A SPECIAL SECT. /SAME NAME AS PARENT, BUT STARTS WITH $. /A REGULAR SECT NAME MAY NOT START WITH A $. MPAGE0, -PAGE0 PAGE RELOC
.RSECT KLUDG1 FIELD 2 KLU1, 0 TAD I (FLAG AND (100 SZA CLA JMP PRGSPL /UNNAMED SECTION CDF 10 TAD I (PAGE0 IAC CIF CDF 0 JMP I KLU1 PRGSPL, TAD I (ZLTLOC DCA I (CLTLOC /TREAT AS CURPAGE LITS BUT ON PAGE 0 TAD (PAGE0 DCA I (LPAG DCA I (KIND /PRETEND IT'S A CURRENT PAGE LITERAL JMP PLIT KLU10, 0 /WATCH IT! STRANGE IF,DF TAD I (KIND CIF 0 SZA CLA JMP I (ZLIT CIF 20 TAD (CURPAG DCA I (LPAG PLIT, TAD I (LPAG DCA T$ CDF 10 TAD I T$ IAC CIF CDF 0 SNA CLA JMP I (NOL1 TAD I (CLTLOC DCA QTEM$ DCA I (CLTLOC TAD QTEM$ JMP I KLU10 T$: 0 QTEM$: 0
KLU11, 0 DCA LNUM /SAVE LITERAL NUMBER TAD I (CSTYPE TAD (-30 SZA CLA /ARE WE IN AN FSECT? JMP 2$ /NO TAD I (CURSCT /YES CIF 0 JMS I (CNVCNV TAD (6 DCA TT$ TAD I TT$ CIF 0 JMS I (CNVCNV TAD (5 DCA TT$ STA /LNUM'S BEGIN AT 1 (NOT 0) TAD I TT$ CDF 0 TAD LNUM DCA I (TRMABS JMP 3$ 2$: TAD LNUM CIA TAD (200 TAD I (LITPAG DCA I (TRMABS TAD I (CLTLOC SNA /WERE THERE ANY LITERALS YET? JMP 5$ /NO, INITIALIZE FIRST ONE CIA CLL /NEGATE TAD I (TRMABS /COMPARE THIS LOC WITH OLD ONE SZL CLA /WHICH IS SMALLER? JMP 6$ /'CLTLOC' IS SMALLER, SO NEW LOWER LIMIT 5$: TAD I (TRMABS /VALUE IS SMALLER SO SET NEW 'CLTLOC' DCA I (CLTLOC /REMEMBER WHERE WE GENERATED A LITERAL LAST 6$: TAD I (CSTYPE /GET TYPE OF CURRENT SECT TAD (-10 SZA CLA /IS IT AN A-SECT? 3$: TAD I (CURSCT /NO; LITERAL ADDRESS IS 12-BIT RELOCATABLE DCA I (TRMREL /YES CIF 0 JMP I KLU11 TT$: 0 LNUM, 0
KLU8, DCA I (TRMREL TAD I (TRMABS CIA TAD I (ZLTLOC CIF CDF 0 SMA CLA /NEW HIGH LIT LOC? JMP I (LITKOM /NO JMP I (COMN /YES 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