File PIP4

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

*20
	PMODE
	EJECT
/
/
/
/
/
/			P    I    P    4
/
/
/
/
/			THIS IS THE FOURTH PART OF PIP
/
/
/
/
/
/
/
/
/
/
	LODSYM			/RECALL OLD SAVED SYMBOLS.
/
/
/
/
/
/
/
/
/
/
/
/
/
	EJECT
/
/
	*5000
/
/
/
/
/
/			S  O  U  R  C  E     H  A  N  D  L  E  R
/
/
/
/
/
/
ASCINP=BININP			/SAME DEFINITIONS AS BINARY(FOR NOW , ANYWAY)
ASCOUT=BINOUT
ASCLST=BINLST
ASCLTO=ASCLST
/
/
/
/
/
/
ASCII,	DECODE			/GET THE INPUT REQUEST NOW
	ASCINP			/DISPLAY THE POSSIBLE INPUT DEVICES.
	DCA	BFLAG1
	DCA	BFLAG2
	DCA	BCOUNT
	DCA	ORIGIN
	DCA	BFIELD
	DCA	BOLDP
	DCA	177			/INITIALIE VARIOUS POINTERS AND COUNTS.
	ASMIFZ	CARD-1		/ASSEMBLE NEXT CHECK IF CARD READER DEISRED.
	JMS I	ACRCHK		/SEE IF ITS A "C" FOR THE CARD READER
	SEARCH			/SEARCH THE LIST FOR A GOOD OPTION
	ASCLST			/LIST OF GOOD CHARS
	ASCGO			/WHERE TO GO FOR THEM
	JMP	ASCII		/NO LEGAL REQUEST THERE.
/
/
	ASMIFZ	CARD-1		/ASSEMBLE IN CARD POINTER IF CARD READER DESIRED.
ACRCHK,	CRDLTT			/CARD READER POINTER.
/
/
ASCH1,	ISZ	BFLAG1		//SET FOR HIGH SPPEED READER
ASCT1,	ISZ	BFLAG1		/SET FO R  TTY
	JMP	APART2		/GO AND GET OUTPUT
/
ASCT,	TAPE			/SET FOR TAPE OPERATION
	PONE			/SET TO INPUT AND SOURCE
	DCA	FWHAT
	PONE
	DCA	FTYPE
	DIRECT			/LOOKUP UP NAME NOW.
	HPUSH			/AND SAVE IT AWAY
/
APART2,	DECODE			/GET THE OUTPUT DEVICE
	ASCOUT
	SEARCH			/LOOKUP UP REPLY
	ASCLTO
	ASCGO2			/GO TO WHERE IT POINTS
	ASMIFZ	CARD-1		/IS LINE PRINTER THERE????
	JMS I	ASCLPT		/CHECK IF "P" TYPED AND INITIALIZE LINEPRINTER.
	JMP	APART2		/N OT   A GOOD REPLY
/
/
	ASMIFZ	CARD-1		/ASSEMBLE IN PRINTER POINTER?
ASCLPT,	LPT2			/POINTER TO CHECKER AND INITIALIZER.
/
/
ASCH2,	ISZ	BFLAG2		/SET TO HIGH OUTPUT
ASCT2,	ISZ	BFLAG2		/SET TO TTY OUTPUT
	SKP			/SKP OVER TAPE INITIALIZER.
ASCTT,	TAPE			/SET FOR A TAPE OPERATION, SHOULD THERE BE ONE.
	PONE
	DCA	FTYPE		/SET FOR SOURCE MODD.
	MONE
	TAD	BFLAG1
	TAD	BFLAG2		/IS IT MASS STORAGE TO MASS STORAGE.
	SPA CLA			/????
	FILEC			/YEP. DO TRANSFER NOW.
	6016			/INITIALIZE HIGH READER.
	6032			/CLEAR TTY AND AC.  ALSO ANY OTHER DEVICES RIGH NOW.
	PUSH			/SAVE OUTPUT FILE INFORMATION
	HPOP			/BRING IN INPUT FILE INFORMATION
	JMS I	ASETI		/SET UP SEQUENTIAL TAPE INPUT
	TAD	BFLAG2		/ARE WE GOING TO TAPE
	SZA CLA
	LEADER			/NO. WE BETTER GENERATE SOME LEADER NOW.
/
/
/
/
ALOOP,	TAD	BFLAG1		/GET THE INPUT DEVICE POINTER.
	SZA CLA			/FROM A FILE?
	JMP	.+3		/NOPE.
	JMS I	AAGET		/YEP. GET A CHAR NOW
	SKP			/SKP OVER BELOW GET.
	AUXIN			/IF NOT  FROM A FILE, GET THE CHAR NOW.	AND	L177
	AND	L177		/MAKE INTO A GOOD ASCII CHARACTER.
	TAD	L200		/WITH PARITY BIT ON.
	DCA	FTYPE		/AND STORE AWAY.
	TAD	177		/WAS A CONTROL Z TYPED?
	SZA CLA
	JMP	AEND		/YEP. DO END
	SEARCH			/SEARCH FOR POSIBLE SPECIAL CHARACTERS.
	AC1
	AG1
	TAD	FTYPE		/A STANDARD CHARACTER. 
	TAD	M240		/CHECK TO SEE IF IN STANDARD 6 BIT RANGE
	SPA CLA
	JMP	ABAD		/NOT IN RANGE. A BAD CHAR.
	TAD	FTYPE
	TAD	M340
	SMA CLA
	JMP	ABAD		/TOOO BIG. IGNORE IT.
