MZ-2500 のディスクについての情報です。

■ディスクの仕様
3.5 インチ 2DD ディスク
シリンダ数 80
ヘッド数 2
セクタ長 256 バイト
トラック数 160 (シリンダ数 x ヘッド数)
1トラック辺りのセクタ数 16
全セクタ数 2560 (トラック数 x 1トラック辺りのセクタ数)
容量 655360 バイト (640 キロバイト)
注意
以後、ディスクの場所を示す場合、最初のトラックの最初のセクタを 0 として最後のトラックの最後のセクタを 2559 とした通しセクタ番号を使用します。

■ディスクの構造
通しセクタ番号 トラック番号 セクタ番号 システムディスク データディスク
0 0 1 IPL
1 0 2 起動ファイル情報 1 未使用(すべて00h)
2 0 3 起動ファイル情報 2 未使用(すべて00h)
3 0 4 起動ファイル情報 3 未使用(すべて00h)
4~14 0 5~15 未使用(すべて00h)
15 0 16 FAT(ビットマップ)
16~23 1 1~8 ディレクトリ(64個分)
24 1 9 プリンタ情報 未使用(すべてBFh)
25 1 10 アルゴキー情報 未使用(すべてBFh)
26~n-1 nによって変動 nによって変動 Sys Loaderなど起動時に読み込むデータ 未使用(すべてBFh)
n~2559 nによって変動 nによって変動 ファイルデータ
nはビットマップのオフセット x (ビットマップのブロックサイズを示す倍率 + 1)
例としてはBASIC v1.0の起動ディスクなら240、BASIC v2.0の起動ディスクなら272、データディスクなら48
起動時に読み込むデータはディレクトリに存在しない
トラック番号 = int(n / 16)
セクタ番号 = n % 16 + 1

■IPL (通しセクタ番号 0)
アドレス +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00h 機種 起動用シグネチャ 起動システム名→
10h 未使用 読み込みサイズ 読込開始アドレス 実行アドレス 未使用 ロード開始セクタ
20h ロードするメモリブロック列
30h 実行開始時のマッピング 未使用
40h~FFh 未使用

■起動ファイル情報 (通しセクタ番号 1~3)
アドレス +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00h 04h固定 起動システム名→
10h 未使用 読み込みサイズ 読込開始アドレス 実行アドレス 未使用 ロード開始セクタ
20h ロードするメモリブロック列
30h 実行開始時のマッピング 未使用
40h~FFh 未使用

機種 01h MZ-80B/2000/2200/2500
02h MZ-80A
03h MZ-700/1500
04h MZ-2500 データディスク
起動用シグネチャ 起動ディスク 49h 50h 4Ch 50h 52h 4Fh 'IPLPRO'
データディスク 00h で埋まっている
起動システム名 0Dh で終わる文字列
読み込みサイズ ロードしたプログラムの読み込みバイト数
読み込み開始アドレス プログラムをロードする先頭アドレス
実行アドレス ロードしたプログラムの実行アドレス
ロード開始セクタ IPL がロードする先頭セクタ番号
ロードするメモリブロック列 調査中
実行開始時のマッピング 調査中

■FAT(ビットマップ) (通しセクタ番号 15)
アドレス +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00h ボリューム番号 オフセット 使用済みブロック数 全体ブロック数 各ブロックの使用状況→
10h~EFh
F0h ブロックサイズを示す倍率

ボリューム番号 MZ-2500 では使用されていない 01h 固定
他の MZ では、システムディスクは 00h、
データディスクは 01h ~ FFh
オフセット データ領域の位置を示します
この値にブロックサイズを示す倍率を掛けた値が
データ領域の先頭セクタを示します
使用済みブロック数 使用済みのブロック数を示します
システム領域を含めた全ての使用済みブロックを示します
全体ブロック数 全体のブロック数を示します
2DD の 160 トラック場合は 500h
2D の 80 トラックの場合は 500h
70 トラックの場合は 460h
各ブロックの使用状況 1 ブロックが 1 ビットで示されます
1 バイトで 8 ブロック、全部で 1992 ブロックの管理が可能
1 が使用中、0 が未使用です
ブロックサイズを示す倍率-1 セクタサイズに対するブロックサイズの
倍率から 1 引いた値を示します
2D の場合は 0 で倍率は 1、ブロックサイズは 256 バイト
2DD の場合は 1 で倍率は 2、ブロックサイズは 512 バイト

■ディレクトリ (通しセクタ番号 16~23、64 個)
アドレス +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00h モード ファイル名
10h 属性 未使用 ファイルサイズ ロードアドレス 実行アドレス 作成日付 開始セクタ

モード 00h 未使用
01h OBJ (マシン語プログラム)
02h BTX (BASIC プログラム)
03h BSD (シーケンシャルファイル)
04h BRD (ランダムファイル)
0Fh サブディレクトリ
80h SWAP されたファイルがない
81h SWAP されたファイルがある
ファイル名 0Dh で終わる文字列。0Dh を合わせて 17 バイト。
属性 b0 プロテクト (0 = 通常ファイル、1 = プロテクトファイル)
b7 0 = 通常ファイル、1 = ディレクトリ
ファイルサイズ モードが BRD の場合は実際のサイズを 32(20h) で割った値が記録される
モードがサブディレクトリの場合はディレクトリ64個分である0x800(2048)固定
その他のファイルはバイト数が記録される
ロードアドレス ロードするアドレス、モードが OBJ の場合のみ有効
実行アドレス 実行するアドレス、モードが OBJ の場合のみ有効
作成日付
1 バイト目 2 バイト目 3 バイト目 4 バイト目
b7b6b5b4 b3b2b1b0 b7b6b5b4 b3b2b1b0 b7b6b5b4 b3b2b1b0 b7b6b5b4 b3b2b1b0
10の位
(0~9)
1の位
(0~9)
10の位
(0~1)
1の位
(0~9)
10の位
(0~3)
1の位
(0~9)
10の位
(0~2)
1の位
(0~9)
10の位
(0~5)
1の位
(0~9)
開始セクタ ファイルが記録されている先頭セクタ番号

■MZ-2500 BASIC-M25 GSAVE、GLOAD ファイル形式
ヘッダ部
アドレス 内容
0000h ~ 000Fh 67h 72h 61h 70h 68h 69h 63h 20h 64h 61h 74h 61h 20h 30h 30h 30h
'graphic data 000'
0010h ~ 0013h 未使用 (すべて 00h)
0014h ~ 0015h 画像の幅
0016h ~ 0017h 画像の高さ
0018h 10h 16 色
20h 256 色
0019h ~ 00FFh 未使用 (すべて 00h)

データ部 (16 色モード)
青 1 バイト
赤 1 バイト
緑 1 バイト
光度 1 バイト
の順番で画像データのサイズ分埋まっている
各バイトは各色成分 8 ドット分を表している
よって 4 バイトで 16 色 8 ドット分を表している

データ部 (256 色モード)
画像データは1ドット1バイトで8バイト単位で保存されている。
画面上の並びが以下のようになっているとすると
[0][1][2][3][4][5][6][7]
データ上は
[4][0][7][5][1][3][6][2]
に並べ替えられて8バイト単位で保存されている。
上記間違っていました。詳しくは不明、調査中。RGBのどれを2ビットにするか設定できたような気がする。
あと16色、256色どちらもビットの並びがWindows等とは逆になっているかもしれない。
戻る