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