ニャオニャオ21世紀

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

MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート  第10回 BASICの中からマシン語を呼び出す






今日は、MSX BASICの中から、マシン語を呼び出す方法を勉強しました。

前回のページはこちらです。

www.nyaonyao21.com

 

 

最近はWebMSXで動かす、BASICで書かれたゲームの記事を

書いていますが、

 

www.nyaonyao21.com

 

処理が遅く、マシン語の必要性を感じてきたので

また、マシン語の勉強を再開したいと思っていました。

 

今までマシン語の勉強に使っていた本では最後の方のページになりますが

問題ないと思います。

 

BASICからマシン語を呼び出す場合は

マシン語はサブルーチンになるそうです。

メインルーチンはBASICですね。

 

マシン語は、メモリに直接数字(マシン語の命令とか)を

入れておいて実行されるものですが、

どうやってメモリにマシン語をいれるかというと

2種類あるそうです。

 

1.POKE文(BASICの命令)を使う。

 

POKE &HD000,&H89

などと書きます。

POKE メモリのアドレス、入れたい値

です。

 

2.カセットテープにセーブしたデータや

 プログラムをBLOAD命令でロードする。

(DISKは書いてませんでした;)

 

BLOAD "ファイル名"

で呼び込むそうです。

お、カセットテープの市販のゲームで使っていました、これ!

そのときはどんなふうだったかな?

bload"cas:",r

を打ち込むとテープから読み込んでいました。

懐かしいですね!

 

メモリへデータを直接読み込んでいたんですね!

ちなみにマシン語のプログラムファイルを作るには、

BSAVE"CAS:PROG1",&HD000,&HD028

などとするそうです。

PROG1はファイル名

あとの16進数は&HD000〜&HD028のメモリの内容をセーブすると

いうことみたいです。

 

そのプログラムをロードするのは

BLOAD"CAS:PROG1"

でカセットテープからロードされるそうです。

 

市販のテープのゲームもBLOADのあとの ,Rをつけずにロードして

あとはメモリを覗く命令のPEEKをつかえば、

マシン語が見れたのかな?

 

へぇ〜。

市販のゲームのマシン語を覗くなんて、当時小学生だった私には

考えたこともなかったです;

そういうことやっていた人もいたのかな〜?

すごいですね!

 

マシン語プログラムのコール

 マシン語を呼び出すのは、BASICのUSR関数というのを使うそうです。

 

まず、メモリに入れたマシン語を保護しないといけないそうです。

 

メモリにはBASICの変数領域というのがとられるそうです。

BASICで変数を使うときに、値を取っておく領域だそうです。

 

その領域が勝手にとられるので、マシン語の領域を壊してしまわないように

しないといけません。

 

そのために

CLEAR文を使うそうです。

 

CLEAR 300,&HCFFF

などとします。

変数の領域をあるアドレスよりも上におけという命令だそうです。

 

マシン語の領域を壊さないために、

BASICの変数領域をどこにするか指定するわけですね!

 

ここでMSXのメモリのことが書いてありました。

           

     RAMの構成(32k,64kのMSXの場合)

(アドレス)

&H8000  -------------------------

         BASICプログラム

      マシン語とか

&HF380  --------------------------

                ワークエリア

                ---------------------------

 

32kバイト、64kバイトのMSXの場合は、

プログラムが入るアドレスが

&H8000

 

16kバイトのMSXの場合は、

アドレスが

&HC000

になるそうです。

 

ワークエリアというのは、BASIC インタプリタが動くために

使うデータを入れておく領域だそうです。

 

BASICのプログラムは上の方にはいるので、マシン語は下の方に

いれるといいそうです。(ワークエリアより上)

ふむふむ。

 

この本では&HD000 (D000H番地)

くらいからマシン語を入れていけば十分でしょうと書いてありました。

 

 

そして、いよいよマシン語の呼び出しです。

マシン語を使うには、

マシン語の開始アドレスを教えてやらなければいけません。

 

それには、

 DEF USR = &HD000

&HD000からマシン語をスタートすることを宣言

 

実際にマシン語のサブルーチンを使うときは、

A=USR(0)

とします。

0~9まで宣言できるそうです。

 

実際の使い方は,

MSX BASICでゲームを作ろうのページで紹介することが

あるかもしれません。

(勉強した本には特に詳しく書いてなかったです)

 

中古MSXハード1 chip MSX(1チップMSX)

中古MSXハードMSX2本体 FS-A1F(黒)

 

今日はこの辺りまでとします。

次回は、BASICからマシン語へ値を渡すということを勉強します。

(マシン語からBASICへ値を渡すのは難しいので、

勉強している本には書いてないそうです。)

 

面白くなってきました!

では〜。

スポンサーリンク

 

 MSXのゲームを作りたいという思いが、

こんななんちゃってMSXゲームを生み出してしまいました;

iphoneとandroidのアプリです。

簡単操作です。

 無料ですので試してみてください^^

8bit run run go

8bit run run go

  • nao21
  • ゲーム
  • 無料

 

 

play.google.com

 

www.nyaonyao21.com

 

 

 

 

www.nyaonyao21.com

 


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

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