今回は一部に使用したマシン語部分の解説をします。
別のコーナーで、マシン語勉強レポートをやってきたのですが、
それがこのプログラムで使用しているマシンコードのところまで
やれたので、やっと説明ができます。
こんなゲームを作ってきました。
MSXのBASICプログラム だけでは スピード的に無理なところが
ありまして、仕方がなくマシン語を使うところがでてきます。
BASICの自作ゲーム作成と銘打っていて、マシン語を使うのは
心苦しいところではありますが、
ご了承くださいm(_ _)m
(なお、このページだけでは理解できないと思います。今までの
MSX BASIC自作ゲーム作成、第1弾から読んでいただくのと、
MSXマシン語勉強レポートを最初から読んでくださいm(_ _)m。
大変ですが...)
マシン語を使って、なにをやっているか?なのですが、
・キャラクター(文字)のグラフィックの書き換え
・画面に表示
簡単にいいますとこんな感じです。
どちらもVRAMに関わってくるのですが、BASICでやると
かなりスピードが遅いのです。
最初に待たされる時間が長いとか、
画面切り替えで、画面を表示するのに遅いとか。
このコーナーのプログラムで使っているマシン語はこちらです。
960 DATA 2AF8F711080201A000CD5C0
0C9
970 DATA 2AF8F711082201A000CD5C0
0C9
980 DATA 21080211080A01A000CD4A0
0EBCD4D00EB23130B78B120F12108021
1081201A000CD4A00EBCD4D00EB23130
B78B120F1
985 DATA 21082211082A01A000CD4A0
0EBCD4D00EB23130B78B120F12108221
1083201A000CD4A00EBCD4D00EB23130
B78B120F1C9
990 DATA 2AF8F7110018010003CD5C0
0C9
960行~990行に書かれています。
DATA文で読み込んでいます。
4つのサブルーチンとなっています。(980行と985行は一つです。)
それぞれBASICから呼び出す形をとっています。
それでは1つづつ。
その1
960 DATA 2AF8F711080201A000CD5C00C9
これはなにをやっているのかといいますと、
メモリからVRAMへデータを転送しています。
なんのデータかというと、ブロックなどのキャラクターデータですね。
この”BASICの自作ゲーム作成!”では、
キャラクターデータをBLOADでメモリに読み込んでいます。
そのメモリに読み込んだデータを、VRAMに書き込みます。
実は、このプログラムは、マシン語の勉強レポートで
取り上げたのをそのまま使っています。
アセンブラで書くとこうなります。
LD HL, (F7F8H)
LD DE, 0208H
LD BC, 00A0H
CALL LDIRVM
RET
これは先のマシン語の解説ページとほぼ同じです。
0208Hと00A0Hが違うだけです。
0208Hは書き込むVRAMのアドレス。
00A0Hは、書き込むバイト数。
0208は、10進数でいうと、520。キャラクターコード 65(a) の
アドレスです。
00A0は、10進数でいうと、160バイト。(20文字分)
アセンブラの説明は、先のページに詳しく書いてあります。
ご覧ください。
その2
970 DATA 2AF8F711082201A000CD5C00C9
じつは、こちらは、その1のマシン語とほとんど変わりません。
書き込むアドレスが違うだけです。
こちらはVRAMの色を扱っているアドレスに、メモリから
読み込んだデータを書き込んでいます。
VRAMでは、形と色を別のアドレスに保存しています。
ソースコードです。
LD HL, (F7F8H)
LD DE, 2208H
LD BC, 00A0H
CALL LDIRVM
RET
2208H〜は、文字a以降の、色データが入っています。
以前書いたSCREEN2のVRAM構造を書いておきます。
文字の形の入っているパターンジェネレータテーブルは、
&H0000-------------------------------------
↓ 画面上段の文字
&H0800-------------------------------------
↓ 画面中段の文字
&H1000-------------------------------------
↓ 画面下段の文字
&H1800-------------------------------------
↓ パターンネーム
↓ (画面表示)
↓ 左上から右下まで。横32x縦24=768バイト
↓ 1バイトに1文字のアスキーコードを入れます。
&H1B00------------------------------------
↓ スプライトアトリビュート
文字の色の入っているカラーテーブルは、
&H2000-------------------------------------
↓ 画面上段の文字の色
&H2800-------------------------------------
↓ 画面中段の文字の色
&H3000-------------------------------------
↓ 画面下の文字の色
&H3800-------------------------------------
↓ スプライトジェネレータ
----------------------------------------------
それから、MSXのキャラクターコード表は、こちらを
ご覧ください。
Appendix A.9 キャラクタコード表 - テクハンwiki
マシン語はあと2つありますが、
少し長くなったので、続きは次回にします。
それでは〜^^