AOK,	JMS	APUTIT		/CHAR OK AS IS. OUTPUTTIT.
	JMP	ALOOP		/GO BACK AND GET ANOTHER ONE.
/
/
ABAD,	JMP	ALOOP		/BAD CHAR. GET NEXT ONE
/
/
/
AEND,	TAD	BFLAG1		/IS IT MASS INPUT?
	SNA CLA
	JMP	AEND2		/YEP. IGNORE STANDARD PAPER TAPE CRAP.
	JMS I	AMORE		/ASK FOR MORE TAPES??
	JMP	ALOOP		/HE S   GOT ANOTHER TAPE.
AEND2,	JMS	ACRR		/PLACE A CR IN THE BUFFER.
	TAD	AABLAH		/GETE  THE EOT-Z CHAR
	DCA	 FTYPE		/AND PLACE IN THE BUFFER	JMS	APUTIT
	JMS	APUTIT		/PLACE IT OUT THERE
	MONE			/IF LASS STOREAGE IT NEVER RETURNS TO HERE
	DCA	FTYPE		/PLACE A RUBOUT ON  BUS
	JMS	APUTIT		/AND SEND IT OUT
	JMS	ACRR		/DO ANOTHER CARRIGE RETURN.
	LEADER			/THEN GENERATE TRAILER
	PIP			/AND FINALLY GO BACK TO PIP
/
/
/
/
ACR,	JMS	ACRR		/COMES HERE IF A CR ENCOUNTERED.	JMP	ALOOP
	JMP	ALOOP		/GET NEXT CHAR
/
/
ACRR,	0			/GENERATES A CR,LF,RUBOUT
	TAD	AC1			/215
	DCA	FTYPE
	JMS	APUTIT		/OUT GOES THE C	R
	TAD	M212
	CIA
	DCA	FTYPE
	JMS	APUTIT		/OUT GOES THE L F
	MONE
	DCA	FTYPE
	JMS	APUTIT		/OUT GOES THE RUBOUT
	JMP I	ACRR		/RETURN
/
/
/
APUTIT,	0			/SENDS A CHAR ALONG CORRECTLY
	TAD	BFLAG2		/WHERES IT GOING?
	SZA CLA
	JMP	.+3		/TO THE SEQUENTIAL DEVICE
	JMS I	AAAPUT		/PLACE IN MASS BUFFER.
	JMP I	APUTIT		/AND RETURN
	TAD	FTYPE		/GET THE CHAR
	AUXOUT			/GOOD BYE
	JMP I	APUTIT		/AND RETURN.
/
/
AAAPUT,	AAPUT
ASETI,	SETI
AAGET,	AAAGET
AMORE,	MORE
/
/
/
AC1,	215
	300
	337
	243
	ASMIFZ	TERMC-44		/IS 44 A LEGAL CHAR???
	244			/NO. ASSEMBLE IT IN THE EXCEPTION TABLE.
	247
AABLAH,	232
	4211			/END OF LIST
/
/
/
AG1,	ACR
	ABAD
	ABAD
	ABAD
	ASMIFZ	TERMC-44		/SHOULD WE IGNORE DOLLAR SIGNS???
	ABAD			/YEP. ASSEMBLE IN THE POINTER.
	ABAD
	AEND
	AOK
/
/
/
/
ASCGO,	ASCH1
	ASCT
	ASCT1
/
ASCGO2,	ASCH2
	ASCTT
	ASCT2
/
/
/
/
/
/
/
/
/
/
/
/
/
/
	EJECT
/			THIS PAGE OVERLAPS A LITTLE FROM PREVIOUS PAGE.
/
/
/
/			MORE OF THE ASCII HANDLER.
/
/
/
/
/
AAPUT,	0
	SEARCH			/CHECK FOR A SPECIAL CONTROL CHAR.
	AC1			/SAME LIST IS OK.
	AG2
	TAD	FTYPE		/GET THE CHAR
	TAD	M240
	SPA CLA
	JMP	AP		/TOO SMALL. NOG A REGULAR CHAR.
	TAD	FTYPE
	TAD	M340
	SMA CLA
	JMP	AP		/TOO BIG. IT S NO GOOD.
	TAD	FTYPE		/GET THE CHAR AGAIN
	AND	L77		/JUST THE LOW ORDER BITS.
AAA1,	JMS	AAAAAA		/PLACE THE CHAR IN THE BUFFER.
	JMP I	AAPUT		/AND EXIT/
/
/
/
AP,	JMP I	AAPUT		/BAD CHAR.
/
APCR,	TAD	AL43		/CR FOUND. PLACE A "43" IN THE BUFFER
	JMP	AAA1		/STICK IN BUFFER
/
AATAB,	TAD	L7
	TAD	AL40		/CONVERT TAB TO A 47
	JMP	AAA1
/
/
/
AAEND,	ASMIFN	TERMC-44		/IS 44 THE END OF FILE CHARACTER?
	ASMSKP	2		/NO. ZERO IS. IGNORE NEXT TWO STATEMENTS.
	PFOUR			/DOLLAR SIGN IS THE END OF BUFFER CRAP
	TAD	AL40		/MAKE IT INTO A DOLLAR SIGN
	JMS	AAAAAA		/AND PLACE EOF CHAR IN THE BUFFER.
	TAD	L7400		/SEE IF BUFFER IS WRITTEN OUT.
	CMA
	AND	BOLDP		/BY CHECKING ENDING ADDRESS
	SNA CLA
	JMP	.+3		/BUFFER IS CLEAR AND WRITTEN OUT.
	JMS	AAAAAA		/BUFFER STILL IN USE. ADD 1 CHAR AND SEE IF DUMPED.
	JMP	.-6		/NOT DUMPED. WAIT.
	TAD	AAUNIT		/GET THE UNIT
	DCA	FUNIT		/AND FLACE AWAY
	TAD	AABLOCK		/GET THE FIRST BLOCK
	DCA	FBNUM		/AND STASH AWAY.
	TAD	AABLOCK		/GET THE FIRST BLOCK
	CIA
	TAD	AAOUTB		/ADD IN NEXT BLOCK TO GET SIZE.
	DCA	FSIZE		/AND STASH AWAY.
	PONE			/SET FOR SEOURCE
	DCA	FTYPE
	HPUSH			/NOW STASH THIS AWAY FOR FILEC TO USE.
	POP			/REGET THE OUTPUT UNIT CONFIGUARTATION.
	FILEC			/AND DO A DIRCTORY TYPE COPY.
