File RK8E.PA (PAL assembler source file)

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

/RK8E DRIVER FOR RTS8 V2B			8/30/74
	VERS=	1
	XLIST	1		/COPYRIGHT ALSO GIVEN IN PARAM.PA
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1974,1975,1976 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/
	XLIST	0	/LIST TASK
/	EDITED 11/26/75 BY RL - INSERTED MISSING CIF

TASK=	RK8
INIWT=	0
CUR=	0

DSKP=	6741
DCLR=	6742
DLAG=	6743
DLCA=	6744
DRST=	6745
DLDC=	6746

	FIELD	CUR%10
	*4200
TMP,
START,	CAL
DONEFG,	SKPINS
TRYCT,	INTRPT

LOOP,	CAL
	RECEIV		/GET A MESSAGE
ADDR,	0
	DCA	FLD
	AC7775
	DCA	TRYCT	/TRY 3 TIMES
INIT,	ISZ	DONEFG	/INITIALIZE EVENT FLAG
	CMA STL		/** AC MAY BE 3 HERE **
	TAD	ADDR
	DCA	ADDR	/ADDRESS OF PARAMETER BLOCK -1 IN AC
	JMS	GET
	TAD	(-4	/PROPAGATE BIT 10 INTO THE LINK
	AND	(3	/CLEAR ALL HIGH-ORDER BITS
	RAL		/ROTATE BIT 10 INTO LOW-ORDER BIT
	DCA	PAGCNT	/STORE TRANSFORMED UNIT
	JMS	GET
	AND	(7770	/GET FUNCTION WORD,
	TAD	PAGCNT	/COMBINE WITH UNIT NUMBER
	DCA	PAGCNT	/AND STORE IT AWAY
	JMS	GET
	DLCA		/PUT STARTING TRANSFER ADDRESS IN HARDWARE
	CLA CLL IAC
	AND	PAGCNT
	SZA CLA		/"UNIT" = DISK*2+HALF - CHECK WHICH HALF
	TAD	(6260	/SECOND HALF - ADD BLOCK NUMBER OFFSET
	JMS	GET	/TO BLOCK NUMBER
	DCA	REC	/SAVE LOW ORDER
	TAD	PAGCNT
	AND	(4076	/GET UNIT BITS, FIELD BITS AND READ/WRITE BIT
	SZL
	IAC		/ADD HIGH ORDER BLOCK NUMBER
	TAD	(400	/ADD INTERRUPT ENABLE BIT
	DCA	CR	/STORE AS SKELETON COMMAND REGISTER
	TAD	PAGCNT
	AND	(3700	/ISOLATE PAGE COUNT FIELD
	SNA
	AC4000		/ALLOW FULL FIELD TRANSFERS
	DCA	PAGCNT
	TAD	PAGCNT
	AND	RK7600	/IF ENTIRE TRANSFER IS ONE PAGE,
	SNA CLA
	TAD	(100	/SET "ONE-PAGE TRANSFER" BIT IN COMMAND REG
	IOF		/INTERRUPTS OFF WHILE LOADING REGISTERS!
	JMS	RKSETP	/START TRANSFER AND SET UP NEXT ONE
	TAD	(FSTINT
	CDF CUR
	ION		/** NOTE THE "DCA IDISP" MUST BE THE NEXT INSTR
	DCA I	(IDISP	/INITIALIZE INTERRUPT DISPATCH
	CAL
	WAITE
PDONFG,	DONEFG		/WAIT FOR COMPLETION
	TAD	(3	/LOAD CONSTANT FOR BACKING UP ADDR
	ISZ	RTRYFG	/DID EVENT FLAG SIGNIFY ERROR OR COMPLETION?
	JMP	INIT	/ERROR OR PWR FAIL - RETRY ENTIRE OPERATION
	JMS	GET	/THIS JUST SETS THE DF AND ADDR
P7600,	7600
	TAD	STATUS
	DCA  I	ADDR
	TAD	FLD
	DCA	PFLD
	TAD	ADDR
	TAD	(-7	/GET POINTER TO MESSAGE EVENT FLAG
	CAL
	POST
STATUS,
PFLD,	HLT
	JMP	LOOP	/GET ANOTHER MESSAGE

RTRYFG,	0		/RETRY FLAG

REC,		/LOW-ORDER BLOCK NUMBER
GET,	0
FLD,	HLT
	ISZ	ADDR
	TAD I	ADDR
	JMP I	GET

PAGCNT,	0		/PAGE COUNT FOR TRANSFER
CR,	0		/SKELETON COMMAND REGISTER CONTENTS
NEWCR,	0

/RK8 INTERRUPT SERVICE FSTINT, DRST /READ STATUS REGISTER CLL RAL /4000 MEANS NO ERRORS, 0 IS "IMPOSSIBLE" HERE SZA CLA /ERROR? JMP I (RKERR /ERROR ROUTINE IN NEXT PAGE RKNEXT, TAD PAGCNT SPA SNA CLA /CHECK FOR LAST TRANSFER JMP I (RKOVER TAD NEWCR /GET PRECOMPUTED COMMAND REGISTER CHANGES JMS RKSETP /START NEXT TRANSFER AND SET UP THE ONE AFTER THAT CIF 0 POSTDS /EXIT INTERRUPT ROUTINE - IDISP STILL EQUALS "FSTINT" RKSETP, 0 /ROUTINE TO START UP A TRANSFER TAD CR /AND PRECOMPUTE THE NEXT ONE. DLDC /LOAD THE RK8E COMMAND REGISTER TAD REC DLAG /LOAD BLOCK NUMBER AND GO TAD PAGCNT TAD RK7600 /WE PRECOMPUTE THE NEXT TRANSFER BECAUSE THE DCA PAGCNT /RK8E HAS A VERY NARROW WINDOW IN WHICH ISZ REC /TO INITIATE THAT TRANSFER ONCE THE FLAG POPS UP. SKP ISZ CR /HIGH-ORDER BLOCK NUMBER IN COMMAND REGISTER TAD REC AND (37 /IF WE ARE NOT GOING TO A NEW TRACK, CIA STL /WE DON'T HAVE TO CHECK HEADERS NEXT OPERATION. RK7600, 7600 TAD PAGCNT /IF NEXT TRANSFER IS HALF BLOCK, AND RK7600 /WE MUST SET THE HALF-BLOCK COMMAND BIT. SNA CLA TAD (1000 RTR /LINK HAS "DON'T CHECK HEADER" BIT RAR DCA NEWCR /STORE SPECIAL COMMAND REGISTER BITS FOR NEXT TIME. JMP I RKSETP PAGE
/INTERRUPT SKIP CHAIN ENTRY INTRPT, 0;0 /SKIP CHAINING GOES HERE DSKP JMP I INTRPT CDF CIF CUR /SET DF AND IF CORRECTLY JMP I .+1 IDISP, IGNORE /IGNORE INITIAL INTERRUPTS CIF 0 /IDISP IS A COROUTINE WITH POSTDS /THE RTS-8 INTERRUPT SYSTEM TRYAGN, AND (401 /CHECK TO SEE IF WE SNA CLA /HAVE TO RECALIBRATE JMP NRECAL /NO DCLR /CLEAR DISK STATUS AC0002 /MYSTIC SEQUENCE OF INSTRUCTIONS WHICH DCLR /RECALIBRATES A DRIVE JMS IDISP /RECALIBRATE GENERATES A DONE FLAG ALMOST IMMEDIATELY, TAD I (CR /AND A SEEK DONE SIGNAL WHEN IT IS FINISHED AND (6 /THEREFORE WE MUST ENABLE THE SEEK DONE SIGNAL TAD (600 /TO SET THE DONE FLAG AND CAUSE AN INTERRUPT. DLDC /NO SOONER SAID THAN DONE! JMS IDISP /WAIT FOR THE FINAL FLAG DRST CLL RAL /IF THE RECALIBRATE GENERATED AN ERR0R, SZA CLA JMP RKERR /BOY ARE YOU IN TROUBLE! NRECAL, DCLR /CLEAR STATUS REGISTER SETEF, DCA I (RTRYFG /SET FLAG TO 0 OR -1 TAD (DONEFG JMS IDISP /DISMISS AND POST EVENT FLAG HALT, HLT /CANNOT GET HERE! RKERR, DRST /READ STATUS REGISTER ISZ I (TRYCT /HOW MANY TIMES HAVE WE BEEN THROUGH HERE? JMP TRYAGN /ROOM FOR ONE MORE. RKOVER, DCA I (STATUS /SET STATUS TO 0 OR STSTUS REGISTER DCLR /CLEAR NASTY FLAGS (IF ANY) STA /INDICATE FINAL RETURN JMP SETEF /AND ACTIVATE TASK IGNORE, DCLR CIF 0 /**RL** SET I.F. FOR JUMP ** POSTDS /CLEAR FLAG AND DISMISS PAGE $$



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