見出し画像

BASICとマシン語の連携:ゲームできたよ

MSXPen

DEF USRを複数定義するとマシン語内部のサブルーチンの特定のアドレスをBASICから呼び出せるようになります。今回はMSXPenで作ってみました。MSXPenはBASICも書けるしアセンブリ言語も書けるWebのツール(?)です。WebMSX+αみたいなやつですね。MSXPenを使うと今までの記事のようなZ80ASMでアセンブルしてROMを作って・・ということは必要なくなります。
けどソースコードはバレバレですから、「他人に自分のソースコードを見せるのは恥ずかしい」というはずかしがりやさんには不向きかも。
今回はMSXPenなのでGitHubにはサンプルは載せてません。

マシン語のサブルーチン:FILLPROC

BASICでは矩形を画面に描画するのにすごく時間がかかります。例えば画面の左から何列目、上から何行目を開始位置として横幅いくつ、縦幅いくつをキャラクターで塗りつぶすみたいなやつです。
なのでその部分だけマシン語にしてみました。
そしてそのサブルーチンをDEF USR0=&HD000 としてUSR0でBASIC側では呼び出せるようにしています。

マシン語のサブルーチン:SCROLLPROC

これまたBASICでは厄介なのがスクロール処理です。文字を書き換える量が多くなればなるほどBASICには辛い作業になってしまいます。
なのでその部分をマシン語にしてみました。画面を右から左にざくーっと移動させて(るように見せかける)手法です。
あわせてそのサブルーチンをDEF USR1=&HD096 としてUSR1でBASIC側では呼び出せるようにしています。

ゲームできたよ

上記マシン語のサブルーチンをBASICから呼び出すことで「重い処理はマシン語にまかせて」それ以外の箇所はBASICでわかりやすく。という形でゲームを作ってみました。

[ゲームのイメージ]
あなたは洞窟に閉じ込められた。この長い洞窟に終わりはあるのか。
背後からは毒蛇の大群がついてくる。

[操作方法]
カーソルキーで動きます。
黄色いツルハシを取るとプレイヤーの右横のブロックを1つだけ消すことができます。消すとツルハシもひとつ減ります。
ツルハシを4つ以上保有しようとするとゼロに戻ります。
進行距離(DIST)が100単位になるとツルハシの出現率が減っていきます。
スクロール先の状況を見つつ、瞬時に進行ルートを考えて進む必要があります。

[ゲームオーバー]
緑色の毒蛇にあたるとゲームオーバーです。

簡単なゲームですが、筆者は300点いったことがないです(製作者なのに汗)

2023/05/09 追記
全体の処理がもっさりしていたので修正しました。あわせて音も付けました。


筆者近況

ディスクシステムのゼルダの伝説をリスペクトしつつ、コツコツとアクションRPGを作っています。キャラデザとか基本的な画面エフェクト処理とかは実装したのですがまだテキキャラが動かせていません。今回はスプライトを使っています。いままでの記事の総決算みたいな感じですね。
まあ、ぼちぼちと作っていきたいと考えています。画面の見た目は以下のような感じです。80年代、90年代のレトロゲームっぽく仕上げる予定です。

では、また!ノシ

セーラー服が似合うおじさんです。猫好き、酒好き、ガジェット好き、楽しいことならなんでも好き。そんな「好き」をつらつらと書き留めていきます。