*PCカードATA
-[[PCMCIA]]を使ったATAデバイス。
-[[CompactFlash]]やそのほかのメモリカード([[memcard]])も、たいていはアダプタをつけるとPCカードATA相当になる。

*基礎知識
-コンパクトフラッシュのメモリカードにはPCカードATAのほかにTrueIDEモードという特別なモードがあるが、これはPCMCIAスロットではなく、専用のATAコネクタにつないだときにのみ移行するモードであり、この場合は以下のような方法ではなく、普通のATAデバイスとしてアクセスする
-PCカードATAの中にもTrueIDEモードをサポートしているカードがそこそこある
-PCカード接続の場合のATAカードは、PCMCIAの規則にのっとってコンフィギュレーションしないとATAアクセスできない
--もちろんATAアクセス以外でアクセスする方法もない(バンク切り替え式ダイレクトアクセスみたいなことはできない)
-ATAカードにもちゃんとCISタプルがあるので、それを読んでATAカードかどうかを判別するわけである

*設定方法
-以下の4種類から選ぶ
--PCMCIAのコモンメモリ空間へのマッピング(16バイト) (CFでは必須だがPCカードATAではオプション)
--連続したI/Oアドレス空間へのマッピング(16バイト) (必須)
--I/Oアドレス空間の0x1f0~1f7と0x3f6へのマッピング (マスターモードは必須、スレーブモードはオプション)
--I/Oアドレス空間の0x170~177と0x376へのマッピング (マスターモードは必須、スレーブモードはオプション)
--[[K]]がアセンブラでドライバを作ってみたところでは、コモンメモリ空間へのマッピングが一番使いやすかったです。
-このどれにするかを具体的に設定するのは各カードの仕様に依存する
--しかし[[CompactFlash]]ではこの設定方法も規定されている
--これについては、[[CompactFlash]]の項を参照のこと
-[[CompactFlash]]でコモンメモリ空間へマッピングした場合、アドレス0x000~0x00fにマップされる
--実は0x400~7ffにもデータレジスタがマップされる
---でもまあ使わないと思うから説明は省略
-[[CompactFlash]]の場合、属性メモリ空間の0x206も設定用の8bitレジスタになっている
--bit4でATAデバイス番号(マスターかスレーブ)を表わす
--他のbitはリザーブなので0を書き込むこと
--このレジスタはリードしてもよい

*アクセス方法
-ATAでのアクセス方法は既知であるとする
-0x1f0~1f7&0x3f6か0x0170~177&0x376にI/Oマップした場合は、普通のATAデバイスと同じようにアクセスすればよい
-16バイトマッピングの場合:
--最初の8バイトの部分[0-7]が0x1f0~1f7と全く同じ挙動になる
--後半8バイトのうち、[e]の部分が0x3f6と同じ挙動になる
--後半8バイトのうちの残り7バイトは未定だったり意味があったりするが、別に分からなくてもドライバを書く上では困らないだろう

*こめんと欄
-0x400-0x7ffにマップされたデータレジスタを使うと, ストリング命令で読み書きできて便利ですよ。 -- [[I.Tak.]] SIZE(10){2003-11-10 (月) 10:10:30}
#comment


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS