!DISKDEFマクロでドライブ仕様の設定を簡素化する CP/Mディスクイメージ作成手順メモで言及しているDISKDEFマクロライブラリは、煩雑なディスクパラメータの計算を自動化してくれるツールです。CP/Mの標準アセンブラASM.COMの上位互換マクロアセンブラであるMAC.COM専用のライブラリです。具体的な使い方を説明します。CP/M上でアセンブルするので[CP/Mエミュレータ|http://www.recfor.net/jeans/index.php?itemid=920]などCP/Mが動作する環境を用意してください。 [CP/Mサイト|http://www.cpm.z80.de/index.html]の[Digital Research Source Code|http://www.cpm.z80.de/source.html]から'''cpm2-plm.zip'''をダウンロードし、MAC.COMとDISKDEF.LIBを取得します。下記のリストをコピー(MACLIB DISKDEFのところから最後まで)して4DRVDEF.ASMとしてファイルにしてCP/M環境にインポートします。このリストはCpmtoolsGUIに添付のAVRとZ80でCP/Mの改良用のドライブ設定で、ディレクトリエントリの数を256に、cksを0に変更したものです。 ;****************** DISKDEFマクロのサンプル *************************************************************** ; ;DISKDEF dn, fsc, lsc, skf, bls, dks, dir, cks, ofs ; ;dn :ロジカルディスクNo. 0=A, 1=B,..., 15=P ;fsc :最初のセクタNo. 0か1 ;lsc :最後のセクタNo. ;skf :スキューファクタ。掛けない場合は省略 ;bls :ブロックサイズ(byte) ;dks :システムトラックを除く全ディスク容量(bls単位) ;dir :ディレクトリエントリの数 ;cks :交換可能な媒体の場合はdirと同じ値。交換しないものは0 ;ofs :システムトラックの本数。パーティションによる多ドライブ化の場合は前方のドライブの総トラック数の積算値 ; ;例.[128バイト/セクタ]×[64セクタ/トラック]×[244トラック]×4ドライブ(パーティション) ; (ofs=1, bls=2048byte, dir=256 とする) ; (Aドライブ: dks=128*64*243/2048=972, ofs=1) ; (Bドライブ: dks=128*64*244/2048=976, ofs=244) ; (Cドライブ: dks=128*64*244/2048=976, ofs=244+244=488) ; (Dドライブ: dks=128*64*244/2048=976, ofs=244+244+244=732) ; MACLIB DISKDEF ORG $ ;マクロの展開先アドレス DISKS 4 ;ドライブ数 DISKDEF 0,1,64,,2048,972,256,0,1 DISKDEF 1,1,64,,2048,976,256,0,244 DISKDEF 2,1,64,,2048,976,256,0,488 DISKDEF 3,1,64,,2048,976,256,0,732 ORG $ ;スクラッチエリアの展開先アドレス ENDEF END アセンブル。 A>MAC 4DRVDEF 生成された 4DRVDEF.PRN をTYPEコマンド等で参照してみてください。ディスクパラメータが展開されているのが確認できます。本来はBIOSソースのディスクパラメータの設定部分をこのマクロで置き換え簡素化するためのものです。但し、MAC.COM(8080アセンブラ)専用なので、'''avrcpm'''のZ80アセンブラソースには使うことができません。そこで、IPL.ASMとBIOS.ASMをMAC.COMでアセンブルできるように変換したものを置いておきます。 {{ref IPL_BIOS_20140509.zip,DISKDEFマクロの使い方メモ,IPLとBIOSのダウンロード}} CP/M上でアセンブルし、できた.HEXファイルをPCに取り出して[Hex2bin|http://sourceforge.jp/projects/sfnet_hex2bin/]等でバイナリ化すればCpmtoolsGUIで使用することができます。 !!関連リンク CP/M非公式サイト http://www.cpm.z80.de/index.html HEXをバイナリに変換 http://sourceforge.jp/projects/sfnet_hex2bin/ 当サイト内 AVRとZ80でCP/M AVRとZ80でCP/Mの改良 [[mbed(ST Nucleo F401RE)版CP/Mエミュレータ|mbed(ST Nucleo F401RE)版CP/Mエミュレータ]] CpmtoolsGUI CP/Mディスクイメージ作成手順メモ DSK形式のディスクイメージからファイルを取り出す方法メモ ---- {{comment}}