File PIP1

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

*20
	PMODE
	EJECT
/
/	DIAL PHERIPERAL INTERCHANGE PROGRAM FOR THE PDP-12 COMPUTER.
/	COPYRIGHT 1969; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.,01754
/	WRITTEN BY JACK BURNESS
/	RELEASED NOVEMBER, 1969.
/
/	PIP WILL RUN ON A PDP-12 B OR HIGHER.
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/          PPPPPPPPP         IIIIIIIIIIII      PPPPPPPPP
/          P       PP             II           P       PP
/          P       PPP            II           P       PPP
/          P       PP             II           P       PP
/          PPPPPPPPP              II           PPPPPPPPP
/          P                      II           P
/          P                      II           P
/          P                      II           P
/          P                      II           P
/          P                 IIIIIIIIIIII      P
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
	EJECT
/
/
/
/			LOAD THE SYMBOLS FROM PIP4.
/
/
/
	LODSYM
/
/
	EJECT
	*0		/MAJOR PAGE 0 LOCATIONS.
/
/
/
/
	0		/RESERVED FOR JMP S IN L MODE.
LOC1,	0		/USED BY DISPLAY ROUTINE.
TAPE=JMS I .
TTAPE
HPOP=JMS I .
HHPOP
HPUSH=JMS I .
HHPUSH
LEADER=JMS I .
LLEDER
FILEC=JMP I .
FFILEC
PUTL=JMS I .
TTYPUT
	*10
AUTO1,	0		/AUTO REGISTER 1
AUTO2,	0
AUTO3,	0
AUTO4,	0
AUTO5,	0
AUTO6,	0
AUTO7,	0
AUTO8,	0
/
/
/
/
/
CARD=1				/SET THE CARD=1 TO CARD READER AND LINE PRINTER.
/				 ELSE SET CARD TO 0.
/
/
TERMC=00			/SET TO LOOK  OR A 00 AS THE EOF CHAR.
/
REMAKE=0			/DO NOT LOAD IN THE SOURCE FILE CONVERTER.
/				REMAKE WAS ORIGINALLY 1 BUT THE CONVERT ROUTINES NO LONGER ARE NEEDED.
/
ECHO=1				/SET THIS SWITCH TO 0 TUPPRESS ECHOING.
/
/
/
STAR20=1			/SET TO 1 IF YOU WANT TO HAVE A "*20" AT THE BEGINNING OF EVERY FILE.
/				 ELSE SET STAR20 TO 0000/
/
/
/
SYSWT=467			/LAST BLOCK OF DIAA WORK AREA.
TINDEX=346			/TAPE INDEX BLOCK
TILEN=2			/NUMBER OF BLOCKS IN INDEX
TLOWER=0			/FIRST BLOCK TO USE
TUPPER=777			/LAST BLOCK TO USE
TSYSLOWER=270		/START OF SYSTEM
TSYSUPPER=467		/LAST BLOCK OF SYSTEM.
SYSBBLOCK=370		/START OF BINARY WORK AREA.
SYSBIN=0001		/BINARY SCRATCH UNIT
SYSSBLOCK=370		/START OF ASCII WORK AREA.
SYSHDR=447			/BINARY HEADER BLOCK FOR "SB"2 COMMAND"
/
/
/		SOME BASIC DEFINITIONS
ZERO=CLA
PONE=ZERO+1		/(AWWWW)
PTWO=PONE+4+100		/CLA CLL IAC RAL
PTHREE=PTWO+20		/CML
PFOUR=PTWO+2		/(AWWW)
PSIX=PTHREE+2		/RTL
MONE=CLA CMA
MTWO=CLA CLL CMA RAL
MTHREE=CLA CLL CMA RTL
LEFT=000		/POINTER TO STARTING LEFT OF SCREEN
TOP=340			/POINTER TO TOP OF SCREEN
BOTTOM=-400			/SCREEN BOTTOM
/
/
	ASMIFZ	CARD-1		/IF CARD READER IS IN
BUFFER=6400			/SET THE BUFFER TO 6400
	ASMIFN	CARD-1		/IF NO CARD READER
