PCMCIAカードサービスとATAコマンドのプログラミング例
2002-2003年
佐々木芳
はじめに
ここに収録したプログラムは1995年〜1996年にかけてPCMCIAの調査をしたときに作成したプログラムです。当時はMS-DOS上のソケットサービス、カードサービスを前提に動作確認しながらPCMCIAのプログラミングインタフェースを理解することが目的でした。幸い当時使っていたノートPC(Panasonic CF11)があったので再コンパイルして動作を確認しましたが、現在PC Card
Standardの規格書は手元にないのでプログラムの見直しはしていませんのでおかしな部分もあるかもしれません。現在ではMS-DOSのプログラムを作る機会はほとんどないと思いますが、カードサービスの機能を理解する目的でなら少しは役に立つかも知れないのでソースコードとともに公開します。プログラムはすべてMS-DOSのコマンド形式です。Windows上のコマンドプロンプトでは正しい結果は得られません。
参考文献
PC Card Standard(PCMCIA/JEIDA) 社団法人 日本電子工業振興協会(現 社団法人 電子情報技術産業協会)
ここでは、作成したコマンドの解説をします。これらのコマンドでPCMCIAのすべての機能を調べたわけではなく、カードサービスの基本的な機能を調べました。
コマンド実行の例は、処分しようと思っていたMS-DOSマシン(Panasonic CF11)があったのでそれで実行したものです。マシンスペックは以下のとおりです。
OS
MS-DOS Version 6.20
ソケットサービス
DOS Socket Services Driver, Version 1.04
PCMCIA Socket Services Release 2.00
Copyright 1993 IBM Corp.
カードサービス
DOS Card Services Driver, Version 1.12
PCMCIA Card Services Release 2.00
Copyright 1993 IBM Corp.
クライアントドライバとしては、以下のものが動作中です。
IBM DOS PCMCIA ATA/SRAM Auto Configuration
Version 1.00
IBM DOS PCMCIA ATA/SRAM Card Device
Driver Version 1.07
ソケット1は空き
ソケット2には、(株)アイ・オー・データ機器のモデムカードPCMA-9664P2を挿入
すでにMS-DOS用のPCMCIAカード(PCカード)もそのドライバも手元にないので、ソケット2にはモデムカードPCMA-9664P2を挿入して各コマンドを実行して見ました。このカードのMS-DOS用クライアントドライバはないので単にソケットに指してもコンフィギュレーションは行われていない状態です。
コマンドシンタックス
CS
[/S] [/M<start base>-<end base>]
コマンドオプション
S ソケットサービスも調べる
M<start
base>-<end base> システムメモリのアドレス<start
base>からアドレス<end base>までをダンプする
解説
カードサービス関数GetCardServiceInfoの結果を表示します。
オプション/Sを指定すると、ReturnSSEntryで得られるソケットサービスのエントリポイントアドレスとGetAdapterCountで得られるソケット数を表示します。
オプション/Mを指定すると<start base>から<end base>のシステムメモリの内容を表示します。<start
base>、<end base>は8086のセグメントベースで指定します。
実行例
C:\PCCARD>cs
PCMCIA Card Service
Inquiry(V1.02)
Copyright K.Sasaki 1995 - 1996
CS:GetCardServiceInfo ->
ReturnCode = 0000(E_SUCCESS)
0000 2b 00 43 53 02 00 12 01 - 00 02 0e
00 1d 00 43 6f '+.CS..........Co'
0010 70 79 72 69 67 68 74 20 - 31 39 39
33 20 49 42 4d 'pyright 1993 IBM'
0020 20 43 6f 72 70 2e 0d 0a - 0d 0a
00
' Corp......'
Number of Sockets = 2
Revision = 0112, CSLevel = 0200
この例ではIBMのカードサービスが存在することが報告されています。
使用するカードサービス関数
GetCardServiceInfo ReturnSSEntry
GetAdapterCount
ソースファイル
cs.c csk.c ssk.c cs.h ss.h
コマンドシンタックス
SI
<socket no.> [/C]
コマンドオプション
<socket
no.> ソケット番号(1、2、…)
C クライアント情報を表示する
解説
カードサービスが存在したら、ValidateCISで正当なカード情報構造体 (CIS)を持っているかチェックして、GetStatusで得られるソケットの現在の状態とGetConfigurationInfoで得られるソケットの構成を表示します。
オプション/Cを指定するとGetClientInfoで得られるクライアント情報を表示します。
実行例
C:\PCCARD>si 2
PCMCIA Socket
Information(V1.01)
Copyright K.Sasaki 1995
Check Socket 2:
Validate CIS (socket=2) ->
ReturnCode = 0000(E_SUCCESS)
Number of valid tuple chains = 18
GetStatus (socket=2) ->
ReturnCode = 0000(E_SUCCESS)
CardState = 0000 0000 1000 0000
SocketState = 0000 0000 0000 0000
GetConfigurationInfo
(socket=2) -> ReturnCode = 0000(E_SUCCESS)
hClient(1) is invalid and configuration
is not in progress.
Configuration Info:
Logical Socket = 2 , Function = 0
Attributes = 0000 0000 0000 0000B
Vcc = 50 , Vpp1 = 0 , Vpp2 = 0
IntType = 0000 0010B
ConfigBase = 00000200H
Status = 0100 1000B , Pin = 0000 0000B
Copy = 0000 0000B , Option = 0110 0100B
Present = 0000 0011B
FirstDevType = 00H , FuncCode = 2 ,
SysInitMask = 0
ManufCode = c02cH , ManufInfo = 0001H
CardValues = 0000 0000B
AssignedIRQ = 5 , IRQAttributes = 0000
0000 0000 0001B
BasePort1 = 03e8H , Num Port1 = 8 ,
Attributes1 = 0000 0000B
BasePort2 = 0000H , Num Port2 = 0 ,
Attributes2 = 0000 0000B
IOAddrLines = 10
この例では、ソケット2にモデムカードの検出が報告されています。
使用するカードサービス関数
GetCardServiceInfo ValidateCIS
GetStatus GetConfigurationInfo GetClientInfo
ソースファイル
si.c csk.c ssk.c cs.h ss.h
コマンドシンタックス
TD
<socket no.>
コマンドオプション
<socket
no.> ソケット番号(1、2、…)
解説
カードサービスが存在したら、ValidateCISで正当なカード情報構造体 (CIS)を持っているかチェックして、GetFirstTupleとGetNextTupleですべてのタプルをたどり、GetTupleDataで各タプルの内容を読み取り表示します。
実行例
C:\PCCARD>td 2
PCMCIA Tuple List(V1.02)
Copyright K.Sasaki 1995 - 1996
Card Service Level = 0200
Check Socket 2:
Validate CIS (socket=2) ->
ReturnCode = 0000(E_SUCCESS)
Number of valid tuple chains = 18
Tuple Data:
CISTPL_DEVICE:
0000 01 02 00 ff
'....'
CISTPL_VERS_1:
0000 15 19 06 00 49 4f 20 44 - 41 54 41
00 50 43 4d 41 '....IO DATA.PCMA'
0010 39 36 36 34 50 00 31 2e - 31 00
ff
'9664P.1.1..'
CISTPL_MANFID:
0000 20 04 2c c0 01 00
' .,...'
CISTPL_FUNCID:
0000 21 02 02 00
'!...'
CISTPL_FUNCE:
0000 22 04 00 02 0f 7f
'"....'
CISTPL_FUNCE:
0000 22 09 05 1f ff 00 08 00 - 00 08
00
'"..........'
CISTPL_FUNCE:
0000 22 09 06 1c ff 00 04 00 - 00 08
00
'"..........'
CISTPL_FUNCE:
0000 22 0d 02 06 00 3b 1c 03 - 03 09 06
00 01 00 ff
'"....;.........'
CISTPL_FUNCE:
0000 22 09 13 01 00 07 00 6a - 00 00
ff
'"......j...'
CISTPL_FUNCE:
0000 22 09 23 01 00 03 00 22 - 00 00
ff
'".#...."...'
CISTPL_CONFIG:
0000 1a 05 01 30 00 02 03
'...0...'
CISTPL_CFTABLE_ENTRY:
0000 1b 14 e0 01 99 2f 55 c5 - 4b d5 19
4d 75 aa 60 f8 '...../U.K..Mu.`.'
0010 03 07 30 bc 86 00
'..0...'
CISTPL_CFTABLE_ENTRY:
0000 1b 07 22 08 aa 60 f8 02 - 07
'.."..`...'
CISTPL_CFTABLE_ENTRY:
0000 1b 07 24 08 aa 60 e8 03 - 07
'..$..`...'
CISTPL_CFTABLE_ENTRY:
0000 1b 07 26 08 aa 60 e8 02 - 07
'..&..`...'
CISTPL_CFTABLE_ENTRY:
0000 1b 03 30 08 23
'..0.#'
CISTPL_NO_LINK:
0000 14 00
'..'
この例ではソケット2に「IO DATA.PCMA 9664P」のモデムカードが検出されたのでそのタプル情報を報告しています。
使用するカードサービス関数
GetCardServiceInfo ValidateCIS
GetFirstTuple GetNextTuple GetTupleData
ソースファイル
td.c csk.c ssk.c cs.h ss.h
コマンドシンタックス
CI
コマンドオプション
なし
解説
カードサービスが存在したら、GetClientInfoで得られるクライアント情報を表示します。
実行例
C:\PCCARD>ci
PCMCIA Client
Information(V1.01)
Copyright K.Sasaki 1996
GetClientInfo (hClient=1)
-> ReturnCode = 0000(E_SUCCESS)
Attributes = 001fH
Client Revision = 0000, CS Release =
0000, Revision Date = 1980,0,0
GetClientInfo (hClient=2)
-> ReturnCode = 0000(E_SUCCESS)
0000 00 10 68 00 09 00 00 02 - 00 02 50
1a 14 00 1b 00 '..h.......P.....'
0010 2f 00 39 00 49 42 4d 20 - 44 4f 53
20 50 43 4d 43 '/.9.IBM DOS PCMC'
0020 49 41 20 53 52 41 4d 20 - 44 72 69
76 65 72 2e 28 'IA SRAM Driver.('
0030 43 29 20 43 6f 70 79 72 - 69 67 68
74 20 49 42 4d 'C) Copyright IBM'
0040 20 43 6f 72 70 6f 72 61 - 74 69 6f
6e 20 31 39 39 ' Corporation 199'
0050 33 2e 0d 0a 41 6c 6c 20 - 52 69 67
68 74 73 20 52 '3...All Rights R'
0060 65 73 65 72 76 65 64 2e
'eserved.'
Attributes = 0009H
Client Revision = 0200, CS Release =
0200, Revision Date = 1993,2,16
GetClientInfo (hClient=3)
-> ReturnCode = 0021(E_BAD_HANDLE)
この例では、2つのクライアントドライバの情報が報告されています。
使用するカードサービス関数
GetCardServiceInfo GetClientInfo
ソースファイル
ci.c csk.c ssk.c cs.h ss.h
コマンドシンタックス
ACR
<socket no.>
コマンドオプション
<socket
no.> ソケット番号(1、2、…)
解説
カードサービスが存在したら、ReadConfigurationRegisterで得られる以下の4つの構成レジスタを表示します。
COR 構成オプションレジスタ
CSR カード構成と状態レジスタ
PRR ピン代替レジスタ
SCR ソケットコピーレジスタ
使用するカードサービス関数
GetCardServiceInfo ReadConfigurationRegister
ソースファイル
acr.c csk.c ssk.c cs.h ss.h
コマンドシンタックス
CLIENT
<socket no.>
コマンドオプション
<socket
no.> ソケット番号(1、2、…)
解説
カードサービスが存在したら、RegisterClientでクライアントを登録します。このとき登録したコールバック関数は、イベントが発生したことを表示するだけの機能を持っています。実際のクライアントドライバはMS-DOSの常駐プログラムとして作るはずですが、このコマンドではユーザプログラムの中の関数をコールバックとして登録します。したがって、この登録したクライアントドライバはこのコマンドCLIENTを実行中のみ有効です。
このコマンドはESCキーを押すと終了します。
カードを抜き、挿しすると発生したイベントを表示します。カード挿入のイベントが発生したらそのソケットのカードのレベル1バージョン/製品情報のタプルを読み出し表示します。
Rまたはrキーを押すと、ReleaseConfigurationを呼び出して、RequestMemoryWindowを呼び出します。
Wまたはwキーを押すと、GetFirstWindowとGetNextWindowを呼び出します。
スペースキーを押すと“[SP] key pressed.”とだけ表示します。
これら以外のキーは無視します。キーを押されたときに行うカードサービス関数の呼び出しには意味は特にありません。呼び出しが行えることを確認することが目的です。
実行例
C:\PCCARD>client 2
PCMCIA Client Program(V1.01)
Copyright K.Sasaki 1996
[ESC] key to abort(DeregisterClient)
[R] key to check ReleaseConfiguration
& RequestMemoryWindow
[W] key to check GetFirstWindow &
GetNextWindow
[SP] key for no operation
ClientData=2e233656H, 0008H
RegisterClient -> ReturnCode =
0000(E_SUCCESS)
hClient = 3
Callback Handler: Invoked by Event
CARD_INSERTION(40H) Info=0, Misc=0
Socket=2H, Info=0H, Buffer=1d740000H,
Misc=0H, ClientData=2e233656H, 00000008H
Socket=2H
Validate CIS (socket=2) -> ReturnCode
= 0000(E_SUCCESS)
Number of valid tuple chains = 18
CISTPL_VERS_1:
0000 15 19 06 00 49 4f 20 44 - 41 54 41
00 50 43 4d 41 '....IO DATA.PCMA'
0010 39 36 36 34 50 00 31 2e - 31 00
ff
'9664P.1.1..'
Callback Handler: Invoked by Event
REGISTRATION_COMPLETE(82H) Info=0, Misc=0
Socket=0H, Info=0H, Buffer=1d740000H,
Misc=0H, ClientData=2e233656H, 00000008H
[SP] key pressed.
(ここでPCカードを抜いた)
Callback Handler: Invoked by Event
CARD_REMOVAL(05H) Info=0, Misc=0
Socket=2H, Info=0H, Buffer=1d740000H,
Misc=0H, ClientData=2e233656H, 00000008H
Socket=2H
[SP] key pressed.
(ここでPCカードを挿入した)
Callback Handler: Invoked by Event
CARD_INSERTION(40H) Info=0, Misc=0
Socket=2H, Info=0H, Buffer=1d740000H,
Misc=0H, ClientData=2e233656H, 00000008H
Socket=2H
Validate CIS (socket=2) -> ReturnCode
= 0000(E_SUCCESS)
Number of valid tuple chains = 18
CISTPL_VERS_1:
0000 15 19 06 00 49 4f 20 44 - 41 54 41
00 50 43 4d 41 '....IO DATA.PCMA'
0010 39 36 36 34 50 00 31 2e - 31 00
ff
'9664P.1.1..'
Callback Handler: Invoked by Event
CARD_READY(04H) Info=0, Misc=0
Socket=2H, Info=0H, Buffer=1d740000H,
Misc=0H, ClientData=2e233656H, 00000008H
Socket=2H
[SP] key pressed.
Aborted by [Esc] key.
DeregisterClient -> ReturnCode =
0000(E_SUCCESS)
使用するカードサービス関数
GetCardServiceInfo RegisterClient
DeregisterClient RequestMemoryWindow GetFirstWindow GetNextWindow
ソースファイル
client.c csk.c ssk.c cs.h ss.h
ATAはAT Attachment の略でANSIで規格化を行なっているIDEの正式な規格です。(参考:ANSI T13技術委員会)
各コマンドをオプション /? をつけて実行するとシンタックスとオプションパラメータの意味を表示します。
コマンドシンタックス
ATASRST [/S<n>]
コマンドオプション
<n> ソケット番号(0、1、2、…)
ソースファイル
atasrst.c csk.c csk.c atak.c cs.h atak.h
ata.h
コマンドシンタックス
ATA <device> <com> [/Hn] {[/Yxxxx] [/Nxx] |
[/Lxxxxxx]} [/Cxx] [/Fxx] [/Wxxxx] [/D] [/En] [/Mn] [/O<pathname>]
[/I<pathname>] [/B] [/Sn] [/Pn] [/G]
コマンドオプション
<device>
device(0 or
1) in ATA device/head register
<com>
ATA command code(hex)
/Hx
head(4 bits)
/Yxxxx
cylinder(16 bits)
/Nxx
sector number
/Cxx
sector count
/Fxx
features
/Lxxxxxxx
LBA number(28 bits)
/Wxxxx
write data pattern(word)
/D
dump read/write buffer
/En
ECC length(n=4 or 16)
/Mn
n=2:Primary I/O map, n=3:Secondary I/O map
/O<pathname>
put read data into the file
/I<pathname>
get write data from the file
/B
8 bit input/output at data read/write
/Pn
/Sn
PCMCIA socket no.(n=0,1,2, ...)
/G
display messages for debug
解説
このコマンドを使ってPCカードに書き込むとファイルシステムが壊れるので注意して使ってください。
ATA
/??と実行すると、以下のようにATA command code一覧を表示します。
ATA Command Code List
Check Power Mode : 98,E5 Exec Device Diag : 90
Format Track : 50
Identify Device : EC
Idle
: 97,E3
Idle Immediate : 95,E1
Init Device
Read Long : 22 Read
Long Retry
: 23
Read Sectors : 20 Read
Sectors Retry : 21
Read Verify : 40 Read
Verify Retry : 41
Read Buffer : E4 Read
Multiple : C4
Recalibrate : 10 to 1F
Seek
: 70 to 7F
Set Features : EF Set
Multiple Mode : C6
Set Sleep :
99,E6
Set Standby : 96,E2 Set Standby Immediate:
94,E0
Write Long : 32
Write Long Retry
: 33
Write Sectors : 30
Write Sectors Retry : 31
Write Buffer : E8
Write Multiple : C5
実行例
1)プライマリIOマップに対してIdentify Deviceコマンドを発行した例です。
C:\ATACARD>ata 0 ec /m2
Primary mapping.
>>Identify Device:
>ATA CB: CM=ec DH=a0
Command complete.
ATA RB: ST=58 DH=a0 CH=00 CL=3b SN=0c SC=00 ER=00
Read complete.
ATA RB: ST=50 DH=a0 CH=00 CL=3b SN=0c SC=00
ER=00
Identify Device Info:
Configuration = 0000 0100 0101 1010B
Num. of Cylinders = 041aH
reserved =
0000H
Num. of Heads = 0010H
Unformated Track Size = 0000H
Unformated Sector Size = 0000H
Sectors/Track = 003fH
Vendor Unique = 00 00 00 00 00 00
Serial No. = ' 1
2EE5605027'
Buffer Type = 0003H
Buffer Size = 0080H
ECC Bytes Size = 0004H
Firmware Version = '1A8CD083'
Model No. = 'BI-MBDAO2-45
0
'
Max Sectors(Multiple) = 0020H
DoubleWord I/O = 0000H
Capabilities = 0000 1111 0000 0000B
reserved =
0000H
PIO Timing Mode = 0200H
DMA Timing Mode = 0000H
reserved =
0003H
Current Cylinders = 041aH
Current Heads
= 0010H
Current Sectors/Track = 003fH
Current Sectors =
00102660H
Multiple Command Setting = 0100H
Total Sectors in LBA Mode = 00102660H
Single-Word DMA = 0007H
Multi-Word DMA = 0003H
2)Read Sectorsコマンドで先頭セクタ(マスターブート)を読み出した例です。
C:\ATACARD>ata 0 20 /l0 /c1 /d /m2 /g
Primary mapping.
>>Read Sectors (without retry):
>ATA CB: CM=20 DH=e0 CH=00 CL=00 SN=00 SC=01
(LBA=0000000)
* wait for BSY = 0
* wait for DRDY = 1
* wait for BSY = 0
* Clear INTRQ
Command complete.
* wait for BSY = 0
ATA RB: ST=58 DH=e0 CH=00 CL=00 SN=00 SC=01
ER=00
* wait for DRQ = 1
* read a sector
Read complete.
* wait for BSY = 0
ATA RB: ST=50 DH=e0 CH=00 CL=00 SN=00 SC=00
ER=00
Sector Data 0(00H):
00 01 02
03 04 05 06 07 - 08 09 0a 0b 0c 0d 0e 0f
-------------------------------------------------
0000 33 c0 8e c0 8e d8 fa 8e - d0 bc 00
7c fb fc 8b f4 '3..........|....'
0010 bf 00 06 b9 00 01 f2 a5 - ea 64 06
00 00 8b d5 58 '.........d.....X'
0020 a2 55 07 3c 35 74 1e b4 - 10 f6 e4
05 ae 04 8b f0 '.U.<5t..........'
0030 f6 44 04 ff 74 3b c6 04 - 80 e8 e3
00 8a 74 01 8b '.D..t;.......t..'
0040 4c 02 eb 09 90 e8 d7 00 - b9 01 00
32 d1 bb 00 7c 'L..........2...|'
0050 b8 01 02 cd 13 72 1a 81 - bf fe 01
55 aa 75 12 ea '.....r.....U.u..'
0060 00 7c 00 00 80 ca 80 8b - ea 42 80
f2 b3 88 16 47 '.|.......B.....G'
0070 07 bf be 07 b9 04 00 c6 - 06 3a 07
31 90 32 f6 88 '.........:.1.2..'
0080 2d 8a 45 04 3c 00 74 27 - 3c 05 74
23 fe c6 8d 36 '-.E.<.t'<.t#...6'
0090 37 07 e8 7b 00 8d 36 55 - 07 46 46
8b 1c 0a ff 74 '7..{..6U.FF....t'
00a0 07 3a 7d 04 75 f3 32 ff - 8d b7 75
07 e8 61 00 83 '.:}.u.2...u..a..'
00b0 c7 10 fe 06 3a 07 e2 c7 - 80 3e 75
04 02 74 0c 8d '....:....>u..t..'
00c0 36 48 07 0a f6 75 0b cd - 18 eb a6
8d 36 37 07 e8 '6H...u......67..'
00d0 3e 00 e8 3b 00 32 e4 cd - 1a 8b da
83 c3 60 b4 01 '>..;.2.......`..'
00e0 cd 16 75 0e 32 e4 cd 1a - 3b d3 72
f2 a0 55 07 eb '..u.2...;.r..U..'
00f0 0d 90 32 e4 cd 16 8a c4 - 3c 1c 74
f0 04 f6 3c 31 '..2.....<.t...<1'
00 01 02
03 04 05 06 07 - 08 09 0a 0b 0c 0d 0e 0f
-------------------------------------------------
0100 72 d3 3c 35 77 cf 50 8d - 36 35 07
8d 1e 1d 06 53 'r.<5w.P.65.....S'
0110 fc ac 50 24 7f b4 0e cd - 10 58 a8
80 74 f2 c3 56 '..P$....X..t..V'
0120 b8 01 03 bb 00 06 b9 01 - 00 32 f6
cd 13 5e c6 06 '.........2...^..'
0130 55 07 3f 90 c3 0d 8a 0d - 0a 46 35
20 2e 20 2e 20 'U.?......F5 . . '
0140 2e a0 64 69 73 6b 20 32 - 0d 0a 0a
44 65 66 61 75 '..disk 2...Defau'
0150 6c 74 3a 20 46 31 a0 00 - 01 00 04
00 06 03 07 07 'lt: F1..........'
0160 08 0a 09 0d 0a 10 13 12 - 63 16 64
16 65 1c 80 1c '........c.d.e...'
0170 81 21 82 26 00 64 6f f3 - 68 70 66
f3 66 73 20 61 '.!.&.do.hpf.fs a'
0180 69 f8 6f 73 b2 31 c2 75 - 6e 69 f8
6e 6f 76 65 6c 'i.os.1.uni.novel'
0190 ec 6d 69 6e 69 f8 6c 69 - 6e 75 f8
3f bf 00 00 00 '.mini.linu.?....'
01a0 00 00 00 00 00 00 00 00 - 00 00 00
00 00 00 00 00 '................'
01b0 00 00 00 00 00 00 00 00 - 00 00 00
00 00 00 80 01 '................'
01c0 01 00 06 1f 7f b3 3f 00 - 00 00 41
69 0d 00 00 00 '.....?...Ai....'
01d0 41 b4 13 1f bf 0b 80 69 - 0d 00 00
b5 02 00 00 00 'A......i........'
01e0 00 00 00 00 00 00 00 00 - 00 00 00
00 00 00 00 00 '................'
01f0 00 00 00 00 00 00 00 00 - 00 00 00
00 00 00 55 aa '..............U.'
ソースファイル
ata.c csk.c csk.c atak.c cs.h atak.h
ata.h
コマンドシンタックス
QDPARA <drive no>
コマンドオプション
<drive no> ドライブ番号(0、1、2、…)
実行例
C:\ATACARD>qdpara
0
Inquiry
of Disk Parameters (V1.00)
Copyright
K.Sasaki 1995
Drive
0 Parameters (total drives = 1):
03afH cylinders, 0eH heads, 34H
sectors/track
ソースファイル
qdpara.c
コマンドシンタックス
DDUMP <drive no> /Hn /Yxxxx /Nxx
[/O<outfile>]
コマンドオプション
<drive no> ドライブ番号(0、1、2、…)
/Hx
head(6 bits)
/Yxxxx
cylinder(16
bits)
/Nxx
sector number
/O<outfile>
put
read data into the file
ソースファイル
ddump.c
動作環境
MS-DOS(Windowsのコマンドプロンプトでは動作しません)
注意
これらのコマンドは、当時はATAカードを使って確認していました。すべてのマシン、PCカードでうまく動作するか、悪影響を与えないかどうかについては分かりません。使用に当たっては十分注意してください。
ダウンロード
カードサービス関係のダウンロードはこちら(PCMCIA.LZH)から。ATAコマンド関係のダウンロードはこちら(ATACARD.LZH)から。
ダウンロードしたファイルをLZHで解凍してください。解凍後のファイルmakefileがマイクロソフトのnmakeコマンドのメイクファイルです。