File F1102.PA (PAL assembler source file)

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

/RK8E DRIVER FOR RTS-8
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1974 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.
/
/
/
/
/
/
/
/
/
/

TASK=	RK8
INIWT=	0
CUR=	0

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

	FIELD	CUR%10
	*3400
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
	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