ニャオニャオ21世紀

アイデア。レトロゲーム(MSX、PCエンジン、ファミコン、メガドライブセガサターン)と、MSXのゲーム開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハック、電子工作ほか雑記を綴っています

MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート 第16回 サブルーチンの作り方

MSXの機体の情報が一杯 これは必見の書籍!! 僕らの好きなMSXハードカタログ

今回はサブルーチンの呼び出し方と、戻り方です。

命令自体はとても簡単です。

CALL  と  RET

です。

BIOSのところでも出て来ました!

 

BASICでいうところの

GOSUB ~ RETURN

に当たります。

 

スポンサーリンク

 

 

 

サブルーチンを呼び出すのは、

マシン語からマシン語のサブルーチンを呼ぶ時は CALL

BASICからマシン語のサブルーチンを呼ぶ時はUSR関数

です。

 

今回のCALLですが、あとにサブルーチンの入っている先頭メモリの

アドレスが入ります。

 

CALL  D000H

などと書き、

サブルーチンの最後に

RET

と書き、CALL以下に戻って来ます。

 

ここまではBASICのGOSUB~RETURNとほぼ同じですね〜。

 

それで、少し困るのが、サブルーチンのアドレスをどうするかです。

マシン語は、メモリの連番で、命令などを入れていくので、

適当にサブルーチンの開始アドレスを決めるわけにはいかないみたいです。

 

そこでニーモニックでプログラムをする場合は、

サブルーチンに名前をつけます。それをラベルといいます。

 

例:サブルーチン

KEISAN:  LD        A , (HL)

                ADD     A , 8

                INC      HL

                LD       (HL) , A 

                …

     RET

 

この場合は KEISANがサブルーチンの名前です。

 

サブルーチンを呼び出す時は

CALL  KEISAN

などとやります。

 

マシンコード

CALL         CD

RET           C9

 

CDのあとは、アドレスが入ります。

CALL  D218H     なら CD  18  D2

となります。

(16ビットであるアドレスは、上位、下位が入れ替わります。LDのところで説明しております。)

 

他にも条件コール命令、条件リターン命令というのがあるみたいですが、

勉強本の今回のページには説明がありませんでした。

もう少し先に載っているそうです。

 

この勉強本には、ハンドアセンブルする時の方法が書いてありました。

実際のマシンコードにするときは、

CALLのあとの2バイトは空けておくそうです。

MAINルーチンが終わって、サブルーチンが出て来て、

サブルーチンの開始アドレスが分かった時点で、先ほど空けておいた場所に

アドレスを書き込むそうです。

 

なかなか面倒な方法ですね^^

アセンブラが欲しいところですね〜。

Win用のZ80のアセンブラを使っているサイトをいくつか見たのですが、

よくわからないです;

なんかMSX専用のアセンブラはないみたいですね〜。

MSXは、CPUがZ80なので共通なのかな?

BIOSルーチンを呼ぶ時などはどうするのかな?

また調べてみます!

 

CALL命令を書かずに、

NOP命令という"何もしない"1バイトの命令を書いて

デバックをすることもあるそうです。

 

マシンコード:

NOP      00

 

まぁよくわからないけど、実際にやり始めたら分かるかな〜。

今は、そんなのがあるよってだけにしときます。

 

今日のところはここまでです。

次回は、CALL命令のメカニズムというところをやります。

MSX BASICでゲームを作ろうのところで書いた

マシン語の説明(VRAMのコピーの箇所)をしたいのですけど、

そこまで行くのに結構時間がかかりそう;

それほど難しいのは使っていないのですけど、

色々と説明に順番があって…。

まあじっくりとやっていくことにします。

 

それでは〜。

 

スポンサーリンク

 

 

 

www.nyaonyao21.com

 

MSX BASIC + マシン語はこちらへ〜

www.nyaonyao21.com

 


「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください