プロが教える店舗&オフィスのセキュリティ対策術

DOS/V機のフロッピーディスクBIOSについて説明しているHPはないでしょうか?
また下記質問に答えて頂けれはありがたいのですが

1.FDDが3モードかどうかを判断する方法。
2.セクタの読み書き
  (倍密、単密、セクタ長の指定の仕方)
3.フォーマット

DOS/V機でNEC PC-9801 のディスクベーシックで使用されていたフォーマットの様なディスクをアクセスしたいのです。

宜しくお願いします。

A 回答 (5件)

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

    • good
    • 0

ここで出た答えでプログラムできるような


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

この回答への補足

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 );
}

補足日時:2005/03/13 18:10
    • good
    • 0

DOSの話なら、セクタサイズが違うっていうかPC98系のフォーマットは1.2Mで、DOS/Vなら皆知ってる1.44MBですね。



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

この回答への補足

ありがとうございます。

読み書きしたい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の中古を探すのが面倒ですし、値段も意外と高くなってきている事。
などでしょうか。

補足日時:2005/03/13 17:15
    • good
    • 0

BIOS INT13Hで検索すると、いくつか出てくると思います。



で、FDDが3モードかどうかは、英語のぺーじでは出てこないと思います。
    • good
    • 0

ネットで見つかるのはこの程度だと思います。



http://community.osdev.info/index.php?%28FDC%297 …

BIOSだったら下のURLです。

参考URL:http://community.osdev.info/index.php?%28AT%29BIOS
    • good
    • 0
この回答へのお礼

大変参考になりました。

お礼日時:2005/03/13 17:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!