タイマ割り込みにおけるVDP使用上の注意

※タイマ割り込みやVDPの基本的な使用方法は、「MSX2テクニカルハンドブック」(アスキー出版局、多分絶版)や、「MSXテクニカルガイドブック」(アスキャット・同人)などを参考にするといいでしょう。


以前、タイマ割り込みを利用して、VDPを操作をするプログラムを、いくつか組んだことがありましたが、プログラムによっては、うまく行ったり、画面がバグったりしました。 割り込みルーチンの中では、ちゃんとAレジスタを保存しているのに。どうしてプログラムによって、うまく行ったり、画面がバグったりするのか、本や他人のプログラムを見ながら考えてみました。

どうやらタイマ割り込み内で、VRAM(VDPではない)の読み書きを行っているプログラムが画面がバグりやすいようです。 タイマ割り込み内でVRAMの書き込みを行うプログラムを常駐して、BASICで画面をスクロールさせたりすると、文字が化けたり、変な所に表示されたりしました。 おそらく、BASICインタプリタが、VDPに対してVRAMの読み書きアドレスを指定した後、VRAMを書き換える前、または途中でタイマ割り込みが発生し、その中で読み書きアドレスが変わってしまうからではないかと思います。

結論は、タイマ割り込み内でVRAMの読み書き(アドレス変更)をしてはいけないということでしょうか。 どうしてもタイマ割り込み内でVRAMの読み書きをしたい場合は、通常のプログラム側でVRAM操作をしないようにすれば(する時はタイマ割り込み内でのVRAMの読み書きを禁止する)よいと思います。 BASICでは難しいかも知れませんが。

これは「踊る文字たち」(MSX・FAN誌1995年6月号採用)を作る時に、タイマ割り込み内でVDP操作をしても大丈夫かなと気になって考えたことです。 そういえば他のM・FANの常駐作品を見ても、タイマ割り込み内では、確かにVDP操作はしても、VRAMの読み書き(アドレス変更)はしていませんね。 人のプログラムをみるのは(ベーマガとかでも)勉強になるものだと思いました。


MSXの適当手帳 MSX駅 西山駅