annotate level1/modules/llscsi.asm @ 2690:6e40b043d3e0 lwtools-port

Removed coco port, added coco1 and coco2 ports. Cleaned term* descriptors to make unified between Level 1 and Level 2
author Boisy Pitre <boisy.pitre@nuance.com>
date Thu, 19 Jul 2012 10:09:15 -0500
parents 17d43fd29ee2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2590
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
1 ********************************************************************
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
2 * llscsi - Low-level SCSI driver
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
3 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
4 * $Id$
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
5 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
6 * Drives tested with this driver:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
7 * -------------------------------
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
8 * Conner DCP30200 Hard Drive - Sends out a SDTR message immediately,
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
9 * which confused the driver. The driver now handles the receipt
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
10 * of SCSI messages from the target.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
11 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
12 * IBM DPES-31080 Hard Drive - Works, but seizes the bus if a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
13 * device ID is referenced on the bus that doesn't exist.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
14 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
15 * Sony CDU415 2X CD-ROM - Works fine.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
16 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
17 * Toshiba XM-4101BME 12X CD-ROM - Works fine.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
18 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
19 * NOTE: A full dsave from the Sony to the IBM was done on 300+ MB
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
20 * of data (RTSI RBF CD-ROM) on June 7, 2004 with no problems.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
21 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
22 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
23 * Edt/Rev YYYY/MM/DD Modified by
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
24 * Comment
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
25 * ------------------------------------------------------------------
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
26 * 2004/04/?? Boisy G. Pitre
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
27 * Created.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
28 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
29 * 2004/??/?? Boisy G. Pitre
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
30 * RELEASED WITH SUPERDRIVERS 1.0
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
31 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
32 * 2005/12/02 Boisy G. Pitre
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
33 * Now detects MESSAGE IN phase and reads in message codes (ignoring
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
34 * the data). The Conner DCP30200 Hard Drive sends out a SDTR message
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
35 * immediately, which confused the driver. The driver now handles the
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
36 * receipt of messages from the target.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
37 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
38 * 2005/12/11 Boisy G. Pitre
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
39 * Added SS.SQD and SS.DCmd support.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
40 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
41 * 2005/12/13 Boisy G. Pitre
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
42 * Moved SS.VarSect code into RBSuper for performance.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
43 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
44 * 2006/03/22 Boisy G. Pitre
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
45 * Moved SS.VarSect code into RBSuper for performance.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
46 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
47 * 2008/01/21 Boisy G. Pitre
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
48 * Fixed issue in DCmd where Y was not being saved when os9 F$ID was being called.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
49
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
50 NAM llscsi
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
51 TTL Low-level SCSI driver
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
52
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
53 IFP1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
54 USE defsfile
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
55 USE rbsuper.d
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
56 USE scsi.d
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
57 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
58
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
59 tylg SET Sbrtn+Objct
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
60 atrv SET ReEnt+rev
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
61 rev SET 0
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
62
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
63
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
64 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
65 * SCSI Delay Constants
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
66 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
67 IFGT Level-1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
68 BUSYDELAY EQU $FFFF
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
69 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
70 BUSYDELAY EQU $FFFF/2
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
71 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
72 NUMTRIES EQU 8
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
73
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
74 MOD eom,name,tylg,atrv,start,0
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
75
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
76 ORG V.LLMem
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
77 * Low-level driver static memory area
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
78 * SCSI Command Packet
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
79 * SCSI packet length is 14 bytes
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
80 V.SCSICMD RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
81 V.SCSILUN RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
82 V.SCSIPrm0 RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
83 V.SCSIPrm1 RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
84 V.SCSIPrm2 RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
85 V.SCSIPrm3 RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
86 V.SCSIPrm4 RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
87 V.SCSIPrm5 RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
88 V.SCSIPrm6 RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
89 V.SCSIPrm7 RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
90 RMB 4
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
91 SCSIPkLn EQU .-V.SCSICMD
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
92 V.Retries RMB 1 SCSI command retry counter
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
93 V.OS9Err RMB 1 (0 = return OS-9 error code, 1 = return SCSI error code)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
94 V.Turbo RMB 1 turbo flag (0 = regular read, 1 = turbo read)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
95 V.TfrBuf RMB 2 transfer buffer pointer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
96 V.RetryVct RMB 2 retry vector
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
97 V.ReadVct RMB 2 normal/turbo read vectoor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
98 V.WriteVct RMB 2 normal/turbo write vector
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
99 V.DnsByte RMB 1 copy of PD.DNS from last accessed drive
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
100 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
101 V.MPISlot RMB 1 MPI slot
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
102 V.MPISave RMB 1 contents of original MPI slot
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
103 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
104 * The Request Sense Packet and Read Capacity return data share the same space
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
105 ReqSnPkt EQU .
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
106 V.TxBuf EQU . used by DSize
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
107 V.R$Err RMB 2 SCSI error code return value
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
108 V.UTxBuf EQU .
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
109 V.R$Err2 RMB 10
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
110 V.R$AdSns RMB 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
111 ReqPkL EQU .-ReqSnPkt length of packet
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
112 RMB 3 makes V.TxBuf 16 bytes
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
113
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
114 name FCC /ll/
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
115 IFNE TC3
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
116 FCS /tc3/
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
117 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
118 IFNE KTLR
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
119 FCS /ktlr/
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
120 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
121 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
122 FCS /disto/
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
123 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
124 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
125 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
126
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
127 start bra ll_init
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
128 nop
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
129 lbra ll_read
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
130 lbra ll_write
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
131 bra ll_getstat
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
132 nop
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
133 lbra ll_setstat
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
134 * lbra ll_term
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
135
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
136 * ll_term
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
137 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
138 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
139 * Y = address of device descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
140 * U = address of device memory area
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
141 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
142 * Exit:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
143 * CC = carry set on error
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
144 * B = error code
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
145 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
146 ll_term
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
147 clrb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
148 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
149
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
150 * ll_init
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
151 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
152 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
153 * Y = address of device descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
154 * U = address of device memory area
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
155 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
156 * Exit:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
157 * CC = carry set on error
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
158 * B = error code
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
159 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
160 ll_init
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
161 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
162 * Disto 4-N-1 and HD-II: Get MPI slot select value from descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
163 * and save it in our static storage.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
164 lda IT.MPI,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
165 anda #$0F preserve *SCS bits only
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
166 sta V.MPISlot,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
167 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
168 clrb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
169 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
170
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
171
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
172 * ll_getstat
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
173 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
174 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
175 * Y = address of path descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
176 * U = address of device memory area
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
177 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
178 * Exit:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
179 * CC = carry set on error
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
180 * B = error code
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
181 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
182 ll_getstat
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
183 ldx PD.RGS,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
184 lda R$B,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
185 cmpa #SS.DSize
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
186 beq SSDSize
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
187 ldb #E$UnkSvc
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
188 coma
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
189 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
190
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
191
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
192 * SS.DSize - Return size information about a device
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
193 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
194 * Entry: B = SS.DSize
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
195 * Exit: Carry = 1; error with code in B
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
196 * Carry = 0:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
197 * IF B = 0
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
198 * A = Sector Size (1 = 256, 2 = 512, 4 = 1024, 8 = 2048)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
199 * X = Number of Sectors (bits 31-16)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
200 * Y = Number of Sectors (Bits 15-0)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
201 * IF B != 0
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
202 * A = Sector Size (1 = 256, 2 = 512, 4 = 1024, 8 = 2048)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
203 * X = Number of Logical Cylinders
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
204 * B = Number of Logical Sides
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
205 * Y = Number of Logical Sectors/Track
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
206 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
207 SSDSize
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
208 pshs u,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
209 bsr DSize
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
210 bcs ex@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
211 ldu ,s get path desc in U
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
212 ldu PD.RGS,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
213 std R$D,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
214 stx R$X,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
215 sty R$Y,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
216 clrb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
217 ex@ puls y,u,pc
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
218
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
219 * DSize - Get SCSI disk size
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
220 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
221 * Exit: Carry = 1; error with code in B
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
222 * Carry = 0:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
223 * IF B = 0
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
224 * A = Sector Size (1 = 256, 2 = 512, 4 = 1024, 8 = 2048)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
225 * X = Number of Sectors (bits 31-16)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
226 * Y = Number of Sectors (Bits 15-0)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
227 * IF B != 0
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
228 * A = Sector Size (1 = 256, 2 = 512, 4 = 1024, 8 = 2048)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
229 * X = Number of Logical Cylinders
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
230 * B = Number of Logical Sides
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
231 * Y = Number of Logical Sectors/Track
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
232 DSize lbsr SCSIPrep do SCSI prep stuff
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
233 lda #S$RCAP
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
234 sta V.SCSICMD,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
235 leax V.TxBuf,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
236 stx V.TfrBuf,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
237 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
238 lbsr MPIIn
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
239 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
240 lbsr SCSIXfer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
241 bcs ex@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
242 ldd V.TxBuf+2,u get bits 15-0 of block count
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
243 addd #$0001 add 1 to count
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
244 std V.TxBuf+2,u resave
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
245 bcc b@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
246 ldd V.TxBuf,u get bits 31-16
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
247 addd #$0001 add 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
248 std V.TxBuf,u resave
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
249 b@ lda V.TxBuf+6,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
250 clrb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
251 ldx V.TxBuf,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
252 ldy V.TxBuf+2,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
253 ex@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
254 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
255 lbra MPIOut
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
256 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
257 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
258 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
259
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
260
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
261 * ll_setstat
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
262 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
263 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
264 * Y = address of path descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
265 * U = address of device memory area
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
266 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
267 * Exit:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
268 * CC = carry set on error
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
269 * B = error code
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
270 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
271 ll_setstat
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
272 ldx PD.RGS,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
273 lda R$B,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
274 cmpa #SS.SQD
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
275 beq StopUnit
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
276 cmpa #SS.DCmd
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
277 bne n@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
278 pshs x save pointer to caller registers
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
279 bsr DCmd call DCmd
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
280 puls x get pointer to caller registers
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
281 sta R$A,x save status byte in A
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
282 n@ clrb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
283 ex rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
284
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
285 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
286 * R$B = SS.SQD
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
287 StopUnit
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
288 lbsr SCSIPrep do SCSI prep stuff
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
289 lda #S$UNIT
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
290 sta V.SCSICMD,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
291 clr V.SCSIPrm2,u we want to STOP unit
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
292 s@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
293 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
294 lbsr MPIIn
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
295 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
296 lbra SCSIXfer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
297
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
298 noperms comb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
299 ldb #E$FNA
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
300 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
301
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
302 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
303 * X = caller regs
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
304 * Y = path descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
305 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
306 * R$B = SS.DCmd
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
307 * R$X = Transfer buffer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
308 * R$Y = SCSI command packet
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
309 DCmd
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
310 * Fixed bug where Y was not being saved when doing os9 F$ID
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
311 pshs y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
312 os9 F$ID get the user ID of the calling process
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
313 cmpy #$0000 is it 0 (superuser)?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
314 puls y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
315 bne noperms no, don't allow the call
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
316 lbsr SCSIPrep
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
317 ldy R$X,x get caller's transfer buffer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
318 sty V.UTxBuf,u save off in mem for later
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
319 ldx R$Y,x get ptr to caller's SCSI command buffer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
320 IFGT Level-1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
321 ldy D.Proc get current process ptr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
322 lda P$Task,y get task # for current process
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
323 ldb D.SysTsk get system task #
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
324 ldy #SCSIPkLn max size of SCSI command
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
325 pshs u save on stack
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
326 leau V.SCSICMD,u point to SCSI command buffer in our statics
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
327 os9 F$Move copy from caller to temporary task
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
328 puls u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
329 bcs ex error copying, exit
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
330 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
331 ldb #SCSIPkLn
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
332 leay V.SCSICMD,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
333 cl@ lda ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
334 sta ,y+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
335 decb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
336 bne cl@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
337 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
338 ldy V.PORT-UOFFSET,u get hw address (because we overwrite Y earlier)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
339 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
340 lbsr MPIIn
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
341 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
342 inc V.OS9Err,u we want real SCSI errors returned
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
343 inc V.CchDirty,u and make cache dirty
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
344 leax retry@,pcr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
345 stx V.RetryVct,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
346 retry@ lbsr SCSISend
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
347 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
348 lbcs MPIOut
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
349 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
350 bcs ex
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
351 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
352 IFGT Level-1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
353 ldx D.Proc get current process ptr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
354 ldb P$Task,x get task # for current process
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
355 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
356 ldx V.UTxBuf,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
357
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
358 msgloop@ lbsr Wait4REQ wait for REQ to be asserted
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
359 bita #CMD command phase?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
360 lbne PostXfr yes, return
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
361 io@ bita #INOUT data coming in or going out?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
362 bne in@ branch if coming in...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
363 IFGT Level-1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
364 os9 F$LDABX
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
365 leax 1,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
366 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
367 lda ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
368 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
369 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
370 bra msgloop@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
371 in@ lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
372 IFGT Level-1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
373 os9 F$STABX
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
374 leax 1,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
375 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
376 sta ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
377 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
378 bra msgloop@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
379
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
380
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
381 * ll_read
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
382 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
383 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
384 * Y = address of path descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
385 * U = address of device memory area
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
386 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
387 * Static memory referenced:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
388 * V.CchPSpot = address of spot in cache where physical sector data will go
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
389 * sectsize = sector size (0=256,1=512,2=1024,3=2048)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
390 * V.SectCnt = sectors to read
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
391 * V.PhysSect = physical sector to start read from
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
392 ll_read
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
393 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
394 lbsr MPIIn
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
395 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
396 IFNE SIZEMATTERS
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
397 bsr SCSIPrep do SCSI prep stuff
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
398 bsr MakeRead make read command packet
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
399 ldx V.CchPSpot,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
400 stx V.TfrBuf,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
401 lbra SCSIXfer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
402 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
403 leax SCSIReadRetry,pcr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
404 stx V.RetryVct,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
405 lbsr SCSIPrep do SCSI prep stuff
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
406 lbsr MakeRead make read command packet
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
407 SCSIReadRetry
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
408 lbsr SCSISend
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
409 bcs mpiex
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
410 bita #CMD
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
411 lbne PostXfr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
412 ldb V.SectCnt,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
413 pshs b
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
414 * Set up appropriate read call (regular or turbo)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
415 tst V.Turbo,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
416 beq reg@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
417 leax TurboRead,pcr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
418 bra do@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
419 reg@ leax RegRead256,pcr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
420 do@ stx V.ReadVct,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
421 ldx V.CchPSpot,u get pointer to physical sector in cache for data in
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
422 again@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
423 ldb V.Log2Phys,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
424 pshs b
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
425 loop@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
426 jsr [V.ReadVct,u]
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
427 dec ,s
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
428 bne loop@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
429 puls b
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
430 dec ,s
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
431 bne again@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
432 puls a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
433 lbra PostXfr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
434 mpiex
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
435 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
436 lbra MPIOut
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
437 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
438 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
439 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
440
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
441 TurboRead
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
442 IFNE H6309
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
443
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
444 * 6309 Turbo READ
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
445 ldw #256
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
446 orcc #IntMasks we have to mask interrupts for Level 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
447 tfm y,x+ do the transfer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
448 andcc #^IntMasks we have to unmask interrupts for Level 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
449 lbsr DeauxDeaux
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
450 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
451
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
452 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
453
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
454 * 6809 Turbo READ
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
455 lda #16
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
456 pshs a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
457 l2@ lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
458 ldb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
459 std ,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
460 lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
461 ldb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
462 std $02,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
463 lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
464 ldb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
465 std $04,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
466 lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
467 ldb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
468 std $06,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
469 lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
470 ldb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
471 std $08,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
472 lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
473 ldb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
474 std $0A,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
475 lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
476 ldb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
477 std $0C,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
478 lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
479 ldb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
480 std $0E,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
481 leax 16,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
482 dec ,s decrement counter
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
483 bne l2@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
484 puls a,pc
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
485 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
486
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
487 RegRead256
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
488 clrb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
489 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
490 * "Non-Turbo" Read Data from controller
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
491 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
492 * Passed: B = bytes to read
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
493 * X = Address of buffer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
494 * Y = Controller Address
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
495 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
496 RegRead
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
497 * We wait for REQ in an infinite, faster loop here
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
498 lda SCSISTAT,y get SCSI status byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
499 bita #REQ REQ?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
500 beq RegRead
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
501 lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
502 sta ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
503 decb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
504 bne RegRead
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
505 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
506
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
507
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
508 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
509
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
510
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
511 * Make Read/Write Packet
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
512 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
513 * A = SCSI command
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
514 * V.PhysSect = 3 byte physical sector to read/write
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
515 MakeWrite lda #S$WRITEX
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
516 fcb $8C skip next two bytes
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
517 MakeRead lda #S$READEX
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
518 MakeRW sta V.SCSICMD,u put passed SCSI command
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
519 lda V.SectCnt,u 'V.SectCnt' logical blocks
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
520 * Make SCSI Read/Write 6 byte CDB here
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
521 * sta V.SCSIPrm2,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
522 * lda V.PhysSect,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
523 * sta V.SCSILUN,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
524 * ldd V.PhysSect+1,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
525 * std V.SCSIPrm0,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
526 * rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
527 * Make SCSI Read/Write Extended 10 byte CDB here
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
528 sta V.SCSIPrm6,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
529 lda V.PhysSect,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
530 sta V.SCSIPrm1,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
531 ldd V.PhysSect+1,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
532 std V.SCSIPrm2,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
533 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
534
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
535 * Prep for SCSI transfer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
536 * Preserves all regs
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
537 * Entry: Y = path descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
538 * Exit: Y = hardware address
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
539 SCSIPrep pshs x,d
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
540 leax V.SCSICMD,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
541 ldb #SCSIPkLn
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
542 l@ clr ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
543 decb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
544 bne l@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
545 ldb PD.DNS,y and DNS byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
546 stb V.DnsByte,u save in our statics
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
547 andb #DNS.TURBO mask out all but turbo bit
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
548 stb V.Turbo,u and save state
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
549 lda #NUMTRIES get retry count
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
550 sta V.Retries,u and reset retry counter
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
551 clr V.OS9Err,u we want real SCSI errors returned
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
552 ldy V.PORT-UOFFSET,u get hw address
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
553 puls x,d,pc
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
554
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
555 * Check Transfer Status
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
556 * This routine is passed the address of another routine to call in case
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
557 * the device is busy or there is an error returned.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
558 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
559 * Passed: V.RetryVct,u = address of routine to call if SCSI device is busy
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
560 PostXfr lbsr GetStatB get transfer status byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
561 bita #X$BUSY device BUSY?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
562 bne retry@ attempt a retry if so...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
563 chkerr@ bita #X$ERROR error?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
564 beq ok@ branch if not...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
565 * Error occurred.. retry
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
566 retry@ dec V.Retries,u decrement retry count
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
567 bne jmp@ try again if not at end
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
568 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
569 lbsr SCSIErr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
570 lbra MPIOut
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
571 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
572 lbra SCSIErr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
573 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
574 jmp@ jmp [V.RetryVct,u]
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
575 ok@ clrb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
576 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
577 lbra MPIOut
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
578 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
579 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
580 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
581
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
582
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
583 * ll_write
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
584 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
585 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
586 * Y = address of path descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
587 * U = address of device memory area
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
588 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
589 * Static memory referenced:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
590 * V.CchPSpot = address of spot in cache where physical sector data is
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
591 * sectsize = sector size (0=256,1=512,2=1024,3=2048)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
592 * V.SectCnt = sectors to read
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
593 * V.PhysSect = physical sector to start read from
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
594 ll_write
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
595 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
596 lbsr MPIIn
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
597 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
598 IFNE SIZEMATTERS
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
599 bsr SCSIPrep do SCSI prep stuff
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
600 bsr MakeWrite make read command packet
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
601 ldx V.CchPSpot,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
602 stx V.TfrBuf,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
603 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
604 leax SCSIWriteRetry,pcr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
605 stx V.RetryVct,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
606 bsr SCSIPrep do SCSI prep stuff
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
607 lbsr MakeWrite
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
608 SCSIWriteRetry lbsr SCSISend
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
609 lbcs mpiex
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
610 bita #CMD
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
611 bne PostXfr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
612 ldb V.SectCnt,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
613 pshs b
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
614 * Set up appropriate write call (regular or turbo)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
615 tst V.Turbo,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
616 beq reg@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
617 leax TurboWrite,pcr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
618 bra do@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
619 reg@ leax RegWrite,pcr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
620 do@ stx V.WriteVct,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
621 ldx V.CchPSpot,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
622 again@ ldb V.Log2Phys,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
623 pshs b
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
624 loop@ jsr [V.WriteVct,u]
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
625 dec ,s
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
626 bne loop@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
627 puls b
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
628 dec ,s
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
629 bne again@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
630 puls a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
631 bra PostXfr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
632
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
633 TurboWrite
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
634 IFNE H6309
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
635
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
636 * 6309 Turbo WRITE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
637 loop@ orcc #IntMasks we have to mask interrupts for Level 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
638 ldw #256
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
639 tfm x+,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
640 andcc #^IntMasks we have to unmask interrupts for Level 1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
641 lbsr DeauxDeaux
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
642 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
643
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
644 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
645
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
646 * 6809 Turbo WRITE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
647 lda #16
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
648 pshs a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
649 l2@ ldd ,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
650 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
651 stb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
652 ldd $02,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
653 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
654 stb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
655 ldd $04,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
656 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
657 stb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
658 ldd $06,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
659 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
660 stb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
661 ldd $08,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
662 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
663 stb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
664 ldd $0A,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
665 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
666 stb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
667 ldd $0C,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
668 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
669 stb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
670 ldd $0E,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
671 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
672 stb SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
673 leax 16,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
674 dec ,s decrement counter
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
675 bne l2@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
676 puls a,pc
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
677
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
678 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
679
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
680 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
681 * "Non-Turbo" Write Data to controller
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
682 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
683 * Passed: X = Address of data to write
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
684 * Y = Controller Address
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
685 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
686 RegWrite clrb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
687 loop@ lda SCSISTAT,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
688 bita #REQ
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
689 beq loop@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
690 lda ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
691 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
692 decb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
693 bne loop@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
694 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
695
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
696 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
697
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
698 IFNE D4N1+HDII
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
699 * Disto 4-N-1/HD-II: Map in MPI HERE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
700 MPIIn pshs cc,a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
701 lda MPI.Slct get MPI value
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
702 sta V.MPISave,u save off in our statics
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
703 anda #$F0 preserve CTS slot bits (%1111000)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
704 ora V.MPISlot,u OR in MPI slot of our HW
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
705 MPIWrite sta MPI.Slct write out to MPI
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
706 puls a,cc,pc
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
707
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
708 MPIOut pshs cc,a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
709 lda V.MPISave,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
710 bra MPIWrite
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
711 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
712
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
713
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
714 * SCSIXfer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
715 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
716 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
717 * Y = hardware address
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
718 * U = address of device memory area
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
719 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
720 * Static memory referenced:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
721 * V.TfrBuf,u = address of transfer/receive buffer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
722 SCSIXfer leax retry@,pcr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
723 stx V.RetryVct,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
724 retry@ bsr SCSISend
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
725 bcs sr@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
726 ldx V.TfrBuf,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
727 tfr@ lbsr Wait4REQ wait for REQ to be asserted
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
728 bita #CMD
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
729 lbne PostXfr COMMAND phase...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
730 * If here, we're in DATA PHASE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
731 bita #INOUT data coming in or going out?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
732 bne in@ branch if coming in...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
733 out@ lda ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
734 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
735 bra tfr@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
736 in@ lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
737 sta ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
738 bra tfr@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
739 sr@ rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
740
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
741
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
742 * Give up timeslice several times unless this is the system
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
743 DeauxDeaux pshs x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
744 IFGT Level-1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
745 ldx D.Proc get proc descriptor
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
746 cmpx D.SysPrc system?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
747 beq WaitDone yep, system cannot sleep
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
748 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
749 * ldx D.AProcQ get active proc queue
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
750 * beq WaitDone if empty, return
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
751 * ldx #$0001
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
752 * os9 F$Sleep give up timeslice
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
753 * ldx D.AProcQ get active proc queue
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
754 * beq WaitDone if empty, return
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
755 ldx #$0001
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
756 os9 F$Sleep give up timeslice
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
757 WaitDone puls x,pc return to caller
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
758
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
759 * Get Status Byte from SCSI controller
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
760 * Exit: A = status byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
761 GetStatB bsr Wait4REQ
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
762 lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
763 pshs a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
764 bsr Wait4REQ
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
765 clr SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
766 puls pc,a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
767
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
768 * SCSI ID table with hi-bit set for SCSI-3 compliance
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
769 IDTBL FCB $80+1,$80+2,$80+4,$80+8,$80+16,$80+32,$80+64,128
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
770
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
771 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
772 * SCSI Packet Send Routine
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
773 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
774 * Sets LUN for SCSI Packet, then sends command packet to controller
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
775 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
776 * Passed: Y = Device Address
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
777 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
778 * Returns: A = SCSI Status byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
779 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
780 * Destroys: X
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
781 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
782 SCSISend ldb V.SCSILUN,u get SCSI LUN
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
783 andb #%00011111 mask out LUN
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
784 stb V.SCSILUN,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
785 ldb V.DnsByte,u get DNS byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
786 andb #%11100000 get SCSI LUN from byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
787 orb V.SCSILUN,u OR with SCSI LUN byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
788 stb V.SCSILUN,u save off
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
789 ldd #BUSY*256 we want /BUSY
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
790 bsr StatusWait
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
791 bcs ex4
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
792 * BUSY is clear, put initiator/target IDs on bus
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
793 lda V.DnsByte,u get DNS byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
794 anda #$07 mask out all but SCSI IDs
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
795 leax IDTBL,pcr point to device ID table
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
796 lda a,x get ID value
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
797 sta SCSIDATA,y write out to controller
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
798 sta SCSISEL,y here too...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
799 ldd #BUSY*256+BUSY we want BUSY
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
800 bsr StatusWait
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
801 bcs ex4
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
802 * BUSY is set
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
803 * Here we send the packet to the controller.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
804 chkok@ leax V.SCSICMD,u point X to SCSI command packet
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
805 tfrloop@ bsr Wait4REQ wait for REQ
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
806 bita #CMD SCSI CMD bit set?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
807 beq ex4 branch if not...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
808 bita #INOUT INOUT set?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
809 bne ckmsg@ branch if target->initiator
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
810 lda ,x+ get byte from SCSI CMD packet
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
811 sta SCSIDATA,y write to controller
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
812 bra tfrloop@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
813 ckmsg@ bita #MSG MESSAGE IN (target->initiator)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
814 beq ex4
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
815 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
816 * MESSAGE IN phase code
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
817 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
818 MSGIn lda SCSIDATA,y extended message?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
819 deca
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
820 bne SCSISend nope, restart target initiation
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
821 ldb SCSIDATA,y get extended message length
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
822 * Note: We ignore extended messages
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
823 l@ tst SCSIDATA,y read extended message data
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
824 decb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
825 bne l@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
826 bra SCSISend message read, restart target initiation
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
827 ex4 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
828
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
829 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
830 * Loop until REQ bit is set
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
831 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
832 * Passed: Y = Device Address
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
833 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
834 * Returns: A = SCSI Status byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
835 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
836 Wait4REQ
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
837 loop@ lda SCSISTAT,y get SCSI status byte
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
838 bita #REQ REQ?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
839 beq sleep@ +
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
840 rts +
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
841 sleep@ lbsr DeauxDeaux
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
842 bra loop@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
843
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
844 * Wait for a set of conditions in the status register to be TRUE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
845 * This yields a delay of about 5 seconds.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
846 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
847 * Entry: Y = HW address
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
848 * A = flip (if bit set, that bit is tested)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
849 * B = mask (result must match this byte)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
850 StatusWait
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
851 pshs x,d
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
852 IFEQ Level-1
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
853 ldb #$02
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
854 ldx #$0000
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
855 ELSE
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
856 ldb #$04
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
857 ldx #$0000
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
858 ENDC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
859 l@ lda SCSISTAT,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
860 anda ,s apply flip
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
861 cmpa 1,s compare to mask
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
862 bne dec@ branch if not equal (not what we want)
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
863 lda SCSISTAT,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
864 clrb clear carry
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
865 bra ok@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
866 dec@ leax -1,x count down
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
867 bne l@
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
868 decb decrement bits 23-16
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
869 bpl l@ if >=0, keep going
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
870 comb set carry
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
871 ldb #E$NotRdy
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
872 ok@ leas 2,s
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
873 puls x,pc
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
874
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
875 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
876 * Send a REQSENSE message to the SCSI controller
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
877 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
878 SndMSG lbsr Wait4REQ wait for REQ to be asserted
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
879 bita #CMD command phase?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
880 bne ex4 yes, return
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
881 beq INorOUT no, check for in/out
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
882 rts
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
883 INorOUT bita #INOUT data coming in or going out?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
884 bne ComingIn branch if coming in...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
885 lda ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
886 sta SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
887 bra SndMSG
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
888 ComingIn lda SCSIDATA,y
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
889 sta ,x+
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
890 bra SndMSG
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
891
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
892
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
893 * SCSIErr - Attemps a REQUEST SENSE to find a SCSI error
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
894 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
895 * Entry:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
896 * Y = address of hardware
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
897 * U = address of device memory area
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
898 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
899 * Exit:
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
900 * CC = carry set
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
901 * B = error code
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
902 *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
903 SCSIErr lda #S$REQSEN REQUEST SENSE command
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
904 sta V.SCSICMD,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
905 clra
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
906 clrb
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
907 sta V.SCSILUN,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
908 std V.SCSIPrm0,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
909 lda #ReqPkL set allocation length
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
910 std V.SCSIPrm2,u
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
911 lbsr SCSISend send command
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
912 bcs ex4 branch if error
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
913 leax V.R$Err,u point to return data buffer
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
914 bsr SndMSG get response data
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
915 lbsr GetStatB
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
916 clra
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
917 pshs a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
918 lda V.R$Err,u get error code
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
919 anda #$7F wipe out hi bit
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
920 cmpa #$70 "current" error?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
921 bne L05A3 branch if not...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
922 lda V.R$Err2,u get more detailed error
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
923 anda #%00001111
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
924 sta ,s save off stack
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
925 lda V.R$AdSns,u get additional sense code
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
926 L05A3 tst V.OS9Err,u send OS-9 error?
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
927 L05A7 beq L05AD branch if so...
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
928 tfr a,b else put SCSI error in B
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
929 clr V.OS9Err,u and clear SCSI error flag
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
930 bra ErrErr and return with error
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
931 * Walk error table to find OS-9 error
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
932 L05AD leax >ErrTbl,pcr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
933 ldb #E$Unit
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
934 L05B3 tst ,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
935 beq ErrErr
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
936 cmpa ,x++
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
937 blt L05B3
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
938 ldb -1,x
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
939 ErrErr coma
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
940 puls pc,a
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
941
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
942
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
943
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
944 * Error Table - Maps SCSI errors to OS-9 errors
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
945 * This table is contructed so that gaps are actually continuations of
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
946 * the previous entry. For example, $14 maps to E$Seek, and so does $15 and
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
947 * $16.
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
948 ErrTbl FCB $01,E$NotRdy
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
949 FCB $02,E$Seek
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
950 FCB $03,E$Write
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
951 FCB $04,E$NotRdy
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
952 FCB $06,E$Seek
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
953 FCB $10,E$CRC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
954 FCB $11,E$Read
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
955 FCB $14,E$Seek
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
956 FCB $17,E$CRC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
957 FCB $19,E$IllArg
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
958 FCB $1C,E$Read
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
959 FCB $1E,E$CRC
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
960 FCB $20,E$IllCmd
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
961 FCB $21,E$Sect
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
962 FCB $25,E$IllArg
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
963 FCB $29,E$NotRdy
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
964 FCB $00
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
965
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
966
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
967 EMOD
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
968 eom EQU *
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
969 END
17d43fd29ee2 Integration of SuperDriver
boisy
parents:
diff changeset
970