[MSX] Z88DKを使ってC言語でマシン語プログラムをつくる #MSX #MSX0 12月 23, 2023 リンクを取得 Facebook Twitter Pinterest メール 他のアプリ - [MSX用のマシン語プログラムをC言語で作れるZ88DK](#msx用のマシン語プログラムをc言語で作れるz88dk) - [Chromebook上でZ88DKを導入する](#chromebook上でz88dkを導入する) - [コンパイルのコマンド](#コンパイルのコマンド) ## MSX用のマシン語プログラムをC言語で作れるZ88DK MSXでのプログラムは基本的にBASICでしか書けなかった中の人ですが、カシオのポケコンPB-1000でちょっとだけアセンブラを覚え、MSXでもスロット操作とかでBIOSを使わないといけないようなものだけ、ちょっとだけ書いてはいます。 でもやっぱりアセンブラは中の人にはレベルが高すぎて、書くのがきついです。 BASICで全部かけるのが一番ですが、上記に書いたようにやっぱりBIOS直接呼ばないといけない処理なんかもあるし・・・ と思っていたところで、Z88DKという、C言語のプログラムをZ80CPU用のマシン語にコンパイルしてくれる環境があるというのを知りまして。 ちなみに、SHARPのポケコンPC-G850シリーズもZ80搭載なので、ポケコン用のマシン語プログラムも作れたりします。 ## Chromebook上でZ88DKを導入する 最近なんとなくChromebookを使っている中の人なので、Z88DKをChromebookに導入してみることにしました。 ちなみに主に使っているのは↓の機種ですが、最近、古くなったCore i5のノートPCにChromeOS Flexを入れたら快適すぎたので、そちらに浮気しております。CZ1はさすがにパフォーマンス的にきつすぎてw > __\[Chromebook\] ASUS Chromebook Detachable CZ1が30,000円を切っていたので買ってみた #chromebook__ > [https://mobileff.blogspot.com/2022/04/chromebook-asus-chromebook-detachable.html](https://mobileff.blogspot.com/2022/04/chromebook-asus-chromebook-detachable.html) Chromebookはたいてい、Linux環境のインストールができますので、Linux環境をまずはインストールします。 あとは、Linux用に導入手順を書いてくださっている方がいるので、その方のページを参考に導入します。 > __Z88DK を使って MSX のゲームをつくるための環境構築メモ__ > [https://maple4estry.netlify.app/z88dk-msx/](https://maple4estry.netlify.app/z88dk-msx/) 中の人の環境では、`./build.sh`を実行する前に、以下のコマンドを追加で実行するとうまくいくようでした。 ``` sudo apt-get install libxml2-dev libxml2-doc ``` (追記) ChromeOS Flexで試したときは、以下のコマンドも追加で実行する必要がありました。 ``` sudo apt-get install libgmp-dev sudo apt-get install g++ cd /usr/include sudo ln -s libxml2/libxml . sudo apt-get install pkg-config ``` ## コンパイルのコマンド たとえば、以下の3つのソースコードをコンパイルするとします。 hello.c ```c #include #include "mymsx.h" void main() { msx_println("Hello!MSX0!"); } ``` mymsx.h ```c void msx_chput(char c); void msx_chput_CRLF(); void msx_print(char[] str); void msx_println(char[] str); ``` mymsx.c ```c #include #include "mymsx.h" #asm CHPUT EQU 00A2H ;MAIN-ROM BIOS CALL CHPUT #endasm void msx_chput(char c) { #asm LD IX, 2 ADD IX, SP LD A, (IX) CALL CHPUT RET #endasm } void msx_chput_CRLF() { msx_chput(0x0D); msx_chput(0x0A); } void msx_print(char[] str) { for(int i=0;i<256;i++) { if(str[i]==0) { return; } msx_chput(str[i]); } } void msx_println(char[] str) { msx_print(str); msx_chput_CRLF(); } ``` コンパイルのコマンドは以下のようになります。 ```shell zcc +msx -create-app hello.c mymsx.c -subtype=disk -o hello.bin -DAMALLOC -lm ``` オプションについては、中の人の理解ですが、 - `+msx` - MSX用のバイナリを作るときにつける - `-create-app` - 実行用のバイナリを作るときにつける - `-subtype=disk` - DiskBASIC上で実行できる形式でコンパイルしたいときにつける。たとえば、BSAVE形式のバイナリを作るときなど。 - `-DAMALLOC` - プログラム内でmalloc()関数を使うときに必要なオプション - `-lm` - プログラム内でmath.hの数学関数を使うときに必要なオプション という感じです。特に、BASICから実行するBSAVE形式のバイナリにしたいときに重要なのが`-subtype=disk`で、これを指定すると、コンパイル結果のバイナリは、`hello.bin`以外に`hello.msx`というファイルが作成され、これがBSAVE形式(専用のヘッダが付加される)になりますので、MSXからは、 ```BASIC bload "hello.msx",r ``` とコマンドを打てば実行できるようになります。 ちなみに、作成したバイナリをMSX0に転送したい場合は、有志各位の優れたツールもありますので、そちらを使っていただくか、拙作のserbinsvもよろしければ使ってみてください。 > __\[MSX0\] シリアルコンソール経由でファイル転送するプログラム #MSX #MSX0__ > [https://mobileff.blogspot.com/2023/12/msx0.html](https://mobileff.blogspot.com/2023/12/msx0.html) とりあえず現場からは以上です。 コメント
コメント
コメントを投稿