*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