BUFFER=6000			/THEN SET TR TO 6000
/				 IN ANY EVENT BUFFER MUST BE A MULTIPLE OF 400 OCTAL WORDS.
/
/
P20,	20
M10,	-10
L7770=M10
M4,	-4
M20,	-20
L77,	77
L200,	200
M301,	-301
M322,	-322
L4000,	4000
L5000,	5000
L6000,	6000
L7000,	7000
L7757,	7757
L60,	60
L700,	700
M12,	-12
L400,	400
L54,	54
M54,	-54
M60,	-60
M70,	-70
M73,	-73
M77,	-77
L7777,	7777
M32,	-32
L333,	333
M34,	-34
L7700,	7700
L10,	10
L4,	4
L7740,	7740
M40=L7740
M5757,	-5757
L7,	7
M314,	-314
L30,	30
M43,	-43
M6,	-6
L7400,	7400
M400=L7400
/
/
TEMP,	0
TEMP1,	0
TEMP2,	0
TEMP3,	0
TEMP4,	0
/
KEYCHAR,	0
BNUM,	0
DFIRST,	0
/
INBLOCK,	0
INUNIT,	0
OUTBLOCK,	0
OUTUNIT,	0
OUTNUM,	0
/
BFLAG1=INBLOCK
BFLAG2=OUTBLOCK
BOLDP=INUNIT
BCHAR=OUTUNIT
/
/
INDEX,	TINDEX
ILEN,	TILEN
ELOWER,	TLOWER
EUPPER,	TUPPER
CLOWER,	TSYSLOWER
CUPPER,	TSYSUPPER
/
L5757,	5757
	5757
	5757
	5757
FSIZE,	0
FUNIT,	0
FTYPE,	0
FBNUM,	0
FWHAT,	0
FNAME,	7777
	7777
	7777
	7777
/
/
ORIGIN,	0
DATA,	0
BTEMP1,	0
BTEMP2,	0
BTEMP3,	0
BFIELD,	0
BOLDO,	0
BOFIELD,	0
BCOUNT,	0
/
/
COUNT,	0
L177,	177
M215,	-215
M212,	-212
M377,	-377
M240,	-240
M340,	-340
DISPLAY=JMS I .
PPDIS
PIP=JMP I .
PIPPIP
DIAL=JMP I .
EXIT
COPY=JMS I .
CCOPY
SETA=JMS I .
ASET
GETA=TAD I AUTO8
CHECKIO=JMS I .
IOCHECK
	ASMIFZ	ECHO		/ECHOING DESIRED?
	ASMSKP	2		/NOPE. DON T ASSEMBLE CRLF PROCESS IN.
CRLF=JMS I .
TTYCR
GETL=JMS I .
TTYGET
LINE=JMS I .
GLINE
DECODE=JMS I .
DDCODE
SYSERR=HLT
DIRECTORY=JMS I .
DYRECT
MOVE=JMS I .
MMOVE
POP=JMS I .
PPOP
PUSH=JMS I .
PPUSH
NO=JMS I .
NODIS
REPLACE=JMS I .
REPDIS
READ=JMS I .
TREAD
WRITE=JMS I .
TWRITE
SEARCH=JMS I .
SSERCH
AUXIN=JMS I .
SEQIN
AUXOUT=JMS I .
SEQOUT
PUTWORD=JMS I .
BBOUT
/
/
	*177
	0000			/USED AS A JMS PIPPIP FOR CERTAIN ERROR RESTARTDS.
/
/
/
/
/
	EJECT
/
/
/
/
/
/
/			P   I   P       C   E   N   T   R   A   L       L   O   O   P
/
/
/
/
	*200
/
/
/
/
/
	LMODE			/JUST INCASE SOME JACKASS STARTS IT OFF IN THE WRONG MODE.
PIPPIP,	PDP			/GET INTO 8 MODE.
	PMODE
	JMS	RESTART		/CLEAN UP SYSTEM.
	ASMIFN	ECHO		/DO A CRLF ONLY IF ECHOING.
	CRLF			/GIVE INITIAL CARRIGE RETURN LINE FEED.
PIPL,	DECODE			/DISPLAY OPTIONS
	MAINDIS			/FROM MY LIST OF GOODIES.
	SEARCH			/LOOK FOR LEAGAL OPTIONS
	PIPLST			/LIST OF PIP OPTIONS
	PIPGO			/WHERE TO GO IF FOUND
	JMP	PIPL		/NOT A LEGAL REQUEST.
/
/
/
PIPLST,	301			/A=ABSOLUTE MODE
	302			/B=BINARY MODE
	4323			/S=SOURCE MODE, 4000=END LIST
/
PIPGO,	ABSOL			/ABSOLUTE HANDLER.
	BINARY			/POINTER TO BINARY HANDLER
	ASCII			/SOURCE HANDLER
