l3diskexを使って、M68用CP/M-68Kのブランクディスクイメージを作成し、更にそこにファイルを書き込み、hfe形式に変換した上で、実機上でファイルを実行できることを確認しました。
1. ブランクディスクイメージの作成
l3diskexを起動して、「新規作成」で、テンプレートの中から以下のものを選択する。
2HD/8インチ2D 77トラック 2サイド 26セクタ 256バイト/セクタ セクタ間隔:1 トラック0,サイド0は単密度 [汎用(MB-S1など)]
下段のBASIC種類には、CP/M‐86 for FM(2HD)を選択する。選択肢の中にCP/M-68Kがあるが選択しない。
ファイルから「BASIC用にフォーマット」を選択する。これで、E5で空きトラックが埋められる。
出来たイメージを、保存する。その際には、「べたファイル(*.img)」選択する。
これで、RAWトラックイメージが完成した。
2. RAWトラックイメージからHFE形式に変換する。
2-1. HxCFloppyEmulatorでXML file Disk Layoutを読み込み、正しいフォーマットイメージでHFE形式に変換する。
HxCFloppyEmulatorを起動して、「Load Raw image」をクリックする。
以下の画面が出るので、prefefined Disk Layoutをクリックして、「XML file Disk Layout」を選択する。ファイルを選択するウインドウが開くので、正しいdisk layoutファイルを選択する。ここでは「DiskLayout_SORD_M68_e5_fill.xml」を選択した。このファイルについては後述する。
この後、Load RAW fileをクリックして、l3diskexで作成したブランクディスクイメージを読み込む。
元の画面に戻るので、「Export」をクリックして、HFE形式に変換すればよい。
3. 具体的な例
CP/M-68Kのエミュレータであるcpmsim上でプログラムなどを開発して、そのファイルをM68に持っていくとする。
まず、cpmtoolsのcpmcpでcpmsim上のファイルをPCのHDDにコピーする。それのファイルをl3diskexを使って、ブランクディスクイメージに書き込む。
最後に、上述した用にHFE形式に変換し、実機へ持っていけば実行することができる。
4. XML file Disk layoutについて
4.1 経緯
HxCFloppyEmulatorでは、DiskのレイアウトをXMLで定義することができる。検索すると過去にHxCのフォーラムでM68のディスクイメージのトラブルが報告されて、様々な意見が書き込まれた。議論の終盤で、M68のディスクレイアウトをXMLにしたものがアップされ、一部にフォーマットできないなどの意見も見られたが、終息した。これが公式に取り込まれて、Predifined Disk Layoutのプルダウンメニューの中に「DiskLayout_SORD_M68_HD_998KB」として表示されるようになっている。
しかし、これは正しく動かない。
M68用のCP/M-68Kのブートディスクは理由は分からないが空いているセクタに0x40が書き込まれている。上でも述べたが、本来は0xE5で埋める仕様になっている(SORD社の元プログラマの方から情報頂きました。富士通のCP/Mに合わせたとのこと)。当然、そんなことを知らない海外のM68とHxCユーザーはブートディスクを参考に、0x40を埋める設定にしていた。XMLファイルの当該箇所を示す。formatvalueの値が確かに0x40となっている。
E5で埋めたl3diskexのイメージを、HxCFloppyEmulator上の0x40で埋めるレイアウトで変換したイメージを実機上で動かすとエラーが出る。
なので、以下のように修正した。
このXMLファイルを用いることで、l3diskexのフォーマットとHxCのフォーマットが一致して、上述したように問題のないイメージを作ることができるようになる。
このXMLファイルが欲しい方は、ご一報ください。ツイッター(@osaanmed)でもどこでも結構です。ファイルのリンクをお教えします。
4.2 余談
上述した様に、フォーマット値の問題で動かなったと結論付けたが、別に0x40で埋めてあっても実際実機上ではブートディスクは動いているので、l3diskex上で0x40で埋めてフォーマットすれば動く可能性はある。l3diskexの設定がよくわからないので試していないが、余裕があれば試してみたい。