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

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

[第171回]


●F80のエラーメッセージの理由

前回は、ND80ZVのCP/M互換DOSシステム(仮想FDD版)の上でF80(FORTRAN80コンバイラ)を実行して、HELLO.FORをコンパイルしようとしたところ、エラーメッセージが表示されてしまったことについて「エラーメッセージが出された理由はわかっております」と書きました。
ええ。
ですけれど。
それとわかるまでにたっぷり迷走してしまいまして、なんと28KBもあるF80.COMを逆アセンブルして、それを解読しながらデバッグする、などというとんでもない作業にまで首をつっこんでしまいました。

あ。
もちろん自前の逆アセンブラZASM.COMを使いました。
自分で言うのも何ですけれど、なかなか役に立ちますですよ。
ND80ZVにはZASM.COMも附属しております。
今回の作業でちょっと不都合なところがみつかりましたのでちょいと修正をいたしました。
ZASM.COMについてはまたのちほど書くことにいたします。

なにしろ30年以上も昔に「トランジスタ技術」にCP/Mが走るパソコンの製作をテーマにした連載記事を書いたおりに、大枚ン万円をかけてNECからPC8801版のCP/M2.2を購入して、それを製作したパソコンに移植するところまでは体験したのですけれど。

私としては編集部からの依頼でそうしたまでで、それを機会にCP/Mを使いましょう、という方向には全然行かずにそこで終わってしまいました。
そういうことでしたから、おそらくCP/M2.2のオープニングメッセージが出て、画面にA>が表示されたところを写真に撮って、これにて一件落着、ということにしてしまったらしく、そこから先に何かをしたという記憶が全くありません。

もちろんF80.COMなど今回さわるのは生まれて始めて、でありますから、のっけから怪しげなエラーメッセージなどに出会ってしまいますと、もう年甲斐もなくパニクってしまいます。
まあ。
こういう場合の思考パターンは、初心者でもベテランでも大体同じでありまして、まずはシステムを疑います。

「説明書の通りに操作したのに、こんなおかしなメッセージが出た。これは初期不良に違いない」
たまにそういう電話をいただくことがあります。
なるほど聞いてみますと、そりゃあ確かにおかしい。
ですけれど。

岡目八目でありまして、他人の思考に対しては割りと冷静に判断ができます。
「あの。その通りでしたら、確かにどこかに異常があります。でも。疑うわけではありませんが、もう一度、本当に説明書の通りに操作したかどうか、確認をなさってください」
「サンプルプログラムリストとご自身が入力したリストが本当に同じかどうか、もう一度じっくり確認してみてください」

しかし。
悲しいことに、当事者ともなりますと、話は全然別でありまして。
むむ。
これはCP/M互換DOSのどこかにまずいところがあるに違いない。

CP/M互換DOSも自分で作ったのでありますけれど、とにかく真っ先にシステムを疑うのが、悲しい性(さが)であります。
およそ1日をかけて逆アセンブルリストをもとにF80の解読を進め、それに基づいてデバッグをしていきましたが。

あかん。
どうにもわからん。
エラーメッセージが出るあたりには特に問題になるようなところはみつからぬ。

そもそも何だ、このエラーメッセージは?

?Line: 10 Illegal Character for Syntax:FORMAT(3X,7A+

どうやらSyntaxエラーだとのたもうているようだが、それが大体おかしいではないか。
どこかで読み込みに失敗して、ソースが文字化けでもしておるのか?
FORMAT文に「7A+」などないぞお。

もう、万策尽きて、ぐったりしながら、ソースプログラムを表示して、ぼんやりながめていましたら。

お、お、お。
あった。
ほんま。
F80、あんたはえらい。

まこと、お恥ずかしいことに。
Syntaxエラーがありました。

	PROGRAM HELLO
	WRITE(3,100)
100	FORMAT(' HELLO WORLD!! by FORTRAN80')
	WRITE(3,110)
110	FORMAT(3X,'A,B,C,D=')
	READ(3,120) I,J,L,M
120	FORMAT(4I15)
	K=I+J+L+M
	WRITE(3,200) K
200	FORMAT(3X,7A+B+C+D=',15)
	END


上から10行目。
そのFORMAT文をよく見ましたら。
(3X,’A+B+C+D=’
であるべきところが、[Shift]の押し忘れで
(3X,7A+B+C+D=’
になっておりました。

確かに。
あなた様のおっしゃる通り。
Syntax Errorでありました。
こ、これは。いかにも、お恥ずかしい。

あ。入力ミスはもう1箇所ありました。
その後の
,15)

,I5)
の間違いでありました。
これは、老眼+もうろくゆえのミスでありましょう。
重ねて、お恥ずかしい限りです。

こんな単純なミスに全く気付かず、たっぷり一日かけて何をやっておったのか。
そのように考えましたら、もう自己嫌悪でありまして。
ええ。
金麦をあおって、寝てしまいました。

翌日になりまして。
その部分を修正して、再びF80でコンパイルしてみたのでありますが。
エラーがなくなるどころか、さらに摩訶不思議なエラーメッセージが表示されてしまいました。

本日は時間がなくなってしまいましたので、その摩訶不思議なエラーメッセージにつきましては、次回に説明することにいたします。

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

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