インターネット&PC120%活用:PC活用編

FM-7/8 復活作戦 F-BASIC(DISK BASIC)のDISKイメージファイルの作成


今回は、F-BASIC(DISK BASIC)のDISKイメージファイルの作成です。


1 XM7のサポートするフォーマット(D77フォーマット)
XM7では2DフォーマットとD77フォーマットのイメージファイルをサポートしています。
そのうちのD77フォーマットは、PC-88用のエミュレーターでよく使われているD88フォーマトと互換性のある
フォーマットです。D88フォーマットの詳細については、ぶーる牧場に解説されていますので、参照して下さい。
ここら辺の情報も必要になる時があるかもしれないので、必要な部分だけ以下に概説します。
(下記の表は、ぶーる牧場のD88技術情報のページの抜粋です)
イメージファイルD88
ヘッダー部
トラック部(0 TRACK)
トラック部(1 TRACK)


トラック部(83 TRACK)
複数ディスクの場合、これらのファイルを連結します。
ヘッダー部(サイズ 2B0H)
offset size(byte) 内容
0000H 17 ディスクの名前(ASCIIZ)
0011H 9 リザーブ( 00H )
001AH 1 ライトプロテクトフラグ( 00H:なし, 10H:あり )
001BH 1 ディスクの種類( 00H: 2D, 10H: 2DD, 20H: 2HD )
001CH 4 (DWORD) ディスクのサイズ
0020H 4 (DWORD) * 164 トラックデータテーブル(0-163 tracks)
トラック部(サイズ:可変)
セクター部を必要数連結したもの
セクター部(サイズ:可変)
offset size(byte) 内容
0000H 1 IDのC シリンダー=トラックNo.
0001H 1 IDのH ディスクの表=0 裏面=1
0002H 1 IDのR セクタNo.
0003H 1 IDのN 1 セクタ長256バイト
0004H 2 (WORD) このトラックに存在するセクターの数
0006H 1 記録密度( 00H: 倍密度, 40H: 単密度 )
0007H 1 DELETED DATA( 00H:ノーマル 10H:DELETED DATA )
0008H 1 ステータス( 00H:ノーマルエンド,その他エラー[DISK BIOSが返すステータス])
0009H 5 リザーブ( 00H )
000EH 2 (WORD) セクターのサイズ
0010H 可変 (000EH)で示したサイズ分のデータ

XM7(F-BASIC)で使うフォーマットのヘッダー部のダンプを参考までに掲載します。
$1Cから4バイトがディスクサイズで$73AB0です。
$20からトラックデータテーブルが始まっています(4バイトづつ)。最初のトラック0は$2B0、 トラック1は$18B0から
始まっていることがわかります。

ついでに、トラック0の最初のセクター(セクター1)のダンプを見てましょう
F-BASIC(FM-7/8 5”フロッピーの2Dフォーマット)では、
1セクタサイズが256バイト、
1トラックは32セクタ(表面16セクタ、裏面16セクタ)
となります。従って、セクタID(セクタ管理情報の最初の4バイト)は以下のように進んでいきます。
トラック0
表面 00 00 01 01 --> 00 00 02 01 --> 00 00 03 01 --> ............ --> 00 00 0F 01 --> 00 00 10 01
裏面 00 01 01 01 --> 00 01 02 01 --> 00 01 03 01 --> ............ --> 00 01 0F 01 --> 00 01 10 01
トラック1
表面 01 00 01 01 --> 01 00 02 01 --> 01 00 03 01 --> ............ --> 01 00 0F 01 --> 01 00 10 01
裏面 01 01 01 01 --> 01 01 02 01 --> 01 01 03 01 --> ............ --> 01 01 0F 01 --> 01 01 10 01

セクター管理情報の$0E,$0Fはセクタサイズで、F-BASIC用は00 01となります。

2 F-BASIC用のブランクディスクを作成
XM7の[Tools]-[Make Blank Disk]で、新規のブランクディスク(D77イメージファイル)を作成すると、アンフォーマット
のブランクディスクができます。このブランクディスクは、ヘッダー部の管理情報のみがある状態で、セクター部は
何も書かれていません(=アンフォーマット状態)
従って、まだF-BASICでは使えないディスクです。

というわけで、まずF-BASICで使えるようにフォーマットしてやらなければなりません。
ROMモードでの起動では、Disk関係のコマンドは使えないので、ここは力技でフォーマットしてしまいましょう。
ブランクディスクをバイナリエディタで読み込んで編集します。
セクタ部に、上記のルールに従って管理情報を書き込んで行きます。
ここはかなり面倒な作業です。昔昔、雑誌等のダンプリストをひたすら打ち込んだのを思い出しますね。
(それよりは楽?)

ルールはシンプルなので、面倒なら、フォーマット化プログラムを組んで、PCにやらせた方がいいかもしれませんね
(力技とどっちが早いかな)
というわけで、フォーマット済みのブランクディスクを作成するプログラム(mkblank.exe)を作りました。
mkblank.exeのダウンロード −>mkblank.lzh

makblank.exeの使い方
DOSプロンプト上で、作成したいディスクイメージファイル名を指定するだけです。
>mkblank file_name.d77


それも面倒(ですよね)なら、ネオOh!FM の恐怖の水曜日に配布ディスクのページがありますので、そこからos0.d77
というイメージファイルをダウンロードして来てください。このイメージファイルはF-BASIC用と同じフォーマットになって
います。


3 ディスクベーシクを抜く
Windowsマシンでは、例によってシリアル転送ソフトを起動して下さい。
FM-7/8にはDisk Basicで起動できるフロッピーを入れ、以下のプログラムを走らせて下さい。
このプログラムにより、フロッピーのトラック0のセクター1〜セクター32を抜き出し、シリアル転送します。
(セクター1〜32にIPLとDisk関係のコマンドが格納されています)

Windows側に転送されたデータは適当な名前でバイナリーデータとして保存して下さい。
あとは、先ほど作ったD77ブランクディスク(フォーマット済み)と、このバイナリデータを両方、バイナリエディタに読み込ませて
切り貼りです。
256バイトづつ切り取って(コピーして)、D77ブランクディスク(フォーマット済み)に貼り付けていきます。
たった32セクタ分(=32回)なのでわけはありませんね。

まず、バイナリデータの$0000〜$00FFを切り取り、D77ブランクディスクのトラック0、セクター1(のデータ領域 $2C0)に
貼り付けます。
次に、$0100〜$01FFを切り取り、セクター2のデータ領域($3D0)に貼り付けます。
これを$1F00〜$1FFF(−>セクター32へ)までやれば完了です。


4 試しに使ってみる
XM7を起動したら
[Drive0] --> [Open] --> (イメージファイル名を指定)
[File] --> [Reset(F12)]
で、Disk Basicが立ち上がるはずです。

ちなみに、os0.d77をベースにブランクディスクを作成した場合、FILES とすると DIR, TYPE といったマシン語ファイル
が見えます。が、これらはF-BASICこれのLOADMで読み込んで使うことはできません。
目障りならKILLして構いません。
(ただこれらは、これで有用なものでもあるので、os0自身は別途DOSモードでお使い下さい)

TopPageへ


inserted by FC2 system