- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!DISKDEFマクロでドライブ仕様の設定を簡素化する
CP/Mディスクイメージ作成手順メモで言及しているDISKDEFマクロライブラリは、煩雑なディスクパラメータの計算を自動化してくれるツールです。CP/Mの標準アセンブラASM.COMの上位互換マクロアセンブラであるMAC.COM専用のライブラリです。具体的な使い方を説明します。CP/M上でアセンブルするのでCP/MエミュレータなどCP/Mが動作する環境を用意してください。
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}}