File ASSEMONE

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

*20
	EJECT
/			D I A L   A S S E M B L E R   - - -    V E R S I O N   2
/
/
/COPYRIGHT 1969, DIGITAL EQUIPMENT CORPORATION, MAYNARD MASSACHUSSETS,  01754
/
/PDP-12 DIAL ASSEMBLER(P0710),VERSION 2.
/
/
/	THIS ASSEMBLER HAS TWO MODES OF OPERATION.
/	ONE MODE IS FOR A STANDARD PDP-12 WITH 4K OF CORE
/	THE SECOND MODE IS FOR AN 8K MACHINE.
/	IN ADDITION, THE 8K MODE CHECKS FOR
/	THE PRESENCE OF A LINE PRINTER FOR OUTPUT.
/
/
/	ADDITIONAL FEATURES TO THE ASSEMBLER:
/
/	ABILITY TO SAVE AND LOAD PARTS OF THE SYMBOL TABLE.
/	CONDITIONAL ASSEMBLY OF VARIOUS LINES.
/	ABILITY TO LIST BETWEEN LINE NUMBERS.
/	A "QUICK LIST" ENTRY POINT WHICH REMOVES COMMENTS AND LINE NUMBERS,
/		AND WHICH REPLACES TABS BY BLANKS.
/
/
/
/
	EJECT
