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

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

[第7回]

●ND80ZVCP/Mプロジェクト(2)

前回はND80ZVCP/Mプロジェクトなどと大見得を切ってしまいました。
とりあえずは早急に、ND80ZVを改造しないままでCP/Mを走らせる、という第1段階のプロジェクトを、スタートさせなければなりません。
ND80ZVをご購入いただいた皆様にも参加していただいて、同時進行でプロジェクトを進めて行くという、「CP/Mパソコン作り方教室」です。

が。しかし。
昨年暮れの時点で、「じつは私はCP/Mは知りません。全部忘れてしまいました」といっていたが。
それで本当に大丈夫なのか?

すっかり忘れてしまうもなにも、もともとCP/Mなんてほとんどさわったこともありませんでしたから、そりゃあ、大丈夫なんてもんじゃありませんよお。
ですから、正月も返上してうんうんうなりながら、がんばったのです。

娘が、「おとうさん。今年の正月はどこへも行かないの?」と聞きましたけど。
「行きません。初詣は来年になったら行きます!」

ND80ZVのお客様にも皆様参加していただいて、あれかこれかと悪戦苦闘したあげく、
いやあ、うまくいきませんね。残念でした。お疲れ様。
なんてことになりましたら、そりゃあ、もう、いい笑い者でありましょう。

私は吉本の芸人ではありませんから、この歳になって笑い者になるなど真っ平ごめんこうむりますです。

それにあくまでこのサイトは中日電工の「商用」サイトです。
個人のブログなどでしたら、大見得を切って挑戦したけれど、結局失敗に終ってしまいましたよお、ということでもいいのかも知れませんが、仮にもプロの看板をかかげてそれでメシを食わせていただいておりますものが、失敗でした。できませんでした、ということでは、そりゃあ、情けない話ですし、それこそ今後の商売にも差し支えますでしょう。

まだ駆け出しの若い頃でしたら、そういう向こう見ずなことをやってみるのも、まあ勉強ですけれど、この歳になって、そんないい加減なことはやる気になりません。
絶対に大丈夫、間違い無くいける、という確信が持てない限り、いい加減なことを書いたりはいたしません。

ということは。

●CP/Mはもう動いているのです

そうなんですよお。
じつは。
この企画を皆様方に発表申し上げた、[第1回]よりも以前に、プロジェクトの第1段階はおおむねできあがっておりましたのです。
もう少し正確に申し上げますと1月8日には、とりあえずCP/Mが動くところまで、できておりました。

ダウンロードしたCP/Mのソースプログラムをもとに、解析作業とND80ZVへの移植作業を開始しましたのが、昨年12月の27日でしたから、「白紙」の状態からここまで来るのに2週間弱かかったことになります。

実は新年早々MYCPU80組立キットのご注文や、お得意様からカスタムメイドのボードのご注文をお受けして、そちらの作業もこなしながらでしたから、正味はまあ、10日間ほどということになりましょう。

結果から判断いたしますと、つまらぬところでひっかかって何日も空費したりしましたので、本来ならばこの程度の作業なら1週間程度でできたはず。
歳のせいで、ヤキが回ったなあと思います。

なにはともあれ、ND80ZVの上でCP/Mが動いているところをお見せしましょう。



説明をしませんと、何がなんだかわかりませんですね。
一番上に *** nd80z3 basic *** と表示されておりますように、これはND80ZVをUSBで接続して、DOSプロンプトでZB3BASICを起動したところです。
その下の /LD はバイナリファイルを指定メモリアドレスにロードするコマンドです。
あらかじめ準備しておいたCP/M関係のファイルをロードしています。

jp bc00
で、CP/Mにエントリします。
普通のCP/Mの起動方法と違っているのは、まだND80ZVのBASICシステムの上でデバッグ中だからです。

a>dir
はCP/Mのディレクトリコマンドです。
もうCP/Mが起動しています。

save 1 cpmtst9.com

は8100番地からのトランジェントエリアにあるプログラムをファイル名をつけてディスクにセーブしているところです(CP/Mのトランジェントエリアは0100番地からですが、ハードウェア上の制約から、ここでは8100番地からにしています)。
その下の cpmtst9 で今ディスクにセーブしたプログラムが呼び出されて実行が開始されます。

このプログラムは、[第2回]でY様から送っていただいた、「応用CP/M」(村瀬康治著、株式会社アスキー)の64ページにあったプログラムです。
CP/Mの”BDOSコール”を使って、コンソール入力と出力を行なうサンプルプログラムです。
同書のサンプルプログラムは8080ニーモニックで書かれていますが、私はZ80ニーモニックに慣れてしまっていますから、同書のリストを見ながらZ80ニーモニックに直してソースプログラムを書き直しました(器用なものでしょう)。
リストを皆様にお見せできるとよいのですが、たとえ8080からZ80にニーモニックを書き直しても、それは「翻訳」と同じですから、著作者に無断でここに掲載することはできません。
残念ですが、参考までに一部だけ、お見せすることにいたします。
ここで使っているZ80アセンブラはND80ZVに附属しています。

