ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.4
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆Z80アセンブラとZ80逆アセンブラ
ND80ZVには8080アセンブラのほかにZ80アセンブラとZ80逆アセンブラが附属しています。
そのZ80アセンブラ、Z80逆アセンブラの紹介です。

[第81回]

●ZASM.COM(Z80アセンブラ)の続きです

前回は、その前の回([第79回])に、8080アセンブラで作成したバイナリファイルsound6.binから、Z80逆アセンブラZDAS.COMで、Z80アセンブラ用のソースプログラムファイルsound6.dtxを逆作成して、それをまたZ80アセンブラZASM.COMでアセンブルしてバイナリファイルを作成しました。

逆アセンブラで逆作成したソースプログラムをもとにして、ZASM.COMで作成したバイナリファイルはsound6_2.binという名前にしました。

もともとのオリジナルのsound6.binと、後からできたsound6_2.binとはプログラムサイズが2バイトだけ違っているのですが、その理由については前回説明をいたしました。
2つのバイナリファイルを見比べてみると、あとからできたsound6_2.binには最後に2バイトの余計なデータが付け加わっているものの、そのほかのプログラム部分はどうやら同じようでした。

結論から先に言ってしまいますと、逆アセンブラは入力した元のバイナリファイルのバイナリデータは全てZ80の命令コードだとして翻訳してしまいますから、もとのバイナリファイルに命令コード以外のデータが含まれていると、一見間違っているかのようなおかしなソースプログラムを作成してしまいますが、そのようなちょっとみるとデタラメな部分が含まれているソースプログラムファイルでも、Z80アセンブラZASM.COMは正しいバイナリファイルを生成してくれます。

これはZDAS.COMとZASM.COMがバイナリコード←→Z80ニーモニックの翻訳をちょうど全く逆方向に働くように作られているからです。完全に可逆的である、といえます。

ところで、前回はsound6.binとsound6_2.binを比較するためにそれぞれのリストファイルsound6.lstとsound6_2.lstを見比べてみました。
しかし今回はそれほど長いプログラムではありませんから、そのようにリストを並べて比較する、ということも可能なのですが、これがもっと長いプログラムでしたら、簡単に見比べてみる、というわけにはいきません。

Z80BASICには、そのようなときのために便利な機能があります。
実際にはBASICの機能ではなくて、Z80BASICと一緒になっているマシン語ツール(マシンランゲージ)の機能です。

●/LD、DM、CP

/LDはバイナリファイルをメモリの指定アドレスに読み込むコマンドです。
DMは前にもちょっとご紹介しました。dump memoryからつけたコマンド名です。
指定アドレス範囲のメモリの値を16進数とASCII文字で表示します。
CPはcompareです。
指定アドレス範囲のデータを、別のアドレスから始まるデータと比較します。



sound6_2.binとsound6.binを比較するために、別のアドレスに読み込みました。
/LDコマンドはバイナリファイルをメモリに読み込みます。
バイナリファイルには読み込み先のアドレス情報が含まれていませんから、読み込みを開始するアドレスをパラメータとして与える必要があります。
実際には拡張子をチェックしませんからたとえば.txtファイルでも読み込むことができます。

読み込んだデータをそれぞれDMコマンドで表示しています。
こうしておいて両者を前から順に比較していくこともできますが、せっかくのCPUなのですから、こういう作業こそCPUに任せてしまいたいものです。

そこでCPコマンドを使って比較してみました。
アドレス8000から8058までの範囲のデータをアドレス9000からのデータと比較しています。
比較の結果、最後の2バイトだけが違っている、と表示されました。
前回も説明しましたようにこの2バイトはプログラムの実行に影響を与えませんから無視することができます。

マシンランゲージのコマンドには、今回ここで使ったコマンド以外にもまだいくつか便利なコマンドがあります。
それらのコマンドもまたいずれご紹介いたします。
マシンランゲージはBASICとは別のシステムですが、Z80BASICでは、上の画面のように、通常のBASIC画面で自由に使うことができます。

●最初に作成したソースプログラムは?

[第79回]で、最初にsound6.binからZDAS.COMで逆作成したソースファイルは、アドレス情報をパラメータで与えませんでしたのでアドレス0000から始まるプログラムとして作成されてしまいました。
これはもう使い物にならないソースプログラムのようですけれど、この例に限っては、このソースプログラムをアセンブルしてできるバイナリファイルはオリジナルのsound6.binと同じものになります。
そこで「使い物にならない、ことはありません」とコメントしたのでしたが…。

あらためて考えてみますと、やはり使い物にならない場合が出てきます。
今回は、たまたまオリジナルのsound6.binと同じ(やはり2バイト多くなる)バイナリファイルが作成されることになりますが、いつもうまくいくとは限りません。

うう。
そこのところを説明しようとも思いましたが、ちょっと面倒な説明になってしまいますから、省略することにいたします。
ZDAS.COMでは、やはりアドレスのパラメータは必須、と考えてください。
CPUをつくろう!第566回(2010.7.28upload)を再編集

ワンボードマイコンをつくろう![第81回]
2011.7.4upload

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