-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscsicall.txt
821 lines (590 loc) · 34.9 KB
/
scsicall.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
- SCSI IOCS MANUAL -
==============================================================================
・SCSI IOCS コール一覧
$00 _S_RESET SPC のリセット及び SCSI バスのリセット
$01 _S_SELECT アービトレーションフェーズとセレクションフェーズの実行
$02 _S_SELECTA アービトレーションフェーズとセレクションフェーズの実行
$03 _S_CMDOUT コマンドアウトフェーズの実行
$04 _S_DATAIN データインフェーズの実行
$05 _S_DATAOUT データアウトフェーズの実行
$06 _S_STSIN ステータスインフェーズの実行
$07 _S_MSGIN メッセージインフェーズの実行
$08 _S_MSGOUT メッセージアウトフェーズの実行
$09 _S_PHASE フェーズセンス
$0a _S_LEVEL SCSI IOCS のバージョンを調べる
$0b _S_DATAINI データインフェーズの実行
$0c _S_DATAOUTI データアウトフェーズの実行
$0d _S_MSGOUTEXT メッセージアウトフェーズの実行
$20 _S_INQUIRY INQUIRY データの要求
$21 _S_READ SCSI 装置よりデータの読み込み
$22 _S_WRITE SCSI 装置へのデータの書き込み
$23 _S_FORMAT SCSI 装置のフォーマット
$24 _S_TESTUNIT SCSI 装置が動作可能であるか調べる
$25 _S_READCAP SCSI 装置の容量に関する情報を調べる
$26 _S_READEXT 拡張 READ コマンド
$27 _S_WRITEEXT 拡張 WRITE コマンド
$28 _S_VERIFYEXT 拡張 VERIFY コマンド
$29 _S_MODESENSE MODE SENSE データの要求
$2a _S_MODESELECT MODE SELECT コマンド
$2b _S_REZEROUNIT SCSI 装置を指定の状態にセット
$2c _S_REQUEST SCSI 装置のセンスデータを調べる
$2d _S_SEEK 指定の論理ブロックアドレスへシークする
$2e _S_READI SCSI 装置よりデータの読み込み
$2f _S_STARTSTOP SCSI 装置に対して以降の操作を可能・不可能にすることを要求
$30 _S_EJECT6MO1 CZ-6MO1 に挿入されているメディアを排出
$31 _S_REASSIGN 欠陥ブロックの再割り当て
$32 _S_PAMEDIUM メディアのイジェクトの禁止・許可を設定
$36 (_b_dskini) SASI 装置を初期化する
$37 (_b_format) SASI 装置をフォーマットする
$38 (_b_badfmt) SASI 装置の破損トラックを使用不能にする
$39 (_b_assign) SASI 装置を代替トラックを設定する
==============================================================================
・呼び出し方法
d0.b に IOCS コール番号 0xf5 を、d1.l に SCSI コール番号を代入し
IOCS コールを実行する。d0.l に返値(エラーコード)が返る。
・エラーコード
上位ワード: INTS(SPC の割り込みの原因)
各ビットが 0 で割り込み無し、1 で割り込み有り。
bit 23 SELECTED 割り込み
bit 22 RESELECTED 割り込み
bit 21 DISCONNECTED 割り込み
bit 20 SPC に対するコマンドの動作の終了割り込み
bit 19 実行しようとする転送フェーズと SCSI 上で要求されている転送フェ
ーズとが不一致、あるいは転送中に他の転送フェーズが要求されたと
きの割り込み
bit 18 セレクション タイムアウト割り込み
bit 17 SPC ハードウェア割り込み
bit 16 RESET コンディション割り込み
下位ワード: PSNS(SCSI バス上の制御信号の状態)
各ビットが 0 で信号ノンアクティブ、1 で信号アクティブ。
bit 7 REQ
bit 6 ACK
bit 5 ATN
bit 4 SEL
bit 3 BSY
bit 2 MSG
bit 1 C/D
bit 0 I/O
==============================================================================
・SCSI デバイスドライバで対応する SCSI 装置
(1)一ブロックの容量が 256、512、1024 バイトのいずれかであること。
(2)ANSI-SCSI 規格(ANSI X3.131-1986)中の以下のコマンドを備えていること。
0x00 TEST UNIT READY
0x01 REZERO UNIT
0x03 REQUEST SENSE
0x04 FORMAT UNIT
0x08 READ
0x0a WRITE
0x12 INQUIRY
0x1a MODE SENSE
0x25 READ CAPACITY
(3)論理ユニット番号(LUN)を使用しないこと(LUN が 0 であること)。
(4)モードセンスコマンドにおいて、ページコード 3f で全てのページ内容が送出され
るか、またはモードセンスヘッダの 4 バイトが送出されること。
(5)FORMAT UNIT コマンド(コマンド列 04 00 00 00 00 00)での物理フォーマット時に
自動的に不良ブロックの代替処理を行うこと。
(6)SCSI 装置 1 台の容量が 1M バイト以上 16G バイト未満であること。
(7)電源投入時に自動的に SCSI 装置が使用可能状態になること(START/STOP UNIT コマ
ンドによる装置の起動が不要なこと)。
なお、susie.x などの SCSI デバイスドライバでは、一ブロックの容量が 2048 バイ
トのメディアや、LUN を使用するデバイスも使用できる。
==============================================================================
==============================================================================
$00 _S_RESET SPC のリセット及び SCSI バスのリセット
返値 なし(d0.l の内容は保証されない)
SPC の初期化及び SCSI バスのリセットを行う。
SRAM 内の SCSI 関係ワークも初期化される。
バスリセット後に 2 秒間待機する。
==============================================================================
$01 _S_SELECT アービトレーションフェーズとセレクションフェーズの実行
引数 d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l エラーコード(0 以外なら異常終了)
アービトレーションフェーズとセレクションフェーズを実行する。
SASI-HD に対して実行する時はアービトレーションフェーズは省略する。
==============================================================================
$01 _S_SELECTA アービトレーションフェーズとセレクションフェーズの実行
引数 d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l エラーコード(0 以外なら異常終了)
アービトレーションフェーズとセレクションフェーズを実行する。
ATN 信号を 1 にして実行する他は _S_SELECT と同じである。
==============================================================================
$03 _S_CMDOUT コマンドアウトフェーズの実行
引数 d3.l コマンドのバイト数
a1.l CDB(COMMAND DISCRIPTOR BLOCK)の先頭アドレス
返値 d0.l エラーコード(0 以外なら異常終了)
コマンドアウトフェーズを実行する。
a1.l のアドレスから d3.l バイトのデータを SCSI バス上に出力する。
グループ 0,1,5 のコマンドの時は d3.l にバイト数を指定する必要はない。
==============================================================================
$04 _S_DATAIN データインフェーズの実行
引数 d3.l 読み込みバイト数
a1.l バッファアドレス
返値 d0.l エラーコード(0 以外なら異常終了)
データインフェーズを実行する。
a1.l のアドレスへ d3.l バイトのデータを SCSI バス上から読み込む。
データ転送は常に DMA によって行われる。
==============================================================================
$05 _S_DATAOUT データアウトフェーズの実行
引数 d3.l 書き込みバイト数
a1.l データアドレス
返値 d0.l エラーコード(0 以外なら異常終了)
データアウトフェーズを実行する。
a1.l のアドレスから d3.l バイトのデータを SCSI バス上へ書き込む。
データ転送は常に DMA によって行われる。
==============================================================================
$06 _S_STSIN ステータスインフェーズの実行
引数 a1.l バッファアドレス
返値 d0.l エラーコード(0 以外なら異常終了)
ステータスインフェーズを実行する。
a1.l のアドレスへ 1 バイトのデータを SCSI バス上から読み込む。
==============================================================================
$07 _S_MSGIN メッセージインフェーズの実行
引数 a1.l バッファアドレス
返値 d0.l エラーコード(0 以外なら異常終了)
メッセージインフェーズを実行する。
a1.l のアドレスへ 1 バイトのデータを SCSI バス上から読み込む。
==============================================================================
$08 _S_MSGOUT メッセージアウトフェーズの実行
引数 a1.l データアドレス
返値 d0.l エラーコード(0 以外なら異常終了)
メッセージアウトフェーズを実行する。
a1.l のアドレスから 1 バイトのデータを SCSI バス上へ書き込む。
データ転送は常に MPU によって行われる。
==============================================================================
$09 _S_PHASE フェーズセンス
返値 d0.l 現在のフェーズ
SPC の PSNS レジスタを読み込む。
==============================================================================
$0a _S_LEVEL SCSI IOCS のバージョンを調べる
返値 d0.l SCSI IOCS のバージョン
SCSI IOCS のバージョンを調べる。機種と返値の関係は以下の通り。
X68000 SUPER 0
SCSI ボード CZ-8BS1 1
X68000 XVI 3
SCHDISK(ver 1.04) 4
X68030 10
Mach-2 $6412~$6415
mach2p (不明)
==============================================================================
$0b _S_DATAINI データインフェーズの実行
引数 d3.l 読み込みバイト数
a1.l バッファアドレス
返値 d0.l エラーコード(0 以外なら異常終了)
データインフェーズを実行する。
a1.l のアドレスへ d3.l バイトのデータを SCSI バス上から読み込む。
データ転送は常に MPU によって行われる。
==============================================================================
$0c _S_DATAOUTI データアウトフェーズの実行
引数 d3.l 書き込みバイト数
a1.l データアドレス
返値 d0.l エラーコード(0 以外なら異常終了)
データアウトフェーズを実行する。
a1.l のアドレスから d3.l バイトのデータを SCSI バス上へ書き込む。
データ転送は常に MPU によって行われる。
==============================================================================
$0d _S_MSGOUTEXT メッセージアウトフェーズの実行(拡張メッセージ)
引数 a1.l データアドレス
返値 d0.l エラーコード(0 以外なら異常終了)
メッセージアウトフェーズを実行し、3 バイト以上の拡張メッセージを送る。
a1.l+2 のアドレスに拡張メッセージコード、a1.l+3 からのアドレスに拡張
メッセージ引数を格納し呼び出すと、コードに応じた長さだけ拡張メッセージ
をSCSI バス上へ書き込む。
メッセージデータ及び拡張メッセージ長はコードによって決まるので、a1.l
からの 2 バイトはユーザが指定する必要はなく、また指定しても無視される。
データ転送は常に MPU によって行われる。
このコールは X68030 のみ使用可能。
==============================================================================
$20 _S_INQUIRY INQUIRY データの要求
引数 d3.b 読み込みバイト数
d4.hw ターゲット LUN
d4.w ターゲットID
a1.l バッファアドレス
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
a1.l のアドレスへ d3.b バイトの INQUIRY データを読み込む。
データ転送は常に MPU によって行われる。
INQUIRY データの内容は以下の通り。
offset size
0 1.b Peripheral Device Type(デバイス種別)
1 1.b bit 7:RMB
bit 6~0:Device-Type Qualifier
2 1.b bit 7~6:ISO Version
bit 5~3:ECMA Version
bit 2~0:ANSI-Approved Version(準拠規格)
3 1.b (予約)
4 1.b Additional Length(追加データ長)
5~ ?.b Vendor Unique Parameter Bytes(追加データ)
Peripheral Device Type の内容は以下の通り。
値 内容
$00 Direct-access device(HDD 等)
$01 Sequential-access device(MT 等)
$02 Printer device
$03 Processor device
$04 Write-once device
$05 CD-ROM device
$06 Scanner device
$07 Optical memory device
$08 Medium changer device
$09 Communications device
$0a Defined by ASC IT8
$0b Defined by ASC IT8
$0c Array controller device
$0d Enclosure services device
$0e Simplified Direct Access
$0f Optical Card Device
$10 Bridge Expander Device
$11~$1e (将来拡張用)
$1f Unknown or no device type
$20~$7e (将来拡張用)
$7f 論理ユニットは存在しない
$80~$ff 各ベンタで自由に使用可
ANSI-Approved Version の内容は以下の通り。
値 内容
0 準拠規格なし
1 SCSI-1 ANSI X3.131-1986
2 SCSI-2 ANSI X3.131-1994
3 SCSI-3 ANSI X3.301-1997 SPC Rev.11
4 SPC-2 T10/1236-D SPC-2
5~7 (将来拡張用)
==============================================================================
$21 _S_READ SCSI 装置よりデータの読み込み
引数 d2.l 目的読み込み位置(論理ブロック番号)
d3.l 読み込みブロック数(1~255)
d4.hw ターゲット LUN
d4.w ターゲットID
d5.l 1 ブロックの容量(0:256 1:512 2:1024 3:2048 …)
a1.l バッファアドレス
返値 d0.l ステータス(-1,-2 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
d2.l の論理ブロック番号のブロックから d3.l ブロック分のデータを a1.l
のアドレスへ読み込む。
データ転送は SRAM 設定値によって DMA か MPU のどちらかが使用される。
論理ブロック番号には 0x200000 以上の値は指定できないので注意すること。
代わりに _S_READEXT を使えばよい。
==============================================================================
$22 _S_WRITE SCSI 装置へのデータの書き込み
引数 d2.l 目的書き込み位置(論理ブロック番号)
d3.l 書き込みブロック数(1~255)
d4.hw ターゲット LUN
d4.w ターゲットID
d5.l 1 ブロックの容量(0:256 1:512 2:1024 3:2048 …)
a1.l データアドレス
返値 d0.l ステータス(-1,-2 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
a1.l のアドレスから d3.l ブロック分のデータを d2.l の論理ブロック番
号のブロックへ書き込む。
データ転送は SRAM 設定値によって DMA か MPU のどちらかが使用される。
論理ブロック番号には 0x200000 以上の値は指定できないので注意すること。
代わりに _S_WRITEEXT を使えばよい。
==============================================================================
$23 _S_FORMAT SCSI 装置のフォーマット
引数 d3.w インターリーブ
d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
指定のインターリーブ値で SCSI 装置をフォーマットする。
==============================================================================
$24 _S_TESTUNIT SCSI 装置が動作可能であるか調べる
引数 d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
SCSI 装置が動作可能であるか調べる。返値の d0.l が 0 の時のみ動作可能。
==============================================================================
$25 _S_READCAP SCSI 装置の容量に関する情報を調べる
引数 d4.hw ターゲット LUN
d4.w ターゲットID
a1.l バッファアドレス
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
a1.l のアドレスへ 8 バイトの READ CAPACITY データを読み込む。
データ転送は常に MPU によって行われる。
READ CAPACITY データの内容は以下の通り。
offset size
0 1.l 論理ブロックアドレス
1 1.l ブロック長(バイト単位)
==============================================================================
$26 _S_READEXT 拡張 READ コマンド
引数 d2.l 目的読み込み位置(論理ブロック番号)
d3.l 読み込みブロック数(1~65535)
d4.hw ターゲット LUN
d4.w ターゲットID
d5.l 1 ブロックの容量(0:256 1:512 2:1024 3:2048 …)
a1.l バッファアドレス
返値 d0.l ステータス(-1,-2 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
d2.l の論理ブロック番号のブロックから d3.l ブロック分のデータを a1.l
のアドレスへ読み込む。
グループ 1 のコマンドで、読み込みブロック長は 65535 まで指定可能。
データ転送は SRAM 設定値によって DMA か MPU のどちらかが使用される。
==============================================================================
$27 _S_WRITEEXT 拡張 WRITE コマンド
引数 d2.l 目的書き込み位置(論理ブロック番号)
d3.l 書き込みブロック数(1~65535)
d4.hw ターゲット LUN
d4.w ターゲットID
d5.l 1 ブロックの容量(0:256 1:512 2:1024 3:2048 …)
a1.l データアドレス
返値 d0.l ステータス(-1,-2 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
a1.l のアドレスから d3.l ブロック分のデータを d2.l の論理ブロック番
号のブロックへ書き込む。
グループ 1 のコマンドで、書き込みブロック長は 65535 まで指定可能。
データ転送は SRAM 設定値によって DMA か MPU のどちらかが使用される。
==============================================================================
$28 _S_VERIFYEXT 拡張 VERIFY コマンド
引数 d2.l 目的比較位置(論理ブロック番号)
d3.l 比較ブロック数(1~65535)
d4.hw ターゲット LUN
d4.w ターゲットID
d5.l 1 ブロックの容量(0:256 1:512 2:1024 3:2048 …)
a1.l データアドレス
返値 d0.l ステータス(-1,-2 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
a1.l のアドレスから d3.l ブロック分のデータを d2.l の論理ブロック番
号のブロックと比較する。
グループ 1 のコマンドで、比較ブロック長は 65535 まで指定可能。
データ転送は SRAM 設定値によって DMA か MPU のどちらかが使用される。
==============================================================================
$29 _S_MODESENSE MODE SENSE データの要求
引数 d2.b bit 7~6:PC bit 5~0:ページコード
d3.b 読み込みバイト数
d4.hw ターゲット LUN
d4.w ターゲットID
a1.l バッファアドレス
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
a1.l のアドレスへ d3.b バイトの MODE SENSE データを読み込む。
データ転送は常に MPU によって行われる。
PC は 0:カレント値、1:変更可能値、2:デフォルト値、3:セーブ値で指定す
る。
ページコードの内容は以下の通り。
0 ページディスクリプタは転送しない
1 リード/ライトエラーリカバリパラメータ
2 ディスコネクト/リコネクトパラメータ
3 フォーマットパラメータ
4 ドライブパラメータ
7 ベリファイエラーリカバリパラメータ
8 キャッシングパラメータ
$21 アディショナルエラーリカバリパラメータ
$22 リコネクションタイミングパラメータ
$3f 全パラメータ
MODE SENSE データの内容は以下の通り。
offset size
0 1.b センスデータ長(自分自身は含まない)
1 1.b メディアタイプ
2 1.b bit 7:Write Protect(1 で書き込み禁止) bit 6~0:(予約)
3 1.b ブロックディスクリプタ長(8の倍数になる)
4 1.b 密度コード ┐
5 3.b ブロック数 │ブロックディスクリプタ
6 1.b (将来拡張用) │(複数になることもある)
7 3.b ブロック長 ┘
8~ ?.b ベンダごとに自由に使用可
==============================================================================
$2a _S_MODESELECT MODE SELECT コマンド
引数 d2.b CDB(COMMAND DISCRIPTOR BLOCK)の第二バイトの内容
d3.b 不明
d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
MODE SELECT コマンドを実行する。
データ転送は常に MPU によって行われる。
d2.b の内容は以下の通り。
bit 4 PF(Page Format)
転送するパラメータの形式を指定する。
0: ベンダユニーク(SCSI 規格による)
1: SCSI2 規格で規定された形式
bit 0 SP(Save Page)
1 で転送したパラメータを保存する。保存機能はオプションなので
対応していない機器も存在する。
==============================================================================
$2b _S_REZEROUNIT SCSI 装置を指定の状態にセット
引数 d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
SCSI 装置を指定の状態にセットすることを要求する。
指定の状態は各装置の取扱説明書を参照のこと。
==============================================================================
$2c _S_REQUEST SCSI 装置のセンスデータを調べる
引数 d3.b 読み込みバイト数
d4.hw ターゲット LUN
d4.w ターゲットID
a1.l バッファアドレス
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
a1.l のアドレスへ d3.b バイトの REQUEST SENSE データを読み込む。
データ転送は常に MPU によって行われる。
REQUEST SENSE データの内容は以下の通り。実際のデータ長はデバイス依存
であるが、最低でも 8 バイトは返される。
offset size
0 1.b bit 7:Valid(1 でコマンド固有インフォメーションが有効)
bit 6~0:エラーコード
$70: Current Error
$71: Deffered Error
1 1.b Segment Number
2 1.b bit 7:Filemark(1 でシーケンシャルアクセスデバイスでファイルマ
ークが検出された)
bit 6:EOM(1 でシーケンシャルアクセスデバイスでファイルエンドが
検出された)
bit 5:ILI(データブロック長が不一致)
bit 4:予約
bit 3~0:センスキー
$0 No Sense (特定のセンスキーはない)
$1 Recovered Error (最後に実行したコマンドがエラーから
回復して正常終了した)
$2 Not Ready (装置が準備状態にない)
$3 Medium Error (メディアに欠陥がある)
$4 Hardware Error (ハードウェアエラー)
$5 Illegal Request (コマンドに不当なパラメータがある)
$6 Unit Attention (メディア交換や装置のリセットがあっ
た)
$7 Data Protect (書き込み禁止)
$8 Blank Check (読み出し中にブランク領域になったか、書
き込み中にブランクでない領域になった)
$9 Vendor-Specific (ベンダ依存)
$a Copy Aborted (Copy/Compare/Copy&Verify コマンドがデ
バイスの異常で中止された)
$b Aborted Command (実行中にコマンドを異常終了させた)
$c Equal (Search コマンドで一致を検出した)
$d Volume Overflow (データがバッファに溜まっているのに
デバイスが最終ブロックに達した)
$e Miscompare (Verify で不一致になった)
$f Reserved (予約)
3 4.b Information
7 1.b 追加センスデータ長
●追加センスデータ
8 4.b Command Specific Information
12 1.b Additional Sense Code
13 1.b Additional Sense Code Qualifier
14 1.b Field Replaceable Unit Code
15 1.b bit 7:Sense Key Specific Valid
bit 6~0:Sense Key Specific
18 ?.b Additional Sense Bytes
==============================================================================
$2d _S_SEEK 指定の論理ブロックアドレスへシークする
引数 d2.l 目的移動位置(論理ブロック番号)
d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
d2.l の論理ブロック番号にシークする。
==============================================================================
$2e _S_READI SCSI 装置よりデータの読み込み
引数 d2.l 目的読み込み位置(論理ブロック番号)
d3.l 読み込みブロック数(1~255)
d4.hw ターゲット LUN
d4.w ターゲットID
d5.l 1 ブロックの容量(0:256 1:512 2:1024 3:2048 …)
a1.l バッファアドレス
返値 d0.l ステータス(-1,-2 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
d2.l の論理ブロック番号のブロックから d3.l ブロック分のデータを a1.l
のアドレスへ読み込む。
データ転送は常に DMA によって行われる。
論理ブロック番号には 0x200000 以上の値は指定できないので注意すること。
代わりに _S_READEXT を使えばよい。
==============================================================================
$2f _S_STARTSTOP SCSI 装置に対して以降の操作を可能・不可能にすることを要求
引数 d3.b 操作可能・不可能(0:不可能 1:可能 2:メディア排出 3:トレイ閉鎖)
d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
引数の d3.b が 1 の時 SCSI 装置を操作出来るように設定し、0 の時は停
止(操作不可)するように要求する。2 の時は挿入されているメディアを排出す
る。3 の時は CD-ROM ドライブなどのトレイを閉じる。
==============================================================================
$30 _S_EJECT6MO1 CZ-6MO1 に挿入されているメディアを排出
引数 d3.b 不明
d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
CZ-6MO1 に挿入されているメディアを排出する。
==============================================================================
$31 _S_REASSIGN 欠陥ブロックの再割り当て
引数 d3.l 書き込みバイト数
d4.hw ターゲット LUN
d4.w ターゲットID
a1.l データアドレス
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
欠陥ブロックの再割り当てを要求する。
a1.l のアドレスから d3.l バイトの REASSIGN BLOCKS データを書き込む。
データ転送は常に MPU によって行われる。
==============================================================================
$32 _S_PAMEDIUM メディアのイジェクトの禁止・許可を設定
引数 d3.l イジェクト許可・禁止(0:許可 1:禁止)
d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
メディアのイジェクト許可・禁止を設定する。
==============================================================================
$36 (_b_dskini) SASI 装置を初期化する
引数 d3.b 不明
d4.hw ターゲット LUN
d4.w ターゲットID
a1.l アサインドライブパラメータのアドレス
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
ドライブを初期化する。
データ転送は常に MPU によって行われる。
==============================================================================
$37 (_b_format) SASI 装置をフォーマットする
引数 d2.l 目的フォーマット位置(論理ブロック番号)
d3.b インタリーブコード
d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
ディスクの物理フォーマットを行なう。
==============================================================================
$38 (_b_badfmt) SASI 装置の破損トラックを使用不能にする
引数 d2.l 目的フォーマット位置(論理ブロック番号)
d3.b インタリーブコード
d4.hw ターゲット LUN
d4.w ターゲットID
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
ハードディスクの破壊トラックを使用不能にする。
==============================================================================
$39 (_b_assign) SASI 装置を代替トラックを設定する
引数 d2.l 目的割り当て位置(論理ブロック番号)
d3.b インタリーブコード
d4.hw ターゲット LUN
d4.w ターゲットID
a1.l 代替トラック指定データのアドレス
返値 d0.l ステータス(-1 なら異常終了)
上位:メッセージインフェーズで得た情報
下位:ステータス〃
ハードディスクの代替トラックを設定する。
データ転送は常に MPU によって行われる。
==============================================================================