【MSX】AndroidでMSXクロス開発環境を構築する(3)
今回は、ubuntuにz88dkとcode-serverをインストールし、Z80アセンブラの開発を行えるようにします。
最後に簡単なサンプルプログラムを作り、動作確認を行います。
これまでの作業については、以下の記事を参照してください。
z88dkのインストール・設定
z88dkをソースからビルドします。
手順は以下のサイトに詳しく書いてありますが、一応記載しておきます。
まず、適当なディレクトリで以下を実行してソースを取得します。
ここではホームディレクトリで実行する前提で進めます。
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のインストール手順は以下サイトに書かれています。
具体的には、インストールスクリプトが用意されているので、それを実行するだけです。
スクリプトを取得するために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アセンブラの開発を行うため、以下の拡張機能を入れることを推奨します。
- Japanese Language Pack fot Visual Studio Code
- ASM Code Lens
- Z80 Macro-Assembler
テストプログラムの作成
適当なディレクトリを作り、 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
動作確認は色々な手段がありますが、今回は webmsx
を使用します。
ブラウザから以下サイトにアクセスします。
WebMSX
画面左下の電源ボタンをクリックし、Open File
を選択、ファイル選択ダイアログから先ほどのディレクトリのa.rom
を選択します。
画面に文字が表示されれば成功です。
RAMが4Gの場合は、ブラウザによってはメモリ不足のエラーが出ることがあります。 その場合は、OpenMSXなどのエミュレータアプリをインストールして実行してください。
さいごに
ここまでの作業で、Android上にz88dkとVSCode(code-server)を使ったMSXクロス開発環境ができました。
z88dkを使っていますのでC言語での開発もできますし、SDCC互換ライブラリも導入していますので、SDCCで開発したものでも簡単に移行できると思います。
なお、以下URLに便利なテンプレートプロジェクトやcmakeでのビルドなどが記載されていますので、参考にすると良いでしょう。
ではでは。