/
/
/
/
/
AAAAAA,	0			/PLACES HALF A CHAR IN THE BUFFER.
	DCA	BTEMP1
	TAD	BFIELD		/FIRST TIME THROUGH?
	SZA CLA
	JMP	AAA		/NOPE. IGNORE SETUP
	ISZ	BFIELD		/SET SWITCH
	TAD	AABLOCK		/GET START OF BINARY CRAP.
	DCA	AAOUTB		/AND SET UP WRITE BLOCK.
	TAD	L7400		/GET THE LOCATION OF START
	DCA	BOLDP		/AND SAVE IN THE ADDRESS
	MONE			/SET THE SWITCH TO PLACE IN LEFT HALF OF WORD.
	DCA	ORIGIN
/
	ASMIFN	STAR20-1		/DO WE WANT TO STICK IN A "*20" AT BEGINNING OF FILE???
	ASMSKP	10		/NOPE. DONT ASSEMBLETHEM IN.
/
	TAD	A5262		/GET A "*20" AND PLACE IT
	DCA I	BOLDP
	ISZ	BOLDP		/IN FIRST TWO WORDS OF FILE.
	TAD	A6043
	DCA I	BOLDP
	ISZ	BOLDP		/BOP UP THE IN POINTER.
/
	TAD	AL43		/TELL BUFFERS WE JUST PUT A "43" IN IT.
	DCA	ALASTC		/BY PLACING IT IN LAST CAR INSERTED.
/
AAA,	TAD	BTEMP1		/GET THE CAR
	CIA
	TAD	AL43		/IS IT A 43
	SZA CLA
	JMP	.+6		/NOPE. INSERT IT
	TAD	ALASTC		/GET PREVIOUS CHAR
	CIA
	TAD	AL43		/WAS  IT ALSO A 43
	SNA CLA
	JMP I	AAAAAA		/YEP. IGNORE IT.
	TAD	BTEMP1		/UPDATE OLD CHAR
	DCA	ALASTC
	ISZ	ORIGIN		/TEST LEFT OR RIGHT SWITCH
	JMP	AAA2		/RIGHT HALF
	TAD	BTEMP1		/LEFT HALF
	RTL
	RTL
	RTL
	AND	L7700		/PLACE IN LEFT HALF OF WORD
	DCA I	BOLDP		/AND STASH AWAY.
	JMP I	AAAAAA		/AND EXIT NOW.
/
AAA2,	MONE
	DCA	ORIGIN		/RESET HALF SWITCH.
	TAD	BTEMP1		/PLACE IN RIGHT HALF OF WORD.
	AND	L77
	TAD I	BOLDP
	DCA I	BOLDP		/AND PLACE IT AWAY.
	ISZ	BOLDP		/THAT ALL>
	JMP I	AAAAAA		/YEP. BUFFER STILL GOOD.
	TAD	L7400		/BUFFER FULL. RESET POINTER.
	DCA	BOLDP
	TAD	AAOUTB		/GET THE OUTPUT BLOCK
	TAD	AALIM		/WILL IT EXCEED WORKING AREA?
	SNA CLA
	NO			/YEP, IT WILL. GIVE ERROR MESSAGE.
	WRITE			/WRITE OUT FULL BUFFER.
AAUNIT,	SYSBIN
	7400
	1
AAOUTB,	0
	ISZ	AAOUTB		/BOP UP BLOCK
	JMP I	AAAAAA		/AND EXIT
/
/
/
	ASMIFN	STAR20-1		/DO WE WANT THE "*20" LITERALS IN???
	ASMSKP	3		/NOPE. DON T PUT THEM IN.
/
A5262,	5262
A6043,	6043
/
AABLOCK,	SYSBBLOCK
AL40,	40
AL43,	43
ALASTC,	0
AALIM,	-SYSWT-1		/MAXIMUM SIZE OF THE WORKSPACE.
/
/
/
/
/
/
/
/
/
/
/
/
	EJECT
/			MORE ASCII HANDLERS
/
/
/
	*5400
/
/
/
/
/
/
/
/
AAAGET,	0			/MAIN BUFFER GETTER ROUTINE
	CLA
	TAD	BFIELD
	SZA CLA			/ARE WE ACTIVE?
	JMP	AAGET2		/YEP. IGNORE NEXT.
	ISZ	BFIELD		/SET STATUS SWITCH
/
	ASMIFN	STAR20-1		/DO WE WANT TO SKIP PAST A "*20"
	ASMSKP	3		/NOPE. NO *20 SKIP.
/
	JMS I	AGETI		/GET A WORD
	JMS I	AGETI		/GET TWO WORDS (BYPASS "*20")
/
	MONE
	DCA	ORIGIN		/ LEFT HALF OF WORD CHAR.
