Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /FLOPPY DISK (RX01,RX71) SYSTEM HANDLER FOR OS/8 |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | / | |
9 | / | |
10 | / | |
11 | /COPYRIGHT (C) 1977 BY DIGITAL EQUIPMENT CORPORATION | |
12 | / | |
13 | / | |
14 | / | |
15 | / | |
16 | / | |
17 | / | |
18 | / | |
19 | / | |
20 | / | |
21 | / | |
22 | /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE | |
23 | /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT | |
24 | /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY | |
25 | /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. | |
26 | / | |
27 | /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER | |
28 | /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED | |
29 | /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH | |
30 | /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. | |
31 | / | |
32 | /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE | |
33 | /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY | |
34 | /DIGITAL. | |
35 | / | |
36 | / | |
37 | / | |
38 | / | |
39 | / | |
40 | / | |
41 | / | |
42 | / | |
43 | / | |
44 | / | |
45 | \f/FLOPPY DISK HANDLER SYSTEM | |
46 | ||
47 | /DEFINITIONS OF RX8/E IOT'S | |
48 | ||
49 | RXSVER= "E&77 | |
50 | ||
51 | DEVCOD= 750 /DEVICECODE | |
52 | ||
53 | LCD= 6001+DEVCOD /LOAD COMMAND REGISTER | |
54 | XDR= 6002+DEVCOD /TRANSFER DATA REGISTER | |
55 | STR= 6003+DEVCOD /SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG | |
56 | SER= 6004+DEVCOD /SKIP ON ERROR FLAG, CLEAR FLAG | |
57 | SDN= 6005+DEVCOD /SKIP ON DONE FLAG, CLEAR FLAG | |
58 | INTR= 6006+DEVCOD /INTERRUPT ENABLE/DISABLE | |
59 | INIT= 6007+DEVCOD /INITIALIZE CONTROLLER AND RECALIBRATE DRIVES | |
60 | ||
61 | ||
62 | /NOTES ON THIS HANDLER: | |
63 | ||
64 | /THIS HANDLER READS AND WRITES THE DISK IN "12-BIT" MODE, IN WHICH | |
65 | /ONLY 6 BITS OF EVERY 8-BIT BYTE ARE USED. AN RX01 CARTRIDGE | |
66 | /CONTAINS 494 OS/8 BLOCKS UNDER THIS METHOD | |
67 | ||
68 | /TO MAXIMIZE SPEED ON THE DEVICE, THE HANDLER READS AND WRITES DATA | |
69 | /ON A TRACK WITH A TWO-WAY INTERLEAVE - I.E. RECORDS 1-26 ON A TRACK | |
70 | /ARE WRITTEN IN THE SEQUENCE: | |
71 | / 1,3,5,7,9,11,13,15,17,19,21,23,25,2,4,6,8,10,12,14,16,18,20,22,24,26 | |
72 | ||
73 | /IN THIS WAY THE HANDLER CAN TRANSFER DATA AT A 5KHZ WORD RATE | |
74 | /MAIN CHANGE FROM RX01SY IS THAT THE NEXT DISK ADDRESS IS | |
75 | /CALCULATED DURING THE DATA TARNSFER TO/FROM THE DISK TO ITS | |
76 | /SECTOR BUFFER. THIS IS NEEDED FOR SLOW 8S !. | |
77 | \f *0 /ORIGIN FOR BUILD | |
78 | ||
79 | -1 /ONE ENTRY POINT | |
80 | DEVICE RX8E /"RX8E" IS THE GROUP NAME | |
81 | DEVICE SYS /"SYS" IS THE ENTRY POINT NAME | |
82 | 4250 /DCB WORD - DEVICE TYPE 25, DIRECTORY DEVICE | |
83 | 2007 /2000 MEANS SYS HANDLER,7 IS ENTRY POINT OFFSET | |
84 | 0 /THIS WORD ALWAYS SEEMS TO BE 0 | |
85 | DECIMAL | |
86 | 76^26%4 /THE NUMBER OF OS8 BLOCKS ON THE DEVICE | |
87 | OCTAL | |
88 | ||
89 | BOOTST-BOOTND /LENGTH OF THE BOOTSTRAP | |
90 | \f | |
91 | RELOC 2 | |
92 | BOOTST, | |
93 | X7577, 7577 | |
94 | SECT, 1 | |
95 | FAKRET, JMS GET1 | |
96 | DCA CDF10 | |
97 | CDF 0 | |
98 | TAD X7577 | |
99 | DCA XR | |
100 | JMS GET1 | |
101 | JMS GET1 | |
102 | TAD UNIT | |
103 | DCA I PUNIT | |
104 | INIT | |
105 | JMS I X7577 | |
106 | XR, 7600+BOOTND-BOOTST-1 /LOC 17 | |
107 | PUNIT, S4UNIT | |
108 | ||
109 | GET1, FAKRET | |
110 | STL RTL | |
111 | TAD UNIT | |
112 | LCD | |
113 | CLA STL RTL | |
114 | TAD SECT | |
115 | JMS LOAD | |
116 | DCA SECT | |
117 | CLA IAC | |
118 | JMS LOAD | |
119 | HANGGG, SDN | |
120 | JMP LOAD+1 | |
121 | SER | |
122 | SKP | |
123 | HLT | |
124 | SNA | |
125 | JMP I GET1 | |
126 | CLA STL RTL | |
127 | LCD | |
128 | CDF10, CDF 10 | |
129 | JMS LOAD | |
130 | DCA I XR | |
131 | LP, JMP CDF10 | |
132 | BOOTND, | |
133 | RELOC | |
134 | ||
135 | \f | |
136 | NOPUNCH | |
137 | *24 | |
138 | BOOT, STL RTL | |
139 | TAD UNIT | |
140 | LCD | |
141 | CLA IAC | |
142 | JMS LOAD | |
143 | JMS LOAD | |
144 | CLL RAL | |
145 | ||
146 | START, | |
147 | HANGGG, SDN | |
148 | JMP LOAD+1 | |
149 | SER | |
150 | SNA | |
151 | SKP CLA | |
152 | JMP GOODRD | |
153 | TAD UNIT | |
154 | CIA | |
155 | TAD X6030 | |
156 | DCA UNIT | |
157 | JMP BOOT | |
158 | GOODRD, LCD | |
159 | LP, JMS LOAD | |
160 | DCA BOOTST | |
161 | ISZ .-1 | |
162 | JMP LP | |
163 | ||
164 | LOAD, 0 | |
165 | STR | |
166 | JMP HANGGG | |
167 | XDR | |
168 | JMP I LOAD | |
169 | UNIT, 7024 | |
170 | X6030, 6030 | |
171 | ||
172 | ENPUNCH | |
173 | \f *200 | |
174 | RELOC 7600 | |
175 | ||
176 | ZBLOCK 7 /SYSTEM SPACE | |
177 | ||
178 | / OVERALL COMMENTS: | |
179 | / | |
180 | / LINK REMAINS 0 THROUGH THE MAIN PROCESSING LOOP | |
181 | / EXCEPT AS MANIPULATED BY DIVSUB | |
182 | / | |
183 | / OVERALL LOOP CONTROL THROUGH BC IS MILDLY ODD. | |
184 | / BC STARTS WITH MINUS COUNT OF THE # OF WORDS TO BE TRANSFERRED. | |
185 | / BC IS INCREMENTED 77 TIMES AT THE SILO CODE, AND 1 TIME AFTER | |
186 | / THE I/O OPERATION. | |
187 | / A READ OPERATION STARTS AND FINISHES AT THE MIDDLE OF THE LOOP. | |
188 | / A WRITE OEPRATION STARTS AT THE TOP, AND FINISHES AT BOTTOM. | |
189 | / THUS, A 1 BLOCK READ INCREMENTS 1, 77, 1, 77 AND EXITS FROM MIDDLE. | |
190 | / AND, A 1 BLOCK WRITE INCREMENTS 77, 1, 77, 1 AND EXITS FROM BOTTOM. | |
191 | / | |
192 | / DIVISION IS CARRIED OUT IN PARALLEL WITH I/O OPERATION BECAUSE OF | |
193 | / TIMING CONSIDERATIONS OF THE VT78. | |
194 | / | |
195 | / THERE IS NO ERROR RETRY, NOT PARTICULARLY CRITICAL FOR A FLOPPY. | |
196 | ||
197 | SYS, RXSVER | |
198 | CLL CML CLA RAR /SET LINK=0, AC=4000 | |
199 | TAD I SYS /TO PUT READ-WRITE BIT TO LINK | |
200 | S33, AND S70 /KEEP BITS FOR CDF | |
201 | TAD SCDF0 /ADDING IN CDF LITERAL | |
202 | DCA BUFCDF /CDF INSTRUCTION TO USER'S BUFFER | |
203 | CML RTL /FUNCTION CODE, 0=WRITE, 2=READ | |
204 | DCA FN | |
205 | RDF /FETCH CALLER'S FIELD | |
206 | TAD SCDIF0 /MAKE CDF CIF TO HIS FIELD | |
207 | DCA SRET /FOR RETURN | |
208 | TAD I SYS /MAKE CONTROL COUNT | |
209 | S4UNIT, RAL /7004 (7024 FOR UNIT #1) DOUBLES AS | |
210 | /LITERAL FOR READ-WRITE COMMAND | |
211 | AND S7600 /MAKE CONTROL COUNT FOR TOTAL | |
212 | CIA /NUMBER OF WORDS | |
213 | DCA BC | |
214 | ISZ SYS | |
215 | TAD I SYS /FETCH BUFFER ADDRESS | |
216 | DCA BUF | |
217 | ISZ SYS | |
218 | S70, 70 /THIS LITERAL MUST BE AT LOCATION 33! | |
219 | IFNZRO S70&177-33 <.ERROR.> | |
220 | TAD I SYS /OS8 BLOCK # | |
221 | CLL RTL /TIMES 4 TO BE FLOPPY SECTOR # | |
222 | DCA REC | |
223 | ISZ SYS /ERROR EXIT FROM I/O CALL | |
224 | JMS DIVSUB /COMPUTE TRACK/SECTOR FOR FIRST I/O | |
225 | TAD FN /READ OR WRITE START DIFFERENTLY | |
226 | SZA CLA /SKIP ON WRITE | |
227 | JMP STREAD /GO TO READ | |
228 | / | |
229 | / WRITE FALLS THRU....... | |
230 | / | |
231 | \f/ | |
232 | / | |
233 | / TOP OF MAIN PROCESSING LOOP | |
234 | / | |
235 | SETSLO, TAD FN /SET SILO TO LOAD-UNLOAD DEPENDING | |
236 | JMS LDCMD | |
237 | TAD S7700 /SILO CONTROL COUNT 100 OCTAL | |
238 | DCA FLPWC | |
239 | BUFCDF, HLT /CDF TO USER'S BUFFER PLACED HERE | |
240 | TRLOOP, TAD I BUF /FETCH A WORD IN CASE WRITE | |
241 | STR /WAIT | |
242 | JMP .-1 | |
243 | XDR /AC TO SILO; OR; SILO TO AC | |
244 | DCA I BUF /PLACE A WORD IN CASE READ; WRITE REPLACES SAME. | |
245 | ISZ BUF /MOVE TO NEXT BUFFER LOCATION (MAY SKIP) | |
246 | S77, 77 /LITERAL 77, EXECUTES AS A NOP | |
247 | ISZ FLPWC /DONE WITH 100 OCTAL SILO OPERATION | |
248 | JMP TRLOOP /NO | |
249 | TAD BC /INCREMENT BC BY 77 HERE, AND 1 LATER | |
250 | TAD S77 | |
251 | MAGIC, SNA /SKIP UNLESS READ DONE;NO-OP FOR LDCMD! | |
252 | JMP OKEX /READ EXIT. | |
253 | DCA BC / | |
254 | / | |
255 | / MIDDLE OF MAIN PROCESSING LOOP | |
256 | / | |
257 | STREAD, TAD FN /READ STARTS HERE | |
258 | TAD S4UNIT /SET UP DO DO READ OR WRITE I/O | |
259 | JMS LDCMD | |
260 | TAD MQ /LOAD PRECOMPUTED SECTOR INFO | |
261 | STR | |
262 | JMP .-1 /IN CASE NOT READY | |
263 | XDR | |
264 | S7700, 7700 /CLEAR AC, CAN'T SKIP (XDR LEAVES AC ALONE) | |
265 | TAD QUO /TRACK | |
266 | STR /ILLEGAL 7700 ENTRY WILL HANG; THE FUNCTION | |
267 | JMP .-1 /IS NOT SET UP (LDCMD) | |
268 | XDR | |
269 | S7600, 7600 | |
270 | ISZ REC /MOVE TO NEXT FLOPPY SECTOR | |
271 | JMS DIVSUB /COMPUTE NEXT TRACK AND SECTOR DURING THIS I/O | |
272 | TAD MAGIC /WAIT FOR I/O TO COMPLETE | |
273 | JMS LDCMD | |
274 | ISZ BC /CHECK FOR WRITE EXIT | |
275 | JMP SETSLO /NO, BACK TO TOP | |
276 | OKEX, ISZ SYS /BUMP TO REGULAR EXIT | |
277 | SRET, HLT /CDF CIF FOR USER'S CALLING FIELD | |
278 | JMP I SYS /GONE | |
279 | / | |
280 | \f/ | |
281 | / | |
282 | / LITERALS | |
283 | / | |
284 | SM15, -15 | |
285 | SCDF0, CDF 0 | |
286 | SCDIF0, CDF CIF 0 | |
287 | / | |
288 | / DIVSUB | |
289 | / | |
290 | / MUST ENTER WITH LINK AND AC 0 | |
291 | / COMPUTES TRACK IN 'QUO', SECTOR IN 'MQ', FROM # IN 'REC' | |
292 | / | |
293 | / REPEATED SUBTRACTS OF 13 DECIMAL LEAVE THE HIGH N-1 BITS OF | |
294 | / QUOTIENT IN QUO, THE LOW BIT OF QUOTIENT IN LINK, AND THE | |
295 | / REMAINDER IN AC. THE INTERLEAVE IS ACCOMPLISHED BY SHIFTING | |
296 | / LOW QUOTINET BIT INTO LOW REMAINDER BIT. | |
297 | / | |
298 | DIVSUB, 0 | |
299 | DCA QUO /INIT QUOTIENT FOR DIVIDE | |
300 | TAD REC /RECORD # MASSAGED IN AC | |
301 | DIVLP, SNL /LINK USAGE REVERSED FROM RICHIE'S CODE | |
302 | ISZ QUO /ISZ EVERY OTHER TIME, ==DIVIDE BY 26 | |
303 | TAD SM15 /THE -13 DECIMAL | |
304 | SMA /SKIP ON DONE | |
305 | JMP DIVLP /MORE | |
306 | RAL /LINK USAGE REVERSED; INTERLEAVE!! | |
307 | TAD S33 /ADD 233 (200 IRREL) MAKING SECTOR | |
308 | DCA MQ | |
309 | JMP I DIVSUB /LEAVING LINK AND AC 0 | |
310 | / | |
311 | / LDCMD | |
312 | / | |
313 | FLPWC=. /COUNTER IN ENTRY POINT FOR SILO LOOP ONLY | |
314 | LDCMD, 0 | |
315 | SDN /WAIT | |
316 | JMP .-1 | |
317 | LCD /COMMAND FROM AC, WHICH IS CLEARED | |
318 | SER /SKIP IF ERROR (I/O ONLY) | |
319 | JMP I LDCMD /OK, RETURN | |
320 | CLL CML CLA RAR /CONVENTIONAL ERROR RETURN 4000 IN AC | |
321 | JMP SRET /SET CDF AND EXIT | |
322 | / | |
323 | / USE DATA BREAK LOCATIONS FOR TERMPORARIES | |
324 | / | |
325 | MQ=7750 | |
326 | BC=7751 | |
327 | FN=7752 | |
328 | QUO=7753 | |
329 | REC=7754 | |
330 | BUF=7755 | |
331 | ||
332 | RELOC | |
333 | ||
334 | \f |