d20703cb51ba722044b4c9ba6ff3e29577186d3f
[retro-software/dec/tops10/v4.5.git] / src / dpdint.mac
1 TITLE   DPDINT - DATA PRODUCTS DISK INTERRUPT SERVICE\r
2 SUBTTL  A. BLACKIGNTON/CMF TS  12 JAN 69  V401\r
3         XP      VDPDIT,401\r
4 \r
5 DCB=204         ;DATA-CONTROL-B\r
6 DF=270          ;DISK-FILE\r
7 DSK=DF\r
8 \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
11 LBHIGH: 130000-1\r
12 \r
13 ;START A WRITE ON DISK FILE\r
14 \r
15 ;AT ENTRY,              C(TAC 18-35)= LOGICAL BLOCK NUMBER\r
16 ;                       C(TAC1)     = IOWD\r
17 \r
18 INTERNAL DFWRT,DFRED\r
19 EXTERNAL DSKX8,DCBBIT,DSKBIT,DSKCHN,DCBCHN.ERRPNT,DSKX9\r
20 ENTRY LDDINT\r
21 LDDINT:\r
22 \r
23 DFWRT:\r
24 DFWRT1: MOVEM TAC1,IOWRD\r
25         MOVE TAC1,[BLKO DCB,IOWRD]\r
26         JSR DFRW                ;SET UP DISK ADDRESS\r
27 \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
31         STARTDV DSK\r
32         HRRZI TAC,DCBCHN\r
33         CONO DCB,OUT+DAR+BR+P18+DFNUM(TAC)      ;TURN ON DATA-CONTROL-B\r
34         POPJ PDP,\r
35 ;SIMILAR ROUTINE FOR READ\r
36 \r
37 DFRED:\r
38 DFRED1: MOVEM TAC1,IOWRD\r
39         MOVE TAC1,[BLKI DCB,IOWRD]\r
40         JSR DFRW\r
41 \r
42         HRRI TAC,DSKCHN\r
43         IORI TAC,RED+CLE+EIS+ENE        ;TURN ON DISK\r
44         STARTDV DSK\r
45         POPJ PDP,\r
46 \f\r
47 ;SERVICE INTERRUPT ON DATA-CONTROL-B\r
48 \r
49 INTERNAL FTCHECK,FTMONP\r
50 IFE FTCHECK+FTMONP,<\r
51 INTERNAL DCBINT\r
52 \r
53 DCBINT: Z\r
54 >\r
55 DCBIN1: MOVEM TAC,ACSAV\r
56         HRRZI TAC,DCBBIT\r
57         CONO PI,1000(TAC)       ;TURN OFF DCB CHANNEL\r
58         CONI DCB,DCBERR         ;SAVE STATUS OF DATA CONTROL\r
59         HRRZI TAC,DSKCHN\r
60         CONSO DCB,OUT   ;SKIP IF  WRITING\r
61         CONO DF,END+EIS(TAC)\r
62         MOVE TAC,ACSAV\r
63         JEN @DCBINT\r
64 JSRDBC: JSR DCBINT              ;JSR STORED IN INTERRUPT CELL\r
65 \r
66 ;DISK & DCB FLAGS\r
67 \r
68 ADE=1B29        ;ADDRESS ERROR\r
69 ADT=1B20        ;ADDRESS TERMINATED\r
70 ALM=1B30        ;ALARM\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
94 \f\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
98 \r
99 INTERN DSKINT\r
100 EXTERNAL DFINT,DSKSAV\r
101 \r
102 DSKINT: CONSO DF,@DSKCON\r
103         JRST DSKINT             ;ALTERED BY INITIALIZATION\r
104         JSR DSKSAV\r
105         HRRZI TAC,DCBBIT\r
106         CONO PI,1000(TAC)       ;MAKE SURE DCB IS OFF\r
107         HLLZS DSKCON\r
108         MOVEI   IOS,0\r
109         SKIPE   DSKIOS          ;ERROR WAIT?\r
110         JRST DSKIN3             ;YES\r
111         MOVEI TAC1,DVERAS\r
112         CONSZ DCB,OUT\r
113         TRO TAC1,WLE\r
114 \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
123         TRZ TAC1,DVERAS\r
124         CONSZ DF,(TAC1)         ;WRITE-LOCK?\r
125         ORI IOS,IOIMPM          ;YES\r
126         CONO DF,CLE             ;CLEAR DISC ERRORS\r
127         JUMPN   IOS,DSKIN2\r
128         SKIPN SIOWD             ;JOB DONE?\r
129         JRST DFINT              ;YES, RETURN TO DEV, INDEP, ROUT.\r
130                                 ;WITH ERROR FLAGS\r
131 \r
132         MOVE TAC,SRECN          ;   AND BLOCK NUMBER\r
133         ADDI TAC,1\r
134         IMULI TAC,^D44\r
135         MOVE TAC1,SIOWD\r
136         CONSO DCB,OUT\r
137         JRST DFRED1\r
138         JRST DFWRT1\r
139 \f\r
140 DSKIN2:\r
141         HRRZI TAC,DSKCHN\r
142         CONO DF,END+EIS(TAC)    ;SEND END AND ENABLE FOR IDLE\r
143                                 ;FOLLOWING ERROR\r
144         MOVEM   IOS,DSKIOS      ;SAVE ERROR FLAGS\r
145         MOVEI   IOS,IDS+DVERAS\r
146         HRRM    IOS,DSKCON\r
147         POPJ    PDP,0   ;DISMISS\r
148 \r
149 DSKIN3: MOVE    IOS,DSKIOS      ;PICK\r
150         CONO DF,0\r
151         JRST    DFINT\r
152 \f\r
153 ;SET UP FOR READ AND WRITE\r
154 \r
155 IFE FTCHECK+FTMONP,<\r
156 DFRW:   Z\r
157 >\r
158 DFRW1:  MOVEM TAC1,DSKX8        ;SET UP INTERRUPT LOC\r
159 \r
160 ;CONVERT FROM LOGICAL TO PHYSICAL SECTOR NUMBER.\r
161 ;ENTER WITH LOGICAL NUMBER IN TAC\r
162 \r
163 CNVBLK: MOVEM TAC,SLBLK\r
164 CNVBK2: HRRZS TAC\r
165 IFN FTRCHK,<\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
170 >\r
171         IDIVI TAC,^D44\r
172 \r
173         MOVEM TAC,SRECN         ;SAVE THE BLOCK NUMBER\r
174         SETZM SIOWD             ;CLEAR SAVED IOWD\r
175         LSH TAC,6\r
176         ADD TAC,TAC1\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
183         LSH TAC1,7\r
184         CAIL TAC,(TAC1)\r
185         JRST CNVBK1             ;NO, GO AHEAD AS IS.\r
186 \r
187         MOVE TAC,IOWRD          ;PUT SMALLER SIZE IN IOWD.\r
188         HRLM TAC1,IOWRD\r
189         MOVMS TAC1              ;STASH AWAY NEXT.\r
190         HRLS TAC1\r
191         ADD TAC,TAC1\r
192         MOVEM TAC,SIOWD\r
193 \r
194 CNVBK1: CONSO DF,ADT            ;ADDRESS GO OK?\r
195         JRST .-1                ;WAIT FOR IT\r
196         HRRZI TAC,DCBBIT\r
197         CONO PI,2000(TAC)       ;TURN ON DCB CHANNEL\r
198         MOVSI TAC,IDS+DVERAS\r
199         SETZM   DSKIOS\r
200         JRST @DFRW\r
201 IFN FTRCHK,<\r
202 CNVERR: MOVEI IOS,IODERR        ;HERE ONLY IF OPERATOR PUSHES CONTINUE\r
203         JRST DFINT              ;FLAG AS DEVICE ERROR\r
204 >\r
205 ; WAIT FOR DISK TO BE TURNED ON\r
206 \r
207 INTERNAL DISKUP\r
208 \r
209 DISKUP: SETZM DSKX8             ;ZERO THE BLKI/BLKO WORD\r
210         MOVE TAC,JSRDCB\r
211         MOVEM TAC,DSKX9         ;STORE JSR EXECUTED ON BLKI/BLKO COMPLETION\r
212         CONSZ DF,NOPR\r
213         JRST .-1\r
214         HRRZI TAC,DSKBIT\r
215         IORI TAC,DCBBIT\r
216         CONO PI,2200(TAC)\r
217         POPJ PDP,\r
218 \r
219 IFN FTCHECK+FTMONP,<\r
220 EXTENRAL SRECN,SIOWD,DSKIOS,SLBLK,DFRW,ACSAV,DCBERR,DCBINT,IOWRD,DSKCON\r
221 INTERNAL DCBIN1,DFRW1\r
222 >\r
223 IFE FTCHECK+FTMONP,<\r
224 INTERNAL        DSKCON\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
230 \r
231 DSKCON: 0\r
232 IOWRD:  0\r
233 DCBERR: 0\r
234 ACSAV:  0\r
235 <>\r
236 DPDEND: END\r
237 \r
238 \r