File XRX01N.PA (PAL assembler source file)

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

/ DSD RX01/RX02 3 DRIVE NON-SYSTEM OS-8 DRIVER
/ XRX01N.PA	RX01/RX02 COMPATIBLE  12-SEP-79

/ DEFS FOR INTERFACE OPERATION.
LCDR=6751	/ LOAD COMMAND REG: CLEAR AC.

/ X X X  X MA SZ  DH DR FN  FN FN X
/	MA = 1 FOR MAINTAINANCE MODE.
/	SZ = DATA WORD SIZE: 0=>12 BITS, 1=>8 BITS.
/	DH = HIGH DRIVE'S SELECT FOR DRIVE # 2.
/	DR = DRIVE SELECT. 0=>DRIVE 0, 1=>DRIVE 1
/	FN = FUNCTION (0 - 7)
/	 0=FILL BUFFER: GET 64 12 BIT WDS OR 128 8 BIT WDS
/	 1=EMPTY BUFFER  (XFERS DATA: DOESEN'T CHANGE BUF)
/	 2=WRITE SECTOR	 3 = READ SECTOR
/	 4=NOP/SET MED	 5 = READ STATUS (250 MSEC) SEE XDR DEFS
/	 6= WRITE DELETED DATA SECTOR
/	 7= READ ERROR REG: SEE PAGE 2 FOR ERROR CODES.

XDR=6752	/ TRANSFER DATA REGISTER: BIDIRECTIONAL.
		/ IF READ JAMS DATA INTO AC
		/ IF WRITE LOADS FROM AC, AC UNCHANGED.
/  NOTE:  AFTER A LCD COMMAND FINISHED STATUS IS AVAILABLE
/		BY DOING AN XDR.
/		AC4= DRIVE READY
/		AC5= DELETED DATA MARK DETECTED IN ID
/		AC9= INITIALIZE COMPLETE.
/		AC10=PARITY ERROR ON CONTROL INF.
/		AC11=CRC ERROR DETECTED IN DATA.

STRF=6753	/ SKIP ON TRANSFER REQUEST - CLEAR FLAG.
		/ AN XDR INSTRUCTION IS DESIRED.

SERF=6754	/ SKIP ON ERROR FLAG SET  -  CLEAR FLAG.
		/ DONE FLAG ALSO SET WHEN TRUE.

SDNF=6755	/ SKIP ON DONE FLAG SET AND CLEAR DONE.
		/ ATTACHED TO INTERRUPT LINE.

SINTR=6756	/ SET INTERRUPT STATE
		/ AC11=1 ENABLES INTERRUPT ON DONE FLAG SET.
		/ AC11=0 DISABLES FLOPPY INTERRUPT.

INIT=6757	/ INIT THE FLOPPY CONTROLLER - INTERFACE.

/ STANDARD OS/8 CALL SEQUENCE USED BY DRIVER.
/	JMS SYS	/ AC CLEARED ON ENTRANCE AND NORMAL RETURN
/	 FUNCTION WORD	/ W P P  P P P  F F F  X X X
/			/ W = 1 FOR WRITE.
/			/ PPPPP = #128. WD PAGES XFERRED.
/			/ FFF = DATA TRANSFER MEMORY FIELD.
/	STARTING CORE TRANSFER ADDRESS.
/	STARTING LOGICAL DISK BLOCK (0-755) (2 PAGES/BLOCK)
/	ERROR RETURN	/ AC = 4000
/	NORMAL RETURN	/ NO ERRORS DETECTED

/ TABLE FORMAT FOR OS/8 BUILD ENTRIES. / WORD 1-2 DEVICE TYPE / WORD 3-4 OS/8 DEVICE NAME / WORD 5 DEVICE CONTROL BLOCK ENTRY / BIT 0 =1 FILE STRUCTURED DEVICE / BIT 1 =1 READ ONLY / BIT 2 =1 WRITE ONLY / BITS 3-8 DEVICE TYPE. SEE TABLE 2-12 OS/8 / BITS 9-11 USED BY MONITOR / WORD 6 ENTRY POINT WORD. / BIT 0 = 1 2 PAGE HANDLER / BIT 1 = 1 ENTRY POINT = SYS: / BIT 2 = 1 ENTRY POINT CORESIDENT WITH SYS: / BIT 5-11 ENTRY POINT OFFSET FROM PAGE BEG. / WORD 7 MUST BE 0 / WORD 8 MUST BE 0 UNLESS SYSTEM HANDLER. / THEN = BLOCK LENGTH OF DEVICE. *0 -3 / 3 ENTRY POINTS, DX0, DX1, DX2 DEVICE NX12; DEVICE DX0; 4250; ENTDX0-FUNCT; 0; 0 DEVICE NX12; DEVICE DX1; 4250; ENTDX1-FUNCT; 0; 0 DEVICE NX12; DEVICE DX2; 4250; ENTDX2-FUNCT; 0; 0
*200 / DSD RX01/RX02 NON-SYSTEM HANDLER FUNCT, 0 / 0 = WRITE, 2 = READ. TRNADR, 0 / CORE TRANSFER ADDRESS. DSKADR, 0 / 4 * OS/8 BLOCK #. WRDCNT, 0 / - # WORDS TO BE TRANSFERRED. / CMDSUB - WAITS FOR DONE THEN DOES LOAD COMMAND. CMDSUB, 0 DCA XDSUB / ABORT KLUDGE. TAD P7600 KRS / OR IN LAST CHAR TYPED. TAD MCTRLC / 7603+175 = 0 SZA CLA / CTRL C TYPED? JMP .+3 / NO: NOT RECENT CTRL C CDIFZR, CDF CIF 0 / RESTORE DATA AND INSTRUCTION FIELDS. JMP I P7600 / GO TO MONITOR. / START OF ACTUAL CMDSUB SDNF JMP CMDSUB+2 / INCLUDE CTRL C CHECKER. TAD XDSUB / RESTORE COMMAND. LCDR / LOAD IT. JMP I CMDSUB / XDSUB - TRANSFER DATA SUB. XDSUB, 0 STRF; JMP .-1 XDR JMP I XDSUB TRACK, 0 / DRIVER ENTRANCE FOR DRIVE # 0. ENTDX0, 0 CLA JMP DRV0ENT UNITCD, 0 / DRIVER ENTRANCE FOR DRIVE # 1. ENTDX1, 0 CLA TAD ENTDX1; DCA ENTDX0 STL RTL / AC = 2, L=0 JMP DRV0EN /DRIVER ENTRANCE FOR DRIVE # 2. ERRCNT, / USE THIS ALSO AS ERROR COUNT.!!!!!!!!! ENTDX2, 0 CLA; TAD ENTDX2; DCA ENTDX0 CLA IAC CLL RTL / AC=4, L=0 DRV0EN, STL RTL / AC = 2, 12, 22 FOR DRV 0, 1, 2. RAL / DRIVE 0 = 4, DRIVE 1 = 24, DRIVE 3 = 44 DCA UNITCD / UNIT CODE RDF / GET CALLING FIELD. TAD CDIFZR DCA CDFRET / SET UP RETURN FIELD. CLA STL RAR / AC = 4000, L=0 TAD I ENTDX0 / FUNCTION WORD AND P70 / GET TRANSFER FIELD. TAD CDFDAT DCA XFRFLD / SET DATA TRANSFER FIELD. CML RTL / AC=0 IF WRITE, =2 IF READ. DCA FUNCT TAD I ENTDX0 / GET PAGE COUNT RAL / MAKE INTO WORD COUNT. AND P7600 CIA / MAKE INTO - WORD COUNT. DCA WRDCNT ISZ ENTDX0 TAD I ENTDX0 / GET TRANSFER ADDRESS. DCA TRNADR ISZ ENTDX0 TAD I ENTDX0 / GET FLOPPY BLOCK #. MQL / DISPLAY IT. TAD I ENTDX0 / SET UP FOR SECTOR MAPPING. CLL RTL / 4 * BLOCK #. DCA DSKADR ISZ ENTDX0 / DO THE READ OR WRITE. TAD FUNCT; SNA CLA; JMP RDWRITE / 2 => READ. TRNDTL, TAD WRDCNT; AND P77 / NEW SECTOR ? SZA CLA; JMP XFDTA / NO - TRANSFER DATA. JMS XEQSUB ISZ DSKADR RDWRIT, TAD FUNCT JMS CMDSUB / DO FILL OR EMPTY BUFFER CMD. XFRFLD, CDF 0 / LOADED IN CALL SEQ. DECODE. XFDTA, TAD I TRNADR JMS XDSUB DCA I TRNADR ISZ TRNADR P70, 70 ISZ WRDCNT; JMP TRNDTL TAD FUNCT; SNA CLA; JMS XEQSUB / DO FINAL WRITE. ISZ ENTDX0 / DO OK RETURN CDFRET, CDF CIF 0 JMP I ENTDX0 / XEQSUB - XEQUTE A READ OR WRITE SECTOR. XEQSUB, 0 CLL STA RTL / SAM3 - LINK=1 DCA ERRCNT / RETRY COUNTER. RETRY, TAD FUNCT / 2=READ, 0=WRITE. TAD UNITCD JMS CMDSUB DCA TRACK STL TAD DSKADR CNVLP, SZL ISZ TRACK TAD M13D / SECTORS / TRACK REVOLUTION. SMA; JMP CNVLP CML RAL / 2*(-#SECTORS+LINK VAL) TAD P27 / MAKE INTO SECTOR OFFSET. JMS XDSUB / SEND THE SECTOR CLA TAD TRACK JMS XDSUB P7600, CLA+400 TAD P77 JMS CMDSUB SERF; JMP I XEQSUB / ERROR - TRY AN INIT AND RETRY INIT ISZ ERRCNT; JMP RETRY P7130, STL RAR / FATAL ERROR INDICATOR. JMP CDFRET P27, 33 M13D, -15 P77, 77 CDFDAT, CDF 0 MCTRLC, 175 $ $ $ $ $



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