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)                  社団法人 日本電子工業振興協会(現 社団法人 電子情報技術産業協会

ANSI T13 技術委員会

PCMCIA ホームページ         

1          カードサービス操作例

ここでは、作成したコマンドの解説をします。これらのコマンドで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用クライアントドライバはないので単にソケットに指してもコンフィギュレーションは行われていない状態です。

1.1 PCMCIAカ−ドサ−ビス情報の問い合わせ

 

コマンドシンタックス

 

          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

 

1.2 PCMCIAのソケット情報を読みだす

 

コマンドシンタックス

 

          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

 

1.3 PCMCIAのタプル情報を読みだす

 

コマンドシンタックス

 

          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

 

1.4 PCMCIAのクライアント情報を読みだす

 

コマンドシンタックス

 

          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

 

1.5 PCMCIAのコンフィグレーションレジスタを読みだす

 

コマンドシンタックス

 

          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

 

1.6 PCMCIAクライアントの登録、コールバックのテスト

 

コマンドシンタックス

 

          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

 

2          ATAコマンド操作例

ATAはAT Attachment の略でANSIで規格化を行なっているIDEの正式な規格です。(参考:ANSI T13技術委員会

各コマンドをオプション /? をつけて実行するとシンタックスとオプションパラメータの意味を表示します。

2.1 PCカ−ドへソフトリセット発行

コマンドシンタックス

 

          ATASRST [/S<n>]

 

コマンドオプション

          <n>                           ソケット番号(0、1、2、…)

 

ソースファイル

  atasrst.c csk.c csk.c atak.c cs.h atak.h ata.h

 

2.2 PCカ−ドへATAコマンド発行

コマンドシンタックス

 

          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                       Base Port(n=1,2) or Duplicate Data Port(n=3)

           /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 Para : 91

 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

 

2.3 ハードディスクのパラメータを取得(BIOSのint13を使用する)

コマンドシンタックス

 

          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

 

2.4 ハードディスクの内容を16進数で表示する(BIOSのint13を使用する)

コマンドシンタックス

 

          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

 

 

3          ダウンロード

動作環境

MS-DOS(Windowsのコマンドプロンプトでは動作しません)

 

注意

これらのコマンドは、当時はATAカードを使って確認していました。すべてのマシン、PCカードでうまく動作するか、悪影響を与えないかどうかについては分かりません。使用に当たっては十分注意してください。

 

ダウンロード

カードサービス関係のダウンロードはこちら(PCMCIA.LZH)から。ATAコマンド関係のダウンロードはこちら(ATACARD.LZH)から。

ダウンロードしたファイルをLZHで解凍してください。解凍後のファイルmakefileがマイクロソフトのnmakeコマンドのメイクファイルです。

 

一覧へ戻る