ニャオニャオ21世紀

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

MSX BASICとマシン語について 第17弾。 マシン語部分を解説。その1

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

今回は一部に使用したマシン語部分の解説をします。

 

別のコーナーで、マシン語勉強レポートをやってきたのですが、

それがこのプログラムで使用しているマシンコードのところまで

やれたので、やっと説明ができます。

 

こんなゲームを作ってきました。

www.nyaonyao21.com


 

 

MSXのBASICプログラム だけでは  スピード的に無理なところが

ありまして、仕方がなくマシン語を使うところがでてきます。

BASICの自作ゲーム作成と銘打っていて、マシン語を使うのは

心苦しいところではありますが、

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

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

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

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

大変ですが...)

 

www.nyaonyao21.com

 

マシン語を使って、なにをやっているか?なのですが、

・キャラクター(文字)のグラフィックの書き換え

・画面に表示

 

簡単にいいますとこんな感じです。

どちらも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に書き込みます。

 

実は、このプログラムは、マシン語の勉強レポートで

取り上げたのをそのまま使っています。

 

www.nyaonyao21.com

 

アセンブラで書くとこうなります。

 

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つありますが、

少し長くなったので、続きは次回にします。

 

それでは〜^^


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

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