開発をするには、Macで動くZ80のアセンブラが必要です。
こちらも情報が少ないのですが、いくつか探した結果、ASxxxxを使うことにしました。
理由は、比較的簡単に使える状態にできたのと、アセンブルした結果をintel HEX形式という比較的平易なフォーマットで出力できるためです。
また、これは、Z80だけでなく色々な8bit CPUのアセンブラがセットになっていますので、他の機種向けの開発にも使えそうです。
ASxxxx の用意
以下の手順で用意します。
- http://shop-pdp.net/ashtml/asxxxx.htm を開く
- Get the "ASxxxx Cross Assemblers" をクリック
- ASxxxx Cross Assemblers Source Code as a zipped file (4578K) をクリックしてダウンロード
- 解凍し、asxs5p10/asxv5pxx/asxmak/linux/build に移動
- make
- asxs5p10/asxv5pxx/asxmak/linux/exe の下に実行ファイルができている
- asz80,aslink をパスの通ったディレクトリ(/usr/local/bin など)にコピー
その他試してみたアセンブラ
ASxxxx 以外に試してみたものです。
z80asm
homebrew で brew search z80 として出てくるもの。インストールしようとしたがサーバーが反応しませんでした。
gnu binutils
ビルドの仕方がよくわからず断念しました。
./configure --target=z80-unknown-coff
とすればいけそうでしたが、途中で面倒くさくなってきて後回しにして、そのままです。
sdcc
8bit CPU向けのCコンパイラですが、アセンブラも含んでいます。
sdcc-3.5.0-universal-apple-macosx.tar.bz2 を解凍すると、bin/sdasz80 にビルドされたものがあるので、用意するのは一番簡単です。
ちょっと試しましたが、イミディエイトアドレッシングに # をつけるのに違和感があります。(LD A,#0 とか)
X1エミュレータでHello world
まずは、X1エミュレータでプログラムを動かせるかテストをしてみます。
おなじみのHello worldです。
.area TEST (ABS)
.org 0xe000
ld bc,0x2000+40 ;;アトリビュートのアドレス
exx
ld bc,0x3000+40 ;;テキストVRAMの2行目のアドレス
ld hl,_msg
_loop:
ld a,(hl)
or a
jr z,_end
out (c),a ;;テキストVRAMに1文字出力
inc bc
inc hl
exx
ld a,7
out (c),a ;;アトリビュートに出力(文字色を白にする)
inc bc
exx
jr _loop
_end:
halt
_msg:
.ascii /Hello, world!/ ;;出力するメッセージ
.db 0 ;;メッセージの終了
これをアセンブル、リンクします。
asz80 -o hello
aslink -i hello
これで、hello.ihx というintel HEX形式のファイルができます。
が、このままではエミュレータで読み込めません。
ディスクイメージに変換する必要がありますが、適当なツールは見当たらないので、これくらいは自作することにします。(詳細は後述)
見事出来上がったディスクイメージファイルを、エミュレータの仮想ディスクドライブにセットして起動します。
mame64 x1 -flop1 hello.2d
すると・・・
1行目はIPLでディスクイメージを読み込んだというメッセージで、2行めがプログラムで出力したメッセージです。
これでようやくプログラム開発の必要最小限の環境が整いました。