• ベストアンサー

フロッピーセクタアクセスに関して

初めてお目にかかります。 今、PC98で書き込みを行ったフロッピーディスクを読み取るプログラムを作成しています。 インターネットにて調べて見ましたが、うまくいかない状態です。 問題点等あれば教えていただきたいと思います。 実行環境:Windows XP SP2 ドライブ:LOGITEC LFD-31U4 (USB:3モード) 開発言語:VC++(VS2005にて) BOOL Direct_Drive_Access(char *Drive){   HANDLE hHandle;   DISK_GEOMETRY disket;   DWORD dw1;   BOOL ret;   //ハンドルの取得   hHandle = CreateFile(Drive,GENERIC_READ , FILE_SHARE_READ,NULL,OPEN_EXISTING, NULL, NULL);   if ( hHandle != INVALID_HANDLE_VALUE ){     //FDの情報を取得     ret = DeviceIoControl(hHandle,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&disket,sizeof(disket),&dw1,NULL);     if (!ret) return FALSE;   } } 上記のソースにて取得したdisketの内容が、1.44MBのフロッピーでした。 (この情報だと、次のReadFile関数で"1785:フォーマットされていません"のエラーが返ります) 実際は、Cylinder - 77 Track - 2 Sector - 26 Byte - 256 でフォーマットしているフロッピーです。 BIOS経由のアクセスも調べましたが、32bitOSのため、使用できない様でした。 これから何を調べていいかも分からない状態なので、アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.3

>Cylinder - 77 Track - 2 Sector - 26 Byte - 256 ということは、N88DISK-BASICなり(FDの場合、Cylinder, HeadまちたはSurface, Sector)、IBM互換なりのフォーマットですよね。とすると、Cyliner0 Head0は単密度でセクタ長は128なので、Nが変わりますが、これは大丈夫ですか(Head1は倍密度だったと思う)。 なお、3モードはドライバが組み込まれていれば、OSからはパラメータ変更だけでINITかければ使えると聞いたことがあります(やったことはない) DOSの領域のディスクを作って、FD起動でDOS立ち上げてCからATのシステムコールを使った方が簡単だと思うなあ

nao_dot
質問者

補足

>N88DISK-BASICなり(FDの場合、Cylinder, HeadまちたはSurface, Sector)、IBM互換なりのフォーマットですよね。 ご指摘の通り、IBMフォーマットのディスクをPC98のFD-BIOSで書き出したファイルです。 16bitのときにはBIOSのINT13Hのコールでよさそうですが、NT系のOSでもしかしたらサポートして無いかな? と思い質問いたしました、32bitの場合は難しそうですね… 他のファイル変換ソフトを使用し、バイナリダンプ作成後に処理を行う等の方法を検討してみます。 ありがとうございました。

その他の回答 (2)

noname#43437
noname#43437
回答No.2

NNo1です。引き続き・・・ 「Windows XP は 1.44 MB ディスク形式のフォーマットのみをサポートします。3 モード フロッピー ドライブ (720 KB、1.2 MB、および 1.44 MB 3.5 インチ フロッピーディスクを読み書き可能なドライブ) は特別なドライバのサポートが必要であり、Windows XP ではサポートしていません。」 http://support.microsoft.com/default.aspx?scid=kb;ja;309623 だそうです。。。 かくなる上は、ハードウェア直接制御、でしょうか。。 ドライバとか作らないと、無理そうですね。。

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;ja;309623
nao_dot
質問者

補足

返事が遅くなり申し訳ありません。 ドライバ…難しいですね… XPではドライバ無しでは1.25MBは読めないみたいですね… 考慮して再度考えて見ます。 ありがとうございました。

noname#43437
noname#43437
回答No.1

「フォーマットされていません」ということは、 rawアクセスできていないのではないでしょうか? デバイス名はあってますか? http://support.microsoft.com/kb/100027/ja

参考URL:
http://support.microsoft.com/kb/100027/ja
nao_dot
質問者

補足

YAMAMAYAさん 早速の回答ありがとうございます。 デバイス名は"\\\\.\\A:"を渡しており、試しに1.44MBの フロッピーでプログラムを実行した所、ReadFileまで 正常に動作しました。 DeviceIoControlで、1.44MBのフロッピーを読んでも、1.25MBの フロッピーを読んでも結局同じdisketが返ってきてしまいます。 1.25MBのダイレクトセクタアクセスは出来ないのでしょうか…