File PASS2.PA (PAL assembler source file)

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

/PASS 2 OF EDUSYSTEM-30 BASIC COMPILER

/3-DEC-71		R. LARY, P. KNUEVEN, B. SMITH

/COPYRIGHT 1971		OREGON MUSEUM OF SCIENCE & INDUSTRY
/			PORTLAND, OREGON

	LPC=6666
	LSF=6661

	*3
LOC3,	PCH
READ,	DREAD
WRITE,	DWRITE

	*11
XR1,	0
XR2,	0

	*14
STK,	0
FORXR,	0

	*20
ISTNO,	0
IBLNO,	0
L215,	215
ERR,	QERR
FATAL,	0
	ERRCT=FATAL
STBGN,	BUFFER-1
L37,	37
L7741,	7741
QSYMAD,	SYMT-1
TMP,	0
LOC,	0
L7402,	7402
OJMP,	3400
OJMS,	4000
FORVAR,	0
	BACKX=JMS I .;QBACKX
	BUMP=JMS I .;QBUMP
	PUT=JMS I .;QPUTWD
	PUTORG=JMS I .;QPUTORG
	CVT=JMS I .;CONVT
OSUBT,	1400
ADRONE,	20	/SYMBOL TABLE INDEX OF LITERAL 1
L7400,	7400
MSBLD,	3000
ONEXT,	4400
BRTAB,	QBRTAB-1
RELOP,	0
TXR1,	0
L3,	3
MCOMMA,	54
MSEMI,	73
SMMCM,	54-73
CMMCR,	37-54
CRMQOT=L3
CRMDOL,	44-37
MCR=L37
OPVAR,	6000
OPCOL,	6001
OPCRLF,	6002
OREAD,	6402
MQUOTE,	42
OPTEXT,	6004
OFOR,	7401
PUTBUF,	0
OIF,	7000
L400,	400
SYMCT,	0
MOPEN,	50
MCLOSE,	51
MEQUAL,	75
	ARITH=JMS I .;QARITH
RETURN,	QRETURN
PFLAG,	0
PCCNT,	0
BEGST,	WKAREA
RPCODE,	-51
TOPER,	0
AOPTBL,	PART1-34
L7,	7
BJTBL1,	QJTBL1
BJTBL2,	QJTBL2
RSUBOP,	-56
INDXOP,	-62
TPTR,	0
BSTK,	STACK
PMT,	0
OPNPRC,	OPNINTABLE
UMINS,	UMINSINTABLE
CHS,	7403
L3600,	3600
	MTWO=CLA CLL CMA RAL
	MTHREE=CLA CLL CMA RTL
O,	0
N,	0
M,	0
MSBOP,	-SUBOPINTABLE
MFNOP,	-FUNOPINTABLE
MEQOP,	-EQOPINTABLE
	SX0=JMP .
	JMS I ERR
	2362		/S2
L100,	100
SEPRTR,	PART2-PART1
PUTMP,	0
QTMP,	0
	RPCOD=MCLOSE
NEWST,	STLP
TSTK,	0
L10,	10
L21,	21
	GET=JMS I .;TGTWD
	OUTP=JMS I .;BINOUT
RPPTR,	RPARENINTABLE
	SCOPE=JMS I .;QSCOPE
BASSYM,	0
EMCUE,	0
KORE,	7377
SBSTR,	SUBSTR
L377,	377
PSYMTB,	AASTAB+AALNGT
PSYM2,	AASTAB+AALNGT-2
TXTRTN,	0
DEFTMP,	0
TMPARG,	0
FNFUDG,	FNFUJ
BEGFOR,	FORBEG
FORCNT,	-10
PDEBUG,	DEBNOL
XPASS3,	LPASS3
VARBAS,	0		/BASE OF VARIABLES (FIELD 1)

	PAGE