/
AAGET2,	ISZ	ORIGIN		/WHICH HALF?
	JMP	AAGET3		/RIGHT HALF .
	JMS I	AGETI		/GET A WORD.
	DCA	BOLDP		/AND STASH AWAY
	TAD	BOLDP		/RETURN WITH ITS VALUE.
	RTR
	RTR
	RTR			/SHIFT TO CORRECT POSITION.
	JMP	AAGET4		/GO DOWN AND GET REST.
/
AAGET3,	MONE
	DCA	ORIGIN		/RESET RIGHT-LEFT SWITHC.
	TAD	BOLDP		/GET THE RIGHT CHAR
AAGET4,	AND	L77		/JUST GET 6 BITS
	DCA	FTYPE		/STORE AWAY.
	SEARCH			/CHECK FOR A NO NO.
	AAGL1
	AAGO1
	TAD	FTYPE
	TAD	M40		/FIGURE OUT CORRECT BIT 4
	SPA			/>40. A 20 0  TYPE CHARACTER
	TAD	A100		/<40 A 300 TXPE CHAR.
	TAD	AAGET3		/ADD IN 240 (ACTUALLY 7240)
	AND	A377		/JUST MAKE IT8 BITS
	JMP I	AAAGET		/AND EXIT.
/
/
A100,	100
A377,	377
AGETI,	GETI
/
/
AACR,	TAD	M215		/CARRIGE RETURN
	CIA
	JMP I	AAAGET
/
AAATAB,	PONE
	TAD	L10
	TAD	L200
	JMP I	AAAGET
/
AAAEND,	PTWO
	TAD	L30
	TAD	L200
	JMP I	AAAGET		/EXIT WITH A CONTROL Z IN THE AC.
/
/
/
/
/
AAGL1,	0
	ASMIFZ	TERMC-44		/IS 44 THE END OF FILE CHAR?
	44			/YEP. ON 44 GO TO THE CONTROL Z GENERATOR.
	43
	47
	4037			/END OF LIST
/
AAGO1,	ASMIFN	TERMC-44
	AAAEND			/00 IS THE END OF FILE CHARQACTER.
	ASMIFZ	TERMC-44
	AAAGET+1		/44 (DOLLAR SIGN) IS THE TERMINATOR.
	ASMIFZ	TERMC-44		/IS DOLLAR SIGN LEGAL?
	AAAEND			/NOPE. IT S THE END OF FILE CHAR.
	AACR
	AAATAB
	AAAGET+1
/
AG2,	APCR
	AP
	AP
	ASMIFZ	TERMC-44		/ASMEBLE IGNORE CHARACTER IF DOLLA.R IS THE END OF FILE CAHR...
	AP
	AP
	AP
	AAEND
	AATAB
/
/
/
/
/
/
/
/
/
/
/
/
ABDIS,	LEFT+200
	TOP-240
	ASMIFN	REMAKE		/DO WE WANT REMAKE OPTION?
	ASMSKP	5		/YEP. SKIP NEXT MESSAGE.
	TEXT	"FAUXILIARY OPTIONS:
 
 
HC --- COPY SPECIFED BLOCKS
HD --- DUPLICATE TAPE 0 ONTO 1\"
/
/
/
/
/
	ASMIFZ	REMAKE		/DO WE WANT REMAKE MESSAGE?
	ASMSKP	6		/YEP. PUT IN MESSAGE.
	TEXT	"FAUXILIARY OPTIONS:
 
 
HC --- COPY SPECIFIED BLOCKS
HD --- DUPLICATE TAPE 0 ONTO 1
HR --- REFORMAT FILE\"
/
/
/
/
/
/
	EJECT
/
/
/
/
/
	*5600
/
/
/
/
/		THIS IS THE ABSOLUTE BLOCK HANDLER
/
/
/
/
/
/
/
/
/
CINPUT=ASCINP			/SAME AS SOURCE INPUT(FOR NOW)
COUTPUT=ASCOUT			/SAME AS SOURCE FOR NOW.
/
/
/
ABSOL,	DECODE			/GIVE THE MESSAGE AND WAIT FOR A REPLY.
	ABDIS			/ABSOLUTE DISPLAY CRAP.
	TAD	FUNIT		/GET THE NUMBER OF ADDITION AL  UNITS.
	AND	L7			/ONLY 3 GOOD BITS ALWLOED.
	SNA			/WAS IT ZERO?
	PONE			/YEP. MAKE IT INTO A ONE.
	CIA			/COMP TO SET UP COUNT
	DCA	OUTNUM		/AND STORE AWAY IN COUNTER SET.
	SEARCH			/LOOKUP THE RELYP.
	ABL1
	ABG1
	JMP	ABSOL		/ILLEGAL REPLY.
/
/
/
/
DUP,	DCA	INUNIT		/COPIES 0 TO 1 OR MORE TAPES.
	DCA	INBLOCK		/SET UP INPUT UNIT AND BLOCK TO 0, OUTPUT BLOCK TO 0.
	DCA	OUTBLOCK
	PONE
	DCA	OUTUNIT		/SET THE OUTPUT UNIT TO 1
	CLA CLL CML RTR		/2000
	RAR			/1000. A 1000 BLOCK COPY.
	DCA	FSIZE		/SET UP SIZE.
	COPY			/THEN GO DO OCPY.
	PIP			/RETURN TO PIP WHEN DONE
