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,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=// の設定でセクタ長を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://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}}