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
14 ;AT ENTRY, C(TAC 18-35)= LOGICAL BLOCK NUMBER
\r
17 INTERNAL DFWRT,DFRED
\r
18 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
29 TLO TAC,WLE ;ENABLE WRITE LOCK ERROR
\r
30 HRRI TAC,DSKCHN ;TURN ON DISK
\r
31 IORI TAC,WRT+CLE+EIS+ENE
\r
34 CONO DCB,OUT+DAR+BR+P18+DFNUM(TAC) ;TURN ON DATA-CONTROL-B
\r
36 ;SIMILAR ROUTINE FOR READ
\r
39 DFRED1: MOVEM TAC1,IOWRD
\r
40 MOVE TAC1,[BLKI DCB,IOWRD]
\r
44 IORI TAC,RED+CLE+EIS+ENE ;TURN ON DISK
\r
47 CONO DCB,XMOVE+P18+DFNUM(TAC)
\r
49 \f;SERVICE INTERRUPT ON DATA-CONTROL-B
\r
51 INTERNAL FTCHECK,FTMONP
\r
52 IFE FTCHECK+FTMONP,<
\r
57 DCBIN1: MOVEM TAC,ACSAV
\r
59 CONO PI,1000(TAC) ;TURN OFF DCB CHANNEL
\r
60 CONI DCB,DCBERR ;SAVE STATUS OF DATA CONTROL
\r
62 CONSO DCB,OUT ;SKIP IF WRITING
\r
63 CONO DF,END+EIS(TAC)
\r
66 JSRDCB: JSR DCBINT ;JSR STORED IN INTERRUPT CELL
\r
71 ADE=1B29 ;ADDRESS ERROR
\r
72 ADT=1B20 ;ADDRESS TERMINATED
\r
74 CME=1B27 ;COMMAND ERROR
\r
75 DCE=1B26 ;DATA CLOCK ERROR
\r
76 MISS=1B23 ;DATA MISSED FLAG
\r
77 DRLATE=1B31 ;DATA REQUEST LATE
\r
78 RCE=1B32 ;READ COMPARE ERROR
\r
79 PAR=1B33 ;PARITY ERROR
\r
80 IDS=1B18 ;IDLE STATE (1 IF IDLE)
\r
81 NOPR=1B35 ;OPERABLE (1 IF NOT)
\r
82 WLE=1B28 ;WRITE-LOCK ERROR
\r
83 OUT=1B27 ;OUTPUT INDICATION
\r
84 CLE=1B28 ;CLEAR ERROR FLAGS
\r
85 FER=1B34 ;FILE ERROR
\r
86 DVERAS=DRLATE+RCE+PAR+ADE+CME+DCE+ALM+NOPR+FER
\r
87 BR=1B26 ;BUFFER REQUEST FLAG FOR DCB
\r
88 DAR=1B25 ;DATA ACCUMULATOR REQUEST
\r
89 DFNUM=5B32 ;DISK NUMBER DOR DATA CONTROL
\r
90 END=1B23 ;END-SECTOR
\r
91 EIS=1B32 ;ENABLE IDLE STATE
\r
92 XMOVE=1B24 ;BUFFER ACCUMULATOR MOVE FLAG
\r
93 P18=3B29 ;PACK 2 18-BIT BYTES
\r
94 RED=1B26 ;READ INDICATOR
\r
95 WRT=2B26 ;WRITE INDICATOR
\r
96 ENE=1B29 ;ENABLE ERROR INTERRUPT
\r
97 \f;INTERRUPT ROUTINE TO HANDLE SECTOR-END FLAG.
\r
98 ;CHECK FOR ERRORS. IF THE JOB IS COMPLETED (SIOWD = 0), GO TO
\r
99 ;DEVICE INDEPENDENT PACKAGE, ELSE CONTINUE THE JOB.
\r
102 EXTERNAL DFINT,DSKSAV
\r
104 DSKINT: CONSO DF,@DSKCON
\r
105 JRST DSKINT ;ALTERED BY INITIALIZATION
\r
108 CONO PI,1000(TAC) ;MAKE SURE DCB IS OFF
\r
111 SKIPE DSKIOS ;ERROR WAIT?
\r
116 CONSZ DF,(TAC1) ;ERROR?
\r
117 SETZM SIOWD ;YES, DO NOT DO MORE NOW
\r
118 MOVE TAC,DCBERR ;PICK UP DATA-CONTROL STATUS
\r
119 TRNN TAC,MISS ;DATA-MISSED FLAG ON?
\r
120 CONSZ DF,DVERAS-PAR ;NO, DISK ERRORS?
\r
121 ORI IOS,IODERR ;YES, SET DEVICE ERROR FLAG.
\r
122 CONSZ DF,PAR ;PARITY ERROR?
\r
123 IORI IOS,IODTER ;YES
\r
125 CONSZ DF,(TAC1) ;WRITE-LOCK?
\r
126 ORI IOS,IOIMPM ;YES
\r
127 CONO DF,CLE ;CLEAR DISC ERRORS
\r
129 SKIPN SIOWD ;JOB DONE?
\r
130 JRST DFINT ;YES, RETURN TO DEV, INDEP, ROUT.
\r
133 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
152 \f;SET UP FOR READ AND WRITE
\r
154 IFE FTCHECK+FTMONP,<
\r
157 DFRW1: MOVEM TAC1,DSKX8 ;SET UP INTERRUPT LOC
\r
159 ;CONVERT FROM LOGICAL TO PHYSICAL SECTOR NUMBER.
\r
160 ;ENTER WITH LOGICAL NUMBER IN TAC
\r
162 CNVBLK: MOVEM TAC,SLBLK
\r
165 CAMLE TAC,LBHIGH ;LOGICAL BLOCK NUMBER IN RANGE
\r
166 ;(COMPARE WITH HIGHEST LEGAL)?
\r
167 HALT CNVERR ;NO, HALT - IF CONTINUE PUSHED,
\r
168 ;THEN FLAG AS DEVICE ERROR
\r
171 MOVEM TAC,SRECN ;SAVE THE BLOCK NUMBER
\r
172 SETZM SIOWD ;CLEAR SAVED IOWD
\r
175 CONO DCB,0 ;INSURANCE
\r
176 DATAO DF,TAC ;SEND OUT ADDRESS
\r
177 HLRZ TAC,IOWRD ;WILL THIS I/O CAUSE A CHANGE
\r
178 CAIL TAC,-200 ; IN POSITION ARM DURING READ OR
\r
179 JRST CNVBK1 ; WRITE?
\r
180 SUBI TAC1,^D44 ;MAYBE.
\r
183 JRST CNVBK1 ;NO, GO AHEAD AS IS.
\r
185 MOVE TAC,IOWRD ;PUT SMALLER SIZE IN IOWD.
\r
187 MOVMS TAC1 ;STASH AWAY NEXT.
\r
192 CNVBK1: CONSO DF,ADT ;ADDRESS GO OK?
\r
193 JRST .-1 ;WAIT FOR IT
\r
195 CONO PI,2000(TAC) ;TURN ON DCB CHANNEL
\r
196 MOVSI TAC,IDS+DVERAS
\r
200 CNVERR: MOVEI IOS,IODERR ;HERE ONLY IF OPERATOR PUSHES CONTINUE
\r
201 JRST DFINT ;FLAG AS DEVICE ERROR
\r
203 \f; WAIT FOR DISK TO BE TURNED ON
\r
207 DISKUP: SETZM DSKX8 ;ZERO THE BLKI/BLKO WORD
\r
209 MOVEM TAC,DSKX9 ;STORE JSR EXECUTED ON BLKI/BLKO COMPLETION
\r
217 IFN FTCHECK+FTMONP,<
\r
218 EXTENRAL SRECN,SIOWD,DSKIOS,SLBLK,DFRW,ACSAV,DCBERR,DCBINT,IOWRD,DSKCON
\r
219 INTERNAL DCBIN1,DFRW1
\r
221 IFE FTCHECK+FTMONP,<
\r
223 SRECN: Z ;SAVE OF BLOCK NUMBER
\r
224 SIOWD: Z ;NEXT IOWD TO USE
\r
225 DSKIOS: Z ; ERROR FLAGS
\r
226 SLBLK: Z ;LOGICAL BLOCK NUMBER LAST SELECTED
\r
227 ;CLEARED ON EACH CALL TO DFWRT OR DFRED
\r