CE.NETでPromise Ultra66を使う
CE.NET4.2のIDE/ATAPIドライバATAPI.DLLは、Intel 82371、ALI1543、National (AMD) GEODE以外に、Promise PDC20262用のコードとレジストリ設定が含まれています。ここでは実際にUltra66を入手して、ATAPI.DLLの動作を確認してみました。
使用したのはおなじみBCOM WINNET6です。写真のように3.3V PCIスロットにUltra66を挿し、80ピンケーブルでハードディスクと接続しました。
ATAPI.DLLのソースコードはPlatform Builder 4.2内の
%_WINCEROOT%\PUBLIC\COMMON\OAK\DRIVERS\BLOCK\ATAPI
にあります。レジストリ設定によりハードディスク/CD(DVD)-ROMのそれぞれでDMAモードを使用するかどうかを設定することが可能です。ここでは素直にDMAモードでを動かしてみました。(※)
で、結果的にはまったく問題なく動作しました。CETKのコードを改造して作成した転送速度テストでは約4MB/secの転送速度が得られました。
ただし、ソースコードを見てみると実際にサポートされているのはマルチワードDMA Mode0までのようです。
以下、atapiio.cppの356行目あたりですが、
WriteFeature(ATA_SET_TRANSFER_MODE);
WriteSectorCount( bMode);
WriteSectorNumber(0);
WriteLowCount(0);
WriteHighCount(0);
WriteCommand( IDE_COMMAND_SET_FEATURE);
これがATA/ATAPI-6の 8.46.11 Set Transfer Modeに相当します。ali.cppやpromise.cppでは SetTransferMode(0x20)を呼び出していますが、これはマルチワードDMA Mode0 (最大4.16MByte/sec)なんですね。ということで、スペックどおり正しく(???)動作していることが確認されました。
※ちなみにGEODE本体のIDEポートではMultiword DMAはうまく動作しませんでした。