File XRX01S.PA (PAL assembler source file)

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

/DSD-210 RX8 EQUIV SYSTEM OS-8 DRIVER
/ XRX01S.PA	7/27/76

/ DEFS FOR INTERFACE OPERATION.

LCDR=6751	/ LOAD COMMAND REG: CLEAR AC.

/ X X X  X MA SZ  X DR FN  FN FN X
/	MA = 1 FOR MAINTAINANCE MODE.
/	SZ = DATA WORD SIZE: 0=>12 BITS, 1=>8 BITS.
/	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(VERIFIES DATA: DOESEN'T CHANGE BUF)
/	 2=WRITE SECTOR	3 = READ SECTOR
/	 4= NOP		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.
		/ AN XDR INSTRUCTION IS DESIRED.

SERF=6754	/ SKIP ON ERROR FLAGS SET.
		/ 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

/ ERROR CODES GIVEN BY READ ERROR STATUS FUNCT (MODE 5) / CODE LIGHT # MEANING / 10 2 DRIVE 0 FAILED TO HOME ON INIT, OR DIDN'T SELECT / 20 2 DRIVE 1 FAILED TO HOME ON INIT, OR DIDN'T SELECT / 30 2 FOUND HOME WHEN STEPPING OUT 10 TRACKS FOR INIT. / 40 2 TRACK GREATER THAN 77. OR UNIT SELECT ERROR. / 50 2 HOME BEFORE DESIRED TRACK FOUND. / 70 2 DESIRED SECTOR COULD NOT BE FOUND AFTER 2 REVS. / / 100 3 WRITE PROTECT ERROR. / 110 MORE THAN 40 USEC AND NO SEPERATED CLOCK FOUND. / 120 0 NO PREAMBLE WAS FOUND ( 24 BITS OF 0'S) / 130 0 PREAMBLE FOUND BUT NO I/O MARK WITHIN WINDOW. / 140 0 CRC ERROR ON WHAT APPEARED TO BE HEADER. / 150 2 HEADER TRACK ADDRESS OF A GOOD HEADER DIDN'T / MATCH DESIRED TRACK. / 160 0 TOO MANY TRIES FOR AN I.D. ADDRESS MARK. / 170 0 DATA ADDRESS MARK NOT FOUND IN ALLOTED TIME. / 200 0 CRC ERROR ON READING SECTOR FROM DISK. / RXES STATUS BIT 11 ALSO SET. / 210 1 PARITY ERROR (INTERFACE <=> CONTROLLER) / RXES STATUS BIT 10 ALSO SET. / 220 2 DRIVE 2 FAILED TO HOME ON INIT. / 230 2 DRIVE 3 FAILED TO HOME ON INIT. / 240 3 FORMATTER ENABLE ERROR. / 250 0 EXPECTED HEADER NOT FOUND AFTER TRACK FORMAT. / 260 0 INDEX MARK NOT FOUND IN EXPECTED RANGE. / (FORMAT NOT BEGUN) / 270 0 INDEX MARK NOT FOUND IN EXPECTED RANGE. / (FORMAT HAS OCCURED) / LIGHTS MEANING / 0 FRONT DATA TYPE ERROR / 1 FRONT PARITY ERROR BETWEEN CONTROLLER-INTERFACE. / 2 FRONT SEEK TYPE ERRORS / 3 FRONT SWITCH CONFLICT ERROR OR CONTROLLER ERROR. / INCLUDES WRITE PROTECT OR FORMAT INHIBIT ERRORS. / BOARD LIGHTS / 4 UP-LEFT CONTROLLER WAITING FOR BUS INTERFACE READY. / 5 UP-RGHT INIT IN PROGRESS. / 6 LW-LEFT READ IN PROGRESS / 7 LW-RGHT WRITE IN PROGRESS.
/ 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 -1 / SYSTEM ENTRY POINT ONLY DEVICE S210; DEVICE SYS; 4250; 2007; 0; 756 STLOAD-ENDBOT / -LENGTH OF BOOTSTRAP
/ BOOTSTRAP TO BE KEYED IN FOR FLOPPY BOOTING. NOPUNCH *24 / HUNTING BOOTSTRAP FOR DRIVE 0 THEN IF NOT READY / FOR DRIVE 1. IF NEITHER SITS ALTERNATING BETWEEN / DRIVE'S 0 AND 1. BEG, STL RTL / SA2 TAD SELCT / INITIAL SELECT OF DRIVE 0, READ LCDR / LOAD COMMAND CLA IAC / SET AC = 1 FOR SECTOR, TRACK JMS XFSUB / SECTOR JMS XFSUB / TRACK CLL RAL / SHIFT LEFT: AC = 2 = EMPTY BUFFER. CKDN, SDNF / WAIT FOR DONE. JMP XFSUB+1 / CHECK TRANSFER REQ. FLAG AS WELL. SERF / CHECK ERROR FLAG. SNA SKP CLA; JMP UNLOAD / NO ERROR, AC = 2 / CYCLE TO UNIT 1 AND SEE IF IT WILL BOOT. UCYCLE, TAD SELCT CIA TAD SELCTD DCA SELCT / SET TO 7024 FOR OTHER DRIVE. JMP BEG UNLOAD, LCDR DATLP, JMS XFSUB / UNLOAD THE BUFFER. DCA 2 / STARTING AT 2 ISZ .-1 JMP DATLP / XFSUB - TRANSFER DATA SUB. XFSUB, 0 STRF JMP CKDN / ALLOW ESCAPE ON ERROR. XDR JMP I XFSUB SELCT, 7024 / OR 7004 FOR UNIT 1 OR UNIT 0 SELCTD, 6030 / -(SELCT)+(SELCTD) = SWITCHED VALUE. ENPUNCH
/ CONTENTS OF SECTOR 1 TRACK 1 READ IN OVER ABOVE. RELOC 2 ENPUNCH / ASSEMBLE WHERE IT WILL LOAD. STLOAD, 7577 / INIT FOR AUTO INDEX LOAD AT LDHGLP SECTOR, 1 / BUMPED BY 2 TO (3,5) / GET TO HERE FROM RDSUB INITIAL RETURN RETAD, JMS RDSUB / READ SECTOR 3 DCA LDHGLP / CLEAR FIELD 1 SET. CDF 0 TAD STLOAD; DCA 17 / INIT TO LOAD HANDLER JMS RDSUB / READ SECTOR 5 INTO <07600-07677> JMS RDSUB / READ SECTOR 7 INTO <07700-07777> TAD SELCT; DCA I XUNIT / SET OPERATING UNIT IN SYS-HAND INIT JMS I STLOAD / SNEAKY JMP 7600 AUTO7, 7645 / INITIAL FIELD 1 LOAD STARTS HERE. XUNIT, 7623 / LOADED WITH UNIT SELECT RDSUB, 4 / INITIALLY EXIT AT RETAD STL RTL / C(AC) SHIFTED 2 LEFT TAD SELCT / 7004 FOR UNIT 0, 7024 FOR UNIT 1 LCDR / READ OPERATION CLA STL RTL / SA2 TAD SECTOR / UPDATED SECTOR VALUE. JMS XFSUB / READ SECTOR 3 THEN 5,7 DCA SECTOR / BUMP SECTOR BY 2 CLA IAC / TRACK 1 JMS XFSUB CKDNF, SDNF / FIRST OVERLAY LOC = XFSUB WAIT LOOP. JMP XFSUB+1 SERF; SKP; HLT / ERROR!!! SNA / NON-ZERO IF PREVIOUS LCDR = READ. JMP I RDSUB / EXIT AFTER BUFFER EMPTY. CLA STL RTL; LCDR / DO EMPTY BUFFER. LDHGLP, CDF 10 / LOAD WORDS 46-77 =>17646-17677 INITIALLY JMS XFSUB / GET ANOTHER WORD. DCA I AUTO7 / AND LOAD IT. JMP LDHGLP / CONTENTS OF FIELD 1 FOLLOW. ENDBOT, RELOC
*200 RELOC 7600 ZBLOCK 7 / MONITOR STUFF SYS, 2 / ENTRANCE VERSION 2 CLA STL RAR / SA4000, L = 0 TAD I SYS / GET FUNCTION WORD. AND P70 / MASK OFF TRANSFER FIELD. TAD INCDF0 / MAKE A CDF N INSTRUCTION. DCA TRNFLD CML RTL / LINK = 1 ON WRITE, 0 ON READ. DCA WFUNCT / = 0 IF WRITE, = 2 IF READ. RDF / GET CALLING FIELD, SET UP RETURN TAD INCFS / ADD CDF CIF 0 DCA RETFLD TAD I SYS / EXTRACT WORD COUNT. P7004, RAL AND M200 CIA / MAKE NEGATIVE. DCA WDCNT ISZ SYS / SET TO TRANSFER ADDRESS IN CALL. TAD I SYS DCA TRNADR ISZ SYS / SET TO LOGICAL BLOCK # P77, 77 /**** DON'T MOVE: AND P77 USED AS CONSTANT = 233 TAD I SYS CLL RTL / 4 * LOGICAL BLK #. DCA DSKADR ISZ SYS / SET TO ERROR RETURN TAD WFUNCT / =2 FOR READ, 0 FOR WRITE. SNA CLA; JMP WRITE NXTWD, TAD WDCNT / ADVANCE SECTOR EVERY 100(8)WDS P233, AND P77 / CAUTION: USED AS CONSTANT. SZA CLA; JMP RDDTA JMS XEQSUB / CALC TRACK, SECTOR AND POSITION. ISZ DSKADR WRITE, TAD WFUNCT; JMS CMDSUB /FILL BUFFER IF WRITE. TRNFLD, CDF 0 / DATA TRANSFER FIELD. RDDTA, TAD I TRNADR JMS XDSUB / GO TRANSFER A WORD. DCA I TRNADR ISZ TRNADR P70, 70 ISZ WDCNT; JMP NXTWD / TRANSFER TILL END. TAD WFUNCT; SNA CLA; JMS XEQSUB / RETURN, RETRY, OR FATAL ISZ SYS / GOOD TRANSFER RETURN. RETFLD, CDF CIF 0 / RESTORE DATA AND INSTRUCTION FIELDS JMP I SYS INCDF0, CDF 0 INCFS, CDF CIF 0 / RESTOR FIELDS FOR RETURN CMDSUB, 0 / LOAD COMMAND REG FROM AC WHEN DONE SDNF; JMP .-1 / WAIT FOR DONE FLAG. LCDR / LOAD COMMAND REGISTER. JMP I CMDSUB XDSUB, 0 / TRANSFER DATA SUB. STRF; JMP .-1 / WAIT FOR TRANSFER REQUEST. XDR / TRANSFER TO/FROM DATA REGISTER. JMP I XDSUB M13, -15 / SECTORS / TRACK CONSTANT. XEQSUB, 0 / EXECUTE ACTUAL COMMAND. CLL STA RTL / SAM3 - LINK SET. DCA ERRCNT / = -3 RETRY, TAD WFUNCT / READ = 2, WRITE = 0 TAD P7004 / READ SECTOR / WRITE SECTOR JMS CMDSUB / INIATE THE COMMAND. DCA TRACK / ZERO TRACK REG. TAD DSKADR / (0 - 3620 (8) ) CNVLP, SZL / INTERLEAVE ISZ TRACK / BUMP TRACK ON ALTERNATE ITERATIONS. TAD M13 SMA; JMP CNVLP / KEEP SUBTRACTING TILL NEGATIVE. / AC = - # SECTORS INTO TRACK CML RAL / 2*(-NSECT) + LINK VAL. TAD P233 / OFFSET THE SECTOR VALUE????? JMS XDSUB / TRANSFER THE SECTOR #. M200, CLA+400 / USE AS CONSTANT. TAD TRACK JMS XDSUB / LOAD TRACK AND CLA STL CLA TAD P7130 / SIZE= 8 BITS, DRIVE 1, FUNCT=4(?) JMS CMDSUB SERF / SKIP IF ANY ERROR. JMP I XEQSUB / NO ERROR. INIT / INITIALIZE COMPLETELY AND RETRY. ISZ ERRCNT; JMP RETRY P7130, STL RAR / FATAL ERROR SIGNAL. JMP RETFLD WFUNCT=SYS+141 TRNADR=SYS+142 / CORE TRANSFER ADDRESS. DSKADR=SYS+143 / LOGICAL OS/8 BLOCK #. TRACK=SYS+144 / CALCULATED TRACK #. ERRCNT=SYS+145 / ERROR COUNTER. WDCNT=SYS+146 / TRANSFER WORD COUNTER RELOC $ $ $ $ $ $ $ $ $



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