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

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

[第19回]

●フリーのテキストエディタTeraPad

ダウンロードして解凍したCP/M2.2ソースプログラムを、これまたダウンロードしたフリーのZ80アセンブラZASMでアセンブルしてみましたら、Fatalエラーになってしまいました。
Fatalとは致命的なという意味ですから、ここをなんとかしなければアセンブル作業は不可能です。
なんとかするためには、CP/M2.2ソースプログラム(cpm22.z80)を修正するほかはありません。
cpm22.z80はテキストファイルですからメモ帳を使って編集することもできます。
Windows98のメモ帳では、ファイルサイズが大きすぎて開けませんでしたが、Windows7のメモ帳では開くことができました。

しかしメモ帳では機能にちょっと不満がありますので、プログラムの編集作業などには、もう少し機能の高いエディタを使いたくなります。

実は私はプログラムの作成編集には、以前からフリーのテキストエディタTeraPadを使っています。
とても使い易いエディタです。
CP/M2.2ソースプログラムの編集作業にもTeraPadを使って作業をしていくつもりですので、もしまだお使いではありませんでしたら、ぜひダウンロードしてお使いいただくことをお勧めします。

TeraPadはこちら(窓の杜)からダウンロードできます。
「DOWNLOAD」をクリックすると、インストーラ(tpad108.exe)を保存するかどうかを尋ねられます。
一旦適当なフォルダに保存してから、インストーラを実行します。
何かを設定することは特に必要ありません。
[次へ]をクリックしていくと、TeraPadがインストールされます。
インストール後はデスクトップにアイコンが登録され、すぐに使うことができるようになります。

●cpm22.z80の修正作業

それではさっそく使ってみましょう。
TeraPadを起動したら「ファイルを開く」で、ファイルの場所としてzasm164mを指定します。
cpm22.z80は拡張子が一般的なものではありませんから、そのままでは開けません。
「ファイルの種類」で「すべてのファイル」を指定すると、開くことができるようになります。

そこまでの準備ができたら、いよいよ前回のエラーの原因を探ることにいたします。

/// ZASM /// Z-80 Assembler, MS-DOS version 1.64
Copyright (C) 1988-1994 by K.KAWABATA (Bunbun)

** Pass 1 **  Symbol table size  2000 Symbols
cpm22.z80 1267: Fatal :-Undefined Symbol     :  CP      NFUNCTS         ;valid function number?
** Pass 2 **
cpm22.z80  367: Fatal :-Undefined Symbol     :  JP      NZ,HALT         ;jump to halt routine.
cpm22.z80  674:Warning:-Too many operand     :HALT:     LD      HL,76F3H        ;'DI HLT' instructions.
cpm22.z80 3739:Warning:-No END statement     

  2 warning(s),   2 error(s) in assembly.


まず、わかりやすいところから片付けましょう。
一番下にWarningと表示されています。
Warningは警告ですから無視してもアセンブルは行なわれます。
しかし無視できないものもありますから、注意する必要があります。
一番下のWarningは、END行が無いために出されたものです。
END行は必須ではありませんが、1行追加するだけですから、素直に追加しておくことにいたしましょう。

プログラムの最終行を見てみましょう。



おお。
最後に[第16回]で説明した[EOF]がありますね。
確かにENDはありません。
ちょうsど3738行が空いていますから、ここにENDを追加しておきましょう。
あ。
プログラムは必ず半角を使うことを忘れないようにしてください。



これでいいでしょう。

さてWarningはもうひとつありました。

cpm22.z80  367: Fatal :-Undefined Symbol     :  JP      NZ,HALT         ;jump to halt routine.
cpm22.z80  674:Warning:-Too many operand     :HALT:     LD      HL,76F3H        ;'DI HLT' instructions.


Too many operandと書いてあります。
最初は、なぜこの行がエラーになるのかわかりませんでした。
LD HL,76F3H
のどこがToo many なのじゃ、と思いました。
しばらく考えていましたら、やっとわかりました。
エラーの原因はLDではなくて、ラベルにあったのです。
HALTは、Z80の命令として存在します。
アセンブラによっては、命令語と同じ綴りをラベルや変数として使うことを認めているものもありますが、ZASM.EXEでは使用できないようです。

この行でHALTがラベルとして認められなかったために、その上のエラーメッセージが表示されることになったのです。
上にあるエラーメッセージはJP NZ,HALTに対して出されたもので、Undefined Symbolと書いてあります。
HALTがラベルとして認められなかったので、ジャンプ先のHALTが未定義になってしまったのです。
そこでこのHALTを別のものに変更することにします。



HALTをHLTに変更しました。



あ。367行も忘れないように変更しておきましょう。



Fatalエラーはもうひとつありました。

cpm22.z80 1267: Fatal :-Undefined Symbol     :  CP      NFUNCTS         ;valid function number?

ここでもUndefined Symbolと書いてあります。
NFUNCTSが未定義のようです。
念の為に、NFUNCTSを検索してみました。
そうしましたら。
あるじゃありませんか。



ちゃんと定義してあるじゃありませんか。
これもしばらくは理由がわからなくて考えていたのですが、あるいは?と思いつきました。
ひょっとしたら、このアセンブラは変数の定義はその変数を参照する行よりも前になければならないのでは?
NFUNCTSは1284行で定義されています。
しかしそれを参照している、CP NFUNCTSは1267行です。

おお。
Cコンパイラが同じルールでありました。
そこで、この行を切り取って、前の方に貼り付けてみました。



以上でエラーのための修正は完了です。
忘れないように、名前をつけてファイルを保存します。
オリジナルは変更しないでそのまま残しておきたいと思いますから、ここは別の名前で保存することにします。
cpm22b.txtという名前で保存することにしました。

ここでcpm22b.z80にしてもよいのですが、その場合には、名前をつけて保存するときに「ファイルの種類」を「すべての種類」にすることを忘れないようにしなければなりません。
そのようにしないとcpm22b.z80ではなくて、cpm22.z80.txtになってしまいます。
どうせ中味はテキストファイルなのですから、ここはいっそのことcpm22b.txtにしたほうがあとあと面倒がなくて間違いがありません。

●アセンブル成功!

それではあらためて、このcpm22b.txtをアセンブルしてみましょう。
コマンドプロンプトを開いて、
zasm cpm22b.txt[Enter]
と入力してみます。



おお。
エラーは無くなりました。
成功です。

あ。
でも、まだまだ、このままでは、移植はできません。
やっと。
はじめの一歩ができたところです。

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

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