No.2
- 回答日時:
ここで出た答えでプログラムできるような
生易しいものではないと思います。
専門書を何冊も読破して
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 );
}
No.3
- 回答日時:
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の中古を探すのが面倒ですし、値段も意外と高くなってきている事。
などでしょうか。
No.5ベストアンサー
- 回答日時:
ネットで見つかるのはこの程度だと思います。
http://community.osdev.info/index.php?%28FDC%297 …
BIOSだったら下のURLです。
参考URL:http://community.osdev.info/index.php?%28AT%29BIOS
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- モニター・ディスプレイ 画像解像度について 4 2022/05/30 16:05
- Windows 7 Windows7でMicrosoft VirtualPC2007 SP1を使用する 9 2022/11/17 13:12
- ドライブ・ストレージ HDDの代替処理保留中のセクタ数と回復不能セクタ数について 7 2023/06/06 13:15
- その他(コンピューター・テクノロジー) USBメモリのアクセスの遅い部分を避けて利用する方法 5 2022/10/18 13:32
- Windows 10 windows11が突然起動しなくなりました 3 2022/06/30 17:49
- ドライブ・ストレージ Win11 外付けHDDが認識されない 4 2022/05/24 10:02
- サーバー アクセスが集中してサーバーが落ちるのとDos攻撃は、悪意の有無の違いだけで仕組みは同じですか? 2 2023/04/21 23:57
- ブルーレイ・プレーヤー・レコーダー 動画のDVD出力と再生について 6 2022/12/07 09:47
- USBメモリー・SDカード・フラッシュメモリー クイックフォーマットと通常フォーマットはどこが違うのでしょうか。 8 2022/04/07 19:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba 実数および実数タイプの変...
-
あるプログラムのコマンドライ...
-
パックマンプログラム
-
VBAにてメール作成した際、一部...
-
Excelに埋め込んだVBAのプログ...
-
VBAでユーザーフォームが自動的...
-
プログラムの例外処理について
-
Excelで4096点以上のFFTの方法
-
読み込み中にアクセス違反が発...
-
UWSCで指定のフォルダを開きたい。
-
VBでのPublic変数につ...
-
VBAが止まります。
-
特定のwebサイトのタイトルや記...
-
RSAのCプログラム
-
ドロップダウンリストの文字を...
-
「Outlookが他のプログラムによ...
-
プログラムのループの周期を設...
-
寿命
-
VBで環境変数をSETする方法
-
3つの整数を読み込み昇順に並べ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
「Outlookが他のプログラムによ...
-
Excelに埋め込んだVBAのプログ...
-
VBAにてメール作成した際、一部...
-
Notepad++の関数リスト表示でC...
-
自動クエリとはどういうもので...
-
読み込み中にアクセス違反が発...
-
PICマイコンのコピー(クローン...
-
XnViewにwebpを「いつも開く」...
-
未使用の変数を一括検索する方法
-
VBAでユーザーフォームが自動的...
-
UWSCで指定のフォルダを開きたい。
-
パックマンプログラム
-
このプログラミング誰か教えて...
-
モジュール、アプリケーション...
-
Vba UserFormを前面に出す方法...
-
特定のwebサイトのタイトルや記...
-
ドロップダウンリストの文字を...
-
テキストボックスのエンターキ...
おすすめ情報