software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape3 / RX01SY.PA
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