http://homepage2.nifty.com/akikawa/cpm.html
http://homepage2.nifty.com/akikawa/cpm2.html
今回は、私がやりたかった 80x25 の紹介をします。
インストールのやり方は HP に書いていますが、他のアセンブラを使いました。
Bookworm さんの所で紹介されている、" AS "を使ってみます。
http://www.geocities.jp/submarine600/html/p6/pc60.html
このアセンブラは、FPGA版のファームウエアを作る時にも使っています。
(他のアセンブラと名前がダブっているため、名前を変更していますが)
1)まず、元々のCP/M をコンパイルするために、ソースを修正します。
修正する箇所は以下の通り。
・DEBF で定義されている文字列 の ' を " に変更する。
・DEBF で定義されている数値が、1行内で多いとエラーになるようなので、適当に分割する。
例えば、
53行:
DEFB 'Copyright'
↓
DEFB "Copyright"
55行:
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
↓
DEFB 0,0,0,0,0,0,0,0,0,0,0,0
DEFB 0,0,0,0,0,0,0,0,0,0,0
上記2つは、修正箇所が多いです。
・14行目の MEM EQU 62 を MEM EQU 43 に修正する。
・2043行目のの ADD A,M を ADD A,(HL) に修正する。
・2168、3340、3343行目の SUB A,M を SUB A,(HL) に修正する。
2)コンパイルする。
as -cpu z80 CPM22.Z80
エラーが出る場合は、1)の修正漏れです。
エラーがない場合は、最後に、0 errors、0 warning と表示され、CPM22.P が生成されます。
3)バイナリファイルを生成する。
p2bin -l 0 -r $-$ CPM22.P
使っているプロンプトにより、-r $-$ の部分を -r \$-\$ とする必要があるかも知れません。
(cygwin など)
p2bin は、as と同じディレクトリにあります。
成功すると、5683 バイトの CPM22.bin が生成されます。
4)d88 イメージを作成する。
今回は、80x25 のスクリーン4版を作るので、 cpmdisk-sc4.exe を実行します。
CPM22.bin を cpm.bin に名前を変更し、cpmdisk-sc4.exe を実行すると、cpm.d88 が生成されます。
これで、CP/M の d88 イメージが出来ました。
CP/M の場合、システムを転送してもしなくても、システムエリアの場所はユーザが使えないので、
この cpm.d88 を『CP/M フォーマットのディスク』として扱うといいと思います。
この『CP/M フォーマットのディスク』に、cpmadd.exe を使用してファイルを追加していきます。
今回、80x25 を使用して、ZORK I、rogue を遊んでみました。
実機ではなく、FPGA版+液晶画面、FPGA版+VGAモニタです。
FPGA版+液晶画面その1。
FPGA版+液晶画面その2。写真が汚く写っていますが、実際はもっと判別しやすいです。
ちなみに左の穴の間隔が、2.54mm です。
FPGA版+VGAモニタその1。
FPGA版+VGAモニタその2。ほとんど問題ないです。
実機でも試してみました。
ビデオ出力して、RGB変換出力して、VGA液晶モニタに出力したものです。
その1。
その2。文字の判別がちょっとつらいです。
これは、色ずれによるもので、YC分離がちゃんと出来ていないためです。
どうせ白黒でいいので、RFモジュールのスイッチでモノクロにすると、キレイに映ります。
モノクロの出力です。文字がきちんと判別できます。
『秋川さんBIOS』はなかなか使えるんですが、気になる所もあります。
・バージョン番号が表示されない。
CP/M のバージョン以外にも、BIOSのバージョンの表示が欲しい所です。
特に以下のようなパッチ当てのようなプログラムを作る時は必須になります。
・フォントが気に入らないものがある。
かなりよく出来ていて、80x25 で全く問題なく判別できます。
ただ、バックスラッシュが¥ なのや、他の文字も多少気に入らないものがあります。
(動かすソフトは、殆ど海外なので、¥ より \ がいいです)
・43K バージョンである。
VRAMの関係で仕方ないんですが、拡張RAMカートリッジを使って64K バージョンにしたいですね。
・画面制御文字が固定。
機種によって、違うものがあるようなので、変更できればいいかなと思います。
とりあえず、フォントを変更するプログラムを作りました。
font.zip
CP/M を起動してから font.com を実行すると、フォントのデータを上書きします。
プログラムは、システムのフォントの場所のデータに上書きしているだけです。
画面制御文字の変更も同じ方法で出来ますが、登録されていない制御は出来ません。
(例えば、文字反転とか点滅とか)
ソースが公開されているので、自分で修正すればいいんですけどね。