1 TITLE DPDINT - DATA PRODUCTS DISK INTERRUPT SERVICE
\r
2 SUBTTL A. BLACKIGNTON/CMF TS 12 JAN 69 V401
\r
5 DCB=204 ;DATA-CONTROL-B
\r
9 ;THIS NEXT CONSTANT MUST BE SET TO MATCH CAPACITY OF THE PARTICULAR DISK FILE---
\r
10 INTERNAL LBHIGH ;HIGHEST LEGAL LOGICAL BLOCK NUMBER
\r
13 ;START A WRITE ON DISK FILE
\r
15 ;AT ENTRY, C(TAC 18-35)= LOGICAL BLOCK NUMBER
\r
18 INTERNAL DFWRT,DFRED
\r
19 EXTERNAL DSKX8,DCBBIT,DSKBIT,DSKCHN,DCBCHN.ERRPNT,DSKX9
\r
24 DFWRT1: MOVEM TAC1,IOWRD
\r
25 MOVE TAC1,[BLKO DCB,IOWRD]
\r
26 JSR DFRW ;SET UP DISK ADDRESS
\r
28 TLO TAC,WLE ;ENABLE WRITE LOCK ERROR
\r
29 HRRI TAC,DSKCHN ;TURN ON DISK
\r
30 IORI TAC,WRT+CLE+EIS+ENE
\r
33 CONO DCB,OUT+DAR+BR+P18+DFNUM(TAC) ;TURN ON DATA-CONTROL-B
\r
35 ;SIMILAR ROUTINE FOR READ
\r
38 DFRED1: MOVEM TAC1,IOWRD
\r
39 MOVE TAC1,[BLKI DCB,IOWRD]
\r
43 IORI TAC,RED+CLE+EIS+ENE ;TURN ON DISK
\r
47 ;SERVICE INTERRUPT ON DATA-CONTROL-B
\r
49 INTERNAL FTCHECK,FTMONP
\r
50 IFE FTCHECK+FTMONP,<
\r
55 DCBIN1: MOVEM TAC,ACSAV
\r
57 CONO PI,1000(TAC) ;TURN OFF DCB CHANNEL
\r
58 CONI DCB,DCBERR ;SAVE STATUS OF DATA CONTROL
\r
60 CONSO DCB,OUT ;SKIP IF WRITING
\r
61 CONO DF,END+EIS(TAC)
\r
64 JSRDCB: JSR DCBINT ;JSR STORED IN INTERRUPT CELL
\r
68 ADE=1B29 ;ADDRESS ERROR
\r
69 ADT=1B20 ;ADDRESS TERMINATED
\r
71 CME=1B27 ;COMMAND ERROR
\r
72 DCE=1B26 ;DATA CLOCK ERROR
\r
73 MISS=1B23 ;DATA MISSED FLAG
\r
74 DRLATE=1B31 ;DATA REQUEST LATE
\r
75 RCE=1B32 ;READ COMPARE ERROR
\r
76 PAR=1B33 ;PARITY ERROR
\r
77 IDS=1B18 ;IDLE STATE (1 IF IDLE)
\r
78 NOPR=1B35 ;OPERABLE (1 IF NOT)
\r
79 WLE=1B28 ;WRITE-LOCK ERROR
\r
80 OUT=1B27 ;OUTPUT INDICATION
\r
81 CLE=1B28 ;CLEAR ERROR FLAGS
\r
82 FER=1B34 ;FILE ERROR
\r
83 DVERAS=DRLATE+RCE+PAR+ADE+CME+DCE+ALM+NOPR+FER
\r
84 BR=1B26 ;BUFFER REQUEST FLAG FOR DCB
\r
85 DAR=1B25 ;DATA ACCUMULATOR REQUEST
\r
86 DFNUM=5B32 ;DISK NUMBER DOR DATA CONTROL
\r
87 END=1B23 ;END-SECTOR
\r
88 EIS=1B32 ;ENABLE IDLE STATE
\r
89 XMOVE=1B24 ;BUFFER ACCUMULATOR MOVE FLAG
\r
90 P18=3B29 ;PACK 2 18-BIT BYTES
\r
91 RED=1B26 ;READ INDICATOR
\r
92 WRT=2B26 ;WRITE INDICATOR
\r
93 ENE=1B29 ;ENABLE ERROR INTERRUPT
\r
95 ;INTERRUPT ROUTINE TO HANDLE SECTOR-END FLAG.
\r
96 ;CHECK FOR ERRORS. IF THE JOB IS COMPLETED (SIOWD = 0), GO TO
\r
97 ;DEVICE INDEPENDENT PACKAGE, ELSE CONTINUE THE JOB.
\r
100 EXTERNAL DFINT,DSKSAV
\r
102 DSKINT: CONSO DF,@DSKCON
\r
103 JRST DSKINT ;ALTERED BY INITIALIZATION
\r
106 CONO PI,1000(TAC) ;MAKE SURE DCB IS OFF
\r
109 SKIPE DSKIOS ;ERROR WAIT?
\r
115 CONSZ DF,(TAC1) ;ERROR?
\r
116 SETZM SIOWD ;YES, DO NOT DO MORE NOW
\r
117 MOVE TAC,DCBERR ;PICK UP DATA-CONTROL STATUS
\r
118 TRNN TAC,MISS ;DATA-MISSED FLAG ON?
\r
119 CONSZ DF,DVERAS-PAR ;NO, DISK ERRORS?
\r
120 ORI IOS,IODERR ;YES, SET DEVICE ERROR FLAG.
\r
121 CONSZ DF,PAR ;PARITY ERROR?
\r
122 IORI IOS,IODTER ;YES
\r
124 CONSZ DF,(TAC1) ;WRITE-LOCK?
\r
125 ORI IOS,IOIMPM ;YES
\r
126 CONO DF,CLE ;CLEAR DISC ERRORS
\r
128 SKIPN SIOWD ;JOB DONE?
\r
129 JRST DFINT ;YES, RETURN TO DEV, INDEP, ROUT.
\r
132 MOVE TAC,SRECN ; AND BLOCK NUMBER
\r
142 CONO DF,END+EIS(TAC) ;SEND END AND ENABLE FOR IDLE
\r
144 MOVEM IOS,DSKIOS ;SAVE ERROR FLAGS
\r
145 MOVEI IOS,IDS+DVERAS
\r
147 POPJ PDP,0 ;DISMISS
\r
149 DSKIN3: MOVE IOS,DSKIOS ;PICK
\r
153 ;SET UP FOR READ AND WRITE
\r
155 IFE FTCHECK+FTMONP,<
\r
158 DFRW1: MOVEM TAC1,DSKX8 ;SET UP INTERRUPT LOC
\r
160 ;CONVERT FROM LOGICAL TO PHYSICAL SECTOR NUMBER.
\r
161 ;ENTER WITH LOGICAL NUMBER IN TAC
\r
163 CNVBLK: MOVEM TAC,SLBLK
\r
166 CAMLE TAC,LBHIGH ;LOGICAL BLOCK NUMBER IN RANGE
\r
167 ;(COMPARE WITH HIGHEST LEGAL)?
\r
168 HALT CNVERR ;NO, HALT - IF CONTINUE PUSHED,
\r
169 ;THEN FLAG AS DEVICE ERROR
\r
173 MOVEM TAC,SRECN ;SAVE THE BLOCK NUMBER
\r
174 SETZM SIOWD ;CLEAR SAVED IOWD
\r
177 CONO DCB,0 ;INSURANCE
\r
178 DATAO DF,TAC ;SEND OUT ADDRESS
\r
179 HLRZ TAC,IOWRD ;WILL THIS I/O CAUSE A CHANGE
\r
180 CAIL TAC,-200 ; IN POSITION ARM DURING READ OR
\r
181 JRST CNVBK1 ; WRITE?
\r
182 SUBI TAC1,^D44 ;MAYBE.
\r
185 JRST CNVBK1 ;NO, GO AHEAD AS IS.
\r
187 MOVE TAC,IOWRD ;PUT SMALLER SIZE IN IOWD.
\r
189 MOVMS TAC1 ;STASH AWAY NEXT.
\r
194 CNVBK1: CONSO DF,ADT ;ADDRESS GO OK?
\r
195 JRST .-1 ;WAIT FOR IT
\r
197 CONO PI,2000(TAC) ;TURN ON DCB CHANNEL
\r
198 MOVSI TAC,IDS+DVERAS
\r
202 CNVERR: MOVEI IOS,IODERR ;HERE ONLY IF OPERATOR PUSHES CONTINUE
\r
203 JRST DFINT ;FLAG AS DEVICE ERROR
\r
205 ; WAIT FOR DISK TO BE TURNED ON
\r
209 DISKUP: SETZM DSKX8 ;ZERO THE BLKI/BLKO WORD
\r
211 MOVEM TAC,DSKX9 ;STORE JSR EXECUTED ON BLKI/BLKO COMPLETION
\r
219 IFN FTCHECK+FTMONP,<
\r
220 EXTENRAL SRECN,SIOWD,DSKIOS,SLBLK,DFRW,ACSAV,DCBERR,DCBINT,IOWRD,DSKCON
\r
221 INTERNAL DCBIN1,DFRW1
\r
223 IFE FTCHECK+FTMONP,<
\r
225 SRECN: Z ;SAVE OF BLOCK NUMBER
\r
226 SIOWD: Z ;NEXT IOWD TO USE
\r
227 DSKIOS: Z ; ERROR FLAGS
\r
228 SLBLK: Z ;LOGICAL BLOCK NUMBER LAST SELECTED
\r
229 ;CLEARED ON EACH CALL TO DFWRT OR DFRED
\r