2012.2.26
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第44回]

●現況報告です

昨日は時間がなくて更新できませんでした。
またお得意様から急ぎの特注品の仕事を受けておりまして、その納期が迫っているので、なかなかHPの更新まで手が回りません。
納入完了までしばらく時間不足の状態が続きそうです。
なにとぞご了承願います。

さて、このところCP/Mのファンクションコールについて書いております。
まだND80ZVのRAMエリアを使った仮システムのままでの動作テストです。

一体本番のほうはどうなったのだ?
と疑問に思われるかも知れませんが。
実は、ND80ZVをフルRAM構成にした(つまりアドレス0000H〜FFFFHの全てがRAMという構成の)CP/Mシステムも、もう出来ているのです。

ええ。
それも、当初計画しました通り、Windowsのハードディスクに仮想フロッピーディスクを作成したシステムとして、CP/Mがもう動いているのです。
と言いましても、やっと動くことを確認しただけで、本当に実用とするためには、まだあれこれツールを作らないことには、皆様にご披露申し上げることもできません。
まあ、ハードで言いましたら、やっと試作品のバラックが出来たところです。

これもだんだんわかってきたことなのですが、CP/Mをインストールしただけでは、全く足りなくて、主要な機能はトランジェントコマンドという形で、別のプログラムとして供給されていたようです。
もちろん通常のCP/Mシステムとしては、そのような、いわばアプリケーションもCP/M本体に一緒にバンドルする形で供給されていたのでしょうけれど、それは今まで説明しておりますCP/Mソースプログラムには含まれてはおりません。

それじゃあ、それもまたどこかから捜してインストールするのか?
ということなのですが。
個人でしたらそれでもいいのかもしれませんが、中日電工としては、それじゃあ皆様に堂々と供給するわけにはいきません。

ええ。この際ですから。
必要なものは全部、作ります。
最終的には、今説明しております、CP/Mソースも捨ててしまって、CCPもBDOSも全部最初から中日電工のオリジナルとして書いてしまいます。

ですから、大変なのです。
でも、そうしないことには、ND80ZVのユーザーに、堂々と供給することができませんでしょう。

このところずっと説明しておりますことは、そこまでに至る途中の、いわば準備の過程なのです。
それは無駄ではないのか?
とお考えかも知れませんが、中日電工のオリジナルになってしまえば、既存のCP/Mから機能としては離れてしまう部分も出てくるかと思います。
今のところはCP/Mオリジナルのソースのままで使っておりますから、CP/Mというものを理解していただく上では、むしろ、現在の構成での説明のほうがなにかと役に立つのではないかと思います。

そういうことですので、本番CP/Mにつきましても、準備が整いましたら、ゆるゆるとご披露申し上げますから、いましばらくは、現行の仮CP/Mシステムで説明を続けさせていただきます。

●ファイルアクセスのための前準備

それでは、いよいよ、CP/MのCP/Mたる所以であります、ファイルアクセス機能について、試していくことにいたします。
そのために、前準備として、ちょっと確認してみたいことがあります。
たとえば、[第15回]で試しました「テキストファイルの中味を表示するプログラム」ですが、このときは「応用CP/M」からそのままプログラムをいただきました。
この当時はまだCP/Mについて理解が進んでいなかったものですから、借用させていただいたのですが、大分理解できるところまできましたので、あらためまして、オリジナルのプログラムとして書いてみたいと思います。

そうなりますと、ただファンクションコールを使うだけではなくて、そのほかにもいろいろ必要な事柄が出てきます。
たとえば、上記のプログラムはMSDOSではTYPEコマンドに相当する機能です。
すると、TYPE filename という書式を実行することになりますが、それではそのfilenameというのはいったいどのようにしてプログラムに取り込めばよいのか?ということなどを知らねばなりません。

実は、そのことを知る方法についても、「応用CP/M」には書いてあるのですけれど、書いてあることをそのままコピーして、ここに転載するわけにはいきませんから、まあ、結局はそこに書いてあることと同じことなのですけれど、実際にやってみることにいたします。

毎回画面コピーを撮るのも結構手間がかかりますから、今回はログファイルを使って説明することにいたします。

いつものようにND80ZVをWindowsパソコンとUSB接続してZB3BASICを起動します。
このところ舞台裏ではいろいろあれこれやっておりますので、もう一度
/LD cpm22g.bin,bc00[Enter]
を実行して、CP/Mをロードしました。
そのあと、JP d233[Enter] でCP/Mを起動し、DIRコマンドでRAMディスクのディレクトリを確認したあと、[Ctrl][D]で一旦ZB3BASICに戻ります。

logfile nd80zlog\02260903.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>/ld cpm22g.bin,bc00
loading CPM22G.BIN ...1709(5897)bytes loaded,from BC00 to D308
>jp d233

a>dir
A: FILLE5   COM : FTEST1   COM : FTEST2   COM : DM       COM
a>^D>a>^D>

