File MAC3R.MA (MACREL macro assembler source file)

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

/5 PASS 3 ROOT TO MACREL
	.INCLUDE MGLOB.MA
	.ASECT MAC3R
/
/
/
/
/
/
/
/
/
/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,LOOKUP,ORIG,PARSYM .EXTERNAL POP,PUSH,PUNBIT,PUTBIT,PUTSYM,PUXBIN,READLN,ROTL6,SCAN .EXTERNAL PRLINO,PRINTY,SETT,LIST,HEADING,SUBTL,FILENO,FILMSG,LISTOR .GLOBAL OUT,WIDTH,NEWPAG,SBTPTR,LISTER .GLOBAL OUTSKP,OVRLIN,PASS3,COLCNT *1000 IFDEF PLM < / OUT / / THIS ROUTINE OUTPUTS A LINE TO THE LISTING FILE / TOGETHER WITH ALL THE BINARY STUFF IN THE LEFT MARGIN / AND ALSO TAKES CARE OF SUCH STUFF AS PAGE HEADINGS, / LINE AND COLUMN COUNTS, PAGE NUMBERING, LINE NUMBERING, ETC. / /1. IF THE 'FORM' FLAG IS SET (=1), THEN A NEW PAGE IS STARTED / BY CALLING ROUTINE 'NEWPAG'. THAT HANDLES PAGE NUMBERING, ETC. /2. 'PAD' IS SET TO A SPACE. /3. IF THERE IS NO LINE TO PRINT AND THE BINARY-EXTENSION FLAG / (BEFLAG) IS NOT SET, THEN THIS ROUTINE MERELY RETURNS, / DOING NOTHING. /4. IF THERE IS NO LINE TO PRINT, BUT THERE ARE BINARY EXTENSIONS / TO PRINT, AND SOME BINARY HAS BEEN GENERATED (BNFLG=0) / THEN WE PROCEED TO STEP 8 AFTER CALLING 'OVRLIN'. /5. THE CURRENT LINE NUMBER IS INCREMENTED BY 1. / (THIS RESULT IS SHOWN IN MQ FOR VISUAL EFFECTIVENESS, L.O.) /6. IF IT IS NOT PASS3, WE RETURN /7. 'PAD' IS SET TO 0 IF THE LINE NUMBER GETS EQUAL TO 1000 OR / LARGER, SO THAT THE LOW ORDER PART PRINTS WITH LEADING 0'S. /8. IF IT IS NOT PASS 3, WE RETURN /9. THEN WE TAB OUT TO THE PC COLUMN. /10. IF 'PCFLAG' IS 0, THEN WE PRINT THE LOCATION COUNTER / VALUE. (THIS IS 'PC'-1 ) /11. THEN WE TAB OUT TO THE BINARY COLUMN. /12. IF 'BNFLAG' IS 0, WE PRINT THE GENERATED BINARY (THIS IS 'BINARY') /13. THEN WE TAB OUT TO THE SOURCE FIELD. WE SET 'BNFLAG' / AND 'PCFLAG' TO 0. /14. WE NOW PRINT THE SOURCE LINE. WE KEEP TRACK OF WHAT COLUMN / WE'RE PRINTING IN (ESPECIALLY FOR TABS) AND BUMP / 'COLCNT' ACCORDINGLY. WHENEVER 'COLCNT' GOES TO 0, WE KNOW / WE ARE AT THE END OF THE RIGHT MARGIN, SO WE CALL / 'OVRLIN', THEN TAB OUT TO THE COMMENT FIELD AND CONTINUE / TO PRINT THE REMAINDER OF THE SOURCE LINE. >
/IF NO LINE TO PRINT AND NO BINARY GENERATED, /DON'T PRINT ANYTHING. *** /WANT TO NUMBER ALL LINES INCLUDING EMPTY LINES. L1000, 1000 OUT, 0 TAD FORM SZA CLA /START A NEW PAGE JMS NEWPAG /YES TAD I (LISTWD OUTSKP, SPA CLA /IS LIST ON? [CHANGED TO SKP CLA IF ERROR OCCURS] JMP NOLIST /NO, NO LIST JMS PASS3 JMP NOLIST /DON'T OUTPUT EXCEPT PASS 3 TAD LINOUT SZA CLA /IS THERE A LINE TO PRINT? JMP PRLI /YES TAD I (LISTWD AND L1000 /GET BINARY EXTENSION FLAG TAD BNFLAG SNA CLA JMP LINTAB JMP NOLIST /SKIP BINARY EXTENSIONS PRLI, CLA IAC /WANT LINE NUMBER LINTAB, JMS I (PRINTY NOLIST, DCA BNFLAG DCA PCFLAG DCA LINOUT /SIGNAL LINE PRINTED TAD SPACLA /RESTORE VIRGINITY OF THIS ROUTINE DCA OUTSKP JMP I OUT /RETURN /*** BUG CONCERNING BINARY EXTENSIONS AND 'LINOUT' IF /MULTIPLE CALLS MADE TO 'OUT' SUCH AS FROM XLIST COLCNT, 0 /WIDTH, -117 /NEGATIVE OF WIDTH OF OUTPUT LISTING DEVICE /OBTAINED EITHER DIRECTLY FROM HANDLER /OR SET BY USER VIA = SWITCH /MUST END IN 7
IFDEF PLM < / NEWPAG / / THIS ROUTINE GOES TO A NEW PAGE IN THE LISTING FILE. / IT TAKES AN OPTIONAL ARGUMENT IN THE AC, WHICH REPRESENTS / THE SUB-PAGE NUMBER. IF THE AC IS 0, THEN NO NEW SUB-PAGE / IS DESIRED, AND MACREL GOES ON TO THE NEXT ACTUAL PAGE. / (SETTING THE SUB-PAGE NUMBER BACK TO 0.) / THE SUB-PAGE NUMBER IS BUMPED WHENEVER A USER'S PAGE / CROSSES A PHYSICAL PAGE BOUNDARY. / /1. IF THE NEW SUB-PAGE NUMBER IS NOT 0, THEN THE PAGENUMBER / IS INCREMENTED BY 1. /2. IF THIS IS NOT PASS 3, WE RETURN IMMEDIATELY. /3. A FORM FEED IS SENT TO THE LISTING FILE. /4. 'NEWTIT' IS CHECKED TO SEE IF WE WANT A NEW TITLE. / IF 'NEWTIT' IS NON-0, THEN WE WANT A NEW TITLE. / WE OBTAIN IT BY CALLING 'SETTIT' WHICH MOVES A NEW TITLE / INTO THE HEADING AREA FROM THE BEGINNING OF THE CURRENT / SOURCE LINE. /5. THEN WE PRINT THE HEADING (TITLE) /6. THEN WE PRINT THE PAGE NUMBER (NO LEADING ZEROES). /7. IF THIS IS NOT SUBPAGE 0, WE PRINT A HYPHEN FOLLOWED / BY THE SUBPAGE NUMBER. /8. WE NOW ZERO THE 'FORM' FLAG, AND PRINT A <CR><LF> /9. THEN WE PRINT THE SUBTITLE AND AN EXTRA CR,LF. /10. FINALLY, WE RESET THE LINE COUNT TO -'PGLINS' AND RETURN. >
/ TEMPORARILY THIS IS ALL IN ROOT /EVERYTHING AFTER THE CALL TO PASS 3 COULD MOVE TO OVERLAY /IF THERE WAS ROOM / DO PAGE NUMBERS, LINE NUMBERS,ETC. EVEN IF NOT LISTING /HAVE OPTION TO CREF UNLISTED VARIABLES NEWPAG, 0 DCA SUBPAG /NEW SUB-PAGE NUMBER MAY BE PASSED VIA AC DCA FORM TAD (-PGLINS /RESET COUNT OF NO. OF LINES /LEFT PER PAGE DCA LINCNT TAD SWMTOX AND (400 SZA CLA DCA LINENO /IF /P, THEN RESET LINE NUMBERS JMS PASS3 JMP I NEWPAG TAD NEWTIT SZA CLA /NEED NEW TITLE? JMS I (SETT /YES TAD I (LISTWD /*** BUG WILL PRINT OVER END OF PAGE ON ERRORS OF NOLISTED LINES SPACLA, SPA CLA JMP I NEWPAG STA /NO JMS I (LIST /PRINT HEADING HEADING-1 /WITH NO CR LF DCA PAD TAD PAGENO CLL JMS I QQDPRINT /INSERT PAGE NUMBER INTO HEADING TAD SUBPAG SNA CLA /IS THERE A SUB-PAGE SPECIFICATION? JMP NOSUB /NO TAD (55 /YES JMS I QQLISTER /OUTPUT A HYPHEN TAD SUBPAG /FOLLOWED BY THE SUB-PAGE # CLL JMS I QQDPRINT /CREATE SUB-PAGE NUMBER NOSUB, JMS I QQCRLF STA JMS I (LIST SBTPTR, SUBTL /PRINT SUBTITLE K11, CDF 10 TAD I (FILENO CDF 0 DCA F TAD F SNA CLA JMP SET2 STA JMS I (LIST FILMSG DCA PAD TAD F SMA CLA TAD (43-55 /'#'-'-' TAD (55 JMS I QQLISTER TAD QQ40 JMS I QQLISTER TAD F SPA CIA CLL JMS I QQDPRINT SET2, JMS I QQCRLF JMS I QQCRLF JMP I NEWPAG F, 0
LISTER, 0 CIF CDF 10 JMS I (LISTOR JMP I LISTER OVRLIN, 0 TAD WIDTH CIA DCA COLCNT ISZ LINCNT /AT BOTTOM OF PAGE? JMP I OVRLIN /NO CLA IAC /YES TAD SUBPAG /BUMP SUB-PAGE NUMBER JMS NEWPAG /AND START A NEW PHYSICAL PAGE INCR LINCNT JMP I OVRLIN SUBPAG, 0 /SUB-PAGE NUMBER PASS3, 0 TAD PASS TAD (-3 SNA CLA ISZ PASS3 JMP I PASS3 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