aburi6800のブログ

コンピュータのプログラミング、ゲームに関するニッチな情報を書いていくブログです。

【MSX】AndroidでMSXクロス開発環境を構築する(3)

今回は、ubuntuにz88dkとcode-serverをインストールし、Z80アセンブラの開発を行えるようにします。
最後に簡単なサンプルプログラムを作り、動作確認を行います。
これまでの作業については、以下の記事を参照してください。

aburi6800.hatenablog.com

aburi6800.hatenablog.com

z88dkのインストール・設定

z88dkをソースからビルドします。
手順は以下のサイトに詳しく書いてありますが、一応記載しておきます。

github.com

まず、適当なディレクトリで以下を実行してソースを取得します。
ここではホームディレクトリで実行する前提で進めます。

git clone  --recursive  https://github.com/z88dk/z88dk.git

依存関係のあるライブラリをインストール。

sudo apt install build-essential dos2unix libboost-all-dev texinfo texi2html libxml2-dev subversion bison flex zlib1g-dev m4 libtemplate-perl libtemplate-plugin-yaml-perl libfile-slurp-perl ragel re2c

恐らく上記で依存関係にある上位のパッケージが無くてもインストールされると思いますが、ビルド時にエラーになった場合は不足しているパッケージを追加でインストールしてください。

以下コマンドを順次実行してビルド。

cd z88dk
export BUILD_SDCC=1
chmod 777 build.sh
./build.sh

現在はシステムインストールは完全にサポートされていないため、ビルド後の z88dk\bin に直接パスを通すことで使用します。
~/.bashrc の最後に以下を追加します。

export Z88DK_HOME=~/z88dk
export PATH=${PATH}:${Z88DK_HOME}/bin
export ZCCCFG=${Z88DK_HOME}/lib/config

最初にホームディレクトリ以外でソースの取得を行った場合は、Z88DK_HOMEディレクトリを適切なパスに置き換えてください。

追加後、以下を実行して設定を反映させます。

source ~/.bashrc

以下でコマンドにパスが通っていることを確認できます。

zcc

code-serverのインストール・設定

Termuxのubuntu環境では、code-serverを起動し、ブラウザからVS Codeを使用します。
code-serverのインストール手順は以下サイトに書かれています。

coder.com

具体的には、インストールスクリプトが用意されているので、それを実行するだけです。
スクリプトを取得するためにcurlをインストールします。

sudo apt install curl

その後、ホームディレクトリでインストールスクリプトを取得して実行します。

curl -fsSL https://code-server.dev/install.sh | sh

インストール完了後、デフォルトではパスワード入力を要求される設定になっています。
ここでは、ローカルから自分のみアクセスする想定ですので、パスワードを無効にします。

sed -i.bak 's/auth: password/auth: none/' ~/.config/code-server/config.yaml

code-serverを起動します。

code-server &

起動までしばらく時間がかかります。
以下のようなメッセージがコンソールに表示されたら、起動完了です。

[2022-03-16T16:44:13.482Z] info HTTP server listening on http://127.0.0.1:8080/  
[2022-03-16T16:44:13.482Z] info - Authentication is disabled  
[2022-03-16T16:44:13.483Z] info - Not serving HTTPS

ブラウザアプリを起動し、以下のURLにアクセスします。

http://127.0.0.1:8080

画面が表示されたら、必要な拡張機能を入れて準備完了です。
具体的な方法は、一般的なVSCodeの使用方法と同じですので、ここでは割愛します。
日本語化するのと、Z80アセンブラの開発を行うため、以下の拡張機能を入れることを推奨します。

テストプログラムの作成

適当なディレクトリを作り、 hello.asm のファイル名で新規ファイルを作り、以下のコードを貼り付けます。

SECTION code_user
PUBLIC _main
_main:

CHGMOD:    EQU $005F            ; BIOS スクリーンモード変更
WRTVRM:    EQU $004D            ; BIOS WRTVRM
LINL32:    EQU $F3AF            ; WIDTH値

    LD A,1                      ; Aレジスタにスクリーンモードの値を設定
    CALL CHGMOD                 ; BIOS スクリーンモード変更
    LD A,32                     ; AレジスタにWIDTHの値を設定
    LD (LINL32),A               ; Aレジスタの値をワークエリアに格納

    LD HL,$1800                 ; 表示開始アドレス
    LD DE,TEXT                  ; 表示データアドレス

PRTSTR:
    LD A,(DE)                   ; AレジスタにDEレジスタの示すアドレスのデータを取得
    OR A                        ; 0かどうか
    JR Z,PRTSTR_END                ; 0の場合はPRTSTR_ENDへ
    CALL WRTVRM                 ; BIOS WRTVRM呼び出し
                                ; - HL : 書き込み先のVRAMアドレス
                                ; - A  : 書き込むデータ
    INC HL                      ; HL=HL+1
    INC DE                      ; DE=DE+1
    JR PRTSTR

PRTSTR_END:
    JR PRTSTR_END               ; 無限ループ

SECTION rodata_user
TEXT:
    DB "HELLO MSX !",0

コンソールで以下コマンドを実行して、コンパイルします。

zcc +msx -create-app -subtype=rom hello.asm

以下のメッセージが表示され、ソースのディレクトリにa.romが出来ていれば、コンパイル成功です。

Program requires cartridge with 1 16k ROM banks
Notice: Available RAM space is 16173 bytes ignoring the stack
Adding main bank 0x00 (16206 bytes free)

作成した.romファイルを、他のアプリから参照できるように、端末のストレージへコピーします。
内部ストレージは直接アクセスできないアプリがあるため、SDカードにコピーします。
コピー先のディレクトリを調べるには、以下のようにします。

cd /storage
ls -al

以下のようなディレクトリリストが表示されます。

合計 0  
drwxr-xr-x  5 root    root             100 3月 19 19:32 .  
drwxr-xr-x 22 hitoshi hitoshi         4096 3月 19 21:07 ..  
drwxr-xr-x  3 root    aid_everybody 131072 3月 19 19:32 129B-6156  
drwx--x--x  4 root    aid_everybody   4096 8月 13  2019 emulated  
drwxr-x--x  2 root    root              60 3月 19 19:32 self  
hitoshi@localhost:/storage$

このうち、emulatedは内部ストレージ、129B-6156のような名前のディレクトリ(環境によって異なる)がSDカードになります。
129B-6156の部分は自分の環境に合わせて読み替えてください。

cp <ソースを作成したディレクトリ>\a.rom \storage\129B-6156\Android\data\com.termux\files

com.termuxディレクトリまではあると思いますが、filesディレクトリが無ければ作成してください。

動作確認は色々な手段がありますが、今回は webmsx を使用します。
ブラウザから以下サイトにアクセスします。
WebMSX

画面左下の電源ボタンをクリックし、Open Fileを選択、ファイル選択ダイアログから先ほどのディレクトリのa.romを選択します。
画面に文字が表示されれば成功です。

RAMが4Gの場合は、ブラウザによってはメモリ不足のエラーが出ることがあります。 その場合は、OpenMSXなどのエミュレータアプリをインストールして実行してください。

さいごに

ここまでの作業で、Android上にz88dkとVSCode(code-server)を使ったMSXクロス開発環境ができました。
z88dkを使っていますのでC言語での開発もできますし、SDCC互換ライブラリも導入していますので、SDCCで開発したものでも簡単に移行できると思います。
なお、以下URLに便利なテンプレートプロジェクトやcmakeでのビルドなどが記載されていますので、参考にすると良いでしょう。

maple4estry.netlify.app

ではでは。