ERR:23 
>dm,8000,810f
8000  C3 62 D2 00 00 C3 06 C4-FE FF CA 31 01 AF 32 7C  テbメ..テ.ト..ハ1.ッ2|
8010  FC DF 41 00 00 45 00 45-00 00 04 00 F8 DF 44 00  .゚A..E.E.....゚D.
8020  00 45 00 45 00 00 04 00-FC DF 53 41 56 45 00 45  .E.E.....゚SAVE.E
8030  00 00 04 00 F0 DF 44 4D-00 45 00 45 00 00 04 00  .....゚DM.E.E....
8040  FC 47 41 20 4E 41 49 0A-24 37 43 0A 09 44 4D 41  .GA NAI.$7C..DMA
8050  42 46 3D 24 38 30 38 30-0A 09 42 44 00 20 20 20  BF=$8080..BD.   
8060  20 20 20 20 20 20 20 20-00 00 00 04 00 20 20 20          .....   
8070  20 20 20 20 20 20 20 20-00 00 00 00 00 44 45 2C          .....DE,
8080  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8090  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80A0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80B0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80C0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80D0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80E0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80F0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8100  26 00 E5 1E 3F 0E 02 CD-05 80 0E 01 CD 05 80 FE  &...?..ヘ....ヘ...
>cm,8100
8100 26-c9
8101 00-
>jp d233

a>save 1 test.com

さて、ここからが今回の作業です。
CP/Mのシステム領域は0000H〜00FFHに置かれますが、現在の仮システムでは、それを8000H〜80FFHに置いています。
まずはその内容をZB3BASICのマシン語モニタコマンドを使って表示させてみました。
dm,8000,810f[Enter]です。
ついでにトランジェントエリアの始めのところ(8100H〜)も表示させてみました。

それから、CM(change memory)コマンドで、トランジェントエリアに1バイトだけのプログラムを書きます。
8100HにC9を書きました。
命令コードC9はRETです。
このプログラムは何もしないで、すぐにシステムにリターンしてしまいます。

そこまで準備したら、もう一度JP d233[Enter]でCP/Mに戻ります。
そのあと、RETだけのプログラムをTEST.COMという名前(てきとうな名前でいいのですけれど)でRAMディスクに保存します。
下はその続きです。

DIRコマンドで、TEST.COMがRAMディスクに保存されたことを確認してから、TEST.COMを実行してみます。
このとき、
test[Enter]
と入力するのではなくて、
test abc.com xyz.txt 12345[Enter]
と入力してみます。

そのようにしてTEST.COMを実行したら、もう一度[Ctrl][D]でZB3BASICに戻ります。
そして、さきほどと同じようにして、DMコマンドで8000H〜80FFHの内容がどのように変化したかを確認してみました。

a>dir
A: FILLE5   COM : FTEST1   COM : FTEST2   COM : DM       COM
A: TEST     COM
a>test abc.com xyz.txt 12345

a>^D>a>^D>

ERR:23 
>dm,8000,810f
8000  C3 62 D2 00 00 C3 06 C4-FE FF CA 31 01 AF 32 7C  テbメ..テ.ト..ハ1.ッ2|
8010  FC DF 41 00 00 45 00 45-00 00 04 00 F8 DF 44 00  .゚A..E.E.....゚D.
8020  00 45 00 45 00 00 04 00-FC DF 53 41 56 45 00 45  .E.E.....゚SAVE.E
8030  00 00 04 00 F0 DF 44 4D-00 45 00 45 00 00 04 00  .....゚DM.E.E....
8040  FC 47 41 20 4E 41 49 0A-24 37 43 0A 09 44 4D 41  .GA NAI.$7C..DMA
8050  42 46 3D 24 38 30 38 30-0A 09 42 44 00 41 42 43  BF=$8080..BD.ABC
8060  20 20 20 20 20 43 4F 4D-00 00 00 02 00 58 59 5A       COM.....XYZ
8070  20 20 20 20 20 54 58 54-00 00 00 00 00 44 45 2C       TXT.....DE,
8080  16 20 41 42 43 2E 43 4F-4D 20 58 59 5A 2E 54 58  . ABC.COM XYZ.TX
8090  54 20 31 32 33 34 35 00-00 00 00 00 00 00 00 00  T 12345.........
80A0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80B0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80C0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80D0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80E0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
80F0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8100  C9 00 E5 1E 3F 0E 02 CD-05 80 0E 01 CD 05 80 FE  ノ...?..ヘ....ヘ...
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Feb 26 09:09:29 2012

その結果、パラメータとして入力したABC.COM、XYZ.TXT、12345が、CP/Mシステムエリア8000H〜80FFHの特定の場所に取り込まれていることが確認できました。

本日は時間がなくなってしまいました。
この続きは次回にいたします。

ワンボードマイコンでCP/Mを![第44回]
2012.2.26upload

前へ
次へ
ホームページトップへ戻る