ニャオニャオ21世紀

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

WebMSXでMSX BASICの自作ゲーム作成!第19弾。BASIC中で使ったマシン語の解説 その3






マシン語の最後の部分の解説をします。

最後は、画面描画です。

画面の端にいったら、一瞬で画面を描き換えて

隣の面にいく処理です。

BASICだと、1画面すべてを描き換えると

かなり遅くなるのですが、マシン語なら一瞬です。

 

(なお、このページだけでは理解できないと思います。今までの

MSX BASIC自作ゲーム作成、第1弾から読んでいただくのと、

MSXマシン語勉強レポートを最初から読んでくださいm(_ _)m。

大変ですが...)

 

990行  DATA 2AF8F7110018010003CD5C00C9

 

以前書いた、マシン語勉強レポートのまんまです。

www.nyaonyao21.com

 

メモリ上にある、マップデータをVRAMに転送します。

VRAMには、画面描画のエリアがあるのでそこにキャラクター

文字(絵を描き変えたもの)を置きます。

 

マシンコードをアセンブラで表すと

 

LD  HL,  (F7F8H)     ...   2AF8F7

LD  DE,  1800H       ...   110018

LD  BC, 0300H        ...   010003

CALL  LDIRVM        ...    CD5C00

RET                        ...    C9

 

なお、ハンドアセンブルをする場合は、

マシンコードとアセンブラの対応表を使います。

 

上のマシン語勉強レポートと完全に同じです。

少し説明すると、

CALL  LDIRVM でメモリからVRAMへ転送します。

その時に、どのメモリのアドレスからVRAMのどのアドレスへ

何バイト分転送するか、まえもって、各レジスタに値を設定しておきます。

それが、CALL  LDIRVMより上の部分です。

そして、最後にRETでBASICへ戻っていきます。

 

これはBIOSルーチンを使うだけの処理なので簡単です。

ちなみに、私がはじめて書いたマシン語がこの部分です。

 

MSX FANにもよくでてきますね。

非常に使い勝手のいいソースコードです。

 

 

このマシン語コードは近々書き換えるかもしれません。

これはこれでいいのですが、

メモリ上の生のマップデータを転送しているためにちょっと問題が。

このままだと、

メモリ不足で6~7面しかいれることができないためです。

 

マップデータを圧縮する方法として、

以前書いたBASICでMAPを表示する処理をマシン語にしたいと

思います。

WebMSXでMSX BASICの自作ゲーム作成!第九弾。 MAPをDATA文より持ってくる。遅い^^(URLクリックで実行できます) - ニャオニャオ21世紀

 

 

マシン語でマップデータを展開しながら、書き換えるというを

やりたいです。

これをやるだけでデータ量が1/4になるので。

 

いろいろと私生活で、やることがありますので少々時間がかかると思います。

ご了承くださいm(_ _)m

 

それでは〜。

 

 

 


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

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