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)が作成されます。これをRコマンドで取り出します。
を実行します。これはシステムを更新するスクリプトですが、実行するとシステムイメージ(CPMBOOT.COM)が作成されます。これをWコマンドで取り出します。

 A>R CPMBOOT.COM
 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をRコマンドで取り出します。
DUMMY.COMをWコマンドで取り出します。

 I>R DUMMY.COM
 I>W DUMMY.COM

CpmtoolsGUIのMkfs画面[New]を開きブートブロックのファイルとしてDUMMY.COM、CPMBOOT.COMの順に設定し、起動ディスク専用のスキューを設定したdiskdef(MITS2-Mkfs)を指定して[Make]ボタンを押します。

http://star.gmobb.jp/koji/data/mits_mkfs.png
!!関連リンク
http://www.moria.de/~michael/cpmtools/
http://www.schorn.ch/index.html
http://simh.trailing-edge.com/
当サイト内
CP/Mディスクイメージ作成手順メモ
CpmtoolsGUI
----
{{comment}}