-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathnfdr1.txt
122 lines (97 loc) · 5.62 KB
/
nfdr1.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
NFD r1形式ファイル構造仕様
2001/09/14 LED
□はじめに
このテキストはPC9821エミュレータT98-Nextのフロッピーディスクイメージファイル
NFD r1形式の構造を規定したものです。データ解析、ツール開発等にご自由に利用
してください。
□構造について
NFD形式の構造は大きくヘッダ部とデータ部に分けられます。
ファイルの先頭からヘッダ部が存在し、その後ろにデータ部が存在します。
【ヘッダ部】
ヘッダ部はその中でさらに「全体情報部」「セクタ情報部」「特殊読み込み情報部」
に分けられます
「全体情報部」
イメージ全体の情報を格納します。この部分はファイル先頭より固定で入ります
typedef struct {
char szFileID[sizeof(NFD_FILE_ID1)]; /* 識別ID "T98FDDIMAGE.R1" */
char Reserv1[0x10-sizeof(NFD_FILE_ID1)]; /* 予備 */
char szComment[0x100]; /* コメント */
DWORD dwHeadSize; /* ヘッダのサイズ */
BYTE flProtect; /* ライトプロテクト0以外 */
BYTE byHead; /* ヘッド数 1-2 */
char Reserv2[0x10-4-1-1]; /* 予備 */
DWORD dwTrackHead[164]; /* トラックID位置 */
DWORD dwAddInfo; /* 追加情報ヘッダのアドレス */
char Reserv3[0x10-4]; /* 予備 */
}NFD_FILE_HEAD1,*LP_NFD_FILE_HEAD1;
注)構造体の境界は1バイト単位とする
予約領域は0で埋めること
dwHeadSizeはヘッダ部全体の大きさを示す
swTrackHeadはセクタ情報部のトラックの先頭位置を絶対アドレスで示す
但し、存在しないトラックの場合0が入る
dwAddInfoは予約で現状では0固定です。
全体情報部の後にトラック単位で「セクタ情報部」と「特殊読み込み情報部」が
混合して入ります
typedef struct {
WORD wSector; /* セクタID数 */
WORD wDiag; /* 特殊 ID数 */
char Reserv1[0x10-4]; /* 予備 */
}NFD_TRACK_ID1,*LP_NFD_TRACK_ID1;
wSectorにそのトラック中のセクタ数を格納します
wDiagにそのトラック中の特殊データ数を格納します
wSectorの数分以下のセクタ情報ヘッダを格納します
typedef struct {
BYTE C; /* C */
BYTE H; /* H */
BYTE R; /* R */
BYTE N; /* N */
BYTE flMFM; /* MFM(1)/FM(0) */
BYTE flDDAM; /* DDAM(1)/DAM(0) */
BYTE byStatus; /* READ DATA RESULT */
BYTE bySTS0; /* ST0 */
BYTE bySTS1; /* ST1 */
BYTE bySTS2; /* ST2 */
BYTE byRetry; /* RetryDataなし(0)あり(1-) */
BYTE byPDA; /* PDA */
char Reserv1[0x10-12]; /* 予備 */
}NFD_SECT_ID1,*LP_NFD_SECT_ID1;
CHRNにそのセクタのセクタIDを格納します
byStatusにPC98x1でそのセクタをINT 1BhのREADDATAで読みとったときのリザルトを
格納します
bySTS0-2も同様でFDCのST0-2を格納します
byRetryは不安定データを持つセクタの場合、データを複数回読んで記憶する場合に
使用し、例えばbyRetry=8の場合、データを9通り持つことが出来ます
T98-NextはbyRetryが0以外の場合リトライデータを順に使用します
byPDAは対応するデバイスアドレスの下位4ビットを0にした値を格納します
byPDAが0の場合T98-Nextはセクタサイズからメディアを自動判別します
その後にwDiagの数分、特殊読み込み情報ヘッダを格納します
typedef struct {
BYTE Cmd; /* Command */
BYTE C; /* C */
BYTE H; /* H */
BYTE R; /* R */
BYTE N; /* N */
BYTE byStatus; /* READ DATA RESULT */
BYTE bySTS0; /* ST0 */
BYTE bySTS1; /* ST1 */
BYTE bySTS2; /* ST2 */
BYTE byRetry; /* RetryDataなし(0)あり(1-) */
DWORD dwDataLen;
BYTE byPDA; /* PDA */
char Reserv1[0x10-15]; /* 予備 */
}NFD_DIAG_ID1,*LP_NFD_DIAG_ID1;
Cmdには特殊読み込みを行うコマンドをINT 1BhのAH値の下位4bitで格納します
READ DATAに対して特殊読み込みを規定する場合は06h、READ DIAGNOSTICの場合02h等
CHRNには特殊読み込みが呼ばれる際のセクタIDを格納し
byStatus、bySTS0-2は特殊読み込み後のステータスを格納します
byRetryはセクタID同様に使用します
dwDataLenは転送を行うデータサイズを格納します
byPDAは対応するデバイスアドレスの下位4ビットを0にした値を格納します
byPDAが0の場合T98-Nextはセクタサイズからメディアを自動判別します
T98-Nextは特殊読み込みデータの情報をセクタIDより優先して使用します
この情報を使用することによってREADDIAGNOSTICでの読み出し結果を個別で指定
できたり出来るようになります
これらNFD_TRACK_ID1以下の情報をdwTrackHeadで示された回数分繰り返します
【データ部】
ファイルの先頭からヘッダ部のdwHeadSizeバイト以降からデータ部となります。
データ部はヘッダに格納された順にデータを連続に配置します。