Mercurial > hg > Members > kono > nitros9-code
comparison level1/cmds/scsiquery.asm @ 2590:17d43fd29ee2
Integration of SuperDriver
author | boisy |
---|---|
date | Thu, 22 Dec 2011 18:23:47 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2589:e134044fd755 | 2590:17d43fd29ee2 |
---|---|
1 ******************************************************************** | |
2 * scsiquery - Get info on SCSI device through SS.DCmd call | |
3 * | |
4 * $Id$ | |
5 * | |
6 * Edt/Rev YYYY/MM/DD Modified by | |
7 * Comment | |
8 * ------------------------------------------------------------------ | |
9 * 1 2008/01/21 Boisy G. Pitre | |
10 * Created while on the FPSO Kikeh in the South China Sea. | |
11 | |
12 nam scsiquery | |
13 ttl Get info on SCSI device through the SS.DCmd call | |
14 | |
15 ifp1 | |
16 use defsfile | |
17 use scfdefs | |
18 endc | |
19 | |
20 tylg set Prgrm+Objct | |
21 atrv set ReEnt+rev | |
22 rev set $00 | |
23 edition set 1 | |
24 | |
25 mod eom,name,tylg,atrv,start,size | |
26 | |
27 org 0 | |
28 code rmb 1 | |
29 lsn rmb 3 | |
30 left rmb 2 | |
31 path rmb 1 | |
32 numbuf rmb 16 | |
33 txbuff rmb 2048 to accomodate CD-ROM sector sizes | |
34 rmb 200 | |
35 size equ . | |
36 | |
37 StartM fcc /SCSI Inquiry Utility/ | |
38 cr fcb C$CR | |
39 VID fcc /Vendor ID : / | |
40 VIDL equ *-VID | |
41 PID fcc /Product ID : / | |
42 PIDL equ *-PID | |
43 RLV fcc /Revision : / | |
44 RLVL equ *-RLV | |
45 LBA fcc /Blocks : / | |
46 LBAL equ *-LBA | |
47 BSZ fcc /Block Size : / | |
48 BSZL equ *-BSZ | |
49 | |
50 InquiryUnit fcb $12,$00,$00,$00,96,$00 | |
51 ReadCapacity fcb $25,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |
52 | |
53 name fcs /scsiquery/ | |
54 fcb edition | |
55 | |
56 start | |
57 leay txbuff,u | |
58 ldd #$2060 | |
59 l@ sta ,y+ | |
60 decb | |
61 bne l@ | |
62 leay txbuff,u | |
63 | |
64 l@ lda ,x+ | |
65 cmpa #C$CR | |
66 beq ok@ | |
67 cmpa #C$SPAC | |
68 beq ok@ | |
69 sta ,y+ | |
70 bra l@ | |
71 ok@ ldd #'@*256+C$CR | |
72 std ,y | |
73 leax txbuff,u | |
74 | |
75 lda #READ. | |
76 os9 I$Open | |
77 lbcs exit | |
78 sta path,u | |
79 | |
80 leax StartM,pcr | |
81 lda #1 | |
82 ldy #100 | |
83 os9 I$WritLn | |
84 | |
85 * Do INQUIRY | |
86 leax txbuff,u | |
87 leay InquiryUnit,pcr | |
88 lda path,u | |
89 ldb #SS.DCmd | |
90 os9 I$SetStt | |
91 lbcs exit | |
92 | |
93 * Show Vendor ID | |
94 leax VID,pcr | |
95 ldy #VIDL | |
96 lda #1 | |
97 os9 I$WritLn | |
98 | |
99 leax txbuff+8,u | |
100 ldy #15-8+1 | |
101 lda #1 | |
102 os9 I$Write | |
103 leax cr,pcr | |
104 ldy #1 | |
105 os9 I$WritLn | |
106 | |
107 * Show Product ID | |
108 leax PID,pcr | |
109 ldy #PIDL | |
110 lda #1 | |
111 os9 I$WritLn | |
112 | |
113 leax txbuff+16,u | |
114 ldy #31-16+1 | |
115 lda #1 | |
116 os9 I$Write | |
117 leax cr,pcr | |
118 ldy #1 | |
119 os9 I$WritLn | |
120 | |
121 * Show Revision Level | |
122 leax RLV,pcr | |
123 ldy #RLVL | |
124 lda #1 | |
125 os9 I$WritLn | |
126 | |
127 leax txbuff+32,u | |
128 ldy #35-32+1 | |
129 lda #1 | |
130 os9 I$Write | |
131 leax cr,pcr | |
132 ldy #1 | |
133 os9 I$WritLn | |
134 | |
135 * Do READ CAPACITY | |
136 leax txbuff,u | |
137 leay ReadCapacity,pcr | |
138 lda path,u | |
139 ldb #SS.DCmd | |
140 os9 I$SetStt | |
141 bcs exit | |
142 | |
143 * Show Number of Blocks | |
144 leax LBA,pcr | |
145 ldy #LBAL | |
146 lda #1 | |
147 os9 I$WritLn | |
148 | |
149 leax txbuff,u | |
150 leay numbuf,u | |
151 bsr itoa | |
152 lda #1 | |
153 os9 I$Write | |
154 | |
155 leax cr,pcr | |
156 ldy #1 | |
157 os9 I$WritLn | |
158 | |
159 * Show Block Size | |
160 leax BSZ,pcr | |
161 ldy #BSZL | |
162 lda #1 | |
163 os9 I$WritLn | |
164 | |
165 leax txbuff+4,u | |
166 leay numbuf,u | |
167 bsr itoa | |
168 lda #1 | |
169 os9 I$Write | |
170 | |
171 leax cr,pcr | |
172 ldy #1 | |
173 os9 I$WritLn | |
174 | |
175 exitok clrb | |
176 exit os9 F$Exit | |
177 | |
178 * Entry: | |
179 * X = address of 32 bit value | |
180 * Y = address of buffer to hold number | |
181 * Exit: | |
182 * X = address of buffer holding number | |
183 * Y = length of number string in bytes | |
184 itoa pshs u,y | |
185 tfr y,u | |
186 ldb #10 max number of numbers (10^9) | |
187 pshs b save count on stack | |
188 leay Base,pcr point to base of numbers | |
189 s@ lda #$30 put #'0 | |
190 sta ,u at U | |
191 s1@ bsr Sub32 ,X=,X-,Y | |
192 inc ,u | |
193 bcc s1@ if X>0, continue | |
194 bsr Add32 add back in | |
195 dec ,u+ | |
196 dec ,s decrement counter | |
197 beq done@ | |
198 lda ,s | |
199 cmpa #$09 | |
200 beq comma@ | |
201 cmpa #$06 | |
202 beq comma@ | |
203 cmpa #$03 | |
204 bne s2@ | |
205 comma@ ldb #', | |
206 stb ,u+ | |
207 s2@ leay 4,y point to next | |
208 bra s@ | |
209 done@ leas 1,s | |
210 * 1,234,567,890 | |
211 ldb #14 length of string with commas + 1 | |
212 ldx ,s++ get pointer to buffer | |
213 a@ decb | |
214 beq ex@ | |
215 lda ,x+ get byte | |
216 cmpa #'0 | |
217 beq a@ | |
218 cmpa #', | |
219 beq a@ | |
220 clra | |
221 tfr d,y transfer count into Y | |
222 v@ leax -1,x | |
223 puls u,pc | |
224 ex@ ldy #0001 | |
225 bra v@ | |
226 | |
227 * Entry: | |
228 * X = address of 32 bit minuend | |
229 * Y = address of 32 bit subtrahend | |
230 * Exit: | |
231 * X = address of 32 bit difference | |
232 Sub32 ldd 2,x | |
233 subd 2,y | |
234 std 2,x | |
235 ldd ,x | |
236 sbcb 1,y | |
237 sbca ,y | |
238 std ,x | |
239 rts | |
240 | |
241 | |
242 * Entry: | |
243 * X = address of 32 bit number | |
244 * Y = address of 32 bit number | |
245 * Exit: | |
246 * X = address of 32 bit sum | |
247 Add32 ldd 2,x | |
248 addd 2,y | |
249 std 2,x | |
250 ldd ,x | |
251 adcb 1,y | |
252 adca ,y | |
253 std ,x | |
254 rts | |
255 | |
256 Base fcb $3B,$9A,$CA,$00 1,000,000,000 | |
257 fcb $05,$F5,$E1,$00 100,000,000 | |
258 fcb $00,$98,$96,$80 10,000,000 | |
259 fcb $00,$0f,$42,$40 1,000,000 | |
260 fcb $00,$01,$86,$a0 100,000 | |
261 fcb $00,$00,$27,$10 10,000 | |
262 fcb $00,$00,$03,$e8 1,000 | |
263 fcb $00,$00,$00,$64 100 | |
264 fcb $00,$00,$00,$0a 10 | |
265 fcb $00,$00,$00,$01 1 | |
266 | |
267 emod | |
268 eom equ * | |
269 end |