2012/1/8  19:36  cpmtst9.txt
END=81A9
              ; cp/m test9 ouyoucp/m p.64
              ;12/1/8
              ;
                   ORG $8100
                   BDOS=$C409
              ;          
8100 0E09     START:LD C,09
8102 113A81     LD DE,MSGINP
8105 CD09C4     CALL BDOS
8108 0E01       LD C,01
810A CD09C4     CALL BDOS
810D FE4D       CP 4D;M
810F CA2481     JP Z,MONGOUT


8185 0D       MSGNIGT:DB 0D
8186 0A         DB 0A
8187 0A         DB 0A
8188 474F4F44   "GOOD"
818C 204E4947   " NIG"
8190 48542120   "HT! "
8194 54484953   "THIS"
8198 20495320   " IS "
819C 46554E43   "FUNC"
81A0 54494F4E   "TION"
81A4 20392E     " 9."
81A7 0D         DB 0D
81A8 0A         DB 0A
81A9 24         "$"
              ;END
              
BDOS         =C409  MONGOUT      =8124  MSGINP       =813A  
MSGMONG      =815E  MSGNIGT      =8185  NIGTOUT      =812F  
START        =8100  

リスト中、BDOS(アドレスC409)は、本来のCP/Mではアドレス0005です。
またプログラムの開始アドレスは、本来は0100番地からですが、ここでは8100番地になっています。
いずれもND80ZVのZB3BASICシステムの上に仮に移植していることからくる変更です。

このプログラムを実行しているところをもう少し見てみましょう。



Mを入力したら
GOOD MORNING! THIS IS FUNCTION 9.
Nを入力したら
GOOD NIGHT! THIS IS FUNCTION 9.
と表示します。
それ以外の文字を入力したら?を表示して、再入力を要求します。
同書の説明の通りの動作をしています。

同書は1982年の刊行です。
おお。なんと、30年前ですね。
30年前の本に載っているCP/Mのサンプルプログラムが、ND80ZVの上で、まったくその通りの動作をしているのを、実際にこの目で見ますと、ちょいと感動してしまいます。

いかがでしょう?
これから私が説明する通りに作業していただければ、とりあえず、ここまでは間違い無くいけるのです。
ちょいとすごいなあと思いませんか?

実は、ちょいとすごい、なんてもんじゃないのです。
下のリストを見てください。
何のリストだかおわかりになりますでしょうか?

logfile nd80zlog\01152129.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>/ld cpm_1l.bin,bc00
loading CPM_1L.BIN ...16fb(5883)bytes loaded,from BC00 to D2FA
>/ld ramdisk2.bin,8800
loading RAMDISK2.BIN ...3000(12288)bytes loaded,from 8800 to B7FF
>/ld cpmtst9.bin,8100
loading CPMTST9.BIN ...00aa(170)bytes loaded,from 8100 to 81A9
>jp bc00

a>dir
A: FILLE5   COM : ABC      COM
a>save 1 cpmtst9.com
a>dir
A: FILLE5   COM : ABC      COM : CPMTST9  COM
a>cp#
  c#
  cpmtst9

input  M)orning  or  N)ight  --->M

GOOD MORNING! THIS IS FUNCTION 9.

input  M)orning  or  N)ight  --->N

GOOD NIGHT! THIS IS FUNCTION 9.

input  M)orning  or  N)ight  --->m?
input  M)orning  or  N)ight  --->n?
input  M)orning  or  N)ight  --->?
input  M)orning  or  N)ight  --->M

GOOD MORNING! THIS IS FUNCTION 9.

input  M)orning  or  N)ight  --->
a>^D>a>^D>d.,8800,88ff

ERR:60 
>d.,8800,88ff
8800  00 46 49 4C 4C 45 35 20-20 43 4F 4D 00 00 00 02  .FILLE5  COM....
8810  02 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8820  00 41 42 43 20 20 20 20-20 43 4F 4D 00 00 00 02  .ABC     COM....
8830  03 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8840  00 43 50 4D 54 53 54 39-20 43 4F 4D 00 00 00 02  .CPMTST9 COM....
8850  04 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8860  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8870  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8880  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8890  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88A0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88B0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 30 E5 E5 E5  ............0...
88C0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88D0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88E0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88F0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Jan 15 21:41:24 2012

さきほどのDOS窓の画面と同じだということがおわかりになりますでしょうか?
そうです。
これはログファイルです。
CP/Mで、ログファイル!

つまり、ここではCP/MのシステムがすっぽりND80ZVのZB3BASICシステムの上に乗っかってしまって、そこで実行されているので、こういう器用なことがごく普通にできてしまうのです。
CP/Mを終了してZB3BASICに戻れば、普通にダンプコマンドでメモリの中味を表示させたりすることもできてしまいます。
リストの最後のところに見えていますのが、CP/Mのシステムディスク(Aドライブ)のディレクトリ部分です。
仮想フロッピーディスクではなくて、RAMディスクです。

次回はここでお見せしたCP/Mシステムの仕組みなどについてもう少し詳しく説明をいたします。


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

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