/
/
/
ACOPY,	DECODE			/GET THE INPUT DEVICE AND BLOCK NUMBER.
	CINPUT			/FROM THE COPY INPUT CRAP.
	TAD	FTYPE		/GET THE REPLY
	TAD	M314		/IS IT AN L (THE ONLY LEGAL DEVICE)
	SZA CLA
	JMP	ACOPY		/NOPE. REDISPLAY MESSAGE.
	TAD	FUNIT
	AND	L7		/MAKE SURE ITS A TAPE.
	DCA	INUNIT		/AND STASH AWAY.
	PUSH			/SAV THE SIZE BECUASE DECODE MIGH ZAP IT.
	JMS	AGETN		/GET THE STARTING BLOCK NUMBER.
	JMP	ACOPY		/NOT ALL LEGAL NUMBERS.
	TAD	AGNUM		/GET THE BLOCK NUMBER
	DCA	INBLOCK		/AND SAVE AWAY.
ACOPY2,	DECODE			/GET THE OUTPUT DEVICE
	COUTPUT			/DISPLAY CHOICES
	TAD	FTYPE
	TAD	M314		/HAS HE CHOSEN CORRECTLY( TYPED AN L)
	SZA CLA
	JMP	ACOPY2		/NOPE. RIP TAPE.
	TAD	FUNIT		/GET THE UNIT
	AND	L7		/MAKE A TAPE
	DCA	OUTUNIT		/AND STASH AWAY.
	JMS	AGETN		/GET THE BLOCK NUMBER.
	JMP	ACOPY2		/NOT A LEBGAL NUMBER
	TAD	AGNUM		/GET THE STARTING BLOCK
	DCA	OUTBLOCK		/AND STASH AWAY.
	POP			/RESTORE THE SIZE OF THE COPY.
	COPY			/AND DO IT.
	PIP			/RETURN TO PIP WHEN DONE.
/
/
/
/
AGETN,	0			/CONVERTS FNAME INTO A NUMBER(IF NOT THERE RETURNS TO .+1, OTHERWSIE TO .+2)
	LINC			/GO OVELMODE
	LMODE
	SET I	1		/SET 1 TO POINT TO FNAME BLOCK.
	FNAME+6000-1
	LDF	0		/IN DF 0
	STC	AGNUM		/ZAP OUT PRESENT NUMBER.
	SET I	2		/SET 2 TO A COUNT.
	-5
AALOOP,	LDH I	1		/GET THE NEXT CHAR FROM FNAME.
	SHD I			/IS IT A 77
	7777			/WHICH IS END OF NUMBER?
	JMP	ALD		/YEP. EXIT.
	ADA I			/IS IT TOO SMALL?
	-57			/(BELOW 60)
	APO
	JMP	AALL		/YEP. BAD CHAR.
	ADA I		/IS IT TOO LARGE
	-11			/(ABOVE 70)
	APO I
	JMP	AALL		/YEP. BAD CHAR.
	LDA I			/GET OLD TOTAL
AGNUM,	0
	ROL	3		/MULTIPLY BY 10
	BCL I
	7
	STC	AGNUM		/MULTIPLY DONE
	LDH	1		/REGET THE NUMBER
	ADA I
	-60			/CHOP OFF CHAR BITS
	ADD	AGNUM		/ADD IN OLD TOTAL.
	AZE I			/IF NOT ZERO THEN SKP
	CLR			/IF ZERO , ZERO AC TO 0000, IN CASE IT WAS 7777, WHICH IS EVIL IN 8 MODE.
	STC	AGNUM		/STASH AWAY SOMEPLACE O OTHER.
	XSK I	2		/BOP UP COUNT
	JMP	AALOOP		/MORE TO GO.
	JMP	AALL		/TOO MANY DIGITS. NUM TOO LARGE.
/
/
/
/
ALD,	PDP			/GET INTO PMODE
	PMODE
	ISZ	AGETN		/GO TO GOOD RETURN
/
	LMODE
/
AALL,	PDP			/GET INTO 8 MODE
	PMODE			/WE RE BACK IN PMODE NOW.
	CLA			/CLEAR THE AC
	JMP I	AGETN		/AND EXIT.
/
/
/
/
/
/
/
/
/
/
/
/
ABL1,	303
	ASMIFN	REMAKE		/REMAKE OPTION INCLUDED???
	322			/YEP. PLACE CHECK CHAR IN LIST.
	4304
/
ABG1,	ACOPY
	ASMIFN	REMAKE		/REMAKE OPTION???
	KONVRT			/YEP. PLACE IN POINTER OPTION.
	DUP
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
	ASMIFN	CARD-1		/DO WE WANT LINE PRINTRTER.???
	ASMSKP	30		/NOPE. DONT ASEEMBLE IT N.
/
/
/
LPT2,	0			/LINE PRINTER CHECKER AND INITIALIZER.
	TAD	FTYPE		/GET THE OUTPUT DEVICE
	TAD	LPM320		/IS IT A "P"
	SZA CLA			/?
	JMP I	LPT2		/NOPE. RETURN TO CHECK SOME MORE.
	JMS I	LLPEJ2		/YEP. GIVE TWO EJECTS TO GET THINGS GOING.
	ISZ	BFLAG2		/PREPARE TO SET OUTPUT FLAG TO 3
	JMP I	.+1		/RETURN AND ADD TWO MORE TO BFLGA2
	ASCH2			/HIGH SPPEED PUNCH SETTER
/
LPM320,	-320			/"P"
LLPEJ2,	LPEJ2			/POINTER TO EJECTOR ROUTINE.
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
	EJECT
/
/
/
/
	ASMIFN	CARD-1		/DO WE WANT THE WARD READER ROUTINE IN THERE??????
	ASMSKP	2250-1436	/NOPE. SKIP PAST THE MESS.
/
/
/
/
	*6000
