いちばんやさしい JR-200 ゲーム制作の教本

2023.3.26 記
2023.12.13 訂正

 基本的なこととして ROM 内のルーチンについては Enri さんの解析ページを参照させてもらってください。JR-200 は仕様上 DRAM より ROM の方が速いので、欲しい機能が ROM にある場合は積極的に ROM ルーチンを使った方が有利。16ビット加減算、カーソルXY座標→VRAM アドレス変換、1バイト→アスキーコード2文字分に変換(スコアを表示するときに便利)など、便利なものがいろいろあり。

2023.9.10 追記

 Enri さんのサイトが移転再開されたので新リンクを。

http://cmpslv2.starfree.jp/Jr200/EnrJr2.htm

設定しておきたい値

アドレス  
0 キーボードを押したときのピッピ音がいらなければ0に。VJR-200 はこの機能を実装していないので忘れがち。
0xe 背景色。CLS に相当するルーチンを利用するときに影響する。【訂正 2023.12.13】カラーアトリビュート値。ROM コールを使った文字描画、CLSに影響する。背景黒に白文字なら7。ROM バージョンによって初期値が違うので設定推奨。
0xc81f 割り込みマスク。テンポ以外のタイマー割り込みを使わないなら2に。
0xca00 枠色。ROM バージョンによって初期値が違うので設定推奨。

キースキャン

0xe8cb コールするとアドレス1,2,3にそれぞれキーボード(キャラクターコード)、ジョイスティック1,2の値が入る。

音楽再生

 0x30 - 0x31, 0x32 - 0x33, 0x34 - 0x35 に演奏するデータの先頭アドレスを書く。

 0x2d, 0x2e, 0x2f に1を書く。

 0xc811 でテンポを指定する。0x40 あたりを基本として適切なテンポになるように変えてみる。

 0xc810 に0x59を書くと再生開始。

 再生を止めるときは、0x30 - 0x31, 0x32 - 0x33, 0x34 - 0x35 に0を書く。

ゲームキャラはユーザ定義文字よりキャラクタRAMがおすすめ

 狭義のユーザー定義文字(BASIC の COLOR ,,1 で表示するもの)はキャラクターコードとビデオコードが違うため少々使いづらい。リアルタイム・ゲームならカナやグラフ文字を使うことは少ないだろうから、キャラクタコード 0x80~0xffの通常キャラクタ領域をゲームキャラにあてて、ユーザー定義文字領域(0xc000~xc3ff、0xd000~0xd3ff 【訂正 2023.12.13】 0xc000~0xc0ff, 0xc400~0xc4ff)はクリティカル・ルーチンを置くのがよい。なぜここにコードを置いた方がよいかは以下のページ参照。

https://jr200.web.fc2.com/hard/clock.html

 ちなみになぜユーザー定義文字のキャラクターコードとビデオコードが違うのか問題については過去に掲示板で話題になったことがあるので、興味のある方は、掲示板ログの141~147を参照のこと。

https://jr200.web.fc2.com/bbs2/bbs2_2.html

ゲームの速度管理に使うタイマーはTCEが標準

 設定時間が過ぎたかどうかを確認するために割り込みを使う必要はない。タイマーが一周すると 0xc816の5ビット目(LSB を0とする)、ボローが立つので、ここをチェックすればいい。ボロービットは読み出すごとに自動的に0に戻る。

0xc816 - 0xc818の設定値

0xc816 0x1e

  0xc817 - 0xc818
10FPS 0x418a
20FPS 0x20c5
30FPS 0x15d8
40FPS 0x1062
50FPS 0xd1b
60FPS 0xaec

ちなみにタイマカウンタの内訳

TCA ロード終了後は使われないので、ユーザープログラムで使っても大丈夫、多分
TCB PLAY 文相当の演奏ルーチンを使うときのテンポ指定
TCC サウンド再生に使用
TCD サウンド再生に使用
TCE  
TCF サウンド再生に使用

CPXの罠に気を付けろ

 6800のCPX命令にはNフラグが上位1バイトのみの引き算に基づき変化すると言う罠がある(Zフラグはちゃんと2バイトの引き算に基づいて変化する)。なので完全な引き算に基づいたNフラグが欲しければ ROM ルーチン 0xef80 を使うか自作する。


SOFTWARE TOP

TOP PAGE

inserted by FC2 system