• ベストアンサー

DOS/V のフロッピーディスクアクセスについて

DOS/V機のフロッピーディスクBIOSについて説明しているHPはないでしょうか? また下記質問に答えて頂けれはありがたいのですが 1.FDDが3モードかどうかを判断する方法。 2.セクタの読み書き   (倍密、単密、セクタ長の指定の仕方) 3.フォーマット DOS/V機でNEC PC-9801 のディスクベーシックで使用されていたフォーマットの様なディスクをアクセスしたいのです。 宜しくお願いします。

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

  • ベストアンサー
  • net_eru
  • ベストアンサー率100% (1/1)
回答No.5

ネットで見つかるのはこの程度だと思います。 http://community.osdev.info/index.php?%28FDC%29765A BIOSだったら下のURLです。

参考URL:
http://community.osdev.info/index.php?%28AT%29BIOS
akasyatu
質問者

お礼

大変参考になりました。

その他の回答 (4)

  • rot-N
  • ベストアンサー率27% (118/432)
回答No.4

BIOS INT13Hで検索すると、いくつか出てくると思います。 で、FDDが3モードかどうかは、英語のぺーじでは出てこないと思います。

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.3

DOSの話なら、セクタサイズが違うっていうかPC98系のフォーマットは1.2Mで、DOS/Vなら皆知ってる1.44MBですね。 ただし、akasyatuさんの質問では、mikeさんの回答の通り、88(86)BASICのSAVEコマンドがどのようなデータを書くのか熟知した上で、自力でプログラム作成してバイナリデータの読み出し掛けないとデータ取り出せませんので、相当にプログラム能力を必要とするでしょう。 それよりは、98をオークション等で入手してデータ吸い出した後にDOS/V形式でFDDにコピーしてから読み出す方が簡単な気がしてなりません。(プログラムのアドバイスじゃないけど)

akasyatu
質問者

補足

ありがとうございます。 読み書きしたいFDの構成は トラック0のヘッド0、1が片面単密     8 セクタ/トラック   128 byte/セクタ 以降76トラックまでが    26 セクタ/トラック   256 byte/セクタ で、 [Track=0, Head=0 Sector=5]がエラーマップ領域 [Track=0, Head=0 Sector=7]がボリュームラベル [Track=0, Head=0 Sector=8]から [Track=1, Head=1 Sector=26]がファイルラベル領域(FATの様なもの) 以降がデータ領域となっています。 現在PC-9801においてはCによりFD-BIOISをコールしてのプログラム  ・FDリスト表示  ・ファイル変換(相互)  ・ディスクフォーマット  ・セクタ読み書き  ・ディスク丸ごと保存/復元 は作成済みであり利用しています。 PC98シリーズ用のFD-BIOS資料として 秀和システムトレーディング(株)の 「PC-9800シリーズ フロッピィディスクパーフェクトブック」を所持していた為、簡単に作成できたのですが、 PC/ATのFD-BIOSの資料が皆無な為、物理的に不可能かどうかも分からない状態なのです。 A/Tで出来ないかと思う様になった理由としては ・自前のPC-9801NS/Aの1台が起動しなくなった事。 ・バックアップにMAXLINKが利用できなくなった事。 ・MAXLINKの代わりとしてWIN98の起動デスクによるDOSLANにしたが、プロトコルっがNetBEUIであり、XPが標準でサポートしていない事。 また、DOS側からしかアクセス出来ない事。 ・PC98の中古を探すのが面倒ですし、値段も意外と高くなってきている事。 などでしょうか。

  • 2mike
  • ベストアンサー率12% (1/8)
回答No.2

ここで出た答えでプログラムできるような 生易しいものではないと思います。 専門書を何冊も読破して C言語で眠りながらプログラムをかけるぐらいでないと無謀でしょう。

akasyatu
質問者

補足

PC98の場合がFD-BIOSがわかれば簡単にできます。 例えば下記コードは1セクタ読み出しとトラックフォーマットです。 セクタ読み込み int read_1sector( int daua, int track, int head, int sector, char *buff ) { struct diskinfo dinfo; /* AH : MT|MF|R|SK|0110| */ dinfo.cmd = 0x56; /* 倍密度 */ if( track == 0 && head == 0 ) dinfo.cmd = 0x16; /* 単密度 */ /* AL : PDA (Physical Device Address) */ dinfo.devtype = daua; /* BX : 転送データ長 ( 128 or 256 ) */ if( track == 0 && head == 0 ) dinfo.datalen = 128; else dinfo.datalen = 256; /* CH : (N) セクタ長 (0:128byte 1:256byte) */ if( track == 0 && head == 0 ) dinfo.seclen = 0; else dinfo.seclen = 1; /* CL : (C) シリンダ番号 ( 0 - 76 ) */ dinfo.cylnum = track; /* DH : (H) サーフェス番号 ( 0 or 1 ) */ dinfo.headnum = head; /* DL : (R) セクタ番号 ( 1 - 26 ) */ dinfo.secnum = sector; /* ES : データバッファのセグメント */ /* BP : データバッファのオフセット */ dinfo.databuf = buff; return (pc98disk( &dinfo ) & 0xff ); } 1トラックフォーマット int format_track( int daua, int track, int head ) { struct diskinfo dinfo; int i, sector, n; char buff[4 * 26 + 1]; char *data; data = buff; if( (unsigned int)data & 1 ) data++; /* to even address */ for( i = 0, sector = 1, n = 0 ; i<26 ; i++, sector++, n += 4 ){ data[ n ] = track; /* C */ data[ n + 1 ] = head; /* H */ data[ n + 2 ] = sector; /* R */ if( track == 0 && head == 0 ) data[ n + 3 ] = 0; /* N (128 byte) */ else data[ n + 3 ] = 1; /* N (256 byte) */ } if( track == 0 && head == 0 ) dinfo.cmd = 0x3D; /* WRITE_ID (単密度) */ else dinfo.cmd = 0x7D; /* WRITE_ID (倍密度) */ /* AL : PDA (Physical Device Address) */ dinfo.devtype = daua; /* BX : 転送データ長 (|C H R N| * sector) */ dinfo.datalen = 4 * 26; /* CH : (N) セクタ長 (0:128byte 1:256byte) */ if( track == 0 && head == 0 ) dinfo.seclen = 0; else dinfo.seclen = 1; /* CL : (C) track番号 ( 0 - 76 ) */ dinfo.cylnum = track; /* DH : (H) サーフェス番号 ( 0 or 1 ) */ dinfo.headnum = head; /* DL : Data Pattern */ dinfo.secnum = 0x40; /* ES : データバッファのセグメント */ /* BP : データバッファのオフセット */ dinfo.databuf = data; return ( pc98disk( &dinfo ) & 0xff ); }

  • kazu-gto
  • ベストアンサー率25% (53/205)
回答No.1

DOS/V機とPC98シリーズではディスクの互換性が無かったように記憶しています(OSがMS-DOSの時).

関連するQ&A

専門家に質問してみよう