tunozemichanの日記 / tunozemichan's diary

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

SORD M68にCP/M-80を移植する(その2)

SORD M68にCP/M-80を移植する手順を書いておきます。

 

必要なもの

CP/M2.2のソースコード(The Unofficial CP/M Web siteにあります)

CP/M2.2のバイナリ(The Unofficial CP/M Web siteにあります)

ZASM.EXE(MSDOSで動くアブソリュートアセンブラです。VECTORにあります)

https://www.vector.co.jp/soft/dos/prog/se010314.html

CP/M player for Win32(WIndows上でCP/Mのプログラムを実行するソフトウェア)

http://takeda-toshiya.my.coocan.jp/cpm/index.html

MSDOS player for Win32(Windows上でMSDOSのプログラムを実行するソフトウェア)

http://takeda-toshiya.my.coocan.jp/msdos/

l3diskex(ディスクイメージ生成・操作プログラム。超多数のイメージを操作できる)

http://s-sasaji.ddo.jp/bml3mk5/#l3diskex

 

 

SORD M68の起動における制限について

1. BOOT ROMはトラック1、サイド0、セクタ1~8の2kbを読み込みます。よって、システム全体を読み込ませるローダーは2kb以内に収める必要があります。実際に作成したとこと400バイト未満でした。

 

2. 1の制限により、CP/Mの標準システムトラック0~1にシステムが入りきりません。よって、CP/Mシステム(CPM22.BIN+BIOS.BIN=CPM.SYS)は、ディスクの適当な位置に配置します。あれこれやるとトラック0(単密度)とトラック1(倍密度)の残りに入れられそうですが面倒なので、やめました。

 

ローダーの作成

特記すべきことはありません。バイナリを作った後にバイナリエディタで切り貼りがありますが難しくありません。CP/Mシステム(CPM.SYS)の配置場所(トラック、サイド、セクタ)に適合するように、ローダー内のディスクリードルーチンの引数を変更します。TIPSは、メモリの0H~100Hまでをちゃんとクリアしてからジャンプしないと動作が不安定になることがあることです。

 

ディスクパラメータの決定

The Unofficial CP/M Web siteにあるCP/M2.2のバイナリが含まれるZIPファイル

http://www.cpm.z80.de/download/cpm22-b.zip

をダウンロードして、中にあるDISKDEF.LIBとMAC.COMを取り出します。

 

SORD M68用に以下のように記述しました。これはSORD M68用CP/M-68Kのディスクパラメータとおそらく同一です。互換性はありますが、データブロックサイズが4kbは正直使いにくいと思います。


MACLIB  DISKDEF
ORG $

DISKS 2
DISKDEF 0,1,52,,4096,243,128,128,2

DISKDEF 1,0
DISKDEF 2,0

ORG $

ENDDEF

END

MAC.COMでアセンブルして、得られたPRNコードから必要個所を以下に記載するCustomBIOSにコピーします。

 

CustomBIOSの作成

前回説明しました。ZASMでアセンブルして、hex2binでBIOS.BINを作ります。アセンブルする前に、望みのメモリモデルにしておきます。CP/Mのメモリモデルを変更したときは、ブロッキング/デブロッキング用のホストバッファ(hstbuf)のアドレスを、DMAの転送アドレスに転記することを忘れないようにします。これを忘れると、DIRコマンドでファイル名が出ません。最悪フリーズか暴走します。

 

CP/Mの本体をアセンブルする

The Unofficial CP/M Web siteからアセンブラソースコードのZIPファイル

http://www.cpm.z80.de/download/cpm2-asm.zip

をダウンロードします。中にあるCPM22.Z80をZASMでアセンブルして、hex2binで変換するとバイナリCPM22.BINが出来上がります。これがBDOSとCPPです。アセンブルする前にメモリモデルを望むサイズにしておきます。

 

CPM.SYSを作る

CPM22.BINの後ろにBIOS.BINを繋げます。この時、CPM22.BINの最後には空のジャンプテーブルが入っていますので、これを削除してBIOS.BINを繋げます。具体的には1600H以降につなげます。出来上がったバイナリはCPM.SYSとリネームします。この作業はバイナリエディタで簡単にできます。私はBinary Editor BZを使っています。

 

これで、ローダー(LOADER.BIN)、CP/M80システム(CPM.SYS)が出来ました。以後は、l3diskexを使います。

 

起動ディスクイメージを作成する

l3diskexを起動して、以下、画像の通りに処理すれば、SORD M68用のCP/Mイメージが完成します。

 

f:id:tunozemichan:20220303173300p:plain

「新規」ボタンを押して、画面のように選択する。

f:id:tunozemichan:20220303173402p:plain

OKをクリック

f:id:tunozemichan:20220303173441p:plain

BASIC用にフォーマットを選択。

f:id:tunozemichan:20220303173542p:plain

CP/M for SORD」を選択

 

 

CPM.SYSをCP/Mイメージディスクに書き込む

イメージのウインドウにドラッグアンドドロップすればコピーされます。ここで、コピーされたCPM.SYSを選択して、右クリックしてプロパティを見ます。すると画像のようにディスクのどこに保存されたか分かりますので、メモして、ローダーのディスクリードルーチンの引数を変更します。画面の例では、トラック7、サイド0、セクタ13~26、トラック7、サイド1、セクタ1~12までを占有していることがわかります。

f:id:tunozemichan:20220303173841p:plain



ローダーを書き込む

生ディスクモードに切り替えて、トラック1、サイド0、セクタ1を選択し、右クリックして「インポート」を選びます。ファイル選択ウインドウが開くので、LOADER.BINを選択します。どこまで書くのか聞かれるので、2セクタまでとします。LOADER.BINは400バイト未満なので、2セクタ(512バイト)で格納できます。

f:id:tunozemichan:20220303174011p:plain

生ディスクモードへ

 

f:id:tunozemichan:20220303174053p:plain

該当セクターにローダーを書き込む

以上で、SORD M68用CP/Mシステムの起動ディスクイメージは完成です。好みのプログラムをドラッグアンドドロップして、望みのディスクイメージを作成して、実行するだけです。

成功すれば、ターミナル画面に以下のように表示されます。

f:id:tunozemichan:20220303174210p:plain

CP/M‐80 for SORDの起動画面