Altair-SIMHでCpmtoolsGUIを使う
DSK形式のディスクイメージからファイルを取り出す方法メモで書いているAltairシミュレータ用のディスクイメージ(MITS-88 Disk)がCpmtoolsで読めない謎が解けました。
シミュレータ本体やBIOSのソースを読むと、なんとセクタ長が137バイトでした。Pertec FD-400というドライブをモデルにトラックを拡張した仕様だとか。
ということで理由が分かったので、CpmtoolsGUIに読み書きできる機能を実装しました。diskdefのseclenが137のとき、MITS-88 Diskと判断して処理するようにしました。
Altairシミュレータのドライブについて
シミュレータのおさらいです。知っている人は読み飛ばしてください。
sim> do <設定ファイル>
で起動します。設定ファイルに、使うドライブイメージの指定を記述します。CP/M2.2で使えるFDドライブ(dsk0-dsk7)のフォーマットは、A:〜G:がMITS2、H:がMITSで固定。I:〜P:はHDドライブ(hdsk0-hdsk7)で、フォーマットはデフォルトでHDSKですが、
format=<format>
で指定することで様々なフォーマットのイメージが使えます。
format | seclen | sec/trk | track | btrk | cks | skew | geom |
---|---|---|---|---|---|---|---|
MITS | 137 | 32 | 77 | 6 | Z | N | |
MITS2 | 137 | 32 | 254 | 6 | Z | N | |
HDSK | 128 | 32 | 2048 | 6 | Z | N | |
EZ80FL | 512 | 8 | 32 | 0 | Z | N | 32/32/128 |
P112 | 512 | 18 | 160 | 2 | Z | N | 160/72/128 |
SU720 | 512 | 9 | 160 | 2 | NZ | N | |
OSB1 | 512 | 5 | 40 | 3 | Z | N | 40/20/128 |
OSB2 | 512 | 10 | 40 | 3 | Z | N | 40/40/128 |
NSSS1 | 512 | 10 | 35 | 2 | NZ | N | |
NSSS2 | 512 | 10 | 35 | 2 | NZ | N | |
NSDS2 | 512 | 10 | 70 | 2 | NZ | N | |
VGSS | 512 | 8 | 77 | 2 | NZ | N | |
VGDS | 512 | 8 | 154 | 4 | NZ | N | |
DISK1A | 512 | 16 | 77 | 2 | NZ | N | |
SSSD8 | 128 | 26 | 77 | 2 | Z | N | |
SSSD8S | 128 | 26 | 77 | 2 | Z | Y | |
SSDD8 | 256 | 26 | 77 | 2 | Z | N | 77/52/128 |
SSDD8S | 256 | 26 | 77 | 2 | Z | Y | |
DSDD8 | 256 | 26 | 154 | 2 | Z | N | 154/52/128 |
DSDD8S | 256 | 26 | 154 | 2 | Z | Y | |
512SSDD8 | 512 | 15 | 77 | 2 | Z | N | 77/60/128 |
512DSDD8 | 512 | 15 | 154 | 2 | Z | N | 154/60/128 |
APPLE-DO | 256 | 16 | 35 | 3 | Z | Y | |
APPLE-PO | 256 | 16 | 35 | 3 | Z | Y | |
APPLE-D2 | 128 | 32 | 35 | 3 | Z | Y | |
APPLE-P2 | 128 | 32 | 35 | 3 | Z | Y | |
V1050 | 512 | 10 | 80 | 2 | Z | N | 80/40/128 |
CP/M3ではこれら全て使うことができますが、2.2ではセクタ長が128バイトかつCKSがゼロのものしか使えないようです。しかし、イメージファイルであり物理媒体ではないので、セクタ長が128バイトでなくてもCKSがゼロかつスキューが掛かっていないものは、
geom=<Tracks>/<SecTrk>/<Seclen>
の設定でセクタ長を128にしてしまえば使えます。
設定例(ディスク設定部分)
attach hdsk1 P112.dsk set hdsk1 format=P112 set hdsk1 geom=160/72/128
起動ディスクの作り方(CP/M 2.2)
シミュレータのSYSCOPYコマンドを使えば起動可能ディスクを作ることができますが、ここでは敢てCpmtoolsGUIで作ってみます。
まず、システムトラックのブートイメージを取得します。シミュレータのAドライブで、
A>SUBMIT SYSCPM2
を実行します。これはシステムを更新するスクリプトですが、実行するとシステムイメージ(CPMBOOT.COM)が作成されます。これをWコマンドで取り出します。
A>W CPMBOOT.COM
これをMkfsのブートブロックに設定すればよいわけですが、システムローダーのソース(DSKBOOT.MAC)を読むと最初の4セクタを読み飛ばし、かつ起動専用のスキューで読み込んでいることが分かります。また、SYSCPM2.SUBを読むと、CPMBOOT.COMは、MOVER.COMというシステムの再配置プログラムが頭に置かれており、その開始アドレスは0100hです。
以上から4セクタ分のダミーとMOVER.COMへのジャンプコードを書き込んだDUMMY.COMを作成します。シミュレータ上のDDTとSAVEコマンドを使って作成します。
I>DDT DDT VERS 2.2 -F100,3FF,E5 -S300 0300 E5 C3 0301 E5 00 0302 E5 01 0303 E5 . -^C I>SAVE 3 DUMMY.COM I>
DUMMY.COMをWコマンドで取り出します。
I>W DUMMY.COM
CpmtoolsGUIのMkfs画面[New]を開きブートブロックのファイルとしてDUMMY.COM、CPMBOOT.COMの順に設定し、起動ディスク専用のスキューを設定したdiskdef(MITS2-Mkfs)を指定して[Make]ボタンを押します。
関連リンク
http://www.moria.de/~michael/cpmtools/
http://www.schorn.ch/index.html
http://simh.trailing-edge.com/
当サイト内
CP/Mディスクイメージ作成手順メモ
CpmtoolsGUI
トップ メニュー
This web page is described in Japanese, but you can read in English by translation site.