Saturday, April 2, 2011

プチコンでタイマー割り込みっぽいもの

プチコンではBEEPやSPRITEなどでそれぞれタイマーを持っていますが、汎用的なタイマー割り込みがありません。

で、無いものは作ってみます。

幸い、システム変数にMAINCNTLというフレーム数を示すものがあるので、60分の1秒の精度を持つタイマーとして使います。(用語集に1フレーム=1/60秒とあります)

星が点滅し、謎のBGM(雑音)が奏でられるサンプルです。
プログラムでは、次のことをしています。

  1. 10フレームに1回星を表示
  2. 20フレームに1回星を消去
  3. 10フレームに1回ランダムな音色でBEEP

プチコンは表示さえ抑えれば処理速度はめっさ速いので、こんなしくみで処理を詰め込んでもそれなりに動作するようです。

---TIMER INTERRUPT TEST
CLEAR:CLS
I1=10
I2=20
I3=10
T1=MAINCNTL
T2=MAINCNTL
T3=MAINCNTL
'
@MAIN
IF MAINCNTL-T1>I1 THEN GOSUB @INT1:T1=MAINCNTL
IF MAINCNTL-T2>I2 THEN GOSUB @INT2:T2=MAINCNTL
IF MAINCNTL-T3>I3 THEN GOSUB @INT3:T3=MAINCNTL
GOTO @MAIN
'
@INT1
LOCATE 10,10:?"★"
RETURN
@INT2
LOCATE 10,10:?" "
RETURN
@INT3
BEEP RND(64)
RETURN
---
I1〜3 ... 割り込みタイミング
T1〜3 ... タイマー保存用
配列変数に入れてループで回し、とび先はON〜GOSUBで管理してもよいかもしれません。

※code-prettify、プチコンBASICだといまいち。

No comments:

Post a Comment