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