Help us understand the problem. What is going on with this article?

MacでX1のクロス開発(アセンブラ準備編)

More than 5 years have passed since last update.

開発をするには、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です。

hello.asm
    .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

すると・・・
hello.png
1行目はIPLでディスクイメージを読み込んだというメッセージで、2行めがプログラムで出力したメッセージです。
これでようやくプログラム開発の必要最小限の環境が整いました。

mrbonze
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away