/
/
/
/
/
RESTART,	0
	IOF			/TURN OFF INTERUPTS(THO THEY SHOULDN T  BE ON.
	KCC			/MAKE SURE THERE IS NOT A PREVIOUS  CONTROL CHARACTER IN THEE WINGS.
	MONE			/SET UP COPIER FOR 1 COPY
	DCA	OUTNUM		/-NUMBER OF OUTPUT TAPES FOR COPY
	JMS I	FCORE		/GET NUMBER OF BUFFERS.
	DCA	.-1		/ZAP OUT. CAN ONLY BE USED ONCE.
	TAD	M10
	DCA	0
	DISPLAY			/JUST WAIT A SECOND.
	MAINDIS
	ISZ	0
	JMP	.-3		/NOT DONE YET
	DCA	KEYCHAR		/NO NEW CHAR.
	LINC		/ENTER LINC MODE
	LMODE
	ADD	P20		/GET THE I/O PRESET BIT
	ESF			/AND DO AA I/O PRESET
	CLR
	PDP
	PMODE
	6026
	TLS
	6016
	KCC
	ASMIFZ	CARD-1		/SHOULD WE INITIALIZE PRINTER???
	LCB			/YEP. CLEAR THE PRINTER BUFFER AND SET THE FLAG SO IT LL BE READY IF WE NEED IT.
	MOVE			/ZERO UPPER CORE BY A HIDEOUS MOVE.
	BUFFER-1
	BUFFER
	-BUFFER
	JMP I	RESTART
/
/
/
EXIT,	JMS	RESTART		/RESTART DIAL
	MOVE			/PLACE DIAL RESTART INSTRUCTIONS
	READIN
EXITLOC,	4014		/IN PROPER PLACE FOR REBOOTSTRAP.
	4			/BOOTSTRAP IS 4 WORDS LONG
	JMP I	EXITLOC		/RETURN TO DIAL
/
/
FCORE,	COREF
READIN,	6141			/MAIN BOOTSTRAP.
	643			/MAKE SURE DATA FIELD IS SET AT 3
	701			/READ GROUP
	7300			/FROM 300.
/
/
/
/
MAINDIS,	LEFT+200
	TOP-200
	TEXT	"FPIP OPTIONS:
 
 
HA --- AUXILIARY MODE
HB --- BINARY MODE
HS --- SOURCE MODE\"
/
/
/
/
/
/
/
SSERCH,	0			/COMPARES "FTYPE" AGAINST GIVEN LIST.
	CLA CLL			/CLEAR AC TO BE SURE
	TAD I	SSERCH		/GET POINTER TO USER LIST
	DCA	TEMP		/AND STOORE AWAY
	ISZ	SSERCH		/BOP PAST FIRST ARG.
	TAD I	SSERCH		/GET JMP LIST
	DCA	TEMP1		/STORE POINTER N TEMP1
	ISZ	SSERCH		/BOP PAST SECOND ARG FOR RETRUN.
/
SSLOOP,	TAD I	TEMP		/GET NEXT WORD TO COAMPARE
	SPA			/IF POSIITIVE SKIP
	TAD	L4000		/NEGATIVE. LAST CHAR. MAKE POSIITIVE FOR CHECK.
	CIA
	TAD	FTYPE		/DOES IT EQUAL CONTENTS O F  FTYPE
	SZA CLA
	JMP	SSNO		/NO. TEST FOR END
	TAD I	TEMP1		/YES. GET FOUND RETURN ADDRESS
	DCA	TEMP
	JMP I	TEMP		/AND GO THERE
/
SSNO,	ISZ	TEMP1		/BOP UP JUMP TABLE POINTER
	TAD I	TEMP		/WAS THIS LAST CHARACTER?
	SPA CLA
	JMP I	SSERCH		/YEP. IT S   NEGATVIE
	ISZ	TEMP		/NOP. BOP UP CHAR POINTER AND TRY AGAIN
	JMP	SSLOOP		/BACK UP TO TRY NEXT.
/
/
/
/
/
/
/
/
/
/
	ASMIFZ	ECHO		/DO WE WANT ECHOING???
	ASMSKP	12		/NOPE. CR NEVER CALLED, SO DO NOT PUT IT IN.
/
TTYCR,	0
	TAD	M215		/GET A C.R. IN THE AC.
	CIA
	PUTL			/AND AWAY IT GOES
	TAD	M212		/N THE L.F.
	CIA
	PUTL			/AND AWAY IT GOES
	JMP I	TTYCR		/AND RETURN TO CALLER.
/
/
/
/
/
/
/
/
/
/
/
	EJECT
	*400
/
/
/		DISPLAY ROUTINE
/
/		GENERAL CALL:
/
/	DISPLAY
/	PTEXT
/		WHERE PTEXT POINTS TO THE FOLLOWING:
/
/PTEXT,	XCOOR.
/	YCOOR
/	TEXT	"F THIS IS MY MESSAGE\"
/
/
PPDIS,	0		/MAIN ENTRY
PINST1,	CLA CLL		/CLEAR AC.
	CHECKIO			/CHECKIO FOR IO NOW AND AFTER EVERY C.R.
	TAD I	PPDIS		/GET MAIN POINTER
	DCA	PDIS		/AND PLACE IN TEMP POINTER.
	ISZ	PPDIS		/PAST POINTER ON RETURN.
	TAD I	PDIS		/GET POINTER
	DCA	PHOR		/X POS
	ISZ	PDIS		/BOP UP
	TAD I	PDIS		/GET VERTICAL
PDCAVR,	DCA	PVER		/AND STASH AWAY.
	TAD	PDIS		/START OF TEXT
	DCA	PSTART		/BOP DOWN BY 1
	MONE		/SET SWITHC TO LEFT OF NEXT WORD.
	DCA	PSWITCH
	TAD	PINST1		/GET A CLA FOR FIRST TIME THROUGH.
	DCA	PNOT1		/AND STORE SO NO VERTICAL BOP.
/
PPSTART,	JMS	PGETL		/GET NEXT CHAR FROM TEXT.
	MONE		/SET CHAR SIZE TO HALFWORD
	DCA	PCSW		/IN CASE OF NO F OR H.
	TAD	PCHAR		/GET IN AC.
	TAD	M10		/IS IT AN "H"
	SNA	CLA		/IF IT IS,SKIP PAST AND IGNORE.
	JMP	PPAST		/ITS AN "H"
	TAD	PCHAR
	TAD	M6		/IS IT AN "F"
	SZA	CLA
	JMP	PDO		/NOT AN "F" OR AN "H". USE IT AS A CHAR IN HALFWORD.
	DCA	PCSW		/SET SIZE TO FULL.
PPAST,	JMS	PGETL		/GET FIRST CHAR TO BE DISPLAYED.
PDO,	TAD	PCSW		/GET SIZE.
	SNA	CLA		/IS IT FULL SIZE.
	TAD	M4		/YES. SET BACK LEFT BY 8.
	TAD	M4		/ IF HALF SET IT BACK BY 4.
	TAD	PHOR
	DCA	LOC1		/THIS IS A REAL LOC1(0001)
	TAD	PCSW		/GET SIZE
	SNA	CLA		/FULL?
	TAD	M20		/YES. BOP DOWN BY 40, NOT 20
	TAD	M20		/M20 IF HALF SIZE
	TAD	PVER
PNOT1,	DCA	PVER		/MADE A CLA FOR THE FIRST TIME THROUGH
	TAD	PDCAVR		/GET CORRECT INST.
	DCA	PNOT1		/SET UP FOR FUTURE CALLS.
	TAD	PCSW		/CHAR SIZE.
	CMA			/COMPLEMENT BIT.
	AND	L200		/BIT4 OF ESF
	LINC
	LMODE		/GET INTO LINC MODE
	ESF		/SET CHARS TO CORRECT SIZE
	CLR
	PDP		/BACK OVER INTO 8 MODE
	PMODE
/
PLOOP,	TAD	PCHAR		/GET THE CHAR IN THE AC.
	CLL RAL		/MULTIPLY BY 2.
	TAD	PTABLE		/POINTER TO DISPLAY TABLE.
	DCA	AUTO7		/AUTO FOR PICKING UP THE DISPLAY CHARS.
	TAD	PVER		/GET THE VERTICAL IN THE AC.
	LINC		/GO OVER TO LMODE AND START TO DISPLAY.
	LMODE
	DSC I	AUTO7		/FIRST PART OF CHAR
	DSC I	AUTO7		/SECOND PART OF CHAR.
	PDP
	PMODE		/BACK INTO 8 MODE
	PTWO		/GET A +2 IN THE AC
	TAD	LOC1		/GET NEXT DISPLAY POINT.
	DCA	LOC1		/AND BOP BY 1/2 CHAR.
	JMS	PGETL		/GET ANOTHER CHARACTER.
	JMP	PLOOP		/ AND DISPLAY IT.
/
PGETL,	0		/CHAR GETTER ROUTINE
	ISZ	PSWITCH		/IS IT LEFT HALF?
	JMP	PRIGHT		/GET CHARACTER
	ISZ	PSTART		/GET NEXT WORD
	TAD I	PSTART		/IN THE AC
	RTR
	RTR
	RTR		/MOVE TO RIGHT SIDE
	JMP	PCOM		/GO DO THE AND.
PRIGHT,	MONE		/RESET SWITCH
	DCA	PSWITCH		/FOR NEW WORD NEXT TIME.
	TAD I	PSTART		/WORD IN AC
PCOM,	AND	L77		/JUST THE LOW ORDER BITS.
	DCA	PCHAR		/SAVE FOR LATTER USE.
	TAD	PCHAR		/BACK IN AC.
	TAD	M34		/IS IT "\"
	SNA	CLA
	JMP I	PPDIS		/YES!  E X I T.
	TAD	PCHAR		/GET IT AGAIN
	TAD	M43		/IS IT A CR.
	SZA	CLA
	JMP I	PGETL		/NO. RETURN.
	CHECKIO		/CHECK I/O FLAGS AND SERVICE.
	JMP	PPSTART		/RESET TO START NEXT LINE.
/
/
PDIS,	0		/TEMPORARY POINTER
PHOR,	0		/HORIZONTAL COORDINATE
PVER,	0		/VERTICAL COORDINATE
PSTART,	0		/POINTS TO NEXT TEXT WORD.
PSWITCH,	0	/0=GET RIGHT HALF,-1=GET LEFT HALF OF NEXT WORD.
PCSW,	0		/0=FULL SIZE,-1=HALF SIZE.
PCHAR,	0		/CONTAINS NEXT TEXT CHARACTER.
PTABLE,	TABLED-1		/POINTS TO DISPLAY TABLE -1  FOR INDEXING.
/
/
/
/
DDCOM,	0			/DECODE CALLS THIS ROUTINE TO GET A CHAR FROM PGETL
	JMS	PGETL		/GET A CHAR.
	TAD	PCHAR		/PLACE IN AC.
	JMP I	DDCOM		/RETURN.
/
/
IOCHECK,	0			/CHECKS IO DEVICES.
	CLA CLL
	KSF			/IS IT KEYBOARD?
	JMP I	IOCHECK		/NOPE. RETURN.
	KRS			/READ IN THE FLAG BUT DON T TURN OFF THE FLAG.
	TAD	IOCD		/IS IT A CONTROL D
	SNA			/????
	DIAL			/YEP. RESTART DIAL
	TAD	IOCP		/HOW ABOUT A CONTROL P
	SNA CLA			/????
	PIP			/YEP. RESTART PIP.
	TAD	KEYCHAR		/DO WE HAVE A CHARACTER IN BUFFER?????
	SMA
	KRB			/READ IN NEW CHAR IF NONE THERE
	RAL
	CLL CML RAR		/TURN ON SIGN BIT.
	DCA	KEYCHAR		/STASH AWAY.
	JMP I	IOCHECK		/ALL DONE. RETURN TO CALLER
/
/
/
IOCD,	-204			/CONTROL D
IOCP,	-220+204		/CONTROL P MINUS CONTROL D
/
/
/
/
/
/
/
/
/
	EJECT
	*600
/	DISPLAY CHARACTER TABLE.
/
TABLED=.
/
	7777		/00=ILLEGAL
	7777
	4477		/01=A
	7744
	5177		/02=B
	2651
	4136		/03=C
	2241
	4177		/04=D
	3641
	4577		/05=E
	4145
	4477		/06=F
	4044
	4136		/07=G
	2645
	1077		/10=H
	7710
	7741		/11=I
	0041
	4142		/12=J
	4076
	1077		/13=K
	4324
	0177		/14=L
	0301
	3077		/15=M
	7730
	3077		/16=N
	7706
	4177		/17=O
	7741
	4477		/20=P
	3044
	4276		/21=Q
	0376
	4477		/22=R
	3146
	5121		/23=S
	4651
	4040		/24=T
	4077
	0177		/25=U
	7701
	0176		/26=V
	7402
	0677		/27=W
	7701
	1463		/30=X
	6314
	0770		/31=Y
	7007
	4543		/32=Z
	6151
	4177		/33=[
	0000
	7777		/34=ILLEGAL
	7777
	0000		/35=]
	7741
	2000		/36=^
	2076
	7777		/37=ILLEGAL
	7777
	0000		/40=SPACE
	0000
	7500		/41=!
	0000
	7000		/42="
	0070
	7777		/43=ILLEGAL
	7777
	5721		/44=DOLLAR SIGN
	4671
	6661		/45=PER CENT SIGN
	4333
	5166		/46=&
	0526
	0000		/47=TAB
	0000
	3600		/50=(
	0041
	4100		/51=)
	0036
	2050		/52=*
	0050
	0404		/53=+
	0437
	0500		/54=,
	0006
	0404		/55=-
	0404
	0001		/56=.
	0000
	0601		/57=/
	4030
	4536		/60=0
	3651
	2101		/61=1
	0177
	4523		/62=2
	2151
	4122		/63=3
	2651
	2414		/64=4
	0477
	5172		/65=5
	0651
	1506		/66=6
	4225
	4443		/67=7
	6050
	5126		/70=8
	2651
	5122		/71=9
	3651
	2200		/72=:
	0000
	4601		/73=;
	0000
	7777		/74=ILLEGAL
	7777
	1212		/75==
	1212
	7777		/76=ILLEGAL
	7777
	4020		/77=?
	2055
/
/
/
	EJECT
	*1000
/
/
/		ROUTINE TO GET A LINE FROM TTY.
/
/		GENERAL CALL:
/
/	LINE
/	PDIS
/
/			WHERE PDIS POINTS TO THE STUFF TO BE DISPLAYED WHILE WAITING FOR A LINE OF INPUT.
/
/
/
/
GLINE,	0		/MAIN ENTRY FPR LINE GETTER ROUTINE.
	CLA CLL		/CLEAR AC.
	TAD I	GLINE		/GET POINTER TO DISPLAY
	DCA	G1		/AND SAVE IT.
	ISZ	GLINE		/SET UP RETURN.
	TAD	G1		/GET POINTER
	DCA	G2		/AND STASH IT IN THE SECOND LOOP.
GCLEAR,	DCA I	GGNUM		/CLEAR NUMBER OF CHARS TO ZERO.
GMAIN,	PONE		/GET A +1 IN THE AC.
	TAD I	GGNUM		/GNUM+1, NEXT SPOT IN BUFFER.
	JMS	GIN		/STICKS NEXT CHARACTER INTO GNUM+1
	0		/0=ILLEGAL=A SOLID BLOCK.
	PTWO		/GET A PTWO INTO THE AC.
	TAD I	GGNUM		/NUMBER OF CHARS+2
	JMS	GIN		/PUT A 34 AT END FOR DISPLAY ROUTINE.
	34		/ FORM.
	TAD	GCOUNT		/AN OSCILLATING NUMBER.
	DCA	COUNT		/GENERAL COUNT LOCATION.
/
GLOOP1,	DISPLAY		/DISPLAY CALLERS MESSAGE.
G1,	0		/HIS POINTER HERE
	DISPLAY		/NOW DO OUR LINE OF CRAP.
	GTEXT		/POINTER TO OUR BUFFER.
	GETL		/IS THERE A TTY CHAR?
	SKP		/NO!
	JMS I	GGINSERT		/YES. PLACE IN BUFFER.
	ISZ	COUNT		/BOP UP FLICKER COUNT.
	JMP	GLOOP1		/STILL GOOD. DISPLAY AGAIN.
	TAD	GCOUNT		/GET FLICKER COUNTER
	DCA	COUNT		/AND RESET TEMPORARY COUNTER.
	PONE		/+1
	TAD I	GGNUM		/SET A "\" AT END WITH NO BLOCK FLICKER.
	JMS	GIN		/PLACE IN BUFFER
	34
GLOOP2,	DISPLAY		/NOW DISPLAY USERS MESSAGE.
G2,	0		/HIS POINTER.
	DISPLAY		/NOW OUR BUFFER
	GTEXT		/BUFFER POINTER.
	GETL		/TEST LOW READER.
	SKP		/NO CHAR THERE
	JMS I	GGINSERT		/INSERT INTO BUFFER
	ISZ	COUNT		/DONE YET???
	JMP	GLOOP2		/NO. DISPLAY AGAIN.
	JMP	GMAIN		/RESET FLICKER POINTER.
/
/
/
GIN,	0		/PUTS A CHAR IN BUFFER
	TAD	GMLEN		/BASIC MESSAGE BEFORE USER DOES ANYTHING.
	DCA	TEMP		/SAVE CHARACTER NUMBER.
	TAD	TEMP		/GET CHARACTER NUMBER.
	CLL RAR		/DIVIDE BY 2 TO GET WORD NUMBER.
	TAD	GGTEXT		/POINTER TO ACTUAL TEXT.
	DCA	TEMP2		/AND STASH AWAY.
	TAD	TEMP		/REGET CHAR NUMBER.
	RAR			/IS IT ODD OR EVEN.
	SNL CLA
	JMP	GLEFT		/EVEN. GET LEFT HALF.
	TAD I	TEMP2		/GET RIGHT HALF
	AND	L7700		/BLAH OUT RIGHT 6 BITS
	TAD I	GIN		/GET DESIRED SAVE CHAR.
GINTO,	ISZ	GIN		/BOP PAST CALLING CHAR.
	DCA I	TEMP2		/AND STASH AWAY.
	JMP I	GIN		/RETURN.
GLEFT,	TAD I	TEMP2		/LEFT CHAR.
	RTR
	RTR
	RTR			/MOVE INTO RIGHT HALF
	AND	L7700		/BLAH OUT RIGHT BITS
	TAD I	GIN		/STICK IN GOOD CHAR.
	RTL
	RTL
	RTL		/AND SHIFT BACK
	JMP	GINTO		/NOW GO AND STASH AND RETURN.
/
GGNUM,	GNUM
GMLEN,	LBNUM-1		/LEN OF MESS ALREADY IN BUFF -1 TO COMPENSATE FOR 0 CHAR.
GGINSERT,	GINSERT		/POINTER TO INSERT ROUTINE.
GCOUNT,	-10		/FLICKER COUNTER
GGTEXT,	GTEXT+2		/ACTUAL TEXT POINTER.
/
/
/
/
TTYGET,	0			/ROOM FOR NON-OVERLAPPED TTY ROUTINE HERE
	CHECKIO			/CHECK IO DEVICES NOW.
	TAD	KEYCHAR		/GET SAVED CHAR.
	SNA			/IS THERE REALLY ONE THERE???
	JMP I	TTYGET		/NO. RETURN
	ISZ	TTYGET		/YES. BOP UP RETURN ADDRESS.
	TAD	L4000		/CHOP OFF STUCK ON BIT.
	DCA	0		/0 CAN BE USED RIGHT ONW.
	DCA	KEYCHAR		/ZAP OUT OLD CHAR.
	TAD	0		/RETRIEVE CHAR.
	JMP I	TTYGET		/EXIT TO SECOND LOCATION WITH CHAR IN THE AC.
/
/
LINEB,	LEFT		/START AT BOTTOM LEFT FOR DISPLAY.
GTEXT=LINEB
	BOTTOM			/BOTTOM OF SCREEN.
	TEXT	"REPLY:\"		/HALFWORD ASSUMED.
LBNUM=6			/NUMBER OF PREVIOUS CHARS IN BUFFER.
LBMAX=62-LBNUM			/MAXIMUM NUMBER OF USER CHARACTERS.
/			FOUND BY GETTING MAX ON LINE(62) AND SUBTRACTING THOSE IN BUFFER(LBNUM).
/
/
/
	EJECT
/
/
/
	*1200
/		SECOND PAGE OF LINE GETTER ROUTINE.
/
/
/
/
GINSERT,	0		/CHECKS CHAR AND STICKS IN BUFFER.
	AND	L177		/MAKE INTO EVEN PARITY.
	TAD	L200		/WITH 200 BIT ON.
	DCA	GPUT		/SAVE CHAR.
	TAD	GPUT		/GET AGAIN.
	TAD	M215		/IS IT A CR.
	SNA CLA
	JMP	GALL		/YEP. CLEAN UP AND EXIT.
	TAD	GPUT
	TAD	M212		/MAYBE IT S A LINEFEED?
	SZA CLA
	JMP	GNEXT1		/NO. NOT A LEGAL CONTROL CHAR.
	ASMIFN	ECHO		/ASSEMBLE CRLF IF ECHOING HCARS ONLY.
	CRLF		/GIVE A CARRIAGE RETURN, LINE FEED.
	JMP I	GGCLEAR		/AND RESTART INPUT BUFFER.
GNEXT1,	TAD	GPUT		/GET THE CHAR AGAIN.
	TAD	M377		/IS IT A RUBOUT?
	SZA CLA
	JMP	GNEXT2		/NO. CHECK FOR SOMETHING ELSE.
	MONE		/-1 IN AC.
	TAD	GNUM		/BACKSPACE BUFFER !
	SMA		/ARE WE TOO FAR GONE.
	DCA	GNUM		/NO. BACKSPCE DONE.
	CLA		/JUST IN CASE.
	JMP I	GGMAIN		/GO BACK AND DO NEXT.
GNEXT2,	TAD	GPM1		/POINTER TO SPECIAL TABLE OF EXCEPTIONS.
	DCA	AUTO5		/PLACE IN AUTO REG.
GBACK,	TAD I	AUTO5		/GET NEXT EXCEPTION
	SNA			/END OF TABLE?
	JMP	GDONE		/YEP. CHECK NEXT FEATURE.
	CIA		/NEGATE.
	TAD	GPUT		/TEST AGAINST PRESENT CHAR.
	SZA CLA		/IS IT A MATCH?
	JMP	GBACK		/NO. GET NEXT ITEM.
	JMP I	GINSERT		/YEP. IGNORE CHAR.
GDONE,	TAD	GPUT		/GET CHAR.
	TAD	M240		/CHECK FR LIMIT
	SPA CLA
	JMP I	GINSERT		/RANDOM CRAP. IGNORE.
	TAD	GPUT
	TAD	M340
	SMA CLA		/IS IT TOO BIG?
	JMP I	GINSERT		/YES. IGNORE IT.
	TAD	GNUM		/GET NUMBER OF CHARS.
	IAC		/TEST TO SEE IF IT LL  FIT.
	CIA
	TAD	GLIMIT		/NUMBOER OF SPACES IN BUFFER.
	SNA CLA
	JMP I	GGCLEAR		/TOO MANY. RESTART.
	ASMIFN	ECHO		/LOAD THE CHAR IN AC TO ECHO IF ECHOING CHARS!
	TAD	GPUT
	ASMIFN	ECHO		/ECHO CHAR ONLY IF SWITCH IS SET.
	PUTL		/ECHO ON TTY.
	TAD	GPUT		/GET CHAR.
	AND	L77		/MAKE INTO A SIXBITTER
	DCA	GPUT
	ISZ	GNUM		/BOP UP COUNT
	TAD	GNUM		/PLACE IN AC.
	JMS I	GGIN		/PLACE CHAR IN BUFFER
GPUT,	0		/HERE IS CHAR.
	JMP I	GGMAIN		/ALRIGHT, GO BACK AND DO NEXT
GALL,	ASMIFN	ECHO		/DO A CRLF ONLY IF  SWITCH IS SET.
	CRLF			/DO A CAR RET AND LIN FED.
	PONE		/+1 IN AC
	TAD	GNUM		/NUMBER OF CH?SS IN BUFFER.
	JMS I	GGIN		/PLACE A "0" IN BUFFER.
	0000			/0
	TAD I	GGLINE
	DCA	GINSERT
	JMP I	GINSERT
/
/
/
GGLINE,	GLINE		/COMMUNICATION.
GNUM,	0			/NUMBER OF CHARS IN BUFFER
GLIMIT,	LBMAX			/MAX NUM OF USER CHARS IN BUFFER.
GGIN,	GIN
GGMAIN,	GMAIN
	GGCLEAR,	GCLEAR			/CROSS PAGE REFEREENCES.
GPM1,	GEXPT-1		/POINTER TO EXCEPTIONS (-1)
GEXPT,	300
	334
	337
	243
	ASMIFZ	TERMC-44		/IS DOLLAR SIGN LEGAL????
	244			/NOT IN THIS VERSION. SORRY ABOUT THAT.
	274
	276
	0			/END OF TABLE.
/
/
MMOVE,	0
	MONE
	TAD	MMOVE
	DCA	AUTO3
	MONE
	TAD I	AUTO3
	DCA	AUTO4
	MONE
	TAD I	AUTO3
	DCA	AUTO5
	TAD I	AUTO3
	CMA
	DCA	COUNT
	JMP	MMEXIT-2
	TAD I	AUTO4
	DCA I	AUTO5
	ISZ	COUNT
	JMP	.-3
MMEXIT,	JMP I	AUTO3
/
/
PPUSH,	0
	MOVE
	FSIZE
	PPTEMP
	FNAME+3-FSIZE+1
	JMP I	PPUSH
/
PPOP,	0
	MOVE
	PPTEMP
	FSIZE
	FNAME+3-FSIZE+1
	JMP I	PPOP
/
/
PPTEMP,0
	*PPTEMP+FNAME+3-FSIZE
	0000			/JUST TO SEE WHERE IT IS. NEXT LOCATION IS COMPLETELY FREE.
/
/
/
	EJECT
/
/
/
/
/
/		SAVE THE SYMBOLS FOR     P    I    P    2    !    !    !    !    !
/
/
/
/
/
/
/
/
	SAVSYM	2
/
/
/
/
/
/
/
/
/
/
	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