AASTAB=4143 AALNGT=110 / IMPORTANT -- OFFSET OF SYMTAB FROM "AASTAB" *200 JMP I .+1 INIT STLP, TAD STBGN DCA XR1 TAD LOC CLL CIA TAD KORE SNL CLA JMP I (OVMEM GET DCA I XR1 ISLP, GET TAD L37 SNA JMP .+4 TAD L7741 DCA I XR1 JMP ISLP TAD L7741 DCA I XR1 TAD STBGN DCA XR1 TAD I XR1 SMA JMP NOSTNO CIA DCA TMP TAD TMP TAD PSYM2 DCA XR2 TAD I XR2 DCA ISTNO ISZ XR2 TAD LOC DCA I XR2 TAD TMP CVT SNA JMP .+5 TAD QSYMAD DCA TMP TAD LOC DCA I TMP TAD I XR1 NOSTNO, TAD (COMDLS-1 DCA TMP CLA IAC AND I PDEBUG SZA CLA JMP .+5 TAD OSTMT PUT TAD ISTNO PUT TAD I TMP DCA TMP JMP I TMP QRESTORE, TAD (7405 JMP QSTOP+1 QRETURN,MTWO QSTOP, TAD L7402 PUT JMP STLP QFOR, TAD I XR1 CVT DCA FORVAR BACKX ARITH ISZ XR1 ARITH TAD FORVAR TAD OSUBT PUT TAD I XR1 TAD L37 SNA CLA JMP STEP1 ARITH JMP DODO STEP1, TAD ADRONE PUT DODO, ISZ FORCNT TAD FORCNT SMA SZA CLA JMP NESTERR TAD OFOR PUT TAD FORVAR DCA I FORXR IAC TAD LOC DCA I FORXR PUT PUT PUT PUT PUT JMP QSTOP+1 QNEXT, TAD I XR1 CVT DCA FORVAR STA TAD FORCNT DCA FORCNT TAD FORCNT SMA CLA JMP EOSTST MTWO TAD FORXR DCA FORXR TAD I FORXR CIA JMS I (FUJFOR QREM=. EOSTST, TAD I XR1 TAD L37 SZA CLA SX0 JMP STLP QLET, ARITH JMP EOSTST NESTERR,JMS I ERR 1605 /NE OSTMT, 7412 PAGE
QPRINT, TAD XR1 DCA TXR1 TAD (QPRINT DCA TXTRTN TAD I XR1 TAD MSEMI SNA JMP PSEM TAD SMMCM SNA JMP PCOM PRENT, TAD CMMCR SNA JMP PEND TAD CRMQOT SNA CLA JMP PTEXT TAD TXR1 DCA XR1 ARITH TAD OPVAR PUT JMP QPRINT PCOM, TAD OPCOL PUT TAD I XR1 ISZ TXR1 TAD MCOMMA SNA JMP PCOM JMP PRENT PSEM, CLA TAD I XR1 ISZ TXR1 TAD MCOMMA JMP PRENT PEND, TAD I TXR1 TAD MSEMI SNA JMP I NEWST TAD SMMCM SNA CLA JMP I NEWST TAD OPCRLF PUT JMP I NEWST PTEXT, TAD OPTEXT PUT MTWO DCA TMP DCA EMCUE QPCHLP, TAD I XR1 TAD MQUOTE SNA JMP EOTXT TAD (-42 ISZ TMP JMP PFST TAD EMCUE PUT JMP QPCHLP-3 PFST, CLL RTL RTL RTL DCA EMCUE JMP QPCHLP EOTXT, TAD EMCUE PUT JMP I TXTRTN QINPUT, TAD I XR1 TAD (44 SNA CLA JMP CHIN STA TAD XR1 DCA XR1 MTWO INPCMN, JMS INEXP JMP QINPUT CHIN, STA JMP INPCMN QREAD, JMS INEXP JMP QREAD INEXP, 0 TAD OREAD PUT ARITH JMS I SBSTR JMS IODEL JMP I INEXP QWRITE, ARITH TAD OWRITE PUT JMS IODEL JMP QWRITE OWRITE, 6003 IODEL, 0 TAD I XR1 TAD MCOMMA SNA JMP I IODEL TAD CMMCR SZA CLA SX0 JMP I NEWST QIF, ARITH TAD BRTAB DCA XR2 RELLP, TAD RELOP CIA TAD AOPTBL TAD I XR2 SNA CLA JMP .+3 ISZ XR2 JMP RELLP TAD I XR2 TAD OIF PUT ISZ XR1 QGOTO, TAD I XR1 CVT TAD OJMP PUT JMP I NEWST PAGE
QDEF, TAD I XR1 CVT DCA DEFTMP TAD DEFTMP IAC TAD OJMP PUT TAD DEFTMP TAD QSYMAD DCA TMP TAD LOC DCA I TMP TAD I XR1 TAD MOPEN SZA CLA SX0 TAD I XR1 CVT DCA TMPARG TAD TMPARG PUT JMS I FNFUDG TAD I XR1 TAD MCLOSE SZA CLA SX0 TAD I XR1 TAD MEQUAL SZA CLA SX0 ARITH TAD DEFTMP IAC TAD QSYMAD DCA TMP TAD L3 TAD LOC DCA I TMP JMS I FNFUDG JMP I RETURN QARITH, 0 DCA PFLAG DCA PCCNT CLA CMA TAD XR1 DCA XR1 DCA I XR1 TAD BEGST DCA XR2 TAD BSTK DCA STK PASS1LP,TAD I XR1 SPA JMP QAOPER CVT DCA I XR2 JMP PASS1LP QAOPER, DCA TOPER TAD TOPER CIA TAD AOPTBL DCA TMP TAD I TMP AND L7 TAD BJTBL1 DCA QTMP TAD I QTMP DCA QTMP JMP I QTMP REGOPS, TAD TOPER DCA I XR2 JMP PASS1LP RELAT, TAD TMP DCA RELOP TAD RSUBOP DCA I XR2 JMP PASS1LP OPEN, CLA CMA TAD XR1 DCA TMP TAD I TMP SPA SNA JMP SRTOPN TAD PSYM2 DCA PUTMP TAD I PUTMP AND L7400 CLL SZA CLA CML IAC TAD INDXOP DCA I XR2 TAD I TMP CVT TAD QSYMAD IAC DCA TMP TAD I TMP SZL CLA CMA SMA CLA CLA CMA JMP BUMPPC SRTOPN, CLA TAD TOPER DCA I XR2 BUMPPC, ISZ PCCNT DCA I STK JMP PASS1LP CLOSE, CLA CMA TAD PCCNT DCA PCCNT TAD STK DCA TMP TAD I TMP SZA CLA SX0 CLA CMA TAD STK DCA STK JMP REGOPS EOT, TAD PCCNT SZA CLA JMP REGOPS JMP I (QPASS2 PAGE
QPASS2, BACKX TAD XR2 DCA TPTR TAD BSTK DCA STK VBEXP, TAD I TPTR SPA JMP VOP1 DCA I STK BUMP JMP OBEXP VOP1, TAD RPCOD SZA CLA SX0 TAD RPPTR DCA I STK BUMP JMP VBEXP OBEXP, TAD I TPTR SMA SX0 TAD RPCOD SNA SX0 TAD RPCODE CIA TAD AOPTBL DCA TMP TAD I TMP RTR RAR AND L7 TAD BJTBL2 DCA QTMP TAD I QTMP DCA QTMP BUMP JMP I QTMP PAREN, 0 SCOPE TAD STK DCA TSTK MTWO TAD STK DCA STK TAD I TSTK DCA I STK JMP I PAREN OPENOP, JMS PAREN JMP OBEXP FNSBOP, TAD TMP DCA FNTEMP TAD OPNPRC DCA TMP JMS PAREN TAD FNTEMP DCA I STK JMP VBEXP FNTEMP, 0 GENOP, SCOPE TAD TMP DCA I STK DCA PFLAG JMP VBEXP MINUS, TAD I TPTR SMA CLA JMP GENOP TAD I TPTR TAD RPCOD SNA CLA JMP GENOP TAD UMINS DCA TMP SCOPE JMS FORCE TAD CHS ISZ PFLAG PUT DCA PFLAG JMP OBEXP PLUS, CLA CMA DCA PFLAG JMP MINUS BOS, SCOPE TAD STK DCA TMP TAD I TMP SZA PUT TAD I (QARITH DCA .+2 JMP I .+1 0 EQCMOP, SCOPE JMS FORCE JMP GENOP+1 FORCE, 0 TAD STK DCA QTMP TAD I QTMP SZA PUT DCA I QTMP JMP I FORCE COMMA, TAD PCCNT SNA CLA JMP I (EOT TAD STK DCA TMP ISZ I TMP SX0 JMP I (REGOPS QGOSUB, TAD I XR1 CVT TAD OJMS PUT JMP I NEWST PAGE
QCODE, 0 TAD N TAD MEQOP SNA CLA JMP EQPROC TAD M SNA CLA JMP MZERO TAD N TAD MSBOP SNA CLA JMP SUBSCR TAD O SNA CLA JMP OZERO TAD N TAD MFNOP SNA CLA JMP CONTRA TAD M PUT DCA M MZERO, TAD O JMS PUTOP JMP I QCODE CONTRA, TAD O PUT BIDIR, TAD M SNA SX0 JMS PUTOP JMP I QCODE OZERO, TAD I N AND L100 SNA CLA JMP BIDIR TAD M PUT JMS PUTOP JMP I QCODE SUBSCR, TAD O SZA PUT JMP BIDIR PUTOP, 0 DCA PUTMP TAD SEPRTR TAD N DCA PMT TAD I PMT TAD PUTMP SNA / FOR (<EXP>, ...) JMP I PUTOP TAD MLIT0 SNA JMP I PUTOP TAD LIT0 PUT TAD PUTBUF TAD (-4015 /-(GOSUB CHR$) SNA JMP PFCN IAC SNA CLA JMP PFCN JMP I PUTOP QPUTWD, 0 PRFSW, SKP JMP OPVONLY BUFSW, NOP JMP FIRSWD DCA PUTMP TAD PUTBUF CLL OUTP TAD PUTMP FIRSWD, DCA PUTBUF ISZ LOC TAD (SKP DCA BUFSW JMP I QPUTWD PFCN, TAD L7400 DCA PRFSW TAD PUTBUF TAD L1771 DCA PUTBUF JMP I PUTOP OPVONLY,DCA PUTMP TAD (SKP DCA PRFSW TAD PUTMP CIA TAD OPVAR SZA CLA SX0 JMP I QPUTWD QPUTORG, 0 DCA PUTMP TAD PUTBUF CLL OUTP TAD PUTMP CLL CML OUTP TAD L7400 /NOP DCA BUFSW CLA CMA TAD PUTMP DCA LOC JMP I QPUTORG QBUMP, 0 CLA CMA TAD TPTR DCA TPTR JMP I QBUMP EQPROC, TAD M SZA PUT JMS I SBSTR JMP I QCODE L1771, 1771 LIT0, 1417 /1400 + SYMBOL TABLE INDEX OF LITERAL 0 / I.E. PSEUDO-CODE FOR SUBTRACT LITERAL 0 MLIT0, -1417 /NEGATIVE OF LIT0 PAGE
BUFFER, 0 INIT, TAD BEGFOR DCA FORXR TAD I (LPTFLG SZA CLA ISZ LOC3 CLA CMA TAD I (SYSCOM+2 DCA SYMCT TAD I (SYSCOM+3 DCA VARBAS TAD SYMCT /LENGTH OF RUNTIME TABLE TAD (3577 /START OF PROGRAM AREA-1 DCA LOC TAD LOC DCA I (SYSCOM+2 /START OF PROGRAM-1! CLA IAC TAD LOC /SET STARTING ADDRESS CLL CML OUTP JMP I NEWST AA1400=. /SHOULD NOT EXCEED 1523 -- RESULTS ARE FATAL *1524 WKAREA, 7720 *1650 STACK, OPNINTABLE PAGE
*2000 0 0 0 0 0 0 0 /OPTABLE FOR QARITH PART1, 4074 4077 5520 4074 UMINSINTABLE, 5277 4071 /! INDICATES >= 4074 4071 /# INDICATES <> 4071 /$ INDICATES "THEN" 4071 /% INDICATES <= 4071 /& INDICATES = USED AS RELATIONAL OPERATOR 4077 OPNINTABLE, 4002 RPARENINTABLE, 4023 5020 4640 4265 4730 4520 5120 4057 FUNOPINTABLE, 5610 SUBOPINTABLE, 5610 4077 4077 4077 4077 4077 4077 4077 4074 /: INDICATES "TO" 4074 4071 EQOPINTABLE, 4260 4071 4074 /? INDICATES "STEP" /PART 2 -- MACHINE OPCODE PART2, 0 0 3000 0 0 0 0 0 0 0 0 0 0 0 2000 1000 0 1400 1400 2400 0 4000 5000 0 0 0 0 0 0 0 0 0 0 0400 0 0 COMDLS, QLET QRESTORE QREAD QGOTO QGOSUB QINPUT QRETURN QSTOP QPRINT QDEF QIF QFOR QNEXT QREM QEND QCHAIN QPAUSE QWRITE QRANDOMIZE QJTBL1, REGOPS RELAT OPEN CLOSE EOT COMMA CH0 CH0 QJTBL2, OPENOP FNSBOP GENOP MINUS PLUS BOS EQCMOP CH0 QBRTAB, 46 6 76 5 74 3 43 1 41 4 45 2 PAGE
FORBEG, ZBLOCK 21 QCHAIN, TAD (7407 /CHAIN OP PUT TAD I XR1 TAD MQUOTE SZA CLA SX0 TAD (QCRTN DCA TXTRTN JMP I (PTEXT+2 QCRTN, TAD I XR1 TAD L37 SZA CLA SX0 JMP I NEWST QRANDOMIZE,TAD L3 /RANDOMIZE-PAUSE QPAUSE, TAD (7410 /PAUSE PUT JMP I NEWST FNFUJ, 0 TAD (7411 /SWITCH PUT TAD TMPARG PUT JMS I SBSTR JMP I FNFUJ FUJFOR, 0 TAD FORVAR SNA CLA JMP .+3 JMS I ERR 0617 /FN TAD FORVAR TAD ONEXT PUT TAD I FORXR DCA TMPARG TAD LOC IAC DCA TMP TAD TMPARG PUTORG TAD TMP PUT TAD TMP PUTORG TAD TMPARG IAC PUT MTWO TAD FORXR DCA FORXR JMP I FUJFOR SUBSTR, 0 TAD PUTBUF AND L7400 SNA JMP .+4 TAD MSBLD SZA CLA SX0 TAD PUTBUF AND L377 TAD QSYMAD DCA TMP TAD I TMP CLL CMA TAD VARBAS SZL CLA SX0 TAD PUTBUF TAD L400 DCA PUTBUF JMP I SUBSTR CONVT, 0 TAD PSYM2 DCA CTMP TAD I CTMP AND L377 JMP I CONVT CTMP=. QBACKX, 0 CLA CMA TAD XR1 DCA XR1 JMP I QBACKX TGTWD, 0 CDF 10 TAD I TGPTR CDF ISZ TGPTR JMP I TGTWD BINOUT, 0 SZL /ORIGIN? JMP BINORG CDF 10 DCA I BINPTR CDF ISZ BINPTR JMP I BINOUT BINORG, CLL CIA TAD I (SYSCOM+2 /START OF PROGRAM OFFSET CMA DCA BINPTR JMP I BINOUT TGPTR, 400 BINPTR, 0 PAGE
QEND, TAD SYMCT CIA DCA SYMCT TAD L7402 PUT TAD FORXR CIA TAD BEGFOR SNA CLA JMP .+3 JMS I ERR 4616 /FN TAD LOC TAD L10 DCA TMLOC TAD TMLOC DCA I (SYSCOM+3 /BEGINNING OF STACK TAD L21 /ANY ROOM FOR STACK? TAD TMLOC CLL CIA TAD KORE SZL CLA JMP .+4 OVMEM, JMS I ERR 5562 /M2 JMP I (BOOT TAD TMLOC /POINTER FOR 'RETURN WITHOUT GOSUB' PUTORG TAD REERR PUT TAD I (BINPTR /MAKE SURE LITERALS TAD (7401 /START AT 400 OR ABOVE SNL CLA /SO WE CAN MOVE THEM DOWN JMP .-4 /('PUT' CLEARS LINK) TAD I (BINPTR /LAST ADDRESS OF PROGRAM CMA /(ONE WORD IN BUFFER) DCA I (SYSCOM+4 CLA CMA TAD PSYMTB DCA XR1 LTRLLP, TAD I XR1 /WRITE OUT LITERALS SPA /(PASS 3 WILL MOVE THEM DOWN) JMP EOLITS AND L7400 TAD (-1000 /IS THIS A LITERAL? SNA CLA JMP .+5 /YES ISZ XR1 ISZ XR1 ISZ XR1 JMP LTRLLP TAD I XR1 /EXPONENT PUT TAD I XR1 /HIGH-ORDER PUT TAD I XR1 /LOW-ORDER PUT JMP LTRLLP EOLITS, PUT TAD I (BINPTR /COMPUTE LENGTH OF LITERALS TAD I (SYSCOM+4 /-LENGTH OF PROGRAM CIA DCA I (SYSCOM+5 /FOR PASS 3 TAD (3577 /SYMBOL TABLE-1 DCA XR2 TAD QSYMAD /MOVE SYMBOL TABLE TO ITS PLACE DCA XR1 TAD I XR1 DCA I XR2 ISZ SYMCT JMP .-3 TAD FATAL SZA CLA FATALJ, JMP I (BOOT TAD I PDEBUG SMA CLA JMP I XPASS3 /LOAD PASS 3 JMS I READ 200 7777 SYMPRT /HOLE IN PASS 1 WHERE SYMPRT IS STORED JMP I .-3 REERR, 1762 /POINTER TO RE ERROR RUNTIME ROUTINE - 1 TMLOC, 0 SYMT=3000 CH0, JMS I ERR 0310 /CH QSCOPE, 0 CLA CMA TAD STK DCA QTMP TAD I QTMP DCA QTMP TAD I QTMP AND L3600 DCA QTMP TAD I TMP AND L3600 CIA TAD QTMP SPA SNA CLA JMP I QSCOPE MTHREE TAD STK DCA STK TAD I STK DCA O TAD I STK DCA N TAD I STK DCA M MTHREE TAD STK DCA STK JMS I (QCODE DCA I STK JMP QSCOPE+1 0 /PROTECTION AGAINST UNUSED LINE NOS (?) PAGE
COLCT=173 LPASS3, JMS I READ /GET PASS 3 0000 -17 BPASS3 QERR, 0 ISZ ERRCT CLA CLL TAD I QERR JMS P2CH TAD (240 JMS I LOC3 TAD ISTNO JMS XNUMOUT JMS QCRLF TAD I QERR SMA CLA JMP I NEWST /PASS 2 FATAL ERROR ISZ QERR JMP I QERR XNUMOUT, 0 XXSNA, SNA JMP XNZRO DCA 0 TAD XXSNA DCA XNSWT TAD DIVARY DCA XR2 DVLP, TAD I XR2 SMA JMP I XNUMOUT DCA DIVSOR DCA QUO TAD 0 CLL TAD DIVSOR SNL JMP .+3 ISZ QUO JMP .-5 CIA TAD DIVSOR CIA DCA 0 TAD QUO XNSWT, SNA JMP DVLP TAD (60 JMS P6CH TAD (SKP DCA XNSWT JMP DVLP XNZRO, TAD (60 JMS P6CH JMP I XNUMOUT DIVSOR, 0 QUO, 0 DIVARY, . -1750;-144;-12;-1;0 P2CH, 0 DCA QUO KSF JMP .+4 KRS SNA CLA JMP I (BOOT TAD QUO RTR RTR RTR AND (37 JMS P6CH TAD QUO AND (77 JMS P6CH JMP I P2CH P6CH, 0 SNA JMP I P6CH TAD (-40 SPA TAD (100 TAD (240 JMS I LOC3 ISZ COLCT /FOR DEBUG (SYMBOL PRINT) JMP I P6CH JMP I P6CH QCRLF, 0 TAD L215 JMS I LOC3 TAD (212 JMS I LOC3 JMP I QCRLF PCH, 0 PRCH, JMP PCH1 LPC CLA LSF JMP .-1 JMP I PRCH PCH1, TLS CLA TSF JMP .-1 JMP I PCH 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