/
/
/
/
/		CARD READER AND LINE PRINTER ROUTINES.
/
/
/
	0000			/FOR JMPS IN LMODE
/
/
/
	LMODE			/DEFINE SYMBOLS IN LMODE IN CASE OF ADDRESSING ERRORS WHILE ASSEMBLING
/
CDCUNT,	0000
CPOINT,	0000
CDSWT,	0000
CDCONT,	0000
/
/
/
/
/
	PMODE			/TELL IT WE RE BACK IN PMODE NOW.
/
/
/
/
RCSF=6631			/SKIP IF COLUMN READY.
RCRA=6632			/READ IN AN ALPHA CHAR
RCRB=6634			/READ IN A BINARY CHAR.
RCSD=6671			/SKIP IF END OF CARD.
RCSE=6672			/START A NEW CARD MOVING AND SKIP IF OK.
RCRD=6674			/TURN OFF THE CARD DONE FLAG.
/
/
/
/
/
/
/
CDINIT,	0			/INITIALIZE THE CARD READER.
	DCA	BTEMP3		/CLEAR THE CARD MOVING FLAG.
	DCA	BTEMP2		/CLEAR THE CARD IN BUFFER FLAG.
	TAD	BOLDO		/GET THE FIRST COLUMN TO BE LOOKED AT.
	TAD	DATA		/GET THE LAST COLUMN TO DE DONE.
	SNA CLA			/OBTH ZERO?
	TAD	CDL110		/GET A 72 IN THE AC.
	SZA			/IS IT ZERO???
	DCA	DATA		/NOPE. STORE THE 72 IN THE LAST COLUMN SCAN.
	TAD	DATA		/GET THE LAST CLUMN
	CMA
	TAD	BOLDO		/GET THE FIRST AND COMPARE
CDL100,	SMA CLA			/IS THE FIRST> THEN LAST?
	NO			/IT IS. GIVE ERROR MESSAGE.
	JMP I	CDINIT		/INITIALIZATION FINISHED.
/
/
CDL110,	110			/72 DECMIL
/
/
/
CDREAD,	0			/READS A CHAR FROM THE CARD READER.
	MTHREE			/DO WE WANT CARD READER INPUT????
	TAD	BFLAG1		/CHECK THE INPUT FLAG.
	SNA CLA
	JMP	.+3		/YEP. WE CWANT CARD READER INPUT
	ISZ	CDREAD		/NOPE. JMP THRIRD RETURN ADDRESS.
	JMP	CDISZ		/ISZ CDREAD AGAIN BEFORE EXITING.
	TAD	BTEMP2		/IS THE CARD ALREADY IN THE BUFFER???
CDL240,	SZA CLA			/ALSO A 240 LITTERAL HERE
	JMP	CDNEXT		/YEP. IT IS. FETCH A CHAR FROM IT.
	TAD	BTEMP3		/IS THE CARD MOVING????
	SZA CLA
	JMP	CDGONG		/ITS MOVING. CHECK TO SEE IF COLUMN IS READY.
	RCSE			/START THE CARD GOING NOW...
	JMP	CNOTR		/ITS NOT READY. WAIT AWILE BY RETURN TO USER.
	ISZ	BTEMP3		/SET THE SWITCH TO SHOW THE CARD MOVING.
	MOVE			/ZERO OUT THE CARD BUFFER.
	CDBUF-1			/CONTAINS A 0000
	CDBUF
	50			/80=120=50*2
	TAD	CDPONT		/SET CPOINT TO POINT TO FIRST CHAR OF CARD BUFFER
	DCA	CPOINT
	DCA	BCOUNT		/ZERO OUT THE CURRENT COLUMN COUNTER.
/
CDGONG,	RCSF			/IS THERE A CHAR THERE???
	JMP	CNOTR		/NOPE. WAIT.
	RCRA			/READ IT IN ALPHA NUMERIC TYPE
	DCA	TEMP		/STORE IN TEMP
	ISZ	BCOUNT		/BOP UP COLUMN COUNTER BY 1.
	TAD	BCOUNT		/GET CURRENT POSITIION.
	CLL CML CMA IAC		/13 BIT NEGATE
	TAD	BOLDO		/IS IT BELOW THE STARTING COLUMN???
	SNL SZA CLA
	JMP	CNOTR		/YEP.  IGNORE IT.
	TAD	DATA		/GET THE UPPER LIMIT
	CLL CML CMA IAC		/13 BIT NEGATE.
	TAD	BCOUNT		/HAVE WE GONE TOO FAR???
	SNL SZA CLA
	JMP	CNOTR		/YEP. IGNORE THE CHAR.
	TAD	TEMP		/ALL IS WELL. RETRIEVE THE HCARACTER.
	LINC			/NOW GO OVER TO THE LINC SIDE.
	LMODE
	STH I	CPOINT		/SAVE THE HALFWORD IN THE BUFFER.
	PDP
	PMODE			/AND BACK INTO 8 MODE.
/
CNOTR,	CLA			/CLEAR THEAC TO BE SURE.
	RCSD			/END OF CARD REACHED???
	JMP I	CDREAD		/NOPE. RETURN TO USER TO WAIT AWHILE.
	JMP	CDDONE		/GO CONVERT STORED CARD.
/
/
/
CDNEXT,	LINC			/CARD IN BUFFER AND CONVERTED.
	LMODE			/LETS GET A CHAR.
	LDH I	CPOINT		/GET A CHAR.
	PDP			/GET OVER INTO A DECENT MODE
	PMODE
	SNA			/IS IT THROUGH(00=CR)
	JMP	CDEOC		/YEP. END OF CARD.
	TAD	M40		/NOT DONE. SEE WHICIH WAY TO ADD.
	SPA
	TAD	CDL100		/01-37=301-337
	TAD	CDL240		/40-77=240-277
