ニャオニャオ21世紀

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

第24回 ループを作る DJNZ MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート

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

やっと、ループを作るところにきました^^

長かった〜。

これでやっとMSX BASICで使ったマシン語の説明ができます。

ループはとても大切。

それでは勉強して行きます!

 

BASICだと、FOR~NEXTという命令があります。

MSX BASIC入門 初心者も中級者も歓迎です。自作ゲームの作り方! - ニャオニャオ21世紀

 

マシン語には、DJNZという命令があるそうです。

 

ループを作るときは、繰り返しの回数を設定しますが、

DJNZでは、Bレジスタに繰り返し回数を入れます。

 

DJNZ   LABEL

というように書きます。

FOR~NEXTで言えば、NEXTにあたる命令です。

 

処理は、

1、Bレジスタから1を引く

2、Bレジスタが0でなければLABELにジャンプし、0になったら

次の命令に進む

です。

 

ここまでのところ、簡単ですね!

DJNZ命令のジャンプ先のラベルは、相対アドレスだそうです。

む、何バイトか戻るとかいうのか〜。

計算が必要になるなぁ。

 

スポンサーリンク

 

 

マシンコード

DJNZ  e   .....     10   e-2

eは戻るバイト数ですね。(マイナスの数字)

マシンコードを書くときに、e-2になっているのは

DJNZ命令の下の番地(次の命令)から数えて何バイトジャンプするか書くため。

 

相対アドレスということは、

-126 ~ +129バイトの範囲しかジャンプできません;

 

そこで、一旦下へジャンプ!

そして、絶対アドレスジャンプで上に戻るという方法を使います。

うーん、ややこしい!

例:

 

                  LD  B , 12H

LABEL1    ~~

                 ~~

                 ~~

                 DJNZ  LABEL2

                 JR       LABEL3

LABEL2    JP  LABEL1

LABEL3    ~~

                 ~~

 

こんな感じで書くそうです。

気になった方は、流れを追ってみてください^^

 

今日はここまでです。

これで本格的なマシン語を書く第一歩を踏み出せた気がします^^

次回は、以前BASICの中で使ったマシン語の解説をしたいと思います。

 

VRAMからVRAMへコピーするだけの簡単なプログラムです。

ただアドレスが面倒で。

アドレスが正しくなくて、なかなか実行できなかったのを覚えています;

でも慣れなのかな〜。

 

マシン語を使うのは、最初はBASICの一部に利用するのがいいと思います。

BASICではものすごく遅い処理が、マシン語だと一瞬なので感動しますよ〜。

 

それでは次回にまた〜。

 

amazon:

私が使っている本です。

いい評価が付いていませんが、私には解りやすいです。

応用例が少ないのだけが少し不満です。

まあ入門の本なので。

 

MSXマシン語入門講座
MSXマシン語入門講座
posted with amazlet at 18.05.07
湯浅 敬
アスキー
売り上げランキング: 1,873,352

 

www.nyaonyao21.com

 

 


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

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