You are here

Z8613を動かす (その2:クロスアセンブラ)


テーマ:

ハードウェアが出来たら次はソフトウェアです。

Z8はハンドアセンブルできないほど複雑ではありませんが、アセンブラくらいは欲しいところです。今回のZ8だけでなくSBC6303ボードのHD63C03やMC6803、さらには手持ちのいろいろなプロセッサにも使いたいので出来れば多くのプロセッサに対応しているとありがたい。

ということで候補に挙がったのが「The Macroassembler AS」です。

開発ペースは遅い(というか止まっている?)ようですが、現時点でかなりの数のプロセッサに対応しています。8ビットが中心ですが、16ビット以上にも一部対応といったところでしょうか。マクロは使えますが、リロケータブルオブジェクトの出力は出来ません。

GNU binutils(の中の「as」)にも期待していたのですが、こちらは上とは逆で32ビットが中心で残念ながらZ8には非対応でした。

私はソフトウェアの開発は主にNetBSD上で行なっているので、公式サイト(下記リンク参照)からC Sourceを持ってきてビルドすることにします。とりあえずは最新と思われるasl-current.tar.bz2を試してみました。

「./configure」一発というわけにはいかないので手動で設定する必要があります。

Makefile.defはMakefile.def.tmplをそのままコピーすればOKです。

sysdefs.hはi386のNetBSDには対応していないので修正が必要です。FreeBSDの記述はあるのでそれを参考に修正しました。

そもそもアセンブラというソフトウェアは環境にあまり依存しないので移植は容易な部類です。ビット処理を多用するので整数のサイズやエンディアンなどに注意する必要があるのとファイルアクセスくらいでしょうか。

これで make してみましたが、code3254x.c でエラー発生です。なんか AdrCnt, InstrZ の2つの変数が extern と static で宣言されていて衝突しているようですね。static になっているということはファイル内ローカルということでこの変数をリネームすることにしました。
この修正だけで make は無事通りました。

続いて make test を実行します。テスト用のソースをアセンブルして生成されるバイナリが正しいかテストするわけです。

するといくつか fail してしまいました。Z8のテストは通ったようですが、近々使おうと思っていたMCS-51が通りません。

念のため current ではなく Version 1.41r8 を試してみると code3254.c は導入前で、make も make test も問題なく通ります。
当面は 1.41r8 を使った方が良さそうです。これでZ8のテストプログラムを書いてみることにします。


Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。