File TPEM

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

	*1400
/
/
/NON-RESIDENT TAPE HANDLER MODULE. PERFORMS ALL LINC
/TAPE I/O. DECODES MTP INSTRUCTION AND EXECUTES SAME.
/
/
	-TAPEM		/INDICATOR THAT THIS IS TAPE MOD
	JMS	GETP1	/PUT SECOND INSTR WD IN SBN
	TAD	TIFLG	/TAPE COMMAND INTERRUPTED?
	SZA CLA
	JMP	MTPC	/YES, CONTINUE
/
/WE WERE NOT INTERRUPTED, MUST SET EVERYTHING UP
/
	TAD	LINS
	DCA	MTPINS	/PUT LINC INSTR IN MTPINS
	JMS	RS20	/DO THINGS IF THIS IS BY DO SW
	CLC
	DCA	WCGF
MTP0,	TAD	SBN	/GET SECOND WORD OF INSTR
	AND	(777	/GET BLOCK NUMBER
	DCA	BN	/AND SAVE
/
/SEE IF WE ARE DOING A GROUP COMMAND
/
	TAD	LINS	/GET TAPE INSTR
	RTR
	SPA CLA
	SZL
	JMP	MTP1	/NOT A GROUP COMMAND
	JMS	SETG	/A GROUP COMMAND - SET UP FOR
	JMP	MTPI
/
/NOT A GROUP COMMAND - SET UP FOR
/
MTP1,	TAD	SBN	/GET SECOND WORD OF INSTR
	RTL
	RTL
	AND	C7	/GET QUARTER NUMBER
	DCA	QN	/AND SAVE
	CLC
	DCA	QCT	/ONLY 1 QTR ALLOWED
	DCA	WCGF	/CLEAR WRT GRP CNT FLG
MTPC,	DCA	TIFLG	/CLEAR TAPE INTERRUPT FLAG
/
/DECODE THE MAG TAPE INSTRUCTION
/
MTPI,	TAD	MTPINS	/GET FIRST WORD OF INSTR
	AND	C7
	TAD	(JMP I MTPJ
	DCA	.+1
	0
MTPJ,	RDC		/READ AND CHECK BLOCK
	RDC		/READ AND CHECK GROUP
	RDE		/READ, NO CHECK
	MTB		/MOVE TOWARD BLOCK
	WRC		/WRITE AND CHECK BLOCK
	WCG		/WRITE AND CHECK GROUP
	WRI		/WRITE, NO CHECK
	CHK		/CHECK ONLY
 

/ /SEARCH TAPE FOR RIGHT BLOCK NUMBER / SEARCH, 0 TAD (SKP CLA DCA MCDF /NO STORAGE DURING CHK JMS STMEM DCA WCDF TAD WCDF ISZ CHKS /CHK? DCA MCDF /NO - SKIP IF YES CLA /CLEAR AC ANYWAY TAD MTPINS /GET FIRST INSTR WORD RTR /PUT UNIT BIT IN LINK RTR AND (4 /WE WANT TO END UP WITH X002 RAR /MOVE UNIT BIT TO AC 0 DCA UNIT ICA UNIT, 0 /SELECT UNIT / /SET TAPE UP TO BE MOVING FORWARD / TAD INTSAV RTR SPA CLA /SKIP IF MOTION BIT = 0 JMP .+3 TAD (4001 JMP .+4 SZL ICON IAC ICON /MAKES GO FORWARD CLC DCA LNCA /SET UP FOR CHECKSUM TAD (-401 DCA WCNT /SET UP TO COUNT WORDS CSRCH, JMS TPWAIT /WAIT FOR NEXT BL NO. TAD INTSAV RAR /MOTION INTO LINK 1=BKWDS CLA IAAC TAD BN IAC /DIF: +=GO FWD, -=GO BKWD IACA /DISPLAY DIFFERENCE SZA /IS THIS THE BLOCK JMP MTPS1 /NO SNL /YES, FWD (L=1 FWD IF AC=0) JMP TURN / /CORRECT BLOCK HAS BEEN FOUND / ICA /BLOCK MODE 3 ISZ SEARCH JMP I SEARCH /EXIT FROM SUBROUTINE / /WE MUST GO THE OTHER WAY / TURN, JMS TPWAIT /WAIT FOR NEXT BLOCK CLA CLL /BEFORE TURNING AROUND MTPS1, SZL /NOT THE BLOCK - CHG DIRECTION JMP SX /NO - EXIT CMA RAL /YES CLA RAR ICON /CLEAR MOTION IAC ICON /SET MOTION SX, CLA TAD BN IACB /DISPLAY BLOCK WANTED CLA JMP I SEARCH /AND EXIT / /SET UP TO WAIT FOR TAPE INTERRUPT / TPWAIT, 0 /SUBROUTINE ENTRANCE CLA TAD TPWAIT /GET EXIT ADDRESS DCA TAPE /SET UP TO RETURN THERE TAD (TPW /6 DCA JOBS /INDICATE TAPE OPR IN PROGRESS ION /ENABLE INTERRUPTS JMP TIMER /AND WAIT / /END OF PAGE SIX OF NON-RESIDENT TAPE HANDLER MODULE /
*1600 / /MOVE TOWARD BLOCK / MTB, JMS SEARCH NOP IAAC TAD BN IACA DCA LNCA /SET TO RET DIFF IN LINC A ICA C4, 4 JMP RDX / /CHECK BLOCK / CHK, CLC DCA CHKS /SET CHK SW - NO DATA STORING SKP CLA / /READ AND CHECK / RDC, CLC /SET FOR CHECK / /READ BLOCK / RDE, DCA CHECK /SET CHK SW - 0=NO CHK JMS SEARCH JMP CSRCH JMS TPINT /WAIT FOR CHECK MARK TO PASS / /READ LOOP / RDL, JMS TPINT /WAIT FOR FIRST WORD IAAC TAD LNCA DCA LNCA /FORM CHECKSUM ISZ WCNT /DONE YET? JMP RWORD /NOSSIR!! ICA 6 /SHUT TAPE DOWN ISZ CHECK /CHECK WANTED? JMP RDX /NOPE IAC TAD LNCA /TEST CHECKSUM SZA CLA JMP CKFAIL ISZ BN ISZ QN ISZ QCT /CHECH MAKES, MORE BLOCKS TO DO? JMP MTPI / /TAPE READ EXIT / RDX, TAD MTPINS AND C20 SZA CLA /LEAVE TAPE IN MOTION? JMP DOGO /YES, EXIT FROM INSTRUCTION ICA /NO, STOP TAPE 1 ICA 4001 /TURN AROUND MODE JMP DOGO
/ /STORE THE WORD READ / RWORD, IAAC /GET WORD AGAIN MCDF, 0 /PROPER CDF WILL BE HERE DCA I MEMT CDF JMP RDL / /WRITE AND CHECK GROUP / WCG, TAD WCGF SZA CLA JMP WRC WCHK, CLC DCA CHKS /NO STORAGE DURING CHECK JMP RDC / /A CHECK HAS FAILED DURING READ OR WRITE / CKFAIL, TAD MTPINS /GET TAPE INSTR AND C4 /LOOK AT WRITE BIT SNA CLA /IS IT SET JMP RDC /NO, READ AGAIN / /WRITE AND CHECK BLOCK / WRC, CLC / /WRITE WITH NO CHECK / WRI, DCA CHECK JMS SEARCH JMP CSRCH ICA 5 ISZ WCNT /COUNT IS ONE HIGH FOR WRITE / /WRITE LOOP / WCDF, 0 /BECOMES RIGHT CDF TAD I MEMT CDF IACB TAD LNCA DCA LNCA JMS TPINT /WAIT FOR WORD TO BE WRITTEN ISZ WCNT JMP WCDF TAD LNCA CMA IACB / /WRITE CHECKSUM / JMS TPINT /WRITE NEXT TO LAST WORD JMS TPINT /WRITE LAST WORD ICA 6 TAD WCGF SZA CLA JMP WGP ISZ CHECK JMP RDX JMP WCHK WGP, ISZ BN ISZ QN ISZ QCT JMP MTPI DCA WCGF JMP MTP0 / /TAPE WAIT ROUTINE, FOR READING OR WRITING INDIVIDUAL /WORDS IN A BLOCK WITH THE INTERRUPT OFF. / TPINT, 0 /SUBROUTINE ENTRANCE CLA INTS /GET LINC INTERRUPT STATUS SMA CLA /IS TAPE INTERRUPT SET JMP .-2 /NO ICA /YES, CLEAR INTERRUPTS 7 JMP I TPINT /AND RETURN / /FLAGS AND COUNTS / CHECK, 0 /CHECK WANTED - 0=NO WCNT, 0 /WORD COUNT CHKS, 0 /CHECK SWITCH - 0=CHECK / /END OF NON-RESIDENT TAPE HANDLER MODULE / /END OF PROGRAM.



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