/			4 K   L O A D E R   M A P
/
/
/
/0000-0177		PAGE 0: COMMON LITERALS AND POINTERS.
/0200-0377		BANK CHECK ROUTINE; SYMBOL SEARCH ROUTINE
/0400-0577		SYMBOL TABLE GETTER ROUTINE
/0600-0777		ROUTINE TO GET A SYMBOL FROM SYMBOL TABLE( OR ADD ON).
/         		SDECO4 IS ACTIVE, SDECO8 IS NOT USED.
/         		SDECO4 USES 6777-6000 FOR USER SYMBOLS.
/         		5400-5777 IS USED FOR USER SYMBOLS AND FOR A SWAPPING BUFFER/
/         		IF MORE THEN 300 SYMBOLS .  EXTRA SYMBOLS GO OUT ON UNIT 1.
/1000-1177		GENERAL RECURSIVE EXPRESION EVALUATOR.
/1200-1377		RECURSIVE ADDRESS EVALUATOR.
/1400-1577		/CENTRAL PROCESSING LOOP. MAIN START OF ASSEMBLER AFTER INITILIZATION.
/1600-1777		/TEXT PROCESSOR,CURRENT LINE TESTER, PLUS MINOR SUPPORT ROUTINES.
/2000-2177		AN INPUT CHARACTER SCANNER ROUTINE, THE PRINTER BUF ROUTINE, AND TAB ROUTINE.
/2200-2377		NUMBER CONVERSIONS, TYPE CHECKS.
/2400-2577		SYMBOL SORT FOR OUTPUT. TTY ROUTINE.
/2600-2777		SYMBOL OUTPUT AND VALUE ROUTINE, OCTAL PRINT ROUTINE, FIELD CHANGE ROUTINE, AND WORK AREA.
/3000-3177		OUTPUT LIST ROUTINE, 8K PSEUDO OP INITIALIZATION(DESTROYED AND NEVER UESED). WORK AREA.
/3200-3377		ERROR MESSAGE PROCESSOR, TYPE EVALUATOR, SYSTEM SYMBOL TABLE SWAPPER,
/         		FAIRLY LOW LEVEL CHARACTER GETTER, AND ROUTINE TO SKIP IF NOT PASS2 OR NOT IN LIST MODE.
/3400-3577		INPUT CHARACTER CONVERTOR TO INTERNAL FORM. PLUS PAGE CHECKERS, OTHER
/         		LITTLE ROUTINES.
/3600-3777		INTERNAL TO EXTERNAL CHARACTER CONVERTOR, SYMBOL TABLE TYPE GETTERS AND SETTERS,
/         		LOW LEVEL CHARACTER GETTER, COMMENT PROCESSOR, LIST AND NOLIST PROCESSORS.
/
/
/T HE FOLLOWING LOCATIONS ARE IN     A S S E M T W O !
/
/
/4000-4177		GENERAL TAPE   IO CALL ROUTINES, INITILIAZTION FOR TAPE ROUTINES, PLUS EXTRA LITTLE STUFF.
/4200-4377		MORE TAPE I/O ROUTINES, PSEUDO OP PROCESSOR(FOR  PAGED IN PSEUDO OPS), AND LOADER CORE MAP.
/4400-4777		INPUT BUFFER+SWAPPED IN AND OUT WORK AREA FOR SAVSYM AND LODSYM.
/5000-5377		OUTPUT BUFFER, PLUS INITIALIZATION FOR ENTIRE ASSEMBLER AFTER IT S  FIRST LOADED IN
/         		AND THIS ALSO CONTAINS THE SWAPPED IN PSEUDO OP PROCESSOR.  NOTE: WHEN THINGS ARE SWAPPED IN,
/         		THE PREVIOUS CONTENTS OF THE LOCATIONS ARE FIRST SWAPPED OUT TO PRESERVE THEM.
/5400-5777		USER SYMBOLS IF < 300 SYMBOLS, ELSE IT S BUFFER AREA FOR SWAPPING SYMBOLS FROM TAPE 1.
/6000-6777		USER SYMBOLS(FIRST 200 OF THEM ANYWAY).
/7000-7377		MODE SYMBOLS(EITHER PMODE OR LMODE TABLE, DEPENDING ON MODE.).
/7400-7577		PSEUDO OP TABLE PLUS SPECIAL CHARACTER DEFINITION TABLE.
/7600-7777		SUPPOSEDLY UNUSED, BUT WHEN PSEUDO OP TABLE IS LOADED, IT S  LENGTH
/         		OF 400 WORDS OVERLAYS IT.
/
/
/
/****-****        E N D   O F   4 K   M A P
/
/
/
	EJECT
/			8 K   L O A D E R    M A P
/
/
/THIS MAP SHOWS ONLY CHANGES TO 4K MAP.
/
/
/
/
/0600-0777		SDECO8 IS NOW ACTIVE AND SDECO4 IS PASSIVE. SDECO8 USES THE UPPER 4K OF CORE
/         		FOR THE SYMBOL TABLE. THUS IT STORES NO USER SYMBOLS ON UNIT1(EXCEPT IF A SAVSYM IS GIVEN).
/5000-5377		PSEUDO OP TABLE IS NO LINGER PAGED IN HERE. SEE 7000-7377.
/5400-5777		OVERLAPPED READ ROUTINES FOR READING WHILE CALCULATING.
/6000-6177		LINE PRINTER CHECKER AND BASIC LINE PRINTER ROUTINE.
/6200-6377		OVERLAPPED TAPE OUTPUT ROUTINES PLUS COMMON READ-WRITE ROUTINES.
/6400-6777		INPUT BUFFER NO .2
/7000-7377		RESIDENT PSEUDO OP PROCESSOR. NOTE THAT IT CAN RESIDE IN TWO SEPERATE PAGES(FOR 4 OR 8K).
/7400-7777		INPUT BUFFER NO.1 FOR TAPE.
/
/
/		F I E L D   1   R E F E R E N C E S
/
/
/10000-16777		USER DEFINED SYMBOLS.
/17000-17377		SYSTEM MODE SYMBOLS(LMODE OR PMODE).
/17400-17577		PSEUDO OPS AND SPECIAL CHARACTER TABLE.
/
/
/
/
/			E N D   O F   8 K   M A P
/
/
	EJECT
/			T A P E   I / O
/
/
/
/	ALL TAPE I/O IS DONE WITH APPROXIMATELY THE SAME SET OF STATMENTS.
/
/
/		A TYPICAL SET IN THE LISTING LOOKS LIKE:
/LINCC4,	JMS I	LTREAD
/	LMODE
/	RDC
/	XXXXXX (SOME BLOCK AND FIELD)
/	CLR
/	PDP
/	PMODE
/
/
/
/NOW THIS IS HOW IT LOOKS IN 8K. IN CALLS THE OVERLAPPED READ ROUTINE TO DO A "PHOONEY" READ
/DEPENDING ON THE UNIT AND BLOCK NUMBER. THE READ ROUTINE WILL INTERPRET THE NEXT TWO STATEMETNS AFTER THE CALL
/AND WILL RETURN TO THE THIRD STATEMETN IN 8 MODE. BUT THE CLR AND PDP ARE JUST "AND" INSTRUCTIONS,
/AND SINCE READ CLEARS THE AC, THEY HAVE NO EFFECT AT ALL.
/
/
/
/IF YOU RE   RUNNING IN 4K, HOWEVER, THE MAIN INITIALIZATION ROUTINE MAKES THE
/JMS INSTRUCTION (LINCC4) INTO A "LINC" INSTRUCTION(6141). THUS THE CODE IS THEN
/	DIRECTLY EXECUTED.
/
/
/
	EJECT
/		 T H E    P S E U D O   O P   P R O C E S S O R
/
/
/
/
/		THE PSEUDO OP PROCESSOR IS A 400 LOCATION ROUTINE WHICH IS PAGED IN ON THE 4K MODE AND RESIDENT IN THE 8K MODE.
/AFTER THE DESIRED PSEUDO OP IS FOUND IN THE TABLE BY "EXPR" IT THEN JMPS TO AN ISZ CHAIN
/THE ISZ CHAIN IS A BUNCH OF SEQUENTIAL ISZ S  OF LOCATION "OP1". AFTER FALLING THROUGH THE ISZ S OP1 CONTAINS
/ THE DESIRED PSEUDO OP NUMBER. THE ROUTINE THEN PAGES IN THE PSEUDO OP PROCESSOR(IF 4K, ELSE IT S RESIDENT), THEN JMS 
/ TO IT WITH THE DESIRED OPERATION NUMBER IN THE AC. WHEN FINISHED THE PSEUDO OP PROCESSOR RETURNS AND IT S SWAPPED BAC
/K OUT. IN THE 8K VERSION IT S  RESIDENT AND IS NOT SWAPPED IN OR OUT.
/
/
/
/
/
	EJECT
/		S Y M B O L   T A B L E   O R G A N I Z A T I O N
/
/
/
/A SYMBOL TABLE ENTRY IS COMPOSED OF 4 WORDS. THE FIRST THREE ARE THE NAME AND THE LAST IS THE VALUE
/IF THE SYMBOL IS A PSEUDO OP THEN THE LAST WORD CONTAINS A POINTER TO THE ROUTINE WHICH WILL PROCESS
/THE PSEUDO OP AND THE REST OF THE STAATEMENT.
/
/
/THE NAME IS COMPOSED OF SIX CHARACTERS.
/THESE CHARACTERS ARE USUALLY THE 26 LETTERS PLUS 10 NUMBERS PLUS A NULL CHARACTER IF LESS THEN 6 LETTERS LONG.
/THIS GIVES YOU 45 OCTAL POSSIBLE CHARACTERS FOR THE LEFT OR THE RIGHT HALF OF A WORD.
/IF YOU USE SIXBIT NOTATION, YOU LL WASTE 23 POSSIBLE POSITIONS ON THE CHARACTER. THEREFORE, SIXBIT IS NOT USED.
/NOW, SINCE THE FIRST CHARACTER OF A NAME MUST BE A LETTER, THIS LEAVES ONLY 32 OCTAL
/CONBINATIONS FOR THE FIRST CHARACTER. THUS IF WE MULTIPLY THE LEFT
/CHARACTERS OF A WORD BY 45, WE WILL HAVE 2 FREE BITS IN THE FIRST WORD OF A NAME./
/(32*45+45<2000 OCTAL). THESE TWO LEFT BITS ARE USED AS FOLLOWS:
/
/
/
/			00:	SPECIAL CHARACTER
/			01:	UNDEFINED
/			10:	DEFINED
/			11:	PSEUDO OPERATION
/
/
/
	EJECT
/		NOW LOAD IN SAVED SYMBOLS AND START THIS ASSEMBLY ROLLING.
/
/
	LODSYM		/GO GET UM!
/
/
	VERSION=15		/THIS IS USED IN CHECKING TAPE 1.
/EVERY TIME YOU ASSEMBLE AND CHANGE THE MAJOR SYMBOL LOCATIONS, UP THIS BY 1.
/
/
/
UNITAS=4777		/PLACE TO GET UNIT FROM
E7=0
D6=300
D7=370
D8=410
D9=446
PTHREE=7325		/CLA CLL CML IAC RAL
				/GENERATES A +3 IN AC WHEN EXECUTED
MTWO=7344		/CLA CLL CMA RAL
			/GENERATES A -2 IN AC WHEN EXECUTED.
MTHREE=7346		/CLA CLL CMA RTL
				/GENERATES A -3 IN AC WHEN EXECUTED.
/
/
/
/
/
/
TERMC=00			/SET TERMC TO 44 IF DOLLAR SIGN IS THE END OF FILE CHAR.
/
/
/
/
	EJECT
/PDP-12 ASSEMBLER PAGE 0
PMODE
*1
DECOUT,	TYPO
ERTOT,	0
LISTWD,	0
CNTLPI,	CNTRLP
MICROB,	0
EQRETI,	7777
TEMP,	0
/VARIABLES
*10
BINPTR,	2000+D7+10
BINBLK,	0
CURLIN,	0
M40,	-40
TYPEA,	0
P11,	11
/16 AND 17 ARE USED
/FOR AUTO-INDEXING.
*20
ANY,	0	/WAS THIS AN INSTRUCTION
TYPE,	0	/HOLDS TYPE OF CURRENT SYMBOL
VADR,	0	/VALUE OF CURRENT SYMBOL
SADR,	0	/POINTER OF FIRST WORD OF CURRENT SYMBOL
VAL,	0	/VALUE OF CURRENT SYMBOL
VALK,	0
SCURR,	0	/CURRENT SYMBOL NUMBER
SEND,	140	/POINTER TO FIRST FREE REGISTER AFTER SYMBOL TABLE
AADR,	0	/ACTUAL CURRENT ADDRESS
APAGE,	0	/ORIGIN OF CURRENT PAGE - ACTUAL
PERMA,	140	/FIRST REGISTER AFTER PERMANENT SYMBOL TABLE
EVAL,	0	/HOLDS ADDRESS PORTION DURING CALCULATION
SGN,	0
PASS,	0	/7777 IF PASS 2
FLDWD,	0	/7777 IF EXTENDED MEMORY
MODE,	0	/7777 IF PDP-8; 0 IF LINC
TEM1A,	0
	0
	0
CURR,	0
CHARX,	0
CHARX2,	0
ABANK,	0
POINT,	0	/PUSH DOWN LIST
IN,	0	/TELLS WHETHER SYMBOL WAS ACCEPTED
ITEM,	0
HIC,	0
LWC,	0
MICROL,	0
INST,	0	/-  IF SYMBOLIC A MICRO INST.
MICRO,	0
CHARAC,	0
INIT1,	INIT
/POINTERS
EMPTY1,	EMPTY
SOPS,	OPS
RESET1,	RESETL
BIT6A,	BIT6
PASSEK,	PASSER
CURSKA,	CURSKP
GETCHR,	SYSIN
CHEKER,	PAGSET
SYMLST,	LSTSYM
MAINEX,	MAIN
INAS,	CJMP1
MOVE1,	MOVE8
SKIP,	SKIP2
ERR1,	ERROR
EXPR1,	EXPR
TYCARI,	TYCAR
MAIN1,	MAINSE
PAGE1,	RESET
B21,	B2
IDX1,	IDX
PUSH1,	PUSH2
POPU1,	POPUP1
GETSY1,	GETSYM
GETAS1,	GETASY
TYPAD1,	TYPADD
SDECO1,	SDECO8
SRITIC,	SWRC
SYB,	SYMBU
SRD1,	SREAD1
RET1,	RETURN
MON,	MONIT
PUNON1,	PUNONE
M1000,	-1000
M43,	-43
M33,	-33
P400,	400
M45,	-45
M67,	-67
P76,	76
LINENO,	JBTEST
P3777,	3777
SCLEAR,	CLEARR
M47,	-47
P240,	240
M4,	-4
P6000,	6000
PM60A,	M60A
*140
/FOR TRAP HANDLER
LOWTMP,	0		/MAY BE USED ONLY FOR IMM. TEMP. NEVER USED IF YOU LEAVE ROUTINE.
0
0
	*143
P5000,	5000
P300,	300
P1777,	1777
P177,	177
M200=.
P7600,	7600
P200,	200
P4000,	4000
M215,	-215
M42, -42
P2000,	2000
P212,	212
P215,	215
P7400,	7400
P777,	777
P7,	7
P77,	77
TEM1,	0	/FIRST
TEM2,	0	/SECOND
TEM3,	0	/THIRD WORD OF CURRENT SYMBOL

CON,	0	/HOLDS ACCUMULATED VALUE OF WORD
ADR,	0	/HOLD FULL 12 BIT ADDRESS
IND,	0	/400 IF INDIRECT OTHERWISE 0
ERRCNT,	0
SWITCH,	0
SNUM,	0
EMPTRA,	0
SY,	SYMBUF
TBCONT,	0
BINTAB,	2000+D7
	EJECT
/PDP-12 ASSEMBLER PAGE 1
*200
BANKCH,	JMS I EXPR1
	TAD ANY
	SZA CLA
	JMP BANKEM
	CMA
	TAD AADR
	TAD P2000
	AND P6000
	DCA AADR
BANKHR,	JMS I RESET1
	JMS I PAGE1
	TAD AADR
	DCA EVAL
	JMS I PASSEK
	JMS I CURSKA
	JMP I MAIN1
BANKEM,	TAD EVAL
	AND P4A
	DCA FLDWD
TAD EVAL
	RTR
	RAR
	JMP BANKHR-2
P4A,	4
CURREN,	0
	JMS I RESTO1
	JMS I MOVEAA
	TAD MODE
	SMA CLA
	JMP LKADD
	TAD AADR
CDA,	6211
	DCA I VADR
CDB,	6201
	JMS I TYPAD1
	4000
	JMP I MAIN1A
MOVEAA,	ERR2
RESTO1,	RESTOR
MAIN1A,	MAINSE+3
LKADD,	TAD AADR
	AND P1777
CDC,	6211
	DCA I VADR
CDD,	6201
	TAD AADR
	AND P6000
	CLL RTR
	TAD P4000
	DCA .+2
	JMS I TYPAD1
	0
	JMP I MAIN1A
SAVE1,	SAVE
SEARCH,	0
	JMS I SAVE1
	DCA SCURR
CDE,	6211
SEARC1,	TAD SCURR
	JMS I SDECO1
	CLA CMA
	TAD SADR
	DCA 16
	TAD I 16
	AND P1777
	CIA
	TAD TEM1
	SZA CLA
	JMP IND1
	TAD I 16
	AND P3777
	CIA
	TAD TEM2
	SZA CLA
	JMP IND1
	TAD I 16
	AND P3777
	CIA
	TAD TEM3
	SZA CLA
	JMP IND1		/NO MATCH.
TAD TOP
	CIA
	TAD SADR
	SMA CLA
	JMP PSUD
	TAD PERMA
	CIA
	TAD SCURR
	SPA
	DCA INST	/- IF INSTRUCTION
	CLA CLL
PSUD,	TAD I 16
	DCA VALK
	TAD 16
	DCA VADR
	MTHREE
	TAD	16
	DCA 16
	TAD I 16
	AND P4000
	DCA TEMP
	TAD I 16
	AND P4000
	RAR CLL
	TAD TEMP
	TAD VALK
	DCA VAL
	TAD MODE
	SMA CLA
	JMS I IND1B
	JMS I GETYE
	ISZ SEARCH
	JMS I IND1C
TAABA,	6201
	JMP I SEARCH
IND1B,	LNINST
GETYE,	GETYPE
IND1C,	ANYY
TOP,	7374
IND1,	ISZ SCURR
	TAD SCURR
	CIA
	TAD SEND
	SZA CLA
	JMP SEARC1
	ISZ ANY
	JMP TAABA
	EJECT
/PDP-12 ASSEMBLER PAGE 2
	*400
GETSYM,	0
	TAD CHARX
	SNA
	JMP SPECAL
	TAD M33
	SPA
	JMP GETLET
	TAD M12A
	SMA CLA
	JMP SPECAL
	JMS I DPCVOP		/DIGIT
	JMP I B11
M12A,	-12
DPCVOP,	DPCV
SPECAL,	TAD CHARX2
	DCA TEM3
	DCA TEM2
	DCA TEM1
	JMS I SCH1
	JMP B11+1
	TAD TYPE
	TAD P2000
	SNA CLA
	JMP I VAL
	TAD VAL
	DCA TYPE
	JMP GSTART
SCH1,	SEARCH
B11,	B1
	PTHREE
	JMS I ERR1
	JMS I IDX1
	JMP GETSYM+1
GETLET,	JMS I GETAS1	/GET SYMBOL
	TAD TYPE
	TAD P2000
	SNA CLA
	JMP I VAL	/PSEUDO OP.
GSTART,	TAD I GETSYM
	AND P177
	DCA CURR
	TAD GETSYM
	AND P7600
	TAD CURR
	DCA CURR
	TAD I GETSYM
	AND P7600
	SZA
	JMP GTYPOT
	TAD CURR
	DCA GETSYM
	JMP GSTART
GTYPOT,	CIA
	TAD TYPE
	SNA CLA
	JMP I CURR
	TAD I GETSYM
	AND P7600
	TAD P200
	SNA CLA
	JMP I CURR
	ISZ I GETSY1
	JMP GSTART
PAGEC,	JMS I EXPR1
	TAD ANY
	SZA CLA
	JMP PAGEM
	CMA
	TAD AADR
	TAD P200
	AND P7600
	DCA AADR
PAGHER,	JMS I PAGE1
	TAD AADR
	DCA EVAL
	JMS I PASSEK
	JMS I CURSKA
	JMP I MAIN1
PAGEM,	TAD EVAL	/MULTIPLY BY 200
	RTR
	RTR
	RTR
	JMP PAGHER-2
M1,-1
MOVE8,	0
	TAD M1
	DCA 16
	CMA
	TAD I MOVE8
	DCA 17
	ISZ MOVE8
	TAD I MOVE8
	ISZ MOVE8
	DCA MOVA
	TAD P777
	DCA TEMP
MOVB,	TAD TEMP
	CLL CML RAL
	DCA TEMP
	SZL
	JMP I MOVE8
MOVA,	0
	TAD I 16
	AND TEMP
	AND P3777
CDFF,	6201
	DCA I 17
	JMP MOVB
/
DOLIST,	CLA SKP		/LIST ENTRY PSEUDO.
PLIST,	CLA CMA		/NOLIST PSEUDO.
	DCA	MOVE8		/IN TEMPORARY.
	TAD	PASS		/IS THIS PASS2?
	SNA	CLA
	JMP	DOPOUT		/NO. IGNORE IT.
	TAD	MOVE8		/0=LIST,7777=NOLIST
	DCA I	JJSTART		/FUDGE JBTEST PARAMS.
	TAD	MOVE8
	CMA
	DCA I	JJEND		/SET UP LINE NUMBER LIMITS.
DOPOUT,	JMP I	B21		/CLEAN UP SYSTEM.
JJSTART,	JSTART
JJEND,	JEND
	*573
0
0
0	/FIVE SPACES HERE OR SOMEWHERE IN 
0	/SEGMNT 0 FOR DISK DIAL
0
	EJECT
/PDP-12 ASSEMBLER PAGE 3
*600
/SYMBOL NUMBER DECODER
SDECO8,	0		/CONVERT A SYMBOL NUMBER TO AN ADDRESS
	DCA SNUM	/SAVE THE NUMBER
	TAD SNUM
	AND P6000
	SZA CLA
	JMP I	ERSY		/TOO MANY SYMS
	TAD SNUM
	CLL RTL
	CIA
	TAD STAB	/STAB IS TOP OF SYMBOL TABLE
	DCA SADR	/ADDRESS OF FIRST WORD OF SYMBOL
	PTHREE
	TAD	SADR
	DCA VADR	/POINTS TO SYMBOL VALUE
	JMP I SDECO8
TYPADD,	0
	CLA
	TAD I TYPADD
	DCA TYPEA
	TAD TYPEA
	DCA TYPE
CDG,	6211
	TAD I SADR
	AND P1777
	DCA I SADR
	TAD TYPE
	AND P6000
	TAD I SADR
	DCA I SADR
	ISZ SADR
	TAD I SADR
	AND P3777
	DCA I SADR
	TAD TYPE
	RTL
	AND P4000
	TAD I SADR
	DCA I SADR
	ISZ SADR
	TAD I SADR
	AND P3777
	DCA I SADR
	TAD TYPE
	RTL
	RAL
	AND P4000
	TAD I SADR
	DCA I SADR
	MTWO
	TAD	SADR
	DCA SADR
	TAD TYPE
	AND P6000
	DCA TYPE
CDH,	6201
	ISZ TYPADD
	JMP I TYPADD
SDECO4,	0
	DCA SNUM
	TAD SNUM
	TAD P7440
	SMA CLA
	JMP SVIRTL
	TAD SNUM
	CMA RTL
	AND	M4		/7774
	IAC
	TAD STAB
	DCA SADR
	PTHREE
	TAD	SADR
	DCA VADR
	JMP I SDECO4
SVIRTL,	TAD SNUM
	TAD P7440
	CLL RTR
	RTR
	RTR
	AND P77
	TAD BLKTAB
	DCA BLKPTR
	TAD SNUM
	TAD	P240		/REALLY 40 BUT ONLY 6 BITS MATTER.
	AND P77
	CMA RTL
	AND	M4		/SEE SEDOC4 + 6 ABOVE
	TAD P6000
	DCA SADR
	PTHREE
	TAD	SADR
	DCA VADR
	TAD BLKPTR
	CIA
	TAD BLKTBS
	SNA CLA
	JMP I SDECO4
	TAD	BLKTBS
	JMS I	SRIT1
	TAD	PASS		/IS IT PASS 2
	SPA CLA
	DCA	.-3		/YES. ZAP OUT WRITE INSTRUCTION
	TAD BLKPTR
	DCA BLKTBS
	TAD BLKTBS
	CIA
	TAD P416
	SPA CLA
	JMP I	ERSY
	TAD BLKPTR
	JMS I SRD1
	JMP I SDECO4
P7440,7440
P416,3000+D9
M12,-12
BLKTBS,	3000+D8+22
BLKTAB,	3000+D8+22
BLKPTR,0
SRIT1,	SWRIT1
ERSY,STEXD
STAB,	7574
/
/
/
SKIP2,	0
	DCA	SDECO4		/SAVE SKIP COUNT
	TAD	P240
	JMS I	DECOUT
	ISZ	SDECO4
	JMP	.-3
	JMP I	SKIP2
/
/
/
	EJECT
	*1000
SCOLON=200
COMMA=600
SYMB=4000
EQUALS=1400
USYMB=2000
EXCLAM=2200
ANDS=3400
PLUS=4600
MINUS=5200
SPACE=5600
ALL=7600
/PDP-12 ASSEMBLER  PAGE 4
EXPR,	0
	TAD CON
	JMS I PUSH1
	DCA CON
	TAD INST
	JMS I PUSH1
	DCA INST
	TAD MICROL
	JMS I PUSH1
	DCA MICROL
	TAD SGN
	JMS I PUSH1
	TAD CRIOR		/OR
	DCA SGN
	TAD H6
	JMS I PUSH1
	DCA H6
	TAD EXPR
	JMS I PUSH1
	SKP
A,	JMS I IDX1
	JMS I GETSY1
	B-1000+USYMB
	B-1000+SYMB
	A-1000+SPACE
	C-1000+PLUS
	C+3-1000+MINUS
	C+5-1000+EXCLAM
	G-1000+SCOLON
	C+7-1000+ANDS
	G-1000+ALL
	TAD VAL
	JMP .+3
B1,	CLA
	TAD LWC
	JMS I SGN
	SKP
	JMS I IDX1
B2,	JMS I GETSY1
	C+5-1000+SPACE
	GET-1-1000+COMMA
	B1-2-1000+SYMB
	B1-2-1000+USYMB
	ERONE-1000+EQUALS
	A+5-1000
C,	TAD CRIOR+1	/PLUS
	DCA SGN
	JMP B2-1
	TAD CRIOR+2	/MINUS
	JMP C+1
	TAD CRIOR		/OR
	JMP C+1
	TAD CRIOR+3	/AND
	JMP C+1
H,	TAD MODE
	SMA CLA
	JMP LINKI
	TAD P400
	TAD H6
	DCA H6
	JMP A+1
H6,	0
B,	TAD VAL
	JMS I SGN
	JMS I GETSY1
	EQU-1000+EQUALS
	GET-1000+SPACE
	B2+1-1000
LINKI,	TAD P10
UN,	TAD P10
	JMP H+4
	JMS I DEFIN1
GET,	JMS I GETAD1
	TAD ADR
	JMS I CRIOR
G,	JMS I POPU1
	DCA EXPR
	TAD CON
	DCA EVAL
	TAD H6
	DCA IND
	JMS I POPU1
	DCA H6
	JMS I POPU1
	DCA SGN
	TAD MICROL
	DCA MICROB
	JMS I POPU1
	DCA MICROL
	TAD INST
	DCA MICRO
	JMS I POPU1
	DCA INST
	JMS I POPU1
	DCA CON
	JMP I EXPR
ERONE,	JMS I ERR1
	JMP I MAIN1
EQU,	TAD I REPUN1
	DCA CRIOR-1
	DCA EQRETI
	JMS I IDX1
	JMS I EXPR1
	CLA CMA
	DCA EQRETI
	TAD CRIOR-1
	JMS I SDECO1
	TAD EVAL
CDI,	6211
	DCA I VADR
CDJ,	6201
	JMS I TYPAD1
	SYMB
	JMS I PASSEK
	JMS I CURSKA
	JMP I MAIN1
	0
CRIOR,	RIOR
	RADD
	RSUB
	RAND
REPUN1,	RESTOR-2
GETAD1,	GETADR
	P10,	10
DEFIN1,	CURREN
STEXD,TAD P7
JMS I ERR1
JMP I MON
	EJECT
/PDP-12 ASSEMBLER  PAGE 5
*1200
GETADR,	0
	JMS I IDX1
	TAD GETADR
	JMS I PUSH1
	JMS I EXPR1
	TAD MODE
	SMA CLA
	JMP LNKOR
	TAD MICRO
	SMA CLA
	JMP CHKLA
	TAD CON
	CLL RTL
	RTL
	AND P7
	TAD M6A
	SMA CLA
	JMP LEVEL+1
CHKLA,	TAD EVAL
	AND P7600
	SNA
	JMP AWAY+1
	CIA
	TAD APAGE
	SNA CLA
	JMP AWAY
	IAC
	JMS I NUPAGE
	JMP LEAVE
	DCA ADR
LEAVE,	JMS I POPU1
	DCA GETADR
	JMP I GETADR
AWAY,	TAD P200
	DCA TEMP
	TAD EVAL
	AND P177
	TAD TEMP
	TAD IND
	JMP LEAVE-1
LNKOR,	TAD MICROB
	SMA CLA
	JMP CHKL
	TAD EVAL
	AND P1777
	TAD IND
LEVEL,	DCA EVAL
	TAD EVAL
	JMP LEAVE-1
M6A,	-6
P600,	600
NUPAGE,	UNDERR
	0
CHKL,	TAD TYPEA
	RTL
	AND P6000
	SZA CLA
	JMP LEVEL-3
	TAD EVAL
	TAD IND
	JMP LEVEL
LDT,	0
	TAD CHARX
	SNA
	JMP I LDT
	DCA NUPAGE+1
	TAD NUPAGE+1
	TAD M45
	SMA CLA
	JMP NOTLDT
IXS,	ISZ IN	/LETTER OR DIGIT
	JMS I IDX1
	TAD NUPAGE+1
	JMP I LDT
NOTLDT,	DCA CHARX
	JMP I LDT
A1W,	0
	JMS LDT
	DCA NUPAGE+1
	TAD NUPAGE+1
	CLL RTL
	DCA VAL		/CHR. *4
	TAD VAL
	RTL
	RAL		/CHR. *32
	TAD VAL
	TAD NUPAGE+1	/CHR *1
	DCA VAL
	JMS LDT
	TAD VAL
	JMP I A1W
AAS,	0
	JMS A1W
	DCA TEM1
	JMS A1W
	DCA TEM2
	JMS A1W
	DCA TEM3
	JMS LDT
	SNA CLA
	JMP I AAS
	JMP .-3
ORGIC,	JMS I IDX1
	JMS I EXPR1
	TAD MODE
	SMA CLA
	JMP LINKIC
	TAD EVAL
	DCA AADR
	TAD EVAL
	AND P7600
	CIA
	TAD APAGE
	SNA CLA
	JMP LNRT
	JMS I PAGE1
	TAD AADR
	DCA EVAL
LNRT,	JMS I PASSEK
	JMS I CURSKA
LKRETT,	JMP I MAIN1
LINKIC,	TAD EVAL
	AND P1777
	TAD ABANK
	DCA AADR
	JMP LNRT
	EJECT
/PDP-12 ASSEMBLER PAGE 6
*1400
MAIN,	  JMP PASS1		/SWITCH
PASS1,	TAD PERMA
	  DCA SEND
	  DCA PASS
	DCA MODE
	  JMS SETORG
	  TAD CJMP1+1
PASS1P,   DCA MAIN
	  JMS I OCTS1		/SET TADIX TO OCTAL
MAINSE,	JMS I	LINENO
	  JMS I CNTLPI
	JMS I CLENUP
	  JMS I IDX1
	  TAD LIST1
	  DCA POINT
	  DCA ANY
	  DCA IND
	JMP I	PSINTER
DOCAL,	JMS I	EXPR1
	  TAD ANY
	  SNA CLA
	  JMP MAINSA	 /NOTHING TO BE ASSEMBLED
	  TAD EVAL
	  JMS ONEREG
TACK,	JMS I EMPTY1
	  JMP MAINSE
ONEREG,   0
	  DCA EVAL
	JMS I PUNON1
	ISZ AADR
	TAD MODE
	SMA CLA
	JMP LNKREG
	TAD AADR
	AND P177
	SZA CLA
	JMP I ONEREG
	JMS I PAGE1	/END OF PAGE
LNKREG,	JMP I ONEREG
CLENUP,	CLEARR
/SYMBOLIC ASSEMBLY SAVE ROUTINE
LSTSYM,	0
	TAD LISTWD
	SPA CLA
	JMP I LSTSYM
	TAD ITEM
	TAD M43
	SNA CLA
	JMP I LSTSYM
	TAD ITEM
	ISZ SWOT
	JMP DOLEFT
	TAD I SYMBU
	DCA I SYMBU
	ISZ SYMBU
LSRTE,	ISZ CHARAC
	JMP I LSTSYM
DOLEFT,	CLL RTL
	RTL
	RTL
	DCA I SYMBU
	CMA 
	DCA SWOT
	JMP LSRTE
SYMBU,	SYMBUF
MAINSA,	ISZ PASS
	JMP MAINSC
	CLA CMA
	DCA PASS
	TAD LISTWD
	SPA CLA
	JMP MAINSE
	TAD ERRCNT
	SZA CLA
	JMP TACK
	JMS I PASSEK
	JMS I CURSKA
	JMP MAINSE
SETORG,	0
	TAD P4000
	DCA AADR
	TAD P4000
	DCA APAGE
	TAD P4000
	DCA EVAL
	TAD P4000
	DCA ABANK
	DCA ERTOT
	DCA FLDWD
	DCA ERRCNT
	JMP I SETORG
OCTS1,	OCTS
	PUNONE+1
PASS2,	CLA CMA
	DCA PASS
	TAD M1000
	DCA I	OCTS1+1
	JMS SETORG
	JMS I INIT1
	TAD CJMP1
	JMP PASS1P
CJMP1,	JMP PASS1
	JMP PASS2
RESET,	0
	TAD AADR
	AND P7600
	DCA APAGE
	JMP I	RESET
MAINSC,	CLA
	DCA	PASS
	JMP	MAINSE
SWOT,	0
LIST1,	LISTA
LNINST,	0
	TAD	INST
	SMA	CLA
	JMP	.+7
	TAD	VAL
	AND	P6000
	SNA CLA
	JMP	.+3
	CMA
	DCA	MICROL
	TAD	VALK
	DCA	VAL
	JMP I	LNINST
PSINTER,	DOCAL
	EJECT
/PDP-12 ASSEMBLER PAGE 7
*1600
RIOR,	0
	DCA	VAL
	TAD	CON
	CMA
	AND	VAL
	TAD	CON
	DCA	CON
	JMP I	RIOR
/
/
STRING,	JMS I	GENINI
	CIA
	DCA	VAL
	JMS	STGET
	JMP	STNODUMP
	JMP	STINTO
STLOOP,	JMS	STGET
	JMP	STDUMP
	TAD	EVAL
	JMS I	ONEREI
	JMS I	PASSEK
	JMS I	TYCARI
STINTO,	TAD	ITEM
	AND	P77
	CLL RTL
	RTL
	RTL
	DCA	EVAL
	JMS	STGET
	JMP	STDUMP
	TAD	ITEM
	AND	P77
	TAD	EVAL
	DCA	EVAL
	JMP	STLOOP
/
STGET,	0
	JMS I	GENINI
	TAD	VAL
	SZA CLA
	ISZ	STGET
	TAD	M43
	TAD	ITEM
	SZA CLA
	JMP	STNOT
	JMS I	PASSEK
	JMS I	CURSKA
	JMS I	SCLEAR
	JMS I	LINENO
	JMP I	STGET
STNOT,	TAD	ITEM		/GET THE CHAR.
	ASMIFZ	TERMC-44		/DO WE WANT A DOLLAR SIGN AT THE END.
	TAD	STM44		/YEP.  ADD IT IN.
	SZA CLA
	JMP I	STGET
	JMS I	SQERR
	JMS I	SQERR
	JMP I	MON
/
STDUMP,	TAD	EVAL
	JMS I	ONEREI
	JMS I	PASSEK
	JMS I	TYCARI
STNODUMP,	TAD	ITEM
	TAD	M43
	SNA CLA
	JMP I	SQFDRT
	JMS I	GENINI
	JMP	STNODUMP+1
/
/
/
	ASMIFZ	TERMC-44		/DO WE WANT THE LITTERAL IN???
STM44,	-44			/YEP. ASSEMBLE IT IN.
SQFDRT,	FDRT
SQERR,	ERROR
GENINI,	GETIN
CONVRI,	CONVRT
ONEREI,	ONEREG
JBTEST,	0
	ISZ	CURLIN
	CLA CLL
	CLA CMA
	DCA	LISTWD
	TAD	CURLIN
	CLL CML CMA IAC
	TAD	JSTART
	SNL SZA CLA
	JMP I	JBTEST
	TAD	JEND
	CLL CML CMA IAC
	TAD	CURLIN
	SZL SNA CLA
JNOP,	DCA	LISTWD
	JMP I	JBTEST
JSTART,0
JEND,	7777
M1A,	-1
MOVE4,	0
	TAD M1A
	DCA 16
	CMA
	TAD I MOVE4
	DCA 17
	TAD I 16
	AND P1777
	DCA I 17
	TAD I 16
	AND P3777
	DCA I 17
	TAD I 16
	AND P3777
	DCA I 17
	ISZ MOVE4
	ISZ MOVE4
	JMP I MOVE4
SAVE,	0
	TAD SCURR
	DCA RESTOR-2
	TAD TYPEA
	DCA RESTOR-3
	TAD TYPE
	DCA RESTOR-1
	JMP I SAVE
	0
	0
	0
RESTOR,	0
	TAD RESTOR-2
	JMS I SDECO1
	TAD RESTOR-3
	DCA TYPEA
	TAD RESTOR-1
	DCA TYPE
	JMP I RESTOR
/
/
/
/
	EJECT
/PDP-12 ASSEMBLER  PAGE 8
	*2000
ENTS,	0
	TAD SEND
	JMS I SDECO1
CDK,	6211
	TAD VAL
	DCA I VADR
	TAD TEM1
	DCA I SADR
	ISZ SADR
	TAD TEM2
	DCA I SADR
	ISZ SADR
	TAD TEM3
	DCA I SADR
	MTWO
	TAD	SADR
	DCA SADR
CDL,	6201
	TAD I ENTS
	DCA .+2
	JMS I TYPAD1
	0
	ISZ ENTS
	ISZ SEND
	JMP I ENTS
M57,	-57
GETS,	GETIN
COMS,	COMMEN
IDX,	0
	JMS I GETS
	TAD M57
	SNA CLA 
	JMP I COMS
	TAD ITEM
	ASMIFZ	TERMC-44		/IS END OF FILE CHAR A 44??
	TAD	M44		/YEP. ASSEMBLE IT IN NOW.
	SNA CLA
	JMP I FINEND
BIT,	JMS I BIT6A
	DCA CHARX
	TAD CHARX
	DCA CHARX2
	JMP I IDX
EMPTY,	0
	TAD LISTWD
	SPA CLA
	JMP EMLEVE+1
	TAD PASS
	SMA CLA
	JMP I EMPTY
	TAD CHARAC
	SNA
	JMP EMLEVE
	CIA
	DCA CHARAC
	DCA TBCONT
	TAD M60
	DCA 16
	TAD SY
	
	DCA EMPTRA
	SKP
TWOCHR,	ISZ EMPTRA
	TAD I EMPTRA
	RTR
	RTR
	RTR
	AND P77
	DCA TEMP
	CMA 
	DCA SWITCH
	TAD TEMP
	TAD M47
	SNA CLA
NOTAB1,	JMP	OUTTAB
	JMS OUTTP
DRHT,	ISZ CHARAC
	JMP .+2
	JMP EMLEVE
	JMS I LNCKA
	TAD I EMPTRA
	AND P77
	DCA TEMP
	DCA SWITCH
	TAD TEMP
	TAD M47
	SNA CLA
NOTAB2,	JMP	OUTTAB		/REPLACED BY A TAD M7
	JMS OUTTP
DLFT,	ISZ CHARAC
	JMP TWOCH
EMLEVE,	JMS I TYCARI
	JMP I EMPTY
CLEARR,	0
	DCA CHARAC
	DCA I SWOTA
	TAD ERRCNT
	TAD ERTOT
	DCA ERTOT
	DCA ERRCNT
	TAD SY
	DCA I SYB
	JMP I CLEARR
TWOCH,	JMS I  LNCKA
	JMP TWOCHR
LNCKA,	LNCK
OUTTP,	0
	TAD TEMP
	JMS I ONVRT
	JMS I DECOUT
	ISZ TBCONT
	JMP I OUTTP
ONVRT,	CONVRT
OUTTAB,	TAD TBCONT
	TAD M10
	SMA
	JMP .-2
	JMS I KLUG2
TABR,	JMS I SKIP
	DCA TBCONT
	ISZ SWITCH
	JMP DLFT
	JMP DRHT
KLUG2,	SPACK
M10,	-10
	M44,	-44
SWOTA,	SWOT
M60,	-60
FINEND,	ENDMS
M7TWO,	-7
	EJECT
/PDP-12 ASSEMBLER  PAGE 9
*2200
DPCV,	0
	ISZ ANY
	DCA HIC		/CLEAR HIGH AND LOW PARTS
	DCA LWC
	TAD CHARX2	/ GET THE NEXT CHARACTER
	TAD M67
	SNA
	JMP DPCS
	TAD	DPCVM2
	SNA CLA
DPCS,	JMS I IDX1	/INDEX CHARACTER POINTER
	TAD CHARX2
	TAD M45
	SMA		
	JMP I DPCV
	TAD P12		/IF LESS OR EQUAL TO 9 CHECK FOR GR
	SPA		/EQ. ZERO
	JMP I DPCV	/LESS THAN ZERO, EXIT NOT DIGIT
	DCA MTDG
	JMS MT10
	JMP DPCS
DECIM,	JMS DECIMS
	JMP I B21
OCT,	JMS OCTS
	JMP I B21
DECIMS,	0
	TAD MTSW+4
	DCA MTSW
	JMP I DECIMS
OCTS,	0
	TAD M1000
	DCA MTSW
	JMP I OCTS
P12, 12
DPCVM2,	-2
/MULTIPLY LWC BY 10.
MT10,	0
	TAD LWC
	AND P777
	DCA TIC
	JMS MTRL
	JMS MTRL
MTSW,	JMS MTAD		/NOP FOR OCTAL, JMS MTAD FOR DECIMAL
	JMS MTRL
	TAD MTDG
	DCA TIC
	JMS MTAD
	JMP I MT10
/ROTATE  LWC LEFT 1
MTRL,	0
	CLL CLA
	TAD LWC
	RAL
	DCA LWC
	JMP I MTRL
/ADD LWC TO TIC
MTAD,	0
	CLL CLA
	TAD LWC
	TAD TIC
	DCA LWC
	JMP I MTAD
/SOME DATA STORAGE
MTDG,	0
TIC,	0
ERR2,	0
	TAD TYPE
	TAD P6000
	SNA CLA
	JMP I ERR2
	TAD TYPEA
	CLL RTL
	AND P6000
CDFM,	6211
	TAD I VADR
CDFN,	6201
	CIA
	TAD AADR
	SNA CLA
	JMP I ERR2
	CLA CLL CML RTL
	JMS I ERR1
	JMP I ERR2
UNDERR,	0
	ISZ PASS
	JMP EQCHK
DCA TEMP
CMA
DCA PASS
TAD TEMP
JMS I ERR1
	CLA CMA
	DCA PASS
	JMP I UNDERR
EQCHK,	TAD M4
	SNA CLA
	JMS I EQCHKI
	CLA CMA
	DCA EQRETI
JMP EQCHK-2
EQCHKI,	EQUCHK
PUSH2,	0
	DCA ERR2
	TAD P5000
	TAD POINT
	SMA CLA
	JMP ERR12
	TAD ERR2
	DCA I POINT
	ISZ POINT
	JMP I PUSH2
CNTRLP,	0
	KSF
	JMP I CNTRLP
KRB
	TAD M215
	SNA CLA
	JMP I MON
	JMP I CNTRLP
ERR12,	TAD P11
	JMS I ERR1
	JMP I MON
ANYY,	0
	TAD TYPE
	TAD P6000
	SNA
	ISZ ANY
	TAD P6000
	SNA CLA
	ISZ ANY
	JMP I ANYY
	EJECT
/PDP-12 ASSEMBLER PAGE 10
*2400
HIGH,	0
	0
	0
ORIGT,	0
	0
	0
WORK,	0
	0
	0
ALPHA,	0
	JMS I TYCARI
	DCA ORIGT
	DCA ORIGT+1
	DCA ORIGT+2
	DCA FOUND
	TAD SEND
	DCA SCURR
	TAD P1777	/MAX SYMBOL VALUE
	DCA HIGH
	CLA CMA
	DCA HIGH+1
	CLA CMA
	DCA HIGH+2
	TAD CORIGT
	JMS I MOVE1
	TEM1
CDO,	6201
AEND,	CLA CMA
	TAD SCURR
	DCA SCURR
	TAD SCURR
	JMS I SDECO1
	TAD PERMA
	CIA
	TAD SCURR
	SPA CLA
	JMP NTAB
CDP,	6211
	JMS I FOUND+1
CDQ,	6201
	TAD TYPE
	TAD P4000
	SZA CLA
	JMP AEND
	TAD SADR
	JMS I MOVE1
CWORK,	WORK
CDR,	6211
	JMS TRIPLE
	SNL CLA
	JMP AEND
	TAD CHIGH
	JMS I MOVE1
	TEM1
CDS,	6201
	JMS TRIPLE
	SZL CLA
	JMP AEND-4
	TAD CWORK
	JMS I MOVE1
CHIGH,	HIGH
CDT,	6201
	ISZ FOUND
	TAD SCURR
	DCA NTEM
	JMP AEND-4
FOUND,	0
	GETYPE
NTAB,	TAD FOUND
	SNA CLA
	JMP I ALPHA
	TAD NTEM
	JMS I SDECO1
	TAD SADR
	JMS I MOVE1
	TEM1A
CDU,	6211
CDV,	6211
	TAD I 16
CDW,	6201
	DCA VAL
	JMS I NTEM+1
	TAD CHIGH
	JMS I MOVE1
CORIGT,	ORIGT
CDX,	6201
	JMP ALPHA+5
NTEM,	0
	OSANDV
TRIPLE,	0
	TAD TEM1
	CMA CLL
	TAD WORK
	DCA TEMPA
	ISZ TEMPA
	JMP I TRIPLE
	TAD TEM1+1
	CMA
	TAD WORK+1
	DCA TEMPA
	ISZ TEMPA
	JMP I TRIPLE
	TAD TEM1+2
	CMA
	TAD WORK+2
	JMP I TRIPLE
TYCAR,	0
	TAD	P215
	JMS I	DECOUT
	TAD	P212
	JMS I	DECOUT
	JMS I	CHEKER
	JMS I	CNTLPI		/TEST FOR CARRAGE RETURN
	JMP I	TYCAR
CURSKP,	0
	TAD CURLIN
	JMS I SOPS
	TAD M22
	JMS I SKIP
	JMS I EMPTY1
	JMP I CURSKP
TYPO,	0
	TSF
	JMP .-1
	TLS
	CLA
	JMP I TYPO
M22,	-22
TEMPA=TYCAR
	EJECT
/PDP-12 ASSEMBLER PAGE 11
/OUTPUT A SYMBOL AND ITS VALUE
*2600
OSANDV,	0
	JMS OSYM	/OUTPUT SYMBOL
	TAD TBCONT
	TAD M7
	JMS I SKIP	/OUTPUT TAB
	JMS I LINK8
	TAD VAL
	JMS OPS		/OUTPUT NUMBER
	JMS I TYCARI
JMS I CNTLPI
	JMP I OSANDV
OSYM,	0
	DCA TBCONT
	TAD TEM1A
	JMS OX
	TAD TEM1A+1
	JMS OX
	TAD TEM1A+2
	JMS OX
	JMP I OSYM
LINK8,	LINK8A
OX,	0
	DCA LWC
	DCA HIC
	TAD LWC
	SNA
	JMP I OSYM
	TAD M45
	SPA
	JMP DV3
	ISZ HIC
	JMP .-4
DV3,	TAD P45
	DCA LWC
	TAD HIC
	JMS UNTRAN
	TAD LWC
	JMS UNTRAN
	JMP I OX
UNTRAN,	0
	SNA
	JMP I OSYM
	TAD M33
	SPA
	TAD P53
	TAD P260
	JMS I DECOUT
	ISZ TBCONT
	JMP I UNTRAN
/OCTAL PRINT SUBROUTINE
OPS,	0
	DCA OSYM
	TAD M4
	DCA TBCONT
	TAD OSYM
	RTL
	RAL
	DCA OSYM
	TAD OSYM
	RAL
	AND P7
	TAD P260
	JMS I DECOUT
	ISZ TBCONT
	JMP OPS+4
	JMP I OPS
P45,	45
M7,	-7
P53,	53
P260,	260
FLDUP,	JMS I EXPR1
	TAD MODE
SMA CLA
JMP FDRT
	TAD ANY
	SZA CLA
	JMP FIELDM
FDRT,	JMS I PASSEK
	JMS I CURSKA
	JMP  I MAIN1
FIELDM,	TAD EVAL
	SPA CLA
	JMP FDRT
	MTWO
	TAD	EVAL
	SMA CLA
	JMP FDRT
	TAD EVAL
	DCA FLDWD
	JMP FDRT
LISTA=.
	EJECT
/PDP-12 ASSEMBLER PAGE 12
*3000
	OPS
PUNONE,	0
	JMP I PUNONE	/NOP FOR PASS 2
	TAD AADR
	AND P7400
	CLL RTL
	RTL
	RAL
	TAD  BINTAB
	DCA BINPTR
	TAD FLDWD
	SNA CLA
	JMP BINCK
	TAD BINPTR
	TAD P20
	DCA BINPTR
BINCK,	TAD BINPTR
	CIA
	TAD BINBLK
	SZA CLA
	JMS I NOTBL1
	TAD AADR
	AND P377
	TAD P5000
	DCA	LOWTMP
	TAD EVAL
	DCA I	LOWTMP
	TAD LISTWD
	SPA CLA
	JMP I PUNONE
	TAD ERRCNT
	SZA CLA
	JMP NONER
ABNOP1,	TAD	CURLIN
ABNOP2,	JMS I	PUNONE-1
ABNOP3,	TAD	M6
ABNOP4,	JMS I	SKIP
NONER,	TAD MODE
	SMA CLA
	JMP LNKA
	TAD AADR
AADRL,	JMS I PUNONE-1
	MTWO
	JMS I SKIP
	TAD EVAL
	JMS I PUNONE-1
	MTWO
	JMS I SKIP
LINKA1,	JMP I PUNONE
LNKA,	TAD AADR
	AND P6000
	CIA 
	TAD ABANK
	SNA CLA
	JMP SAMES
	TAD AADR
	AND P3777
	JMP AADRL
SAMES,	TAD AADR
	AND P1777
	JMP AADRL
NOTBL1,	NOTBLK
P377,	377
P20,	20
M6,	-6
SYMBUF=.
/
/
/		INITIALIZATION FOR 8K PSEUDO OPS
/		CALLED ONCE, THEN CAN BE ZAPPED!
PS8K,	0
	JMS I	PSRDIN
	TAD	PLEUDO
	DCA I	PPPSEUDO
	DCA I	SPNOP1
	DCA I	SPNOP2
	DCA I	SPNOP3
	DCA I	SPNOP4
	DCA I	SPNOP5
	DCA I	SPNOP6
	JMP I	PS8K
SPNOP1,	PSNOP1
SPNOP2,	PSNOP2
SPNOP3,	PSNOP3
SPNOP4,	PSNOP4
SPNOP5,	PSNOP5
SPNOP6,	PSNOP6
PLEUDO,	PSEUDO
PPPSEUDO,	PPSEUDO
PSRDIN,	REDOP
/
/
/
/
/
	LMODE
/
/
/
/
/
JBSETU,	LDF	1
	BCL I
	-10
	ADM
	SYMUNT+2000
	LDF	2
	STA
	JBI1+2000
	STA
	JBI2+2000
	LIF	2
	JMP	0
/
/
	PMODE
/
/
/
/
/
/
/
/
/
	EJECT
/PDP-12 ASSEMBLER PAGE 13
*3200
	TABLE
ERROR,	0
	TAD .-2
	DCA UNREF-1
	TAD CURLIN
	JMS I SOPS
	MTWO
	JMS I SKIP
ERTA,	TAD I UNREF-1
	AND P77
	TAD P300
	JMS I DECOUT
	TAD I UNREF-1
	RTR
	RTR
	RTR
	AND P77
	TAD P300
	JMS I DECOUT
	MTWO
	JMS I SKIP
	ISZ ERRCNT
	JMS I	PASSEK
	SKP
	JMS I TYCARI
	JMP I ERROR
	0
UNREF,	UNDERR
	AAS
GETASY,	0
	CLA
	DCA IN
	JMS I GETASY-1
	TAD IN
	SNA CLA
	JMP I GETASY
	JMS I SEAR1
	SKP CLA
	JMP CKUN		/FOUND
	DCA VAL
	JMS I ENTS1
	USYMB
	CLA CLL IAC RTL	/4	/US
	JMS I GETASY-2
	JMP I GETASY
CKUN,	TAD TYPE
	TAD P6000
	SZA CLA
	JMP I GETASY
	JMP CKUN-3
ENTS1,	ENTS
SEAR1,	SEARCH
/TABLE OF ERROR MESSAGES
TABLE,	0511	/IE  ILLEGAL EQUALS
	2211	/II  ILLEGAL INDIRECT
	0411	/ID  ILLEGAL REDEFINITION
	0311	/IC  ILLEGAL CHARACTER
	2325	/US  REFERENCE TO UNDEFINED SYMBOL
	0604	/DF  SYSTEMS DEVICE FULL
	0504	/DE  SYSTEMS DEVICE ERROR
	0523	/SE  SYSBOL TABLE EXCEEDED
	0127	/WA WORKING AREA EXCEEDED
	2320	/PS PUSH DOWN LIST EXCEEDED
LNKMOD,	CLA SKP
PDP8MD,	CLA CMA
	DCA	MODE
	TAD	MODE
	TAD	P6321
	DCA	INSYM
	LINC
	LMODE
LDFA,	LDF 7
NOP9,	PDP
	PMODE
NOP7,	JMS I	SYMSWP
	LMODE
SYMUNT,	RDC	0
INSYM,	0
	PMODE
NOP8,	LINC
	LMODE
	CLR
	LDF 3
	PDP
PMODE
	JMS I RESET1
	JMS I PAGE1
	JMP I	B21		/CLEAN UP THE SYSTEM. WE RE DONE WITH THIS ONE.
P6321,	6000+D6+42
SYSIN,	0
	CLA CLL
	ISZ WDHALF
	JMP LEFTHF
	TAD I PTBUFP
	AND P77
	DCA TEMP
	ISZ PTBUFP
	ISZ CHRC
	JMP RTHFT
	TAD P7400
	DCA CHRC
	TAD PTBUFF
	DCA PTBUFP
	JMS I BUFI
RTHFT,	TAD TEMP
	JMP I SYSIN
LEFTHF,	CMA
	DCA WDHALF
	TAD I PTBUFP
	RTR
	RTR
	RTR
	AND P77
	JMP I SYSIN
BUFI,	BUFIN
WDHALF,	0
PTBUFP,	0
PTBUFF,	4400
CHRC,	0
PASSER,	0
	TAD LISTWD
	SPA CLA
	JMP .+4
	TAD PASS
	SPA CLA
	JMP I PASSER
	ISZ PASSER
	JMP I PASSER
EQUCHK,0
ISZ EQRETI
JMS I ERR1
JMP I EQUCHK
SYMSWP,	READ
/
/
/
/
	EJECT
/
/
/
/
/
/
/
/
/		E N D   O F   A S S E M O N E    ! ! ! ! ! ! ! ! ! ! !
/
/
/
/
/
/
/
	SAVSYM 2		/SAVE ALL SYMBOLS FOR ASSEMTWO
/
/
/
/
/
/
/
/
/	NOW GO AND ASSEMBLE ASSEMTWO!
/
/
/
/
/
	EJECT



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