/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 $ $ $ $ $ $ $ $ $