tunozemichanの日記 / tunozemichan's diary

SORD社のコンピューターM68やM68MXの解析についての備忘録です。This blog is a memorandum about the analysis of SORD's computers M68 and M68MX.

l3diskexを使ってSORD M68用CP/M-68Kのブランクディスクイメージを作り、ファイルをやり取りする。

l3diskexを使って、M68用CP/M-68Kのブランクディスクイメージを作成し、更にそこにファイルを書き込み、hfe形式に変換した上で、実機上でファイルを実行できることを確認しました。

 

1. ブランクディスクイメージの作成

l3diskexを起動して、「新規作成」で、テンプレートの中から以下のものを選択する。

 

2HD/8インチ2D  77トラック 2サイド 26セクタ 256バイト/セクタ セクタ間隔:1 トラック0,サイド0は単密度 [汎用(MB-S1など)]

 

f:id:tunozemichan:20211121190507p:plain

新規作成時には、画面の選択肢を選択する。

下段のBASIC種類には、CP/M‐86 for FM(2HD)を選択する。選択肢の中にCP/M-68Kがあるが選択しない。

 

f:id:tunozemichan:20211121190802p:plain

CP/M 86 for FM(2HD)を選択する。

ファイルから「BASIC用にフォーマット」を選択する。これで、E5で空きトラックが埋められる。

 

f:id:tunozemichan:20211121191227p:plain

 

出来たイメージを、保存する。その際には、「べたファイル(*.img)」選択する。

 

f:id:tunozemichan:20211121191355p:plain

 

これで、RAWトラックイメージが完成した。

 

2. RAWトラックイメージからHFE形式に変換する。

 

2-1. HxCFloppyEmulatorでXML file Disk Layoutを読み込み、正しいフォーマットイメージでHFE形式に変換する。

 

HxCFloppyEmulatorを起動して、「Load Raw image」をクリックする。

 

f:id:tunozemichan:20211122175528p:plain

 

以下の画面が出るので、prefefined Disk Layoutをクリックして、「XML file Disk Layout」を選択する。ファイルを選択するウインドウが開くので、正しいdisk layoutファイルを選択する。ここでは「DiskLayout_SORD_M68_e5_fill.xml」を選択した。このファイルについては後述する。

 

f:id:tunozemichan:20211122175410p:plain

XMLで定義されたディスクレイアウトを指定する。

この後、Load RAW fileをクリックして、l3diskexで作成したブランクディスクイメージを読み込む。

 

f:id:tunozemichan:20211122175917p:plain

 

元の画面に戻るので、「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となっている。

    <layout>
        <number_of_track>77</number_of_track>
        <number_of_side>2</number_of_side>
        <format>IBM_MFM</format>
        <start_sector_id>1</start_sector_id>
        <sector_per_track>26</sector_per_track>
        <sector_size>256</sector_size>
        <interleave>2</interleave>
        <formatvalue>0x40</formatvalue>
        <gap3>54</gap3>
        <bitrate>500000</bitrate>
        <pregap>0</pregap>
        <rpm>360</rpm>

 

E5で埋めたl3diskexのイメージを、HxCFloppyEmulator上の0x40で埋めるレイアウトで変換したイメージを実機上で動かすとエラーが出る。

なので、以下のように修正した。

    <layout>
        <number_of_track>77</number_of_track>
        <number_of_side>2</number_of_side>
        <format>IBM_MFM</format>
        <start_sector_id>1</start_sector_id>
        <sector_per_track>26</sector_per_track>
        <sector_size>256</sector_size>
        <interleave>2</interleave>
        <formatvalue>0xe5</formatvalue>
        <gap3>54</gap3>
        <bitrate>500000</bitrate>
        <pregap>0</pregap>
        <rpm>360</rpm>

 

このXMLファイルを用いることで、l3diskexのフォーマットとHxCのフォーマットが一致して、上述したように問題のないイメージを作ることができるようになる。

 

このXMLファイルが欲しい方は、ご一報ください。ツイッター(@osaanmed)でもどこでも結構です。ファイルのリンクをお教えします。

 

 

4.2 余談

上述した様に、フォーマット値の問題で動かなったと結論付けたが、別に0x40で埋めてあっても実際実機上ではブートディスクは動いているので、l3diskex上で0x40で埋めてフォーマットすれば動く可能性はある。l3diskexの設定がよくわからないので試していないが、余裕があれば試してみたい。