annotate 3rdparty/drivers/burke/hdcmd.src @ 392:df43967d6a46

Minor source changes, added boot_burke
author boisy
date Sun, 25 Aug 2002 19:36:23 +0000
parents c10820aa211b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
91
boisy
parents:
diff changeset
1 *******************************************
boisy
parents:
diff changeset
2 *** ***
boisy
parents:
diff changeset
3 *** HDCMD.SRC ***
boisy
parents:
diff changeset
4 *** ***
boisy
parents:
diff changeset
5 *** COPYRIGHT BURKE & BURKE 1987 ***
boisy
parents:
diff changeset
6 *** ALL RIGHTS RESERVED ***
boisy
parents:
diff changeset
7 *** ***
boisy
parents:
diff changeset
8 *** COPYRIGHT BURKE & BURKE 1992 ***
boisy
parents:
diff changeset
9 *** ALL RIGHTS RESERVED ***
boisy
parents:
diff changeset
10 *** ***
boisy
parents:
diff changeset
11 *******************************************
boisy
parents:
diff changeset
12
boisy
parents:
diff changeset
13 *
boisy
parents:
diff changeset
14 * This is the routine that executes controller commands, and
boisy
parents:
diff changeset
15 * its support routines.
boisy
parents:
diff changeset
16 *
boisy
parents:
diff changeset
17 * Modification History
boisy
parents:
diff changeset
18 * --------------------
boisy
parents:
diff changeset
19 *
boisy
parents:
diff changeset
20 * Date Who Description
boisy
parents:
diff changeset
21 * -------- --- ------------------------------------
boisy
parents:
diff changeset
22 * 12/20/87 CJB Modified GetDat and PutDat to call
boisy
parents:
diff changeset
23 * SNOOZE routine if not ready for data.
boisy
parents:
diff changeset
24 * This causes the driver to sleep
boisy
parents:
diff changeset
25 * during disk seeks.
boisy
parents:
diff changeset
26 * Modified s25flg stuff for generic
boisy
parents:
diff changeset
27 * 32x4x?? drives.
boisy
parents:
diff changeset
28 * 02/07/88 CJB Added CMEXIN to process special drive
boisy
parents:
diff changeset
29 * parameters during formatting
boisy
parents:
diff changeset
30 *
boisy
parents:
diff changeset
31 * 04/17/88 cjb Added WaitIdl, which waits for controller
boisy
parents:
diff changeset
32 * ready to receive a command.
boisy
parents:
diff changeset
33 * Added call to Snooze in WaitIdl.
boisy
parents:
diff changeset
34 * 04/21/88 cjb Added code to OR RetryEn into step rate
boisy
parents:
diff changeset
35 * byte. This allows retries to be disabled
boisy
parents:
diff changeset
36 * by RetryEn = $80.
boisy
parents:
diff changeset
37 * 05/18/88 cjb Checked all paths for proper handling of
boisy
parents:
diff changeset
38 * premature command termination
boisy
parents:
diff changeset
39 * 06/12/88 cjb Added WaitId2 to assure sleep for at least
boisy
parents:
diff changeset
40 * one tick.
boisy
parents:
diff changeset
41 * Fixed DrvCmd to check for WX$XIN opcode
boisy
parents:
diff changeset
42 * if formatting enabled.
boisy
parents:
diff changeset
43 * 07/01/88 cjb Fixed bug in CMESTS -- changed "<" to ">"
boisy
parents:
diff changeset
44 * 10/10/88 cjb Modified to save error track if format enabled
boisy
parents:
diff changeset
45 * 02/01/89 cjb Fixed bug in error routine -- now dumps
boisy
parents:
diff changeset
46 * cache on any uncorrectable error
boisy
parents:
diff changeset
47 * Fixed bug in error routine to save
boisy
parents:
diff changeset
48 * error track # correctly
boisy
parents:
diff changeset
49 * 05/05/90 cjb Added kludge for ST11R in WAIRDY
boisy
parents:
diff changeset
50 * Added support for drives in multiple slots
boisy
parents:
diff changeset
51 * 04/15/92 cjb Fixed bug in location of DBLRDD - caused
boisy
parents:
diff changeset
52 * driver to hang up on an error message.
boisy
parents:
diff changeset
53 * Lenghtened a bit for speed, and to allow
boisy
parents:
diff changeset
54 * easy 6309E overlays.
boisy
parents:
diff changeset
55 *
boisy
parents:
diff changeset
56
boisy
parents:
diff changeset
57 page
boisy
parents:
diff changeset
58 *
boisy
parents:
diff changeset
59 * Byte saver.
boisy
parents:
diff changeset
60 *
boisy
parents:
diff changeset
61 * Call here to send command in Reg-A to drive in Reg-B,
boisy
parents:
diff changeset
62 * with 0's as the rest of the command.
boisy
parents:
diff changeset
63 *
boisy
parents:
diff changeset
64 * Note that this command sets the step rate to 3 ms!
boisy
parents:
diff changeset
65 *
boisy
parents:
diff changeset
66 DrvCmd pshs y,x,a ;Save registers same as CmExec
boisy
parents:
diff changeset
67 sts AbtStk,U ;Save stack pointer for error recovery
boisy
parents:
diff changeset
68
boisy
parents:
diff changeset
69 * Enter here to send WX$STS -- stack etc. already set up
boisy
parents:
diff changeset
70
boisy
parents:
diff changeset
71 DrvCm2 bsr WAIRDY ;Wait for ready for command -- preserves B
boisy
parents:
diff changeset
72 lda ,S ; recover reg-A
boisy
parents:
diff changeset
73
boisy
parents:
diff changeset
74 ifne fmtflg
boisy
parents:
diff changeset
75 bsr ChkCmd ; translate cmd. if necessary
boisy
parents:
diff changeset
76 endc
boisy
parents:
diff changeset
77
boisy
parents:
diff changeset
78 ifne (Drives-1) ;If multiple drives,
boisy
parents:
diff changeset
79 andb #$01 ; 2 drives per controller, different slots
boisy
parents:
diff changeset
80 aslb
boisy
parents:
diff changeset
81 aslb
boisy
parents:
diff changeset
82 aslb ;convert drive # to controller's format
boisy
parents:
diff changeset
83 aslb
boisy
parents:
diff changeset
84 aslb
boisy
parents:
diff changeset
85 else
boisy
parents:
diff changeset
86 clrb ;drive # is always 0
boisy
parents:
diff changeset
87 endc
boisy
parents:
diff changeset
88
boisy
parents:
diff changeset
89 bsr PutCm2 ;Send command & drive #
boisy
parents:
diff changeset
90
boisy
parents:
diff changeset
91 * Send the rest of the command as 0's (including step rate . . . 3ms)
boisy
parents:
diff changeset
92 * Note that RetryEn is ignored here.
boisy
parents:
diff changeset
93
boisy
parents:
diff changeset
94 clra
boisy
parents:
diff changeset
95 clrb
boisy
parents:
diff changeset
96 bsr PutCm2
boisy
parents:
diff changeset
97 bsr PutCm2 ;Send 4 zeros for rest of command
boisy
parents:
diff changeset
98
boisy
parents:
diff changeset
99 * Pass control to dispatch routine, and wait for end when done
boisy
parents:
diff changeset
100
boisy
parents:
diff changeset
101 bra CmDisp
boisy
parents:
diff changeset
102
boisy
parents:
diff changeset
103 page
boisy
parents:
diff changeset
104 *
boisy
parents:
diff changeset
105 * Put Reg-D to controller as command bytes
boisy
parents:
diff changeset
106 *
boisy
parents:
diff changeset
107 * Assumes AbtStk is valid.
boisy
parents:
diff changeset
108 *
boisy
parents:
diff changeset
109 ifne icdflg ;If ignoring C/D status bit
boisy
parents:
diff changeset
110
boisy
parents:
diff changeset
111 PutCm2 lbra PutDt2
boisy
parents:
diff changeset
112
boisy
parents:
diff changeset
113 else
boisy
parents:
diff changeset
114
boisy
parents:
diff changeset
115 PutCm2 bsr PutCmd
boisy
parents:
diff changeset
116 tfr B,A ;Fall through to PutCm2
boisy
parents:
diff changeset
117
boisy
parents:
diff changeset
118 endc
boisy
parents:
diff changeset
119
boisy
parents:
diff changeset
120 *
boisy
parents:
diff changeset
121 * Wait for controller to indicate it is ready to receive
boisy
parents:
diff changeset
122 * a command byte, then send it from Reg-A.
boisy
parents:
diff changeset
123 *
boisy
parents:
diff changeset
124 * Assumes AbtStk,U has been set to the error recovery
boisy
parents:
diff changeset
125 * stack pointer.
boisy
parents:
diff changeset
126 * If the command aborts, the stack is cleaned and control
boisy
parents:
diff changeset
127 * passed to CmdDun.
boisy
parents:
diff changeset
128 *
boisy
parents:
diff changeset
129 ifne icdflg ;If ignoring C/D status bit
boisy
parents:
diff changeset
130
boisy
parents:
diff changeset
131 PutCmd lbra PutDat
boisy
parents:
diff changeset
132
boisy
parents:
diff changeset
133 else
boisy
parents:
diff changeset
134
boisy
parents:
diff changeset
135 PutCmd pshs A
boisy
parents:
diff changeset
136
boisy
parents:
diff changeset
137 PCM0 bsr ChkAbt ;Get status, check for abort
boisy
parents:
diff changeset
138 cmpa #%00001101 ;Check for command request
boisy
parents:
diff changeset
139 bne PCM0
boisy
parents:
diff changeset
140
boisy
parents:
diff changeset
141 * Ready. Put the data
boisy
parents:
diff changeset
142
boisy
parents:
diff changeset
143 puls A
boisy
parents:
diff changeset
144 sta >HDDATA
boisy
parents:
diff changeset
145 rts
boisy
parents:
diff changeset
146
boisy
parents:
diff changeset
147 endc
boisy
parents:
diff changeset
148
boisy
parents:
diff changeset
149 *
boisy
parents:
diff changeset
150 * Get status of hard disk controller, and abort command in
boisy
parents:
diff changeset
151 * progress if controller says so.
boisy
parents:
diff changeset
152 *
boisy
parents:
diff changeset
153 * Assumes AbtStk,U has been set to the error recovery
boisy
parents:
diff changeset
154 * stack pointer.
boisy
parents:
diff changeset
155 * If the command aborts, the stack is cleaned and control
boisy
parents:
diff changeset
156 * passed to CmdDun.
boisy
parents:
diff changeset
157 *
boisy
parents:
diff changeset
158 ChkAbt lda >HDSTAT
boisy
parents:
diff changeset
159 cmpa >HDSTAT ;Data must be stable
boisy
parents:
diff changeset
160 bne ChkAbt
boisy
parents:
diff changeset
161
boisy
parents:
diff changeset
162 anda #%00001111
boisy
parents:
diff changeset
163 cmpa #%00001111 ;Check for abort
boisy
parents:
diff changeset
164 bne CKA9
boisy
parents:
diff changeset
165
boisy
parents:
diff changeset
166 * Well, the command is complete. This normally means it
boisy
parents:
diff changeset
167 * aborted. Pass control to CmdDun
boisy
parents:
diff changeset
168
boisy
parents:
diff changeset
169 lds AbtStk,U ;Clean stack
boisy
parents:
diff changeset
170 bra CmdDun
boisy
parents:
diff changeset
171
boisy
parents:
diff changeset
172 * Not done yet. Return current status to caller
boisy
parents:
diff changeset
173
boisy
parents:
diff changeset
174 CKA9 rts
boisy
parents:
diff changeset
175
boisy
parents:
diff changeset
176 ifne fmtflg ;If formatting allowed,
boisy
parents:
diff changeset
177 *
boisy
parents:
diff changeset
178 * Convert command op-code before transmission to controller
boisy
parents:
diff changeset
179 * if necessary.
boisy
parents:
diff changeset
180 *
boisy
parents:
diff changeset
181 * The special initialization code WX$XIN is not a real controller
boisy
parents:
diff changeset
182 * op-code.
boisy
parents:
diff changeset
183 *
boisy
parents:
diff changeset
184 ChkCmd cmpa #WX$XIN ;Check for bogus INITIALIZE PARAMETERS
boisy
parents:
diff changeset
185 bne CCM9
boisy
parents:
diff changeset
186 lda #WX$INI ; convert to real INITIALIZE PARAMETERS
boisy
parents:
diff changeset
187 CCM9 rts
boisy
parents:
diff changeset
188 endc
boisy
parents:
diff changeset
189
boisy
parents:
diff changeset
190 *
boisy
parents:
diff changeset
191 * Wait for controller ready to receive a command, then
boisy
parents:
diff changeset
192 * get its attention. Blows away Reg-A.
boisy
parents:
diff changeset
193 *
boisy
parents:
diff changeset
194 * Does not time out.
boisy
parents:
diff changeset
195 *
boisy
parents:
diff changeset
196 WAIRDY bsr WaitIdl ;Wait for controller idle
boisy
parents:
diff changeset
197 clr >HDATTN ;Get attention of controller
boisy
parents:
diff changeset
198 rts
boisy
parents:
diff changeset
199
boisy
parents:
diff changeset
200 * Wait for controller ready to receive a command
boisy
parents:
diff changeset
201
boisy
parents:
diff changeset
202 WaitIdl lda >HDSTAT
boisy
parents:
diff changeset
203 * anda #%00001111
boisy
parents:
diff changeset
204 anda #%00001001 ;Special mask works for ST11R, too
boisy
parents:
diff changeset
205 cmpa #%00000000 ; (all bits must be clear if ready)
boisy
parents:
diff changeset
206 beq WaitId9
boisy
parents:
diff changeset
207
boisy
parents:
diff changeset
208 * Enter here to sleep for at least one tick.
boisy
parents:
diff changeset
209 * Waste time while waiting for HD.
boisy
parents:
diff changeset
210
boisy
parents:
diff changeset
211 WaitId2 lbsr Snooze ;Give up slot, sleep.
boisy
parents:
diff changeset
212 bra WaitIdl
boisy
parents:
diff changeset
213
boisy
parents:
diff changeset
214 WaitId9 rts
boisy
parents:
diff changeset
215
boisy
parents:
diff changeset
216 page
boisy
parents:
diff changeset
217 *
boisy
parents:
diff changeset
218 * Command execution module for CoCo XT.
boisy
parents:
diff changeset
219 *
boisy
parents:
diff changeset
220 * Enter with:
boisy
parents:
diff changeset
221 *
boisy
parents:
diff changeset
222 * Command op-code in Reg-A
boisy
parents:
diff changeset
223 * Buffer pointer in Reg-X (points to buffer for data part of cmd)
boisy
parents:
diff changeset
224 * Command image set up at IMAGE,U
boisy
parents:
diff changeset
225 * Reg-Y points to real or bogus path descriptor (for drive # and
boisy
parents:
diff changeset
226 * step rate).
boisy
parents:
diff changeset
227 * Slot 3 is assumed to be selected, with interrupts disabled.
boisy
parents:
diff changeset
228 *
boisy
parents:
diff changeset
229 * Exits w/ carry clear if success, otherwise carry set and
boisy
parents:
diff changeset
230 * error code in Reg-B.
boisy
parents:
diff changeset
231 *
boisy
parents:
diff changeset
232 CMEXEC pshs y,x,a ;Save caller's registers
boisy
parents:
diff changeset
233 sts AbtStk,U ;Save stack pointer for error recovery
boisy
parents:
diff changeset
234
boisy
parents:
diff changeset
235 * Wait for drive ready to accept a command
boisy
parents:
diff changeset
236
boisy
parents:
diff changeset
237 bsr WaiRdy
boisy
parents:
diff changeset
238
boisy
parents:
diff changeset
239 * Point to the command block
boisy
parents:
diff changeset
240
boisy
parents:
diff changeset
241 leax IMAGE,U
boisy
parents:
diff changeset
242
boisy
parents:
diff changeset
243 * Issue the command . . . op-code 1st
boisy
parents:
diff changeset
244 * PutCmd and PutCm2 will automatically abort the command
boisy
parents:
diff changeset
245 * if the controller indicates that this is necessary.
boisy
parents:
diff changeset
246
boisy
parents:
diff changeset
247 lda 0,S ;Recover command op-code
boisy
parents:
diff changeset
248
boisy
parents:
diff changeset
249 ifne fmtflg
boisy
parents:
diff changeset
250 bsr ChkCmd ;Translate command op-code if needed
boisy
parents:
diff changeset
251 endc
boisy
parents:
diff changeset
252
boisy
parents:
diff changeset
253 CMX1 bsr PutCmd
boisy
parents:
diff changeset
254
boisy
parents:
diff changeset
255 ldd ,X++ ; (send head & sector)
boisy
parents:
diff changeset
256 bsr PutCm2
boisy
parents:
diff changeset
257
boisy
parents:
diff changeset
258 ldd ,X++ ; (send cylinder & block count)
boisy
parents:
diff changeset
259 bsr PutCm2
boisy
parents:
diff changeset
260
boisy
parents:
diff changeset
261 lda PD.STP,Y ; (send step rate)
boisy
parents:
diff changeset
262 ora RetryEn,U ; (and send retry flag)
boisy
parents:
diff changeset
263 bsr PutCmd
boisy
parents:
diff changeset
264
boisy
parents:
diff changeset
265 * Now dispatch the command based on it's op-code. If a command
boisy
parents:
diff changeset
266 * isn't explicitly checked for in this loop, it is assumed that
boisy
parents:
diff changeset
267 * the command has no data arguments and is now executing.
boisy
parents:
diff changeset
268
boisy
parents:
diff changeset
269 CmDisp equ *
boisy
parents:
diff changeset
270
boisy
parents:
diff changeset
271 * Command in progress. Dispatch to service routine.
boisy
parents:
diff changeset
272 * Note that the service routine must check for premature
boisy
parents:
diff changeset
273 * command termination via CHKABT.
boisy
parents:
diff changeset
274
boisy
parents:
diff changeset
275 ldx 1,S ;Recover possible data pointer
boisy
parents:
diff changeset
276 lda 0,S ;Recover op-code
boisy
parents:
diff changeset
277
boisy
parents:
diff changeset
278 cmpa #WX$RDD ;READ SECTOR
boisy
parents:
diff changeset
279 beq CMERDD
boisy
parents:
diff changeset
280
boisy
parents:
diff changeset
281 cmpa #WX$WRT ;WRITE SECTOR
boisy
parents:
diff changeset
282 beq CMEWRT
boisy
parents:
diff changeset
283
boisy
parents:
diff changeset
284 cmpa #WX$INI ;SET DRIVE PARAMETERS
boisy
parents:
diff changeset
285 lbeq CMEINI
boisy
parents:
diff changeset
286
boisy
parents:
diff changeset
287 ifne fmtflg
boisy
parents:
diff changeset
288 cmpa #WX$WBF ;WRITE SECTOR BUFFER (for format)
boisy
parents:
diff changeset
289 lbeq CMEWBF
boisy
parents:
diff changeset
290
boisy
parents:
diff changeset
291 cmpa #WX$XIN ;Bogus SET DRIVE PARAMETERS
boisy
parents:
diff changeset
292 lbeq CMEXIN
boisy
parents:
diff changeset
293 endc
boisy
parents:
diff changeset
294
boisy
parents:
diff changeset
295 cmpa #WX$STS ;DETAILED STATUS REQUEST
boisy
parents:
diff changeset
296 lbeq CMESTS
boisy
parents:
diff changeset
297
boisy
parents:
diff changeset
298 * Wait for end of command execution. Then get completion status
boisy
parents:
diff changeset
299 * byte and decode any errors encountered.
boisy
parents:
diff changeset
300
boisy
parents:
diff changeset
301 WaiEnd bsr ewait ;Wait for command done
boisy
parents:
diff changeset
302
boisy
parents:
diff changeset
303 * Get completion status byte
boisy
parents:
diff changeset
304 * Stack pointer and ABTSTK,U match
boisy
parents:
diff changeset
305
boisy
parents:
diff changeset
306 CmdDun clrb ;Clear carry, assume no error
boisy
parents:
diff changeset
307
boisy
parents:
diff changeset
308 lda >HDDATA
boisy
parents:
diff changeset
309 bita #%00000010
boisy
parents:
diff changeset
310 beq NoErr
boisy
parents:
diff changeset
311
boisy
parents:
diff changeset
312 * Error bit is set -- note this could still be a "null" error
boisy
parents:
diff changeset
313 * or a correctable error, so we have to get the status packet.
boisy
parents:
diff changeset
314
boisy
parents:
diff changeset
315 lda 0,S ;Check op-code
boisy
parents:
diff changeset
316 cmpa #WX$STS ;Was it an error status request?
boisy
parents:
diff changeset
317 bne GetErr
boisy
parents:
diff changeset
318
boisy
parents:
diff changeset
319 * Unknown error, or error while trying to determine error.
boisy
parents:
diff changeset
320
boisy
parents:
diff changeset
321 NotRdy comb
boisy
parents:
diff changeset
322 ldb #E$Read ;Report it as a "read" error
boisy
parents:
diff changeset
323
boisy
parents:
diff changeset
324 * Generic exit
boisy
parents:
diff changeset
325
boisy
parents:
diff changeset
326 NoErr equ *
boisy
parents:
diff changeset
327 CMEXIT puls a,x,y,pc
boisy
parents:
diff changeset
328
boisy
parents:
diff changeset
329 * Issue command to read error from controller. This command
boisy
parents:
diff changeset
330 * will return the error code in Reg-B w/ carry set.
boisy
parents:
diff changeset
331
boisy
parents:
diff changeset
332 GetErr lda #WX$STS ;Recurse to get detailed status (implicit bfr)
boisy
parents:
diff changeset
333
boisy
parents:
diff changeset
334 ifne Drives-1 ;If more than 1 drive,
boisy
parents:
diff changeset
335 ldb PD.DRV,Y
boisy
parents:
diff changeset
336 endc
boisy
parents:
diff changeset
337
boisy
parents:
diff changeset
338 lds AbtStk,U ;Recover stack pointer
boisy
parents:
diff changeset
339 sta 0,S ;Put command on stack
boisy
parents:
diff changeset
340 lbra DrvCm2 ;Go try again.
boisy
parents:
diff changeset
341
boisy
parents:
diff changeset
342 * Wait for command to terminate
boisy
parents:
diff changeset
343
boisy
parents:
diff changeset
344 ewait lda >HDSTAT
boisy
parents:
diff changeset
345 anda #%00000111 ;NOTE: IGNORE BUSY BIT
boisy
parents:
diff changeset
346 cmpa #%00000111 ; (all bits set for command completion byte)
boisy
parents:
diff changeset
347 beq ewx
boisy
parents:
diff changeset
348
boisy
parents:
diff changeset
349 * Not done. Sleep for the rest of this tick, then try again.
boisy
parents:
diff changeset
350
boisy
parents:
diff changeset
351 lbsr Snooze ;Give up slot, sleep, get back slot
boisy
parents:
diff changeset
352 bra ewait
boisy
parents:
diff changeset
353
boisy
parents:
diff changeset
354 * Exit
boisy
parents:
diff changeset
355
boisy
parents:
diff changeset
356 ewx rts
boisy
parents:
diff changeset
357
boisy
parents:
diff changeset
358 page
boisy
parents:
diff changeset
359 *
boisy
parents:
diff changeset
360 * Handle tail end of sector read.
boisy
parents:
diff changeset
361 * Get the data to the caller's buffer.
boisy
parents:
diff changeset
362 *
boisy
parents:
diff changeset
363 CMERDD lda secnum,u
boisy
parents:
diff changeset
364 bita #1
boisy
parents:
diff changeset
365 bne CMRODD
boisy
parents:
diff changeset
366
boisy
parents:
diff changeset
367 * Read even logical sector on track -- 1st half of physical sector
boisy
parents:
diff changeset
368 * Save 2nd half if necessary.
boisy
parents:
diff changeset
369
boisy
parents:
diff changeset
370 bsr keep256
boisy
parents:
diff changeset
371
boisy
parents:
diff changeset
372 ifne cchflg ;If read cache supported,
boisy
parents:
diff changeset
373
boisy
parents:
diff changeset
374 tst BFRFLG,U
boisy
parents:
diff changeset
375 beq CMRE1
boisy
parents:
diff changeset
376
boisy
parents:
diff changeset
377 * Copy 2nd half of sector to verify buffer (possible cache)
boisy
parents:
diff changeset
378 leax vrfbuf,U
boisy
parents:
diff changeset
379 bsr keep256
boisy
parents:
diff changeset
380 bra WaiEnd
boisy
parents:
diff changeset
381
boisy
parents:
diff changeset
382 endc
boisy
parents:
diff changeset
383
boisy
parents:
diff changeset
384 * Discard 2nd half of sector
boisy
parents:
diff changeset
385 CMRE1 bsr dump256
boisy
parents:
diff changeset
386 bra WAIEND
boisy
parents:
diff changeset
387
boisy
parents:
diff changeset
388 * Read odd logical sector on track -- 2nd half of physical sector
boisy
parents:
diff changeset
389 * Throw away the 1st half
boisy
parents:
diff changeset
390 CMRODD bsr dump256
boisy
parents:
diff changeset
391 bsr keep256
boisy
parents:
diff changeset
392 bra WAIEND
boisy
parents:
diff changeset
393
boisy
parents:
diff changeset
394 page
boisy
parents:
diff changeset
395 *
boisy
parents:
diff changeset
396 * Handle tail end of sector write.
boisy
parents:
diff changeset
397 * Get the data from the caller's buffer.
boisy
parents:
diff changeset
398 *
boisy
parents:
diff changeset
399 CMEWRT lda secnum,u
boisy
parents:
diff changeset
400 bita #1
boisy
parents:
diff changeset
401 bne CMWODD
boisy
parents:
diff changeset
402
boisy
parents:
diff changeset
403 * Write even lsn on track -- uses 1st half, get 2nd half from verify bfr
boisy
parents:
diff changeset
404 bsr writ256
boisy
parents:
diff changeset
405 bsr copy256
boisy
parents:
diff changeset
406 bra WAIEND
boisy
parents:
diff changeset
407
boisy
parents:
diff changeset
408 * Write odd lsn on track -- uses 2nd half, get 1st half from verify bfr
boisy
parents:
diff changeset
409 CMWODD bsr copy256
boisy
parents:
diff changeset
410 bsr writ256
boisy
parents:
diff changeset
411 bra WAIEND
boisy
parents:
diff changeset
412
boisy
parents:
diff changeset
413 ifne fmtflg ;If hard formatting enabled,
boisy
parents:
diff changeset
414
boisy
parents:
diff changeset
415 page
boisy
parents:
diff changeset
416 *
boisy
parents:
diff changeset
417 * Process command to fill sector buffer with (A).
boisy
parents:
diff changeset
418 *
boisy
parents:
diff changeset
419 * This is only used at the beginning of a FORMAT command.
boisy
parents:
diff changeset
420 *
boisy
parents:
diff changeset
421 CMEWBF ldd #$E600 ; ($00 -> 256 iterations)
boisy
parents:
diff changeset
422 bsr CMF0
boisy
parents:
diff changeset
423 bsr CMF0 ; Reg-B is still 0 from previous iteration
boisy
parents:
diff changeset
424 lbra WAIEND
boisy
parents:
diff changeset
425
boisy
parents:
diff changeset
426 CMF0 bsr PutDat ;Fill 256 bytes of sector buffer with (A)
boisy
parents:
diff changeset
427 decb
boisy
parents:
diff changeset
428 bne CMF0
boisy
parents:
diff changeset
429
boisy
parents:
diff changeset
430 rts
boisy
parents:
diff changeset
431
boisy
parents:
diff changeset
432 endc
boisy
parents:
diff changeset
433
boisy
parents:
diff changeset
434 page
boisy
parents:
diff changeset
435 *
boisy
parents:
diff changeset
436 * Copy 256 bytes from sector buffer to (X)
boisy
parents:
diff changeset
437 *
boisy
parents:
diff changeset
438
boisy
parents:
diff changeset
439 ifne fstflg ;If fast transfers,
boisy
parents:
diff changeset
440
boisy
parents:
diff changeset
441 Keep256 bsr GetDat ;Full handshake on 1st byte
boisy
parents:
diff changeset
442 sta ,X+
boisy
parents:
diff changeset
443 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
444 clr >$FFD9
boisy
parents:
diff changeset
445 endc
boisy
parents:
diff changeset
446 bsr GetDat ;Get 2nd (quick move goes in pairs)
boisy
parents:
diff changeset
447 sta ,X+
boisy
parents:
diff changeset
448 ldb #$7F ;pair count
boisy
parents:
diff changeset
449 pshs B
boisy
parents:
diff changeset
450
boisy
parents:
diff changeset
451 RDD1 lda >HDDATA ;Read the rest of the block w/o handshake
boisy
parents:
diff changeset
452 ldb >HDDATA
boisy
parents:
diff changeset
453 std ,X++
boisy
parents:
diff changeset
454 dec ,S
boisy
parents:
diff changeset
455 bne RDD1
boisy
parents:
diff changeset
456
boisy
parents:
diff changeset
457 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
458 clr >$FFD8
boisy
parents:
diff changeset
459 endc
boisy
parents:
diff changeset
460
boisy
parents:
diff changeset
461 puls A,PC ;Flush counter
boisy
parents:
diff changeset
462
boisy
parents:
diff changeset
463 else ;If slow transfers,
boisy
parents:
diff changeset
464
boisy
parents:
diff changeset
465 Keep256 clrb ;Copy 256 bytes
boisy
parents:
diff changeset
466 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
467 clr >$FFD9
boisy
parents:
diff changeset
468 endc
boisy
parents:
diff changeset
469
boisy
parents:
diff changeset
470 RDD1 bsr GetDat ;Full handshake on every byte
boisy
parents:
diff changeset
471 sta ,X+
boisy
parents:
diff changeset
472 decb
boisy
parents:
diff changeset
473 bne RDD1
boisy
parents:
diff changeset
474
boisy
parents:
diff changeset
475 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
476 clr >$FFD8
boisy
parents:
diff changeset
477 endc
boisy
parents:
diff changeset
478
boisy
parents:
diff changeset
479 rts
boisy
parents:
diff changeset
480
boisy
parents:
diff changeset
481 endc
boisy
parents:
diff changeset
482
boisy
parents:
diff changeset
483 *
boisy
parents:
diff changeset
484 * Copy 256 bytes from sector buffer to bit bucket
boisy
parents:
diff changeset
485 *
boisy
parents:
diff changeset
486
boisy
parents:
diff changeset
487 ifne fstflg ;If fast transfers,
boisy
parents:
diff changeset
488
boisy
parents:
diff changeset
489 Dump256 bsr GetDat ;Full handshake on 1st byte
boisy
parents:
diff changeset
490 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
491 clr >$FFD9
boisy
parents:
diff changeset
492 endc
boisy
parents:
diff changeset
493 bsr GetDat ;Quick dump goes in pairs
boisy
parents:
diff changeset
494 ldb #$7F
boisy
parents:
diff changeset
495
boisy
parents:
diff changeset
496 RDD2 lda >HDDATA ;Read the rest of the block w/o handshake
boisy
parents:
diff changeset
497 lda >HDDATA
boisy
parents:
diff changeset
498 decb
boisy
parents:
diff changeset
499 bne RDD2
boisy
parents:
diff changeset
500
boisy
parents:
diff changeset
501 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
502 clr >$FFD8
boisy
parents:
diff changeset
503 endc
boisy
parents:
diff changeset
504 rts
boisy
parents:
diff changeset
505
boisy
parents:
diff changeset
506 else ;If slow transfers,
boisy
parents:
diff changeset
507
boisy
parents:
diff changeset
508 Dump256 clrb ;Copy 256 bytes
boisy
parents:
diff changeset
509 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
510 clr >$FFD9
boisy
parents:
diff changeset
511 endc
boisy
parents:
diff changeset
512
boisy
parents:
diff changeset
513 RDD2 bsr GetDat ;Full handshake on every byte
boisy
parents:
diff changeset
514 decb
boisy
parents:
diff changeset
515 bne RDD2
boisy
parents:
diff changeset
516
boisy
parents:
diff changeset
517 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
518 clr >$FFD8
boisy
parents:
diff changeset
519 endc
boisy
parents:
diff changeset
520 rts
boisy
parents:
diff changeset
521
boisy
parents:
diff changeset
522 endc
boisy
parents:
diff changeset
523
boisy
parents:
diff changeset
524 *
boisy
parents:
diff changeset
525 * Wait for controller to indicate it is ready to transmit
boisy
parents:
diff changeset
526 * a data byte, then get it to Reg-A.
boisy
parents:
diff changeset
527 *
boisy
parents:
diff changeset
528 * Assumes AbtStk,U has been set to the error recovery
boisy
parents:
diff changeset
529 * stack pointer.
boisy
parents:
diff changeset
530 * If the command aborts, the stack is cleaned and control
boisy
parents:
diff changeset
531 * passed to CmdDun.
boisy
parents:
diff changeset
532 *
boisy
parents:
diff changeset
533 GetDat equ *
boisy
parents:
diff changeset
534
boisy
parents:
diff changeset
535 GDT0 lbsr ChkAbt ;Get status, check for abort
boisy
parents:
diff changeset
536 ifne icdflg ;If ignoring C/D bit,
boisy
parents:
diff changeset
537 anda #%00001011
boisy
parents:
diff changeset
538 endc
boisy
parents:
diff changeset
539 cmpa #%00001011 ;Check for data request
boisy
parents:
diff changeset
540 beq GDT1 ; (branch if request present)
boisy
parents:
diff changeset
541
boisy
parents:
diff changeset
542 * New -- sleep if controller not ready (D.DMAReq only)
boisy
parents:
diff changeset
543
boisy
parents:
diff changeset
544 lbsr Snooze
boisy
parents:
diff changeset
545 bra GDT0
boisy
parents:
diff changeset
546
boisy
parents:
diff changeset
547 * Ready. Get the data
boisy
parents:
diff changeset
548
boisy
parents:
diff changeset
549 GDT1 lda >HDDATA
boisy
parents:
diff changeset
550 rts
boisy
parents:
diff changeset
551
boisy
parents:
diff changeset
552 page
boisy
parents:
diff changeset
553 *
boisy
parents:
diff changeset
554 * Copy 256 bytes from (X) to sector buffer
boisy
parents:
diff changeset
555 *
boisy
parents:
diff changeset
556
boisy
parents:
diff changeset
557 ifne fstflg ;If fast transfers,
boisy
parents:
diff changeset
558
boisy
parents:
diff changeset
559 Writ256 ldd ,X++
boisy
parents:
diff changeset
560 bsr PutDt2 ;Full handshake on 1st byte pair
boisy
parents:
diff changeset
561 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
562 clr >$FFD9
boisy
parents:
diff changeset
563 endc
boisy
parents:
diff changeset
564 ldb #$7F
boisy
parents:
diff changeset
565 pshs B
boisy
parents:
diff changeset
566
boisy
parents:
diff changeset
567 WRT1 ldd ,X++
boisy
parents:
diff changeset
568 sta >HDDATA ;Write the rest of the block w/o handshake
boisy
parents:
diff changeset
569 stb >HDDATA
boisy
parents:
diff changeset
570 dec ,S
boisy
parents:
diff changeset
571 bne WRT1
boisy
parents:
diff changeset
572
boisy
parents:
diff changeset
573 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
574 clr >$FFD8
boisy
parents:
diff changeset
575 endc
boisy
parents:
diff changeset
576 puls A,PC ;clean up counter
boisy
parents:
diff changeset
577
boisy
parents:
diff changeset
578 else ;If slow transfers,
boisy
parents:
diff changeset
579
boisy
parents:
diff changeset
580 Writ256 clrb ;Copy 256 bytes
boisy
parents:
diff changeset
581 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
582 clr >$FFD9
boisy
parents:
diff changeset
583 endc
boisy
parents:
diff changeset
584
boisy
parents:
diff changeset
585 WRT1 lda ,X+
boisy
parents:
diff changeset
586 bsr PutDat ;Full handshake on every byte
boisy
parents:
diff changeset
587 decb
boisy
parents:
diff changeset
588 bne WRT1
boisy
parents:
diff changeset
589
boisy
parents:
diff changeset
590 ifne tboflg ;If 2 MHz for transfers,
boisy
parents:
diff changeset
591 clr >$FFD8
boisy
parents:
diff changeset
592 endc
boisy
parents:
diff changeset
593 rts
boisy
parents:
diff changeset
594
boisy
parents:
diff changeset
595 endc
boisy
parents:
diff changeset
596
boisy
parents:
diff changeset
597 *
boisy
parents:
diff changeset
598 * Copy 256 bytes from verify buffer to sector buffer
boisy
parents:
diff changeset
599 *
boisy
parents:
diff changeset
600
boisy
parents:
diff changeset
601 copy256 pshs X
boisy
parents:
diff changeset
602
boisy
parents:
diff changeset
603 leax vrfbuf,u ;Get verify buffer pointer
boisy
parents:
diff changeset
604 bsr writ256
boisy
parents:
diff changeset
605
boisy
parents:
diff changeset
606 puls X,PC
boisy
parents:
diff changeset
607
boisy
parents:
diff changeset
608 *
boisy
parents:
diff changeset
609 * Put Reg-D to controller as data bytes
boisy
parents:
diff changeset
610 *
boisy
parents:
diff changeset
611 * Assumes AbtStk is valid.
boisy
parents:
diff changeset
612 *
boisy
parents:
diff changeset
613 PutDt2 bsr PutDat
boisy
parents:
diff changeset
614 tfr B,A ;Fall through to PutCm2
boisy
parents:
diff changeset
615
boisy
parents:
diff changeset
616 *
boisy
parents:
diff changeset
617 * Wait for controller to indicate it is ready to receive
boisy
parents:
diff changeset
618 * a data byte, then send it from Reg-A.
boisy
parents:
diff changeset
619 *
boisy
parents:
diff changeset
620 * Assumes AbtStk,U has been set to the error recovery
boisy
parents:
diff changeset
621 * stack pointer.
boisy
parents:
diff changeset
622 * If the command aborts, the stack is cleaned and control
boisy
parents:
diff changeset
623 * passed to CmdDun.
boisy
parents:
diff changeset
624 *
boisy
parents:
diff changeset
625 PutDat pshs A
boisy
parents:
diff changeset
626
boisy
parents:
diff changeset
627 PDT0 lbsr ChkAbt ;Get status, check for abort
boisy
parents:
diff changeset
628 ifne icdflg ;If ignoring C/D bit,
boisy
parents:
diff changeset
629 anda #%00001011
boisy
parents:
diff changeset
630 endc
boisy
parents:
diff changeset
631 cmpa #%00001001 ;Check for data request
boisy
parents:
diff changeset
632 beq PDT1 ; (branch if request present)
boisy
parents:
diff changeset
633
boisy
parents:
diff changeset
634 * New -- sleep if controller not ready (D.DMAReq only)
boisy
parents:
diff changeset
635
boisy
parents:
diff changeset
636 lbsr Snooze
boisy
parents:
diff changeset
637 bra PDT0
boisy
parents:
diff changeset
638
boisy
parents:
diff changeset
639 * Ready. Put the data
boisy
parents:
diff changeset
640
boisy
parents:
diff changeset
641 PDT1 puls A
boisy
parents:
diff changeset
642 sta >HDDATA
boisy
parents:
diff changeset
643 rts
boisy
parents:
diff changeset
644
boisy
parents:
diff changeset
645 page
boisy
parents:
diff changeset
646 *
boisy
parents:
diff changeset
647 * Process detailed status request command.
boisy
parents:
diff changeset
648 * This routine performs the status request, then
boisy
parents:
diff changeset
649 * translates the controller's error code and returns
boisy
parents:
diff changeset
650 * it as the error status of the operation w/ C-bit set.
boisy
parents:
diff changeset
651 * "Null" and correctable errors do not cause C-bit set.
boisy
parents:
diff changeset
652 *
boisy
parents:
diff changeset
653 CMESTS equ *
boisy
parents:
diff changeset
654
boisy
parents:
diff changeset
655 * Recover error status from controller
boisy
parents:
diff changeset
656
boisy
parents:
diff changeset
657 bsr GetDat ;Read result of last disk command
boisy
parents:
diff changeset
658 pshs a ; (save)
boisy
parents:
diff changeset
659
boisy
parents:
diff changeset
660 ifne FMTFLG
boisy
parents:
diff changeset
661 bsr GetDat ; (dump head #)
boisy
parents:
diff changeset
662 bsr GetDat ;Get shifted cyl # MS byte
boisy
parents:
diff changeset
663 tfr A,B
boisy
parents:
diff changeset
664 bsr GetDat ;Get shifted cyl # LS byte
boisy
parents:
diff changeset
665 exg A,B
boisy
parents:
diff changeset
666 std ERRHCYL,U ;Save cylinder # of error for FORMAT
boisy
parents:
diff changeset
667 else
boisy
parents:
diff changeset
668 bsr DBLRDD ;Dump last 3 response bytes
boisy
parents:
diff changeset
669 bsr GetDat ; (dump last response byte)
boisy
parents:
diff changeset
670 endc
boisy
parents:
diff changeset
671
boisy
parents:
diff changeset
672 lbsr ewait ; Wait for command complete
boisy
parents:
diff changeset
673 lda >HDDATA ; and dump completion byte
boisy
parents:
diff changeset
674
boisy
parents:
diff changeset
675 puls a ; (recover error code)
boisy
parents:
diff changeset
676
boisy
parents:
diff changeset
677 * Look up error code in Reg-A -> Reg-B
boisy
parents:
diff changeset
678
boisy
parents:
diff changeset
679 anda #$3F ;Keep only error bits
boisy
parents:
diff changeset
680 beq NULERR
boisy
parents:
diff changeset
681
boisy
parents:
diff changeset
682 cmpa #WE$CER ;Correctable error
boisy
parents:
diff changeset
683 bne EL0
boisy
parents:
diff changeset
684
boisy
parents:
diff changeset
685 * Special processing for correctable errors.
boisy
parents:
diff changeset
686 * If formatting (RetryEn,U != 0), report these
boisy
parents:
diff changeset
687 * as READ ERRORS
boisy
parents:
diff changeset
688
boisy
parents:
diff changeset
689 tst RetryEn,U ;If retries disabled, error out.
boisy
parents:
diff changeset
690 beq NULERR ; (retries enabled -- ignore error)
boisy
parents:
diff changeset
691
boisy
parents:
diff changeset
692 EL0 equ *
boisy
parents:
diff changeset
693
boisy
parents:
diff changeset
694 ifne cchflg ;If read cache supported,
boisy
parents:
diff changeset
695 clr BFRFLG,U ;Dump cache on any error
boisy
parents:
diff changeset
696 endc
boisy
parents:
diff changeset
697 ifne errflg ;If good error messages enabled,
boisy
parents:
diff changeset
698
boisy
parents:
diff changeset
699 leax ERRTBL,PCR ;Point to lookup table
boisy
parents:
diff changeset
700
boisy
parents:
diff changeset
701 * Search error list. Error code is in Reg-A
boisy
parents:
diff changeset
702
boisy
parents:
diff changeset
703 EL1 tst ,X
boisy
parents:
diff changeset
704 bmi XXXERR
boisy
parents:
diff changeset
705 cmpa ,X++
boisy
parents:
diff changeset
706 bne EL1
boisy
parents:
diff changeset
707
boisy
parents:
diff changeset
708 * Found error code
boisy
parents:
diff changeset
709 comb ;Set carry
boisy
parents:
diff changeset
710 ldb -1,X ;Fetch error code
boisy
parents:
diff changeset
711 bra XCMXIT
boisy
parents:
diff changeset
712
boisy
parents:
diff changeset
713 endc
boisy
parents:
diff changeset
714
boisy
parents:
diff changeset
715 * Didn't find error code. Note that errors that translate
boisy
parents:
diff changeset
716 * to E$Read are not in the table -- we just let them default
boisy
parents:
diff changeset
717 * to here.
boisy
parents:
diff changeset
718
boisy
parents:
diff changeset
719 XXXERR comb
boisy
parents:
diff changeset
720 ldb #E$Read
boisy
parents:
diff changeset
721 bra XCMXIT ;Return status to caller
boisy
parents:
diff changeset
722
boisy
parents:
diff changeset
723 NULERR clrb ;Force carry clear
boisy
parents:
diff changeset
724 XCMXIT lbra CMEXIT ;Return status to caller
boisy
parents:
diff changeset
725
boisy
parents:
diff changeset
726 * Byte saver
boisy
parents:
diff changeset
727
boisy
parents:
diff changeset
728 DBLRDD lbsr GetDat ;Read 1 byte
boisy
parents:
diff changeset
729 lbra GetDat
boisy
parents:
diff changeset
730
boisy
parents:
diff changeset
731 page
boisy
parents:
diff changeset
732 ifne fmtflg ;If formatting allowed,
boisy
parents:
diff changeset
733 *
boisy
parents:
diff changeset
734 * Process special drive parameters command.
boisy
parents:
diff changeset
735 *
boisy
parents:
diff changeset
736 * This command sends the legal track count rather
boisy
parents:
diff changeset
737 * than the park track count.
boisy
parents:
diff changeset
738 *
boisy
parents:
diff changeset
739 CMEXIN ldd PD.CYL,Y ;get track count
boisy
parents:
diff changeset
740 bra CMIN01
boisy
parents:
diff changeset
741 endc
boisy
parents:
diff changeset
742
boisy
parents:
diff changeset
743 *
boisy
parents:
diff changeset
744 * Process command to send drive parameters to controller.
boisy
parents:
diff changeset
745 * Assumes Reg-Y points to real or bogus *PATH* descriptor.
boisy
parents:
diff changeset
746 *
boisy
parents:
diff changeset
747 * This routine fetches the drive parameters from the descriptor,
boisy
parents:
diff changeset
748 * and sends them to the controller.
boisy
parents:
diff changeset
749 *
boisy
parents:
diff changeset
750 CMEINI equ *
boisy
parents:
diff changeset
751
boisy
parents:
diff changeset
752 * Send # of cylinders. We send the park track, since it
boisy
parents:
diff changeset
753 * is the largest track # that will be used.
boisy
parents:
diff changeset
754
boisy
parents:
diff changeset
755 ifne (Drives-1) ;if 2 drives,
boisy
parents:
diff changeset
756 ifne trsflg ; if optimized for 32 SPT, 4 heads,
boisy
parents:
diff changeset
757 bsr GtPkLSN ;Get park LSN to B:X
boisy
parents:
diff changeset
758 pshs X,B
boisy
parents:
diff changeset
759 ldd ,S
boisy
parents:
diff changeset
760 addd ,S
boisy
parents:
diff changeset
761 leas 3,S ;Convert to track by dividing by 128
boisy
parents:
diff changeset
762 else
boisy
parents:
diff changeset
763 bsr GtPkLSN ;Get park LSN to B:X
boisy
parents:
diff changeset
764 lbsr LSNDIV
boisy
parents:
diff changeset
765 tfr X,D ;Calculate track and get to D
boisy
parents:
diff changeset
766 endc
boisy
parents:
diff changeset
767 else ;if 1 drive,
boisy
parents:
diff changeset
768 ifne trsflg ; if optimized for 32 SPT, 4 heads,
boisy
parents:
diff changeset
769 ldd PRKLSN,U
boisy
parents:
diff changeset
770 addd PRKLSN,U ;park track = park LSN/128
boisy
parents:
diff changeset
771 else
boisy
parents:
diff changeset
772 ldb (PRKLSN+0),U
boisy
parents:
diff changeset
773 ldx (PRKLSN+1),U ;get park LSN
boisy
parents:
diff changeset
774 lbsr LSNDIV
boisy
parents:
diff changeset
775 tfr X,D ;Calculate track and get to D
boisy
parents:
diff changeset
776 endc
boisy
parents:
diff changeset
777 endc
boisy
parents:
diff changeset
778
boisy
parents:
diff changeset
779 * Enter here w/ track count in Reg-D
boisy
parents:
diff changeset
780
boisy
parents:
diff changeset
781 CMIN01 addd #1 ; (advance track count by 1)
boisy
parents:
diff changeset
782 bsr PutDt2 ;Send last legal track to controller
boisy
parents:
diff changeset
783
boisy
parents:
diff changeset
784 * Send # of heads
boisy
parents:
diff changeset
785
boisy
parents:
diff changeset
786 lda PD.SID,Y
boisy
parents:
diff changeset
787 bsr PutDat
boisy
parents:
diff changeset
788
boisy
parents:
diff changeset
789 * Send (bogus) reduced write current cylinder
boisy
parents:
diff changeset
790
boisy
parents:
diff changeset
791 ldd PD.CYL,Y
boisy
parents:
diff changeset
792 lbsr PutDt2
boisy
parents:
diff changeset
793
boisy
parents:
diff changeset
794 * Send write pre-comp cylinder (DD had wpc/4)
boisy
parents:
diff changeset
795
boisy
parents:
diff changeset
796 ifne (Drives-1) ;if 2 drives,
boisy
parents:
diff changeset
797 pshs Y
boisy
parents:
diff changeset
798 ldb PD.DRV,Y ;Get drive #
boisy
parents:
diff changeset
799 lbsr GOBPtr ;Get option pointer for this drive
boisy
parents:
diff changeset
800 ldb (PCCYL-OBSTART),Y
boisy
parents:
diff changeset
801 puls Y
boisy
parents:
diff changeset
802 else
boisy
parents:
diff changeset
803 ldb PCCYL,U ;Get precomp cylinder / 4
boisy
parents:
diff changeset
804 endc
boisy
parents:
diff changeset
805 lda #4
boisy
parents:
diff changeset
806 mul ;Convert to real cyl # in D
boisy
parents:
diff changeset
807 lbsr PutDt2
boisy
parents:
diff changeset
808
boisy
parents:
diff changeset
809 * Send maximum error correction burst length (WD recommends 4)
boisy
parents:
diff changeset
810
boisy
parents:
diff changeset
811 lda #4
boisy
parents:
diff changeset
812 lbsr PutDat
boisy
parents:
diff changeset
813
boisy
parents:
diff changeset
814 * Wait for end of command, etc.
boisy
parents:
diff changeset
815
boisy
parents:
diff changeset
816 lbra WaiEnd
boisy
parents:
diff changeset
817
boisy
parents:
diff changeset
818 ifne (Drives-1)
boisy
parents:
diff changeset
819 page
boisy
parents:
diff changeset
820 *
boisy
parents:
diff changeset
821 * Utility to get park lsn to B:X for systems with 2 drives.
boisy
parents:
diff changeset
822 *
boisy
parents:
diff changeset
823 GtPkLSN pshs Y
boisy
parents:
diff changeset
824 ldb PD.DRV,Y ;Get drive #
boisy
parents:
diff changeset
825 lbsr GOBPtr ;Get option pointer for this drive
boisy
parents:
diff changeset
826 ldb (PRKLSN+0-OBSTART),Y
boisy
parents:
diff changeset
827 ldx (PRKLSN+1-OBSTART),Y
boisy
parents:
diff changeset
828 puls Y,PC
boisy
parents:
diff changeset
829 endc
boisy
parents:
diff changeset
830
boisy
parents:
diff changeset
831 ifne errflg ;If good errors enabled,
boisy
parents:
diff changeset
832 page
boisy
parents:
diff changeset
833 *
boisy
parents:
diff changeset
834 * Table of error code followed by OS9 error code
boisy
parents:
diff changeset
835 * This translation is somewhat arbitrary.
boisy
parents:
diff changeset
836 * Remember, E$Read errors are not in the table.
boisy
parents:
diff changeset
837 *
boisy
parents:
diff changeset
838
boisy
parents:
diff changeset
839 ERRTBL fcb WE$NSC,E$Seek,WE$WRF,E$Write,WE$NRD,E$NotRdy,WE$NT0,E$Seek
boisy
parents:
diff changeset
840 fcb WE$DSS,E$Seek,WE$SIK,E$Seek,WE$BTK,E$Read,WE$CMD,E$Unit
boisy
parents:
diff changeset
841 fcb WE$ISA,E$Sect
boisy
parents:
diff changeset
842 fcb -1
boisy
parents:
diff changeset
843
boisy
parents:
diff changeset
844 endc
boisy
parents:
diff changeset
845
boisy
parents:
diff changeset
846 *
boisy
parents:
diff changeset
847 * End of hdcmd.src
boisy
parents:
diff changeset
848 *
boisy
parents:
diff changeset
849