【MSX】SDCCでMSXのクロス開発環境を作る
WindowsでMSX(1)のアセンブラ開発環境を構築します。
使用するものはSDCCとBlueMSX、Visual Stusio Codeです。
※当記事は、基本的なファイルの扱い方やパスの知識がある方、コマンドプロンプトが使える方を対象にしています。わからない方は各自で調べてください。
SDCCのインストール
まずは、SDCCのインストールを行います。
SDCCとは、Smaal Device C Compilerの略で、Z80など小規模デバイスのためのフリーのCコンパイラです。
ただ、Cコンパイラとして見ると機能的に弱い面があるようですが、現時点では純粋にアセンブラとリンカを使いたいだけなので、これで良しとします。
適当に使用しているOSに合わせて最新ビルドをダウンロードします。
インストールはデフォルトのままで、環境変数PATHへの追加も行っておいてください。
インストール後、コマンドプロンプトで「sdcc -v」として、以下のようにバージョンが表示されればインストール成功です。
ihx2binのインストール
生成したバイナリはIntelHEX形式で、そのままではBASICからBLOADして実行できません。
これを変換するためのツールとして、ihx2binというものがあります。
以下リンクで取得したzipに含まれている、ihx2bin.exeをパスの通った適当なディレクトリに入れておいてください。
http://www5d.biglobe.ne.jp/~hra/note/msx_game/files/asm.zip
BlueMSXのインストール
次に、MSXエミュレータのBlueMSXをインストールします。
BlueMSXでなくても、MSXが動けば何でも良いのですが、ディレクトリをディスクドライブにマウントできるので生成したバイナリをすぐに実行できるのと、デバッガが内蔵されているため、私はこれを選択しました。
面倒なので、何も考えずにフルバージョンをダウンロードした方がいいと思います。
細かいインストール手順は割愛。
起動させるとついゲームを遊びたくなってしまいますが、ここはグッと我慢。
Visual Studio Codeのインストール
他のテキストエディタでもいいのですが、これに慣れた方が今後は幸せになる気がします。
インストールは適当に。わからなければ解説しているサイトが山ほどあるので、検索。
日本語化はされていないので、Ctrl+Shift+Xを押して、Extension(Japanese Language Pack for VS Code)を追加。再起動をすると日本語になっているはずです。
ついでに、Z80 AssemblyというExtensionも入れておきましょう。
ソース作成
基本的な環境ができたところで、実際にプログラムを作って動かしてみます。
簡単なもので、「Hello MSX!」と表示させてみましょう。
開発はWindowsで行います。
MSX実機でも開発は可能ではありますが、ツール(MSX-DOSやアセンブラ)の入手が困難であること、編集の作業効率が悪いこと、実行スピードが遅いことから、現状はデメリットしかないため、お勧めはしません。
それでは、Visual Studio Codeで適当なディレクトリを作り、そこにアセンブラのソースファイルとして「source.asm」を作りましょう。(Visual Studio Codeでのこのあたりの操作は、いろいろなサイトで解説されているので割愛します)
ファイルはテキストファイルで、文字コードはCP437、改行コードはCRLFで作ります。(といいつつ・・・ShiftJISとかでも問題ないと思う)
中身はこんな感じでしょうか。
; ; source.asm ; .area CODE (ABS) .org #0xD000 ; 開始アドレス CHGMOD = 0x005F ; BIOS(CHANGE SCREEN MODE) ERAFNK = 0x00CC ; BIOS(ERASE FUNCTION) CHPUT = 0x00A2 ; BIOS(CHARACTER OUTPUT) PG_INIT: LD A, #1 ; SCREEN1にする CALL CHGMOD ; BIOSコール(CHANGE SCREEN MODE) CALL ERAFNK ; BIOSコール(ERASE FUNCTION) LD HL, #TEXT ; 文字列データのアドレスをセット CALL TEXTPUT ; 文字を表示してみる RET TEXTPUT: LD A, (HL) ; 1文字のデータをAレジスタに転送 OR A ; Aレジスタの値が0か判定 RET Z ; 0ならリターン CALL CHPUT ; BIOSコール(CHARACTER OUTPUT) INC HL ; 次のアドレスへ JR TEXTPUT TEXT: .ASCII "Hello MSX!" .DB #0
今回は&HD000番地から格納されるプログラムとしました。
コンパイル
次に、ソースファイルからオブジェクトファイルを作ります。
コマンドプロンプトで、ソースを保存したディレクトリに移動して以下のコマンドを実行します。
sdasz80 -ls -o source.o source.as
エラーが無ければ、以下のように.lstファイルと.oファイル、.symファイルが出来ていると思います。
オブジェクトファイルのままでは実行できませんので、実行可能なバイナリを作りためリンクという作業を行います。
まず、ソースと同じ場所に source.rel のファイル名で以下の内容を保存します。
-im source source.o
そして、コマンドプロンプトで以下のコマンドを実行します。
sdld -nf source.rel
エラーが出なければ、コンパイル完了です。
フォルダの中は以下のようになっていると思います。
ここで作成された「.ihx」ファイルが、Intel HEX形式の実行バイナリになります。
最後に、変換するために以下のコマンドを実行します。
ihx2bin source.ihx source.bin
最後に「Complete.」の表示がされれば、変換完了です。
ディレクトリの中は、以下のようになっていると思います。
さて、これでWIndowsでの作業は完了です。
次からはMSXでの作業となります。
実行
それでは、いよいよMSXで実行してみます。
BlueMSXを起動して、[ファイル]-[ディスクドライブ A]-[ディレクトリ挿入]を選択します。
次に、「フォルダーの参照」ダイアログが表示されるので、先ほどまで作業したディレクトリを選択します。
そして、BlueMSXで「files」とコマンドを入力し、[Enter]を押してください。
すると、以下のようにWindowsで作成したファイルが表示されていると思います。
では、そのまま以下のコマンドを実行してください。
clear 200,&HCFFF bload "source.bin",r
どうでしょうか?
画面に「Hello MSX!」と表示されましたでしょうか?
BASICのコマンドを打つのが面倒な場合は、BASICプログラムにして保存しておくと良いです。
(知らなかったのですが、Visual Studio Codeから行番号付けてBASICプログラムを書いて、拡張子「.BAS」で保存するとMSXから実行できるんですね・・・)
以上がソースの作成から実行までの手順となります。
謝辞
当記事を作成するにあたり、以下の方々の記事を参考にさせていただきました。
お礼申し上げます。
こびにぃ氏:
HRA氏: