File MAC3O.MA (MACREL macro assembler source file)

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

/9	PASS 3 SPECIFIC CODE
/ 8-MAR-78	ALLOW PRINTING 6-DIGIT PC
/ 16-AUG-78	CHANGED LINE COUNTER SO THAT IT DOESN'T COUNT UNLISTED LINES
/		THIS MEANS NOT ALL PASSES KNOW ABOUT SUB PAGE NUMBERS
	.INCLUDE MGLOB.MA
	.ASECT MAC3O,LEVEL=1,OVERLAY=14
/
/
/
/
/
/
/
/
/
/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 KLU7,PRLINO .EXTERNAL ASEMLV,BACKUP,BRANCH,CREF,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 OUTSKP,LINBUF,COLCNT,OVRLIN,SETIT,HEADING .GLOBAL PRINTY,SETT,CRLF,LIST,TAB .GLOBAL DPRINT,OPRINT,PRNDSH MEBIT=400 MEBBIT=200 FIELD 3 *2000 RELOC 1400 15 /PASSES 1 AND 3 SPECIFIC PRINTY, 0 DCA LNFLAG /AC=1 MEANS WANT A LINE NUMBER TAD I (OUTSKP TAD QQ70 SNA CLA TAD I (MACLEV SNA CLA JMP PRINT1 /ALWAYS PRINT ON ERROR OR NOT IN MACRO TAD I (LISTWD /IF 400 BIT OF LISTWD ON AND (MEBIT /RETURN SNA CLA JMP PRINT1 TAD PCFLAG SZA CLA JMP I PRINTY TAD I (LISTWD AND QQ200 /*** AND [MEBBIT SZA CLA JMP I PRINTY PRINT1, JMS I (OVRLIN TAD LNFLAG SNA CLA JMP 3$ /NO LINE NUMBER WANTED TAD I (MACLEV SZA CLA JMP 3$ /NO LINE NUMBERS ON MACRO GENERATED LINES CIF 20 JMS I (PRLINO 3$: JMS I (TAB /TAB OUT TO PC COLUMN TAD PCFLAG /YES SZA CLA JMP SPACIT CIF 20 JMS I (KLU7 TAD RELOK SNA CLA JMP SPACIT /NO RELOC TAD ("* JMS I QQLISTER /PRINT * AFTER RELOCATED PC SPACIT, JMS I (TAB /TAB OUT TO BINARY FIELD TAD BNFLAG SZA CLA JMP SPAKIT JMS I (PRNBIN TAD I (LNKGEN /7 IF LINK GENERATED (ELSE 0) TAD QQ40 /MERELY PRINT SPACE OR QUOTE JMS I QQLISTER TAD FLG AND QQ7 /(3 IS GOOD ENOUGH TAD (RELTAB DCA TEMP TAD I TEMP /GET RELOCATION SYMBOL JMS I QQLISTER /PRINT IT SPAKIT, TAD (LINBUF-1 DCA LINP TAD LINOUT SNA CLA /IS THERE A LINE TO PRINT? JMP EOL /NO TTTAB, JMS I (TAB /SPACE OUT TO SOURCE LINE FIELD WRLOOP, INCR LINP TSL11, CDF 10 TAD I LINP CDF 0 SNA /LAST CHAR? JMP EOL /YES, AT END OF LINE TAD (-11 SNA /IS IT A TAB? JMP TTTAB TAD TSL11 JMS I QQLISTER /PUT CHAR IN OUTPUT LINE BUFFER ISZ I (COLCNT JMP WRLOOP JMS I QQCRLF /***CONTROVERSIAL JMS I (OVRLIN /**** TAD (-XTABS-3 DCA TEMP JMS I (TAB ISZ TEMP JMP .-2 JMP WRLOOP LINSAV, 0 LNFLAG, 0
EOL, JMS I QQCRLF JMP I PRINTY
LINP, /LINE POINTER SETT, 0 TAD LINPTR DCA LINSAV TAD (LINBUF-1 DCA LINPTR JMS I (SETIT /SET NEW TITLE FROM ENTIRE FIRST LINE -HEADLN /WITH THIS LENGTH HEADING-1 /STORE IT HERE PS60, STA CML TAD LINSAV DCA LINPTR JMS I QQGETCHR /SET UP 'CHAR' AND 'BITS' AGAIN JMP I SETT /REJOIN PROCESSING /*** WANT TO GET TO SETT ON PASS 1 IF T-OF-C PAGE
IFDEF PLM < / SBTTL OCTAL AND DECIMAL PRINT ROUTINES / / 'OPRINT' AND 'DPRINT' ARE USED TO PRINT OUT A NUMBER / IN OCTAL OR DECIMAL ASCII RESPECTIVELY. EACH IS CALLED / WITH THE NUMBER IN THE AC. / IF THE LINK IS ON - THEN PRINT THE NUMBER TO 4 PLACES / WITH LEADING 0'S. / IF THE LINK IS OFF - THEN PRINT THE NUMBER WITH LEADING / SPACES IF 'PAD' IS SET TO 40 (TO 4 PLACES) OR IGNORE / LEADING 0'S IF PAD IS 0. I.E. 'PAD' IS USED TO PAD / OUT ON THE LEFT. > DPRINT, 0 DCA NUM JMS NPRINT JMP I DPRINT LFLAG, 0 /NON-0 MEANS DON'T CRLF AT END LLPTR, 0 OPRINT, 0 DCA NUM TAD QQ40 DCA PAD TAD QQ7 /CHANGE 'DTABLE' TO 'OTABLE' JMS NPRINT JMP I OPRINT
/LINK ON MEANS PRINT LEADING 0'S , LINK OFF MEANS SUPPRESS THEM NPRINT, 0 /LINK ON MEANS PRINT LEADING 0'S TAD (DTABLE DCA NPTR RAR /LINK TO AC0 NPR1, DCA QUOT /ZERO QUOTIENT JMP NPLOOP /JUMP INTO LOOP NPR2, DCA NUM /UPDATE REMAINDER INCR QUOT /BUMP QUOTIENT BY 1 NPLOOP, TAD I NPTR /SUBTRACT 1000, 100, OR 10 SNA /ARE WE AT END OF TABLE? JMP NPR3 /YES, SAW 0. CLL TAD NUM /SUBTRACT FROM 'NUM' SZL /HAVE WE GONE NEGATIVE? JMP NPR2 /NO, KEEP SUBTRACTING CLA /YES, THIS DIGIT DONE INCR NPTR /POINT TO NEXT DIVISOR IN LIST TAD QUOT /LOOK AT NEW DIGIT SNA /IS IT 0? JMP LEAD0 /YES, IGNORE LEADING 0'S TAD ("0 /NO, CONVERT TO ASCII JMS I QQLISTER /OUTPUT DIGIT STL CLA RAR /4000 JMP NPR1 /FORCE ZEROES TO PRINT NPR3, TAD NUM /GET REMAINDER (UNIT'S DIGIT) TAD ("0 /CONVERT TO ASCII JMS I QQLISTER /ALWAYS PRINT IT JMP I NPRINT /RETURN LEAD0, TAD PAD /PRINT LEADING 0 AS A SPACE SNA JMP NPLOOP /IGNORE NULLS JMS I QQLISTER JMP NPLOOP
DSHCNT, CRLF, 0 TAD (15 /PRINT CR/LF JMS I QQLISTER TAD (12 JMS I QQLISTER JMP I CRLF
/ JMS LIST / PTR TO ASCII LINE (IN FIELD 1) /THIS ROUTINE IS CALLED TO SEND A STRING OF ASCII CHARACTERS /TO THE LISTING FILE. ARG IS PTR TO STRING WHICH CONSISTS OF /CONSECUTIVE ASCII CHARS (1 PER WORD) TERMINATED /BY A WORD OF 0. AC NON-0 MEANS DON'T CR-LF. LIST, 0 DCA LFLAG /AC NON-0 MEANS DONT CR-LF TAD I LIST /PICK UP ARGUMENT DCA LLPTR /SAVE PTR TO ASCII LINE INCR LIST /POINT TO NORMAL RETURN LST11, LSTLUP, CDF 10 TAD I LLPTR /GET NEXT CHARACTER CDF 0 SNA /IS THERE ANY MORE? JMP ENDOFL /NO JMS I QQLISTER /YES, SEND TO LIST FILE INCR LLPTR /POINT TO NEXT CHARACTER JMP LSTLUP /REITERATE ENDOFL, TAD LFLAG SNA CLA /DOES CALLER WANT A CR-LF? JMS CRLF /YES JMP I LIST /RETURN NPTR, 0 QUOT, 0
PRNDSH, 0 /PRINT DASHES ON LIST FILE TAD I (LISTWD /TO MAKE LITERALS STAND OUT SMA CLA /WHY ME GOD? JMS I QQPASS3 /IS IT PASS 3? JMP I PRNDSH /NO, NO DASHES JMS TAB /YES, TAB OUT TO PC COLUMN TAD (-6 DCA DSHCNT DSHLUP, TAD DASH JMS I QQLISTER ISZ DSHCNT JMP DSHLUP /PRINT 5 DASHES JMS I QQCRLF JMP I PRNDSH /RETURN, NO WISER /*** COLUMN COUNT BAD DECIMAL DTABLE, -100;-10;0 OCTAL RELTAB, 40 /0 "+ /1 DASH, "- /2 STAR, "* /3 OTABLE, -1000;-100;-10;0 IFNZRO OTABLE-DTABLE-7 <_ERROR_> /TABLE OF RELOCATION MARKINGS FOR 4 MAIN TYPES OF RELOCATION
PRNBIN, 0 TAD FLG SPA CLA JMP STARS TAD BINARY STL JMS OPRINT JMP I PRNBIN STARS, TAD (-4 DCA TEMP TAD STAR JMS I QQLISTER ISZ TEMP JMP .-3 JMP I PRNBIN TAB, 0 TAD LST11 JMS I QQLISTER TAD I (COLCNT TAD (10 AND QQ7770 DCA I (COLCNT JMP I TAB PAGE RELOC



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