Google
 

Trailing-Edge - PDP-10 Archives - decus_20tap2_198111 - decus/20-0038/lptque.doc
There are 2 other files named lptque.doc in the archive. Click here to see a list.
								1
	  		/*** LPTQUE.PAL, APRIL 14, 1970*****
	  		/
	  		/
	  		/
	  		/	PETER LEMKIN
	  		/	NATIONAL INSTITUTES OF HEALTH
	  		/	BETHESDA, MD. 20014
	  		/
	  		/
	  		/INTRODUCTION
	  		/------------
	  		/"LPTQUE" IS A PDP8 UTILITY PROGRAM WHICH IS USED TO BUFFER ASCII
	  		/INPUT FROM A PT08 SERIAL TO PARALLEL INTERFACE ONTO AN A.B. DICK
	  		/940 (USING THE ECLECTIC COMPUTER COMPANY'S INTERFACE) LINEPRINTER.
	  		/THE  ASR33 TELETYPE CAN BE USED TO SEND COMMANDS TO A COMPUTER
	  		/ON THE OTHER END OF THE PT08 ( WHICH IN TURN IS SENDING INFORMATION TO
	  		/THE PDP8 TO BE PRINTED ON THE LINEPRINTER.).
	  		/I.E. PDP8'S ASR33 TTY ==> PT08 ==>PDP10
	  		/    PDP8'S 940 LPT <=== PT08 <== PDP10.
	  		/
	  		/
	  		/MINIMUM HARDWARE:
	  		/------------------
	  		/PDP8 WITH PT08, 4K MEMORY, AND A.B. DICK 940 LINEPRINTER
	  		/WITH ECLECTIC COMPUTER COMPANY INTERFACE TO PDP8. TO RUN "LPTQUE"
	  		/IN ANOTHER FIELD, SET DATFLD=10 TIMES THE DESIRED FIELD. IE.E 00, 10
	  		/ETC. THEN REASSEMBLE "LPTQUE". "LPTQUE" WAS ASSEMBLED USING PAL10 ON A 
	  		/PDP10.
	  		/
	  		/
	  		/CORE REQUIREMENTS AND STARTING ADDRESS:
	  		/--------------------------------------
	  		/	<200,577> PROGRAM
	  		/	<600,4577>  LPT BUFFER.
	  		/	STARTING ADDRESS IS 200
	  		/
	  		/
	  		/
	  		/ERROR CONDITION:
	  		/---------------
	  		/NOTE: ALTHOUGH THE 940 LINEPRINTER CAN PRINT AT 2400 BAUD, ITS
	  		/EFFECTIVE DATA RATE IS A FUNCTION OF LENGTH OF THE LINE PRINTED.
	  		/FOR SHORT LINES, THIS CAN GO BELOW 1200 BAUD. THEREFORE IF YOU
	  		/ARE USING A 1200 BAUD LINE (AS WE ARE), OCCASIONALLY YOU WILL OVERFLOW
	  		/THE LPT BUFFER DUE TO PTHE FACT THAT YOU ARE ACCUMULATING DATA FASTER THAN
	  		/YOU CAN PRINT IT. WHEN THIS HAPPENS, THE PROGRAM HALTS. TO RESTART IT
	  		/DO A LOAD ADDRESS-START 200.
	  		/NOTE: THE NUMBER OF LINES IN THE BUFFER QUEUE WAITING TO BE PRINTED
	  		/ARE DISPLAYED IN THE MQ REGISTER. IF YOU DO NOT HAVE EAE, THIS IS A NOP.
	  		/
	  		/
	  		/PROBLEMS:
	  		/-------
	  		/TABS AND FORM FEEDS ARE NOT IMPLEMENTED.
	  		/
								2
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/PT08 OP CODES
	  	6411	PTSF=6411
	  	6401	PKSF=6401
	  	6416	PTLS=6416
	  	6406	PKRB=6406
	  	6412	PTCF=6412
	  		/AB DICK 940 LINEPRINTER OP CODES
	  	6656	LTLS=6656
	  	6651	LTSF=6651
	  	6652	LTCF=6652
	  		/LPT BUFFER MIN AND MAX POINTERS: MAY BE CHANGED BEFORE ASSEMBLE.
	  	0601	TQMIN=601
	  	4577	TQMAX=4577
	  		/FIELD DEFINITION - I.E. RUNNING FIELDS.
	  	0000	DATFLD=00
	  	0000	INSTFD=DATFLD
	  		/
	  		/
	  		/
	  		/
	  		/
	  	0000		FIELD INSTFD
	  	0200		*200
	  		/MONITOR LOOP
	  0200	7200		CLA /DISABLE THE EMB
	  0201	1377		TAD (-62 /SET LINE COUNTER
	  0202	3350		DCA LINCNT
	  0203	3347		DCA EMB
	  0204	3346		DCA BUFCTR /ZERO THE BUFFER COUNTER
	  0205	6656		LTLS /START IT UP
	  0206	4776'	START,	JMS INITQU /INIT QUEUE
	  0207	4775'		JMS INITBF
	  0210	6031	INPUT,	KSF /TTY? IF SO TYPE IT AND SEND TO PDP10.
	  0211	5215		JMP .+4 /NO
	  0212	6036		KRB
	  0213	6046		TLS
	  0214	6416		PTLS /SEND TO PDP10 SO AND TELL IT OFF.
	  0215	1374		TAD (-215 /IS IT CR?
	  0216	7640		SZA CLA
	  0217	5224		JMP .+5 /NO
	  0220	1373		TAD (212 /PRINT A LINE FEED
	  0221	6041		TSF
	  0222	5221		JMP .-1
	  0223	6046		TLS
	  0224	7200		CLA /PUT THE # OF BUFFERS IN THE MQ
	  0225	1346		TAD BUFCTR
	  	7421		MQL=7421
	  0226	7421		MQL
	  0227	6401		PKSF /INPUT?
								3
	  0230	7410		SKP
	  0231	5234		JMP .+3
	  0232	4314		JMS OUTPUT /NO, CHECK OUTPUT
	  0233	5210		JMP INPUT
	  0234	6406		PKRB
	  0235	0372		AND (177
	  0236	1371		TAD (200
	  0237	3351		DCA LPTCHR
	  0240	2770'		ISZ N /INCREMENT THE CHARACTER COUNTER.
	  		/TEST IT  TO SEE IF FORM FEED.
	  0241	1351		TAD LPTCHR
	  0242	1367		TAD (-214 /FF
	  0243	7640		SZA CLA
	  0244	5272		JMP NOFF /NO
	  0245	1373	LOOP1,	TAD (212 /YES, PUT THE REQUIRED # LF TO
	  		/FINISH UP THE PAGE.
	  0246	4766'		JMS INSRQ
	  0247	7402		HLT
	  0250	4765'		JMS CLOSBF /PUT ON QUEUE, AND CLOSE BUFFER..
	  0251	4775'		JMS INITBF /FIX UP BUFFER
	  0252	2350		ISZ LINCNT /DONE?
	  0253	5245		JMP LOOP1 /NO
	  		/
	  		/NOW GO 20 20 SPACES TO NEXT PAGE.
	  0254	7200	LOOP2,	CLA
	  0255	1364		TAD (-20
	  0256	3350		DCA LINCNT
	  0257	1373	LOOP3,	TAD (212
	  0260	4766'		JMS INSRQ
	  0261	7402		HLT
	  0262	4314		JMS OUTPUT /TRY OUTPUT
	  0263	4765'		JMS CLOSBF
	  0264	4775'		JMS INITBF
	  0265	2350		ISZ LINCNT
	  0266	5257		JMP LOOP3
	  0267	1377		TAD (-62 /RESET LINE PER PAGE COUNTER
	  0270	3350		DCA LINCNT
	  0271	5210		JMP INPUT
	  		/
	  0272	1351	NOFF,	TAD LPTCHR
	  0273	4766'		JMS INSRQ /PUT ON QUEUE
	  0274	7402		HLT
	  0275	1351		TAD LPTCHR
	  0276	1363		TAD (-212 /IS IT A LF?
	  0277	7640		SZA CLA
	  0300	7410		SKP
	  0301	5304		JMP .+3
	  0302	4314		JMS OUTPUT /NO, GO CHECK THE OUTPUT
	  0303	5210		JMP INPUT
	  			/IT WAS A LINEFEED, BOP THE LINE COUNTER
	  0304	2350		ISZ LINCNT
	  0305	5310		JMP NORST /DON'T RESET IT
	  0306	1377		TAD (-62 /RESET IT
	  0307	3350		DCA LINCNT
	  0310	4765'	NORST,	JMS CLOSBF /YES, GO CLOSE THE BUFFER
								4
	  0311	4775'		JMS INITBF /OPEN THE NEXT BUFFER
	  0312	4314		JMS OUTPUT /GO CHECK THE OUTPUT.
	  0313	5210		JMP INPUT
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/
	  0314	0000	OUTPUT,	0
	  0315	6651		LTSF /LINE PRINTER READY?
	  0316	5714		JMP  I OUTPUT /NOT YET
	  0317	7200		CLA
	  0320	1347		TAD EMB
	  0321	7640		SZA CLA
	  0322	5334		JMP GETOUT /ENABLED, GET THE OUTPUT
	  0323	7200		CLA /TEST IF ANY BUFFERS
	  0324	1346		TAD BUFCTR /THE NUMBER OF ACTIVE BUFFERS
	  0325	7650		SNA CLA
	  0326	5714		JMP  I OUTPUT /NO BUFFERS
	  0327	7240		CLA CMA
	  0330	1346		TAD BUFCTR /SET BUFCTR=BUFCTR-1
	  0331	3346		DCA BUFCTR
	  0332	7240		CLA CMA 
	  0333	3347		DCA EMB /YES, SET BUFFER FLAG = -1
	  0334	4762'	GETOUT,	JMS TTYFQ /GET THE CHAR.
	  0335	5714		JMP  I OUTPUT /NEVER SHOULD GET HERE.
	  0336	7500		SMA /SEE IF THE CHAR IS 7777, END OF BUFFER.
	  0337	5343		JMP PUTOUT /NO, GO OUTPUT IT.
	  0340	7200		CLA
	  0341	3347		DCA EMB /YES, CLEAR THE ENABLE BUFFER FLAG AND LEAVE
	  0342	5714		JMP  I OUTPUT
	  0343	6656	PUTOUT,	LTLS /OUTPUT IT
	  0344	7200		CLA
	  0345	5714		JMP  I OUTPUT
	  0346	0000	BUFCTR,	0
	  0347	0000	EMB,	0
	  0350	0000	LINCNT,	0
	  0351	0000	LPTCHR,	0
	  		/
	  		/
	  		/
	  0362	0514
	  0363	7566
	  0364	7760
	  0365	0400
	  0366	0466
	  0367	7564
	  0370	0456
	  0371	0200
	  0372	0177
	  0373	0212
	  0374	7563
	  0375	0432
	  0376	0457
								5
	  0377	7716
	  	0400		PAGE
	  		/SUBROUTINE CLOSBF
	  		/PUTS AN EM, N/4+19 NULLS, 7777 AT THE END OF THE BUFFER.
	  		/CALLING SEQUENCE:
	  		/	JMS CLOSBF
	  		/	NORMAL RETURN
	  0400	0000	CLOSBF,	0
	  0401	7200		CLA
	  0402	1377		TAD (31 /EM
	  0403	4266		JMS INSRQ 
	  0404	7402		HLT /BUFFER OVERFLOW
	  0405	4776'		JMS OUTPUT /TRY TO DO OUTPUT
	  0406	1256		TAD N /COMPUTE THE N/4 # OF NULLS
	  0407	7110		CLL RAR
	  0410	7110		CLL RAR /DIVIDE BY 4
	  0411	1375		TAD (23 /19
	  0412	7041		CIA
	  0413	3231		DCA IBMM
	  0414	3256		DCA N /ZERO THE CHARACTER COUNTER.
	  0415	4266		JMS INSRQ
	  0416	7402		HLT
	  0417	4776'		JMS OUTPUT /TRY TO DO OUTPUT
	  0420	2231		ISZ IBMM
	  0421	5215		JMP .-4
	  0422	7240		CLA CMA /PUT EOF AT END OF BUFFER.
	  0423	4266		JMS INSRQ
	  0424	7402		HLT
	  0425	4776'		JMS OUTPUT /TRY TO DO OUTPUT
	  0426	2774'		ISZ BUFCTR /INCREMENT THE BUFFER COUNTER.
	  0427	5600		JMP I CLOSBF /RETURN
	  0430	7402		HLT /OVERFLOW
	  0431	0000	IBMM,	0
	  		/
	  		/SUBROUTINE INITBF
	  		/PUTS A SYN,SOH,8 NULLS IN FRONT OF THE BUFFER.
	  		/CALLING SEQUENCE:
	  		/	JMS INITBF
	  		/	NORMAL RETURN
	  0432	0000	INITBF,	0 /INIT THE BUFFER.
	  0433	7200		CLA
	  0434	3256		DCA N /ZERO THE WORKING CHAR COUNTER.
	  0435	1373		TAD (26 /SYN
	  0436	4266		JMS INSRQ
	  0437	7402		HLT /OVERFLOW
	  0440	4776'		JMS OUTPUT /TRY OUTPUT
	  0441	1372		TAD (1 /SOH
	  0442	4266		JMS INSRQ
	  0443	7402		HLT /OVERFLOW
	  0444	4776'		JMS OUTPUT
	  0445	1371		TAD (-10 /8
	  0446	3255		DCA IBM
	  0447	4266		JMS INSRQ
	  0450	7402		HLT
	  0451	4776'		JMS OUTPUT /TRY OUTPUT
								6
	  0452	2255		ISZ IBM
	  0453	5247		JMP .-4 /PUT 8 NULLS IN BUFFER
	  0454	5632		JMP I INITBF /RETURN
	  0455	0000	IBM,	0
	  0456	0000	N,	0 /WORKING CHARACTER COUNTER FOR USE IN COMPUTING NULLS AT EOB.
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/SUBROUTINE INITQU 
	  		/IS USED TO INIT THE QUEUE
	  		/RESETS THE QUEUE.
	  		/CALLING SEQUENCE:
	  		/	JMS INITQU
	  		/	NORMAL RETURN
	  0457	0000	INITQU,	0
	  0460	7200		CLA
	  0461	1370		TAD (TQMIN
	  0462	3345		DCA KFQ
	  0463	1345		TAD KFQ
	  0464	3344		DCA KRQ
	  0465	5657		JMP I INITQU
	  		 /
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/
	  		/SUBROUTINE INSRQ
	  		/INSERTS A DATA WORD IN THE 
	  		/AC--> THE TTY OUTPUT BUFFER
	  		/AT THE REAR OF THE QUEUE.
	  		/CALLING SEQUENCE1G
	  		/    JMS INSRQ /DATA IN AC
	  		/    ERROR RETURN /BUFFER OVERFLOW
	  		/     NORMAL RETURN /DATA ENTERED
	  		/                  /RQ POINTER ADVANCED.
	  		/
	  0466	0000	INSRQ,	 0
	  0467	3346	    DCA TQDAT /SAVE DATA
	  		/A.1 COMPUTE NEW KRQ
	  0470	1342	    TAD ITQMAX
	  0471	7041	    CIA
	  0472	1344	    TAD KRQ
	  0473	7700	    SMA CLA
	  0474	5277	    JMP .+3
	  0475	2344	    ISZ KRQ /KRQ<--KRQ+1
	  0476	5301	    JMP .+3
	  0477	1343	    TAD ITQMIN /KRQ<--TQMIN
								7
	  0500	3344	    DCA KRQ
	  		/A.2 TEST FOR OVERFLOW
	  0501	1344	    TAD KRQ

	  0502	7041	    CIA
	  0503	1345	    TAD KFQ
	  0504	7650	    SNA CLA
	  0505	5666	    JMP I INSRQ /ERROR RETURN
	  0506	2266	    ISZ INSRQ
	  		/A.3 INSERT DATA INTO THE REAR OF THE QUEUE.
	  0507	1346	    TAD TQDAT
	  0510	6201	    CDF DATFLD
	  0511	3744	    DCA I KRQ
	  0512	6201	    CDF INSTFD
	  0513	5666	    JMP I INSRQ /RETURN
	  		/.........................................
	  		/
	  		/SUBROUTINE TTYFQ
	  		/GET A DATA WORD FROM THE REAR
	  		/OF THE TTY QUEUE-->AC.
	  		/CALLING SEQUENCE:
	  		/    JMS TTYFQ /DATA-->AC
	  		/    ERROR RETURN /BUFFER EMPTY
	  		/    NORMAL RETURN /DATA IN AC.
	  0514	0000	TTYFQ,	 0
	  		/A.1 TEST IF KFQ=KRQ
	  		/IF SO BUFFER EMPTY
	  0515	7200	    CLA
	  0516	1345	    TAD KFQ
	  0517	7041	    CIA
	  0520	1344	    TAD KRQ
	  0521	7650	    SNA CLA
	  0522	5714	    JMP I TTYFQ /ERROR RETURN
	  0523	2314	    ISZ TTYFQ /SET UP NORMAL RETURN.
	  		/A.2 ADVANCE THE KFQ POINTER
	  0524	7200	    CLA
	  0525	1342	    TAD ITQMAX
	  0526	7041	    CIA
	  0527	1345	    TAD KFQ
	  0530	7700	    SMA CLA
	  0531	5334	    JMP .+3 /YES, SET KFQ=TQMIN
	  0532	2345	    ISZ KFQ /NO, SET KFQ=KFQ+1
	  0533	5336	    JMP .+3
	  0534	1343	    TAD ITQMIN
	  0535	3345	    DCA KFQ
	  		/A.3 GET DATA FROM THE QUEUE.
	  0536	6201	    CDF DATFLD
	  0537	1745	    TAD I KFQ
	  0540	6201	    CDF INSTFD
	  0541	5714	    JMP I TTYFQ /RETURN
	  		/...CONSTANTS...
	  0542	4577	ITQMAX,	 TQMAX
	  0543	0601	ITQMIN,	 TQMIN
	  0544	0601	KRQ,	 TQMIN
	  0545	0601	KFQ,	 TQMIN
								8
	  0546	0000	TQDAT,	 0
	  		/..........................................
	  		/P. LEMKIN, APRIL 14, 1970...

	  		$
	  0570	0601
	  0571	7770
	  0572	0001
	  0573	0026
	  0574	0346
	  0575	0023
	  0576	0314
	  0577	0031