マシン語の最後の部分の解説をします。
最後は、画面描画です。
画面の端にいったら、一瞬で画面を描き換えて
隣の面にいく処理です。
BASICだと、1画面すべてを描き換えると
かなり遅くなるのですが、マシン語なら一瞬です。
(なお、このページだけでは理解できないと思います。今までの
MSX BASIC自作ゲーム作成、第1弾から読んでいただくのと、
MSXマシン語勉強レポートを最初から読んでくださいm(_ _)m。
大変ですが...)
990行 DATA 2AF8F7110018010003CD5C00C9
以前書いた、マシン語勉強レポートのまんまです。
メモリ上にある、マップデータを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
それでは〜。
MSX BASICの情報はこちらへ〜