File EXPOVR.MA (MACREL macro assembler source file)

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

/7	EXPRESSION OVERLAY	POST V0A
/	17-AUG-78	GUARANTEE ^D, ETC. NUMBERS ARE ABSOLUTE
	.INCLUDE MGLOB.MA
	.ASECT EXPOVR,LEVEL=2,OVERLAY=11
/
/
/
/
/
/
/
/
/
/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 FILESW,PDSWT,IDKNT,DOLFLG,NAMPTR,PARSYM,UNARYM .EXTERNAL TERM,HLDRAD,CNTCON,DIGIT,GETNUM,DFLG,PUSHL,POPL FIELD 4 .GLOBAL ER204,ER30,ER28,ER32,ER31,ER66,ER205 .GLOBAL SNGLQQ,IMUL,IDIV,UPAROQ,BACKL / LINKER ARITHMETIC REQUIRED *2000 RELOC 2400 32 /OVERLAY Z 0 PT1, FILESW PDSWT IDKNT DOLFLG NAMPTR NAME1 NAME2 NAME3 NAME4 PARSYM UNARYM PT2, TERM 0
CHAR1, 0 SNGLQQ, 0 JMS I QQGETKAR /GET FIRST CHAR OF PAIR JMP I (ER28 AND QQ77 JMS I QQROTL6 DCA CHAR1 JMS I QQGETKAR /GET SECOND CHAR OF PAIR JMP I (ER28 AND QQ77 TAD CHAR1 /COMBINE TWO CHARACTERS DCA TRMABS JMS I QQGETCHR JMP I SNGLQQ
IMUL, 0 DCA QUO TAD I IMUL DCA IDIV TAD I IDIV ISZ IMUL CIA DCA IDIV TAD QUO ISZ IDIV JMP .-2 JMP I IMUL
/ BOTH IDIV AND IMUL HAVE THE SAME CALLING SEQUENCE /ONE ARGUMENT IS PASSED IN AC /THE OTHER IS POINTED TO BY THE FIRST ARGUMENT /REMAINDER IS LEFT IN 'REMAIN' /RETURNS 0 ON 0-DIVIDE (WITH NUMBER AS REMAINDER) IDIV, 0 DCA REMAIN TAD I IDIV DCA IMUL TAD I IMUL SNA JMP ER204 /ZERO DIVIDE ISZ IDIV CIA DCA IMUL DCA QUO TAD REMAIN IDLUP, STL TAD IMUL SZL JMP IDEND ISZ QUO JMP IDLUP IDEND, CIA TAD IMUL CIA DCA REMAIN /SAVE REMAINDER TAD QUO JMP I IDIV QUO, 0 ER204, JMS I QQERROR /0-DIVIDE JMP I IDIV PAGE
UPAROQ, 0 TAD I (RADXWD /SAVE CURRENT RADIX AROUND THIS TERM DCA I (HLDRAD DCA TENFLG UP2, JMS I QQGETKAR JMP ER28 JMS I QQBRANCH -102;BINOVR /B -117;OCTOVR /O -104;DECOVR /D -42;CNTCON /" 0 ER30, JMS I QQERROR /BAD CHAR AFTER ^ DCA TRMABS DCA TRMREL DCA TRMCOD JMP I UPAROQ /RETURN ABSOLUTE 0 ER28, JMS I QQERROR /END OF LINE BEFORE 1ST CHAR AFTER ' JMP I (BYEX /OR 2ND CHAR OR CHAR AFTER ^ OR ^" OR " DECOVR, STL CLA RAR /4000 DCA TENFLG TAD (2 OCTOVR, TAD (6 /RADIX 8 BINOVR, TAD (2 /RADIX 2 DCA I (RADXWD /TEMPORARILY OVR2, JMS I QQGETCHR JMS I QQEOS JMP ER66 JMS I (DIGIT /A NUMBER MUST FOLLOW JMP ER31 JMS I (GETNUM /PROCESS THE NUMBER DCA TRMABS /INTERPRETING IT VIA NEW RADIX TAD I (HLDRAD /THEN RESTORE ORIGINAL RADIX DCA I (RADXWD /BUT SEE IF RADIX OVERRIDES CONFLICT TAD I (DFLG /FOR EXAMPLE A DOT AT END OF A ^O CONSTANT TAD TENFLG SNA CLA ER32, JMS I QQERROR /CONFLICTING RADIX OVERRIDES (E.G. ^B101. ) DCA TRMREL /NUMBER IS ABSOLUTE (UPARROW ZEROES TRMCOD) JMP I UPAROQ ER31, JMS I QQERROR /NO DIGIT AFTER A ^D, ^O, OR ^B JMP OVR2 ER66, JMS I QQERROR /EOS AFTER ^O, ^D, OR ^B JMP I (BYEX
BACKL, 0 /HANDLE BACKSLASH TAD I BACKL /GET ADDRESS OF ROUTINE TO SEND CHARACTERS TO DCA SNDRTN ISZ BACKL /*** PUSHING AND POPPING IS INEFFICIENT /ONLY HAVE TO DO THIS IF WE CAME FROM 'BACKSL' JMS I (PUSHL PT1 JMS I (TERM /PARSE A TERM ER205, JMS I QQERROR /NO TERM FOLLOWING \, ASSUME 0 TAD TRMCOD SNA TAD TRMREL SZA CLA JMP ER205 /TERM NOT ABSOLUTE, TAKE ABSOLUTE PART JMS I (POPL PT2 TAD (-5 /TAKE ONLY LAST 5 DIGITS DCA BCKNT TAD (RADBUF+5 DCA RADPTR TAD TRMABS SNA JMP BACK0 /TERM IS 0 BCKLUP, JMS I (IDIV RADXWD /DIVIDE BY RADIX DCA TRMABS /SAVE QUOTIENT TAD REMAIN /GET REMAINDER DCA I RADPTR /STORE AT END OF LIST STA TAD RADPTR DCA RADPTR TAD TRMABS /GET READY FOR NEXT ITERATION ISZ BCKNT /DONE? JMP BCKLUP /NO CLA DCA LD0FLG SNDLUP, ISZ RADPTR /SEND CHARACTERS TO CALLER TAD I RADPTR SPA JMP SNDONE SNA JMP SND0 ISZ LD0FLG SNDL2, TAD ("0&77 JMS I SNDRTN JMP SNDLUP SND0, TAD LD0FLG SZA CLA JMP SNDL2 /SEND 0 JMP SNDLUP /IGNORE LEADING 0 BACK0, TAD ("0&77 JMS I SNDRTN SNDONE, CLA JMP I BACKL LD0FLG, 0 /NON-0 MEANS SAW NON-0 DIGIT RADPTR, 0 SNDRTN, 0 BCKNT, 0
RADBUF, ZBLOCK 6 /USED BY 'BACKL' 4000 /ENDS WITH NEGATIVE NUMBER TENFLG, 0 /NON-0 IF ^X IS NOT ^D 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