2012年08月16日

CPMの話(2)

 ご周知かも知れませんが、秋川さんのHPで、PC-6001mk2用のCP/Mが公開されています。

 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モニタです。


液晶rogue1

  FPGA版+液晶画面その1。


液晶rogue2

  FPGA版+液晶画面その2。写真が汚く写っていますが、実際はもっと判別しやすいです。
  ちなみに左の穴の間隔が、2.54mm です。


VGAモニタrogue1

  FPGA版+VGAモニタその1。


VGAモニタrogue2

  FPGA版+VGAモニタその2。ほとんど問題ないです。

  実機でも試してみました。
  ビデオ出力して、RGB変換出力して、VGA液晶モニタに出力したものです。


実機カラー1

  その1。


実機カラー2

  その2。文字の判別がちょっとつらいです。
  これは、色ずれによるもので、YC分離がちゃんと出来ていないためです。

  どうせ白黒でいいので、RFモジュールのスイッチでモノクロにすると、キレイに映ります。


実機

白黒

  モノクロの出力です。文字がきちんと判別できます。



  『秋川さんBIOS』はなかなか使えるんですが、気になる所もあります。

 ・バージョン番号が表示されない。
  CP/M のバージョン以外にも、BIOSのバージョンの表示が欲しい所です。
  特に以下のようなパッチ当てのようなプログラムを作る時は必須になります。

 ・フォントが気に入らないものがある。
  かなりよく出来ていて、80x25 で全く問題なく判別できます。

  ただ、バックスラッシュが¥ なのや、他の文字も多少気に入らないものがあります。
 (動かすソフトは、殆ど海外なので、¥ より \ がいいです)

 ・43K バージョンである。
  VRAMの関係で仕方ないんですが、拡張RAMカートリッジを使って64K バージョンにしたいですね。

 ・画面制御文字が固定。
  機種によって、違うものがあるようなので、変更できればいいかなと思います。



  とりあえず、フォントを変更するプログラムを作りました。

font.zip


  CP/M を起動してから font.com を実行すると、フォントのデータを上書きします。
  プログラムは、システムのフォントの場所のデータに上書きしているだけです。


  画面制御文字の変更も同じ方法で出来ますが、登録されていない制御は出来ません。
 (例えば、文字反転とか点滅とか)


  ソースが公開されているので、自分で修正すればいいんですけどね。


posted by えすび at 10:02| Comment(0) | SW:CP/M | このブログの読者になる | 更新情報をチェックする

2012年05月25日

CP/Mの話

  今日、医者の帰りに図書館に行ってきました(大阪市立図書館)。

  今回の調べモノは、CP/M です。

  1984年2月のI/O に、PC-6001mk2でのCP/Mの移植についての記事がありました。
 国会図書館からコピーを取り寄せて見ると、PC-8001用のCP/Mを移植するようです。


  『PC-8001用のCP/Mも手に入らんやんー』


  と思ったのですが、実はCP/Mは、発売元のDigital Research社が既に商品価値ナシと判断して、フリーになっています。

  PC-8001用ではないですが、ソースやらバイナリやらが簡単に入手できるようになっていました。

  ちなみにココです → http://www.cpm.z80.de/


  で、図書館で調べていると、なんと...


  PC-6001mk2SR/PC-6601SR用のCP/Mが存在したようです。かなりびっくりです。



  CP/Mをする前に、FPGA版でFDを扱えるようになるのが先ですね。


posted by えすび at 23:39| Comment(2) | SW:CP/M | このブログの読者になる | 更新情報をチェックする