復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第170回]
●F80のエラーメッセージ
前回は、ND80ZVのCP/M互換DOSシステム(仮想FDD版)の上でF80(FORTRAN80コンバイラ)を実行したところ、エラーメッセージが表示されてしまいました、というところまで書いて、そこで終わってしまいました。
前回お見せしたエラーメッセージには、おかしなところがあります。
そのことには以前から気がついていたのですが、なにしろ泥沼でもがいていたものですから、瑣末なことにはこだわっている余裕が無かったのです。
あ。
そこのところを再掲いたします。
実は、昨日UPしたときには、最後の1行(Fatal Errorの行)が落ちていたことにも気がつきましたので、本日になってからUPし直しました。
A>f80 *=HELLO HELLO %Line:10 Zero Format Valu・FORMAT(3X,7A+ ?Line:10 Illegal Character for Synta・FORMAT(3X,7A+ %1 Warning(s) Issued ・ ?1 Fatal Error(s) Detected ・ |
LINE:と10の間、ValuとFormatの間、SyntaとFormatの間、それから%1と?1との間の行、そして?1の次(最下行)におかしな表示があります。
ブラウザによって、ただの「・」が表示されたり、見慣れない文字(というよりマーク、記号)が表示されたりします。
Internet ExplorerやOperaではただの「・」ですが、Firefoxではおかしなマーク(?)が表示されます。
泥沼からやっと抜け出せて、今は落ち着いて考える余裕が出てきました。
そこで、本日になりましてから、そのあたりを追求してみることにいたしました。
このおかしな表示なのですが、それでは一体ここにはどのような文字コードがあるのでしょうか?
そういう場合に役に立ちますのが、MSDOSのDEBUGコマンドです。
ところが、ずっと以前に書いたことなのですが、Windows7(64bit)では、この便利なDEBUGコマンドが使えません(パソコンをつくろう[第12回])。
なんですか、64bitでも仮想XPモードとやらが使える、上のバージョンですと出来るらしいのでありますが。
余談になりますが、上記の記事を書きましたところ、ある方からメールをいただきました。
「Windows7の64bit版でもx86アプリケーションが動くツールを作りましたから、よろしかったら使ってみてください」というメールでした(パソコンをつくろう[第16回])。
Microsoftとは関係ない(と思います)方でもそういうツールを作ることが出来るといいますのに、これはいかにもMicrosoft様の手抜きじゃあありませんかねえ。
本題に戻ります。
エラーメッセージの部分だけをコピーして、TXTファイルにして、それをDEBUGコマンドで開きました。
下の画面はWindows98SEでの画面です。
Windows7(32bit)でもDEBUGコマンドは使えますけれど、こういうものはやっぱりWindows98あたりが一番使い易いです。
ですので、いつまでたってもWindows98は手放せません。
水色で囲ったところが、おかしな文字表示の部分です。
A0、E5、F8、8Aになっています。
確かにこれはASCIIじゃありません。
むむ。
これは、F80のバグか。
とも思ったのですが。
んなことは、ありませんでしょう。
おお。
ひらめきました。
CP/M2.2では、文字コードは7ビットしか使わなかったはず。
つまり最上位のビット7は常に0であるはずです。
ところが、このコードはどれも、ビット7が1です。
ひょっとすると、文字列の終わりを示すのに$(24H)ではなくて、最終文字の文字コードのビット7を1にする、というテクニックだったのでは。
それではということで、A0、E5、F8、8Aのビット7を0にしてみますと。
20、65、78、0Aになりました!
そういうことか!
文字列の終わりを$(24H)にした場合、
CP 24
JP Z,xxxx
でチェックすることになりますが、ビット7=1のチェックなら
OR A
JP M,xxxx
ですから、1バイト少なくて済みます。
文字列そのものも余分な$が不要になりますから、そこでも1バイト少なくて済みます。
当時の1バイトは貴重だったのですよねえ。
そういうことならば。
BDOSのファンクションコールで、文字コードをBIOSに送るところで、強制的にビット7=0にしてしまえばよい、ということになります。
さっそくそのように直してしまいました。
ところで。
肝心のエラーメッセージが出された理由なのですが。
それも今ではどういうことだったかわかっております(実にみっともない、お恥ずかしい理由でありました)。
わかっておりますから、[第168回]でお見せしましたように、ちゃんとコンパイルして、それからL80.COMでリンクして、そのあと作成されたHELLO.COMを実行するところまでできているのです。
もちろんエラーメッセージが出された理由がわかっておりますから、エラーを再現することだってできてしまいます。
下は7ビットコードのみを出力するように修正した、CP/M互換DOSで、わざと同じエラーを表示させてみたところです。
おかしな表示が消えて、代わりに本来の文字が表示されました。
ワンボードマイコンでCP/Mを![第170回]
2012.7.12upload
前へ
次へ
ホームページトップへ戻る