アフィリエイト広告を利用しています
 

2023年09月29日

Laboratoryテーマ10「マシン語処理中に走査線割り込みを使ってBGMを鳴らしたい」




さて、今回はLaboratoryテーマ10「マシン語処理中に走査線割り込みを使ってBGMを鳴らしたい」です。
MSXには「走査線割り込み」と言う機能があります。
「走査線割り込み」は簡単に言うと、プログラム実行中でも凡そ1/60秒毎に割り込みが掛かり、別処理を走らせる事が出来る機能です。
1/60秒毎と一定間隔なので、タイマーやBGM演奏などに使われます。
別処理が終わると、実行中プログラムの中断した位置から再開します。

今回は以前に公開した、Laboratoryテーマ6「自機に向かって飛んでくる敵弾」と、Laboratoryテーマ14「簡単にBGMを鳴らしたい」のサンプルプログラムを合体させ、ゲーム中にBGMを演奏させてみます。


流石にシューティングゲームのBGMに、「カエルの歌」はなかなかシュールです。

「IITVLSMPL.BAS」【ダウンロード

9_29_1.png
STSMPL.BASへの追加分のみ掲載します。

マシン語のサンプルです。
起動すると、ITVLSMPL.BINを作成します。

「BINSET.BAS」【ダウンロード

9_29_2.png
STSMPL.BINへの追加分のみ掲載します。

走査線割り込みがされると、特定のアドレス(&HFD9F)がコールされます。
&HFD9F~&HFDA3の5バイトが走査線割込み時の命令格納エリアとなっているので、ここにBGM演奏ルーチン部へのコール命令を設定する事で、走査線割り込みでBGMを演奏する事が出来ます。
因みに、通常はリターン(&HC9)のみ設定されています。

プログラムは、「走査線割り込み初期処理」(&HC310)、「走査線割り込み終了処理」(&HC338)、「割り込みBGM演奏処理」(&HC348)の3つに分かれます。
「走査線割り込み初期処理」は、BGM演奏開始前に一度実行して下さい。
走査線割込み時の命令格納エリアの内容を退避します。
これは周辺機器が取り付けられていたりすると、走査線割込み時の命令格納エリアに既に別処理が設定されている可能性があるためです。
「走査線割り込み終了処理」は、BGM演奏終了時に一度実行してください。
退避した走査線割込み時の命令格納エリアの内容を戻します。
「割り込みBGM演奏処理」は、ルーチン開始時に全てのレジスタを退避(PUSH)し、終了時に戻し(POP)ます。
通常のプログラム処理と、割り込み処理で同じレジスタを使うので、割り込み内でレジスタ変更すると、通常プログラムにも反映されてしまい、必ずバグるので忘れないように。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory
検索
<< 2023年09月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
広告
最新記事
ブログランキング
にほんブログ村 ゲームブログ ゲーム制作へ
プロフィール
J-JSOFTさんの画像
J-JSOFT
高校時代、あれほど熱心に取り組んだMSXに触れなくなって30年余…。 MSXエミュレータとの出会いで、MSX愛が再燃中。
プロフィール
カテゴリーアーカイブ
ファン
QRコード