以下のようなMSX BASICプログラムを書きました。
5 CALL MUSIC(0,0,2,2)
10 ON INTERVAL=240 GOSUB 100
20 INTERVAL ON
30 DEFINTA-Z:KEYOFF:CALL KANJI0
40 SCREEN7:SET PAGE0,0:CLS:SETPAGE1,1:CLS
50 SET PAGE1,0
60 BLOAD"OPEN",S:COLOR=RESTORE:COLOR=(0,0,0,0)
70 SET PAGE1,1
80 GOTO80
100 PLAY#2,"F8","G8","A8"
110 RETURN
私の中では4秒(=240)ごとに(100行の)音が鳴り続けるイメージなのですが、鳴りません。
この原因がどうしても分かりませんでした。(なお、OPENという名のグラフィックデータはあります。)
エラーにもなりません。
数年来悩んでいて、ようやく解決方法は分かったのですが、とくにこれについての解説とかも見たことがありませんでした。
このレベルの人間が作っているということを再認識していただければと思います。
5 CALL MUSIC(0,0,2,2)
10 ON INTERVAL=240 GOSUB 100
20 INTERVAL ON
30 DEFINTA-Z:KEYOFF:CALL KANJI0
40 SCREEN7:SET PAGE0,0:CLS:SETPAGE1,1:CLS
50 SET PAGE1,0
60 BLOAD"OPEN",S:COLOR=RESTORE:COLOR=(0,0,0,0)
70 SET PAGE1,1
80 GOTO80
100 PLAY#2,"F8","G8","A8"
110 RETURN
私の中では4秒(=240)ごとに(100行の)音が鳴り続けるイメージなのですが、鳴りません。
この原因がどうしても分かりませんでした。(なお、OPENという名のグラフィックデータはあります。)
エラーにもなりません。
数年来悩んでいて、ようやく解決方法は分かったのですが、とくにこれについての解説とかも見たことがありませんでした。
このレベルの人間が作っているということを再認識していただければと思います。
30行目の「CALL KANJI0」が悪いのかもしれません。
これを実行するとワークエリアが初期化されて動作がおかしくなる
といった事が書かれた記事を見たことがあります。
なので、もしかすると
CALL KANJI0の実行により
その前で設定されたINTERVALの内容が
消されているのかもしれません。
「CALL KANJI0」の場所を先頭に移動してみてはいかがでしょうか。
では、ついでに、このプログラムのままでも音を鳴らすことが出来ますが、その方法はご存知でしょうか。
私はそのために、余計に頭を悩ませることになったのです。
2回実行するとかですかね。
ワークエリアの初期化はリセット後の初回のみ行われるとか、でしょうか。
ただ、理由は私には分かりません。
「ワークエリアの初期化」についての知識がないので。
では、もう一問、お願いします♪