File OVRD.MA (MACREL macro assembler source file)

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

/15 LITTLE-USED DIRECTIVES OVERLAY 4 FOR MACREL	POST FT
/ 8-MAR-78	ADDED SECT EXTENSION CHUNK
/		ADDED OVERLAY, LEVEL, CONCATENATE, AND NOPURGE OPTIONS
/		ADDED AUXILIARY OVERLAY TO OVRD
/		ALLOWED OVERLAY=0 AND LEVEL=0 TO BE SIGNIFICANT
/	20-AUG-78	ADDED ROOT OPTION
	.INCLUDE MGLOB.MA
	.ASECT OVRD,LEVEL=1,OVERLAY=3
/
/
/
/
/
/
/
/
/
/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 LOAD,FINI .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 PRGLIT,PRZLIT,ENTERR .GLOBAL ER52,ER53,ER61,ER77,ER211,ER212,ER213,ER214 .GLOBAL $XSECT,$ZSECT,$DSECT,$FSECT,$RSECT,$ASECT,$SECT FIELD 3 *2000 4 /OVERLAY NUMBER $XSECT, TAD (10 $ZSECT, TAD (10 $DSECT, TAD (10 $FSECT, TAD (10 $RSECT, TAD (10 $ASECT, TAD (10 $SECT, DCA CST TAD I (OLDSCT /SAVE PREVIOUS SECT DCA PRVSCT TAD CURSCT DCA I (OLDSCT /SAVE NEW OLDSCT TAD PC JMS I QQHGHSCT /RECOMPUTE HIGH PC JMS I (PRGLIT JMS I (PRZLIT DCA RELOK /TERMINATE ANY RELOC IN AFFECT SECT2, JMS I QQSCAN /SCAN PAST BLANKS JMS I QQLETTER /IS IT A LETTER? JMP NOL /NO JMS I QQPARSYM /YES, GET IDENTIFIER JMS I QQLOOKUP /SEE IF WE ALREADY KNOW THIS GUY JMS I (ENTERR /IF NEW GUY, ENTER HIM IN THE MASTER LIST JMS I QQGETSYM /GET ALL KNOWN DATA ABOUT NEW GUY / TAD ("# /CALL THIS A DEFINITION JMS I QQCREF /CROSS REFERENCE HIM FOR GOODNESS TAD NAME1 SPA CLA ER211, JMS I QQERROR /SECT NAME CAN'T START WITH $ TAD CST SZA CLA /WAS TYPE OF SECT SPECIFIED BY NAME? JMP GSCT /YES SECT1, JMS I QQEOS /NOW, ARE WE AT THE END OF THE STATEMENT? JMP NOR /YES, DEFAULT IS SIMPLE RELOCATABLE SECTION JMS I QQSCAN /UNLIKELY, BUT MIGHT FIND MORE SPACES TAD CHAR /NO, BETTER FIND A COMMA HERE TAD (-54 SZA CLA /DID COMMA FOLLOW SECT NAME? JMP ER52 /NO JMS I QQGETCHR /PASS UP COMMA JMS I QQSCAN /SCAN PAST BLANKS /GET CHARACTER AFTER COMMA JMS I QQBRANCH /AND BRANCH ON IT -101;ASCT /A -122;PRSCT,RSCT /R -106;FSCT /F -104;DSCT /D -132;ZSCT /Z -130;XSCT /X 0 ER61, JMS I QQERROR /UNKNOWN TYPE OF SECT JMP I PRSCT /DEFAULT TO R-SECT ER52, JMS I QQERROR /NO COMMA AFTER SECT NAME JMP SECT1 /IGNORE IT ER77, JMS I QQERROR /NO LETTER AFTER SECT DIRECTIVE JMS I (IGNORE JMP SECT2 CST, 0 GSCT, JMS I QQBACKUP TAD CST /TAKE SECTION TYPE JMP I (SCT /AND GO STORE IT IN 'CSTYPE'
NOL, TAD CHAR TAD (-52 SZA CLA JMP ER77 TAD PRVSCT SNA JMP ER212 DCA SYMNUM JMS I QQGETSYM TAD FLAG AND QQ70 DCA CSTYPE TAD SYMVAL DCA HISEK TAD SYMNUM DCA CURSCT JMS DOSCT TAD SYMVAL DCA I (INIORG JMS I QQGETCHR /PASS UP * JMP I (EOSCT ER212, JMS I QQERROR JMP I (PSEUDB PRVSCT, 0
NOR, JMS I QQBACKUP TAD FLAG SMA CLA JMP I PRSCT TAD FLAG AND QQ70 SZA JMP I (SCT /ALREADY KNOW THIS SECT DCA CSTYPE JMP ER61
DOSCT, 0 / JMS I (PUNY /PASS 2? /*** DO WE REALLY NEED TO CALL PUNY? / JMP I DOSCT /NO TAD (3 /YES DCA FLG /*** NEXT CALL TO PUTBIN MAY MODIFY HISEK **** CHECK TAD QUAL AND QQ377 /GET LSDNUM TAD (NEWSCT JMS I QQPUXBIN JMP I DOSCT SKIPNA, 0 /SKIP IF NOT A-SECT TAD CSTYPE TAD QM10 SZA CLA ISZ SKIPNA JMP I SKIPNA PAGE
CPTR, 0 / /SECT CODE XSCT, TAD (10 /X 60 ZSCT, TAD (10 /Z 50 DSCT, TAD (10 /D 40 FSCT, TAD (10 /F 30 RSCT, TAD (10 /R 20 ASCT, TAD (10 /A 10 SCT, DCA CSTYPE /SAVE CURRENT SECT TYPE DCA RVAL TAD FLAG /EXAMINE FLAG WORD SMA /IS THIS SYMBOL ALREADY DEFINED? JMP NWSCT /NO, MUST BE A NEW SECT BEING BORN AND QQ70 /YES CIA /LOOK AT THE SECT TYPE TAD CSTYPE /COMPARE WITH ONE SPECIFIED SZA CLA /ARE THEY THE SAME? ER53, JMS I QQERROR /NO, REDEFINITION ERROR TAD SYMVAL DCA HISEK /RESET HIGH TAD SYMVAL /ORIGIN TO WHERE LEFT OFF JMP AGREES /YES, SECT AGREES NWSCT, CLA STL RAR /AC NON-0 /SET DEFINED BIT TAD CSTYPE /AND SECT TYPE DCA FLAG /FOR NEW SYMBOL DCA SYMVAL /SET HIGH TO '0' / DCA HGHLOC DCA HISEK TAD FREEPTR /CREATE AUXILIARY SECT CHUNK SNA /GET NEW CHUNK / JMP XXX /SHUCKS! OUT OF FREESPACE HLT DCA SYMSCT /STORE POINTER TO ADDITIONAL CHUNK TAD SYMSCT JMS I (CNVADR DCA CPTR /GET 12-BIT POINTER TAD I CPTR /GET POINTER TO NEXT FREESPACE CHUNK DCA FREEPTR /SET IT AS SUCH DCA I CPTR /NEW CHUNK IS A TERMINAL ONE ISZ CPTR DCA I CPTR /0 RESTRICTION TYPE (ALIAS ASECT FIELD) ISZ CPTR JMS I (SKIPNA STA DCA I CPTR /SET LOW ORG TO -1 FOR ASECT ISZ CPTR DCA I CPTR /0 LEVEL,OVERLAY CDF 0 /BACK TO SAFE DF JMS I QQPUTSYM /AND PUT IT AWAY IN SYMBOL TABLE AGREES, DCA INIORG /AC MAY BE NON-0. TAD SYMSCT JMS I (CNVADR TAD (2 DCA CPTR TAD I CPTR CDF 0 IAC SZA CLA JMP .+3 TAD QQ200 DCA INIORG TAD SYMNUM /GET CURRENT SECT PTR INTO S.T. DCA CURSCT /AND SAVE IT JMS I QQGETCHR /OUTPUT NEW SECT CODE JMS I (DOSCT ESL2, DCA PRGFLG /READY TO PURGE LITERALS ESLUP, TAD CHAR TAD (-54 /COMMA SZA CLA /IS THERE A COMMA FOLLOWING? JMP EOSCT /NO, END OF SECT STATEMENT JMS I (LOAD AUXOVR+35 /LOAD EXTENSION OVERLAY JMP I (EXTEN EOSCT, TAD PRGFLG SZA CLA /SHALL WE PURGE LITERALS? JMP .+3 /NO, USER WANTS MAGIC PERFORMED / JMS I (PRGLIT / JMS I (PRZLIT NOP NOP TAD INIORG JMS I QQORIG /GO TO INITIAL ORIGIN TAD SYMNUM DCA TAGLOC /START A NEW LSB DCA I (EXTPC /PC IS NOW FINE TAD SYMSCT JMS I (CNVADR IAC DCA CPTR JMS I (SKIPNA JMP AFLD /YES TAD I CPTR TAD QM1000 /IS IT AN ABSOLUTE FIELD RESTRICTION? SZA CLA JMP 2$ /NO, UNKNOWN FIELD /YES, ABS. FIELD RESTRICTION ISZ CPTR /POINT AT ABSOLUTE FIELD RESTR TAD I CPTR /GET ABSOLUTE FIELD JMP SETFLD 2$: STA /HACK: -1 MEANS UNKNOWN FIELD JMP SETFLD AFLD, TAD I CPTR /GET FIELD OF ASECT AND QQ7000 CLL RTL /MOVE IT TO AC 9-11 RTL DCA CURFLD TAD I CPTR AND (600 CLL RTR RTR TAD CURFLD SETFLD, DCA CURFLD /SET CURRENT FIELD CDF 0 JMP I (PSEUDP /*** TEMP INIORG, 0 /INITIAL ORIGIN FOR SECT /XXX, JMS I QQERROR /NO ROOM IN FREESPACE / JMP I (FINI PRGFLG, 0 /NON-0 MEANS DON'T PURGE LITERALS
IFDEF PLM < /FOR A NEW SECT, WE WANT TO PRINT THE FIELD CORRECT ON THE /LISTING TO THE LEFT OF THE PC, OR PRINT A ? IF THE FIELD IS UNKNOWN. /ALGORITHM: /IF IT'S AN ASECT, WE GET THE FIELD FROM QUAL BITS 0-2. /IF NOT AN ASECT, WE PROCEED AS FOLLOWS: / IF IT HAS AN ABSOLUTE FIELD RESTRICTION (QUAL 0-2=1), / THEN THE FIELD IS IN SYMSCT, BITS 9-11 / IF NO ABS. FIELD RESTRICTION, WE PRINT A "?" AS THE FIELD. > RVAL, 0 /RESTRICTION VALUE RTYP, 0 /RESTRICTION TYPE /******** /*** SHOULD BE ERROR IF EXPR WAS RELOC AND SECT ABSOLUTE PAGE
.ASECT OVRD2,LEVEL=2,OVERLAY=14 FIELD 4 *2000 RELOC 2400 35 EXTEN, JMS I QQGETCHR /PASS IT UP JMS I QQSCAN /YES JMS I QQPARSYM TAD NAME1 JMS I QQBRANCH -'PA;LOC /PAGE -'LO;LOC /LOCATION -'CO;CONC /CONCATENATE -'OV;OVER /OVERLAY -'LE;LEVL /LEVEL -'NO;NOPU /NOPURGE LITERALS -'RO;ROOT /ROOT (SMAE AS LEVEL=0) 0 ER213, JMS I QQERROR JMP I (EOSCT LOC, TAD CHAR TAD (-75 /= SZA CLA JMP ER213 JMS I QQEXPR /YES, INITIAL ORIGIN FOLLOWS CLA TAD EXPREL /CHANGE ORIGIN IF EXPR IS ABSOLUTE SZA CLA JMP .+3 /NOT ABSOLUTE TAD EXPABS DCA I (RVAL /WANT TO ORIGIN THERE TAD CURSCT DCA SYMNUM JMS I QQGETSYM /GET INFO BACK (CALLING 'EXPR' LOST IT) TAD I (RVAL SNA TAD I (INIORG DCA I (RVAL JMS I (SKIPNA JMP SETARS /ASECT TAD (RTABSO /ABSOLUTE ORIGIN RESTRICTION DCA I (RTYP TAD EXPREL /SEE IF 'EXPR' HAD A RELOCATABLE PART SNA JMP SETRT /NO, EXPR WAS ABSOLUTE - EVERYTHING OKAY DCA I (RVAL /SAME PAGE (&FIELD) AS THIS 15-BIT PTR TAD (RTSAMP DCA I (RTYP SETRT, TAD I (RTYP DCA OVLEV /USED AS A TEMPORARY TAD SYMSCT JMS I (CNVADR IAC DCA CCPTR TAD OVLEV DCA I CCPTR CDF 0 SKP ER214, SETARS, JMS I QQERROR TAD I (RVAL DCA OVLEV TAD SYMSCT JMS I (CNVADR TAD (2 DCA CCPTR TAD OVLEV DCA I CCPTR /STORE RESTRICTION VALUE OR REFERENCE CDF 0 JMS I QQPUTSYM /PUT NEW INFO BACK IN SYMBOL TABLE JMP I (ESLUP CCPTR, 0
OVLEV, 0 /0 MEANS SETTING LEVEL, 1 MEANS OVERLAY OVER, CLA IAC LEVL, DCA OVLEV TAD CHAR TAD (-75 SZA CLA JMP I (ER213 JMS I QQEXPR /GET OVERLAY OR LEVEL NUMBER /********** BUG IF AUXILIARY EXPRESSION OVERLAY LOADS AND (7760 SNA TAD EXPREL SZA CLA JMS I QQERROR /RELOCATABLE OVERLAY OR LEVEL # /OR # TOO BIG RTENT, TAD CURSCT JMS I QQGETSYM TAD SYMSCT JMS I (CNVADR TAD (3 DCA CCPTR TAD OVLEV SZA CLA JMP OV TAD EXPABS TAD QQ40 CLL RTL RTL RTL DCA EXPABS TAD I CCPTR AND QQ77 OV2, TAD EXPABS DCA I CCPTR CDF 0 JMP I (ESLUP OV, TAD I CCPTR AND (7700 TAD QQ40 JMP OV2 PAGE
NOPU, CLA IAC JMP I (ESL2 /SET NO PURGE LITERALS FLAG CONC, TAD SYMSCT JMS I (CNVADR TAD (4 DCA CCCPTR CLA IAC DCA I CCCPTR /SET CONCATENATE OPTION CDF 0 JMP I (ESLUP CCCPTR, 0 ROOT, DCA I (OVLEV DCA EXPABS /LEVEL=0 JMP I (RTENT /JUMP INTO LEVEL= PROCESSOR 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