aburi6800のブログ

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

【MSX】SDCCでMSXのクロス開発環境を作る

 WindowsMSX(1)のアセンブラ開発環境を構築します。

 使用するものはSDCCとBlueMSX、Visual Stusio Codeです。

※当記事は、基本的なファイルの扱い方やパスの知識がある方、コマンドプロンプトが使える方を対象にしています。わからない方は各自で調べてください。
   

 

SDCCのインストール

 まずは、SDCCのインストールを行います。

 SDCCとは、Smaal Device C Compilerの略で、Z80など小規模デバイスのためのフリーのCコンパイラです。

 ただ、Cコンパイラとして見ると機能的に弱い面があるようですが、現時点では純粋にアセンブラとリンカを使いたいだけなので、これで良しとします。

sdcc.sourceforge.net

 適当に使用しているOSに合わせて最新ビルドをダウンロードします。

 インストールはデフォルトのままで、環境変数PATHへの追加も行っておいてください。

 インストール後、コマンドプロンプトで「sdcc -v」として、以下のようにバージョンが表示されればインストール成功です。

f:id:aburi6800:20190428222230p:plain
 

 

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が動けば何でも良いのですが、ディレクトリをディスクドライブにマウントできるので生成したバイナリをすぐに実行できるのと、デバッガが内蔵されているため、私はこれを選択しました。

bluemsx.msxblue.com

 面倒なので、何も考えずにフルバージョンをダウンロードした方がいいと思います。

 細かいインストール手順は割愛。

 起動させるとついゲームを遊びたくなってしまいますが、ここはグッと我慢。  

 

Visual Studio Codeのインストール

 他のテキストエディタでもいいのですが、これに慣れた方が今後は幸せになる気がします。

code.visualstudio.com

 インストールは適当に。わからなければ解説しているサイトが山ほどあるので、検索。

 日本語化はされていないので、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ファイルが出来ていると思います。

f:id:aburi6800:20190428233210p:plain

   オブジェクトファイルのままでは実行できませんので、実行可能なバイナリを作りためリンクという作業を行います。

 まず、ソースと同じ場所に source.rel のファイル名で以下の内容を保存します。

-im source
source.o

 そして、コマンドプロンプトで以下のコマンドを実行します。

sdld -nf source.rel

 エラーが出なければ、コンパイル完了です。

 フォルダの中は以下のようになっていると思います。

f:id:aburi6800:20190428234754p:plain      ここで作成された「.ihx」ファイルが、Intel HEX形式の実行バイナリになります。

 最後に、変換するために以下のコマンドを実行します。

ihx2bin source.ihx source.bin

 最後に「Complete.」の表示がされれば、変換完了です。

 ディレクトリの中は、以下のようになっていると思います。

f:id:aburi6800:20190429001848p:plain

 さて、これでWIndowsでの作業は完了です。

 次からはMSXでの作業となります。  

 

実行

 それでは、いよいよMSXで実行してみます。

 BlueMSXを起動して、[ファイル]-[ディスクドライブ A]-[ディレクトリ挿入]を選択します。

f:id:aburi6800:20190429002856p:plain

 次に、「フォルダーの参照」ダイアログが表示されるので、先ほどまで作業したディレクトリを選択します。

 そして、BlueMSXで「files」とコマンドを入力し、[Enter]を押してください。

 すると、以下のようにWindowsで作成したファイルが表示されていると思います。

f:id:aburi6800:20190429003145p:plain

 では、そのまま以下のコマンドを実行してください。

clear 200,&HCFFF
bload "source.bin",r

 どうでしょうか?

 画面に「Hello MSX!」と表示されましたでしょうか?

f:id:aburi6800:20190429004531p:plain    BASICのコマンドを打つのが面倒な場合は、BASICプログラムにして保存しておくと良いです。

(知らなかったのですが、Visual Studio Codeから行番号付けてBASICプログラムを書いて、拡張子「.BAS」で保存するとMSXから実行できるんですね・・・)

 以上がソースの作成から実行までの手順となります。

   

謝辞

 当記事を作成するにあたり、以下の方々の記事を参考にさせていただきました。

 お礼申し上げます。

こびにぃ氏:

こびにぃのあそび

HRA氏:

HRA's room