/
CDISZ,	ISZ	CDREAD		/AND EXIT TO SECOND LOCATION
	JMP I	CDREAD		/(OR THIRD IF CARD READER NOT CHOSEN DEVICE.
/
/
/
CDEOC,	DCA	BTEMP2		/TURN OF THE CARD IN FLAG
	TAD	CDL215		/GET A CR IN THE AC
	JMP	CDISZ		/AND EXIT.
/
/
/
/
/
CDDONE,	DCA	BTEMP3		/TURN OFF THE CARD MOVING SWITCH.
	ISZ	BTEMP2		/AND TURN ON THE CARD IN BUFFER SWITCH.
	RCRD			/TURN OFF THE CARD DONE FLAG.
	LINC			/AND GO OVER TO LMODE
	LMODE
	SET I	CDCUNT		/SET COUNTER TO 80 COLUMNS
	-120
	SET I	CPOINT		/SET POINTER TO POINT TO LAST COLUMN+1
	CDBUF+50
	STC	CDSWT		/TELL THE BLANK SCANNER TO DELETE BLANKS.
/
CDLOOP,	LDA I
	-4000			/BACKSPACE 1 CHAR IN CARD BUFFEER.
	ADM
	CPOINT
	LDH	CPOINT		/GET THE CHAR
	XSK	CDSWT		/TEST THE BLANKS SCAN SWITCH.
	AZE			/STILL SCANNING. CHECK FOR BLANK.
	SKP			/NOT BLANK OR NOT SCANNING.
	JMP	CDFUNT		/IT BLANK. IGNORE IT.
	ROR	1		/ROTATE RIGHT TO PUT BIT 11 IN BIT 0
	ADA I			/NOW ADD IN BASIC TABLA ADDRESS POINTER.
	CDTAB
	STC	CDCONT		/GET TRANSITION CHAR ADDRESS.
	LDH	CDCONT		/NOW GET THE TRANSITION CHARACTER.
	SET I	CDSWT		/AND TELL IT WE RE NOT SCANNING BLANKS ANYMORE
	-0
CDFUNT,	STH	CPOINT		/NOW STASH AWAY CONVERTED CHAR.
	XSK I	CDCUNT		/HAVE WE DONE 80 COLUMNS??
	JMP	CDLOOP		/NOPE. GO BACK AND DO ANOTHER.
	SET I	CPOINT		/YEP. WE VE DONE 80 COLUMNS. 
CDPONT,	CDBUF-1+4000		/SET THE POINTER SO CDNEXT CAN GET THE CHARS.
	JMP	CDNEXT+1		/AND EXIT AND GET A CHAR TO SEND B
/
/
/
/
/
/
/
LP1,	211			/TAB
CDL215,	215			/CR
	4232			/  END-OF-TAPE
/
/
/
/
/
/
/
/
/
	EJECT
/
/
/
	0000			/USED FOR ZEROING OUT THE CARD BUFFER.
/
CDBUF,	0000			/80 COLUMN BUFFER
/
	*CDBUF+50
/
	0000			/USED AS END OF CHAR CHARACTER INCASE OF 80 CHARACTER SCAN.
/
/
/
/
/
/
/
/			THIS IS THE CONVERSION TABLE FOR THE CARD READER CHARS TO ASCII CHARS.
/
/
/
CDTAB,	4061			/BLANK	1
	6263			/2	3
	6465			/4	5
	6667			/6	7
	7071			/8	9
	7243			/:	NUMBER SIGN
	4047			/AT SIGN	APOSTROPHE
	7542			/=	"
	6057			/0	/
	2324			/S	T
	2526			/U	V
	2730			/W	X
	3132			/Y	Z
	3554			/]	,
	4537			/%	BACK ARROW.
	7677			/>	?
	5512			/-	J
	1314			/K	L
	1516			/M	N
	1720			/O	P
	2122			/Q	R
	4144			/!	DOLLAR SIGN
	5251			/*	)
	7334			/;	\
	4601			/&	A
	0203			/B	C
	0405			/D	E
	0607			/F	G
	1011			/H	I
	3356			/[	.
	7450			/<	(
	5336			/+	^
/
/
/
/
/
/
/
/
/
	EJECT
/
/
	PMODE
/
/
/
/			LINE PRINTER ROUTINE.
/
/
/
/
/
/
/				LINE PRINTER DEFINITIONS.
/
/
LSE=6651
LCF=6652
LLB=6654
LSD=6661
LCB=6662
LPR=6664
/
/
/
/
/
/
/
/
/
/
LPTEST,	0000			/MAIN LINE PRINT CHARACTER CABOSH.
	MTHREE			/IS IF LINE PRINTER IS THE CHOSEN ONE(DEVICE 3)
	TAD	BFLAG2
	SZA CLA
	JMP I	LPTEST		/NOT THE CHOSEN ONE.
	TAD I	LPSEQ		/GET THE CHAR
	DCA	FTYPE		/PLACE IN SEARCHER INPUT.
	SEARCH
	LP1
	LP2
	TAD	FTYPE		/GET THE CHAR
	TAD	M340		/SUBTRACT TOO BIG CHAR.
	CLL			/CLEAR LINC FOR NEW TEST.
	TAD	LPL100		/CHECK FOR LOWER LIMIT
	SNL CLA			/IS IT INBETWEEN 240-337???
	JMP I	LPEXIT		/NOPE. IGNORE IT.
	TAD	FTYPE		/GET THE CHAR
LPCOMM,	JMS	LPPUT		/AND OUTPUT THE CHAR.
	JMP I	LPEXIT		/AM D  EXIT
/
/
/
LPEXIT,	SEQEXT
LPSEQ,	SEQIN
LPCOL,	0000
/
/
/
/
LPEJ2,	0			/GIVES TWO EJECTS ON THE PRINTER.
	MONE			/REALLY A 17
	JMS	LPPUT		/EJECT 1
	TAD	LPM204		/RESET THE COUNTER TO 130 CHARS PER LINE.
	DCA	LPCOL		/AND STASB AWAY
	MONE
	JMS	LPPUT		/EJECT 2
	JMP I	LPEJ2		/RETURN TO THE CLALER.
/
/
/
/
LPPUT,	0			/PRINTS A CHAR OR DOES A CONTROL CRAP.
	DCA	TEMP			/SAVE THE CHAR.
	ISZ	LPCOL		/WILL THIS OVERFLOW THE LINE???
	JMP	LPWFIT		/IT WILL FIT
LPCR,	TAD	LPM204		/RESET TO 130 CHARS ON THE LINE
	DCA	LPCOL		/STASH AWAY.
	TAD	L7770		/SPACE 1 LINE
	JMP	LPCOMM		/GO TO THE COMMON CHAR PUTTER.
LPWFIT,	CHECKIO			/CHECK FOR A CONTROL Z OR SOMETHING.
	LSD			/LINE PRINTER CLEAR????
	JMP	LPWFIT		/NOPE. WAIT.
	LCF			/CLEAR THE FLAG
	TAD	TEMP		/GET THE FUNCTION.
	SMA			/IS IT A CONTROL.
	LLB			/NOPE. MUST BE CHAR.  STICK IN BUFFER.R.
	SPA			/IS IT POSITIVE?
	LPR			/NOPE. MUST BE CONTROL. ZAP IT
	CLA			/NOW CLEAR THE AC TO BE SURE.
	JMP I	LPPUT		/AND RETURN TO THE CALLER.
/
/
/
/
/
/
/
/
LP2,	LPTAB
	LPCR
	LPEND
/
/
/
/
LPTAB,	TAD	LP40		/BLANK
	JMS	LPPUT		/SEND TO PUTTER ROUTINE.
	PTHREE			/TO CORRECT FOR THE -204+1  [3].
	TAD	LPCOL		/GET THE COLUMN.
	AND	L7		/IS IT A MULTIPLE OF 8
	SZA CLA			/??
	JMP	LPTAB		/NOPE. GIVE ANOTHER BLAKN.
	JMP I	LPEXIT		/AND EXIT.
/
/
LPEND,	JMS	LPEJ2		/GIVE TWO EJECTS.
	PIP
/
/
/
/
LP40,	40
LPL100,	100
LPM204,	-204
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
	EJECT
/			THIS ORIGIN INSURES THAT BUFFER-1 CONTAINS A ZERO FOR THE TRIVIAL CORE ZERO ROUTINE
/			WHICH IS LOCATED IN PAGE 1(200-377)
/
/
/
/
	*BUFFER-1
/
	0000
/
/
/
/
/
/
/
	EJECT
	*BUFFER
/
/
/
/		THIS ROUTINE IS CALLED ONLY ONCE AT INITIALIZATION TO FIGURE OUT HOW
/			MANY K OF CORE THE GUY HAS. THEN IT S USED IN THE
/			BUFFER AREA.
/
/
/
/
/
/
/
COREF,	0				/MAIN ENTRY.
	CLA CLL
	DCA	TEMP		/ZERO OUT
CLOOP,	ISZ	TEMP
	TAD	TEMP
	CIA
	DCA	COUNT
	DCA	TEMP1
CLLOOP,	ISZ	TEMP1
	JMS	CSET
	TAD	TEMP1
	DCA I	CPBYTE
	ISZ	COUNT
	JMP	CLLOOP
	TAD	TEMP
	CIA
	DCA	COUNT
	DCA	TEMP1
CCLOOP,	ISZ	TEMP1
	JMS	CSET
	TAD I	CPBYTE
	CIA
	TAD	TEMP1
	SZA CLA
	JMP COUT
	ISZ	COUNT
	JMP	CCLOOP
	JMP	CLOOP
/
COUT,	MTWO
	TAD	TEMP
	CLL RTL
	RTL
	DCA	TEMP1
	TAD	CBUFF
	CIA
	CLL RTL
	RTL
	RAL
	TAD	TEMP1
	DCA	BNUM
	CDF	0
	TAD	BNUM
	CLL RAR
	AND	L7770
	SZA CLA
	JMP I	COREF
	TAD	M40
	DCA	COUT
	DISPLAY
	INSULT
	ISZ	COUT
	JMP	.-3
	JMP I	COREF
/
/
CSET,	0
	TAD	L7777
	TAD	TEMP1
	AND	L7
	CLL RTL
	RAL
	TAD	CCDF
	DCA	.+1
	0
	JMP I	CSET
/
CCDF,	CDF	0
CBUFF,	BUFFER
CPBYTE,	7777			/SHOULD BE A FREE LOC NOW.
/
/
/
/
INSULT,	LEFT+240		/ABOUT CENTER OF SCREEN
	TOP
TEXT "
FI WOULD
F  RUN
F FASTER
FIF YOU
F  HAD
F  8K
FINSTEAD
FOF ONLY
F  4K\"
/
/
/
/
/
/
	EJECT
/			SAVE THE SYMBOLS FOR      P  I  P  1
/
/
/
/
/
/
	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