長らく放置していたJR-100エミュレータver2に新機能を追加しました。CPU速度を設定する機能です。コメントでいただいていた機能をいつか実装しようと思いながらずっと手を着けられずにいましたがようやくできました。ついでにR6522の実装も強化しています(外見はよく分からないと思いますが)。
ダウンロードはこちらよりお願いします。
JR-100エミュレータ
こんな設定画面です。ほぼ10倍速となる10MHzまで指定できます。
JR-100のBEEP音の周波数はクロック周波数に直結しているため、例えば実機でクロックを2倍に修正するとBEEP音の周波数も2倍になるはずですが、エミュレータではクロックの影響を受けないようにしています。
実際、どんな作りになっているかというとこんな感じです。
protected void storeT1CH_option() { if ((ACR & 0xc0) == 0xc0) { AbstractSoundProcessor sp = computer.getHardware().getSoundProcessor(); sp.changeFrequency(currentClock, 445000.0 / timer1); sp.setSpeakerStatus(currentClock, AbstractSoundProcessor.LineStatus.ON); } }
R6522のT1CHレジスタに値を設定したときのオプションの処理を記述できるようにしてあるのですが、この処理の中でレジスタ値に基づいてBEEP音の周波数を設定するようにしてします。この445000.0という定数はCPUクロックの1/2です。もしCPUクロックを変えたらこの定数も連動して変えないといけないのですが、あえてオリジナルクロックのまま変更していません。これにより、BEEP音の周波数が変わらないようにしました。
コメント
こんにちは、当方の掲示板への書き込みありがとうございます。
久々にJR-100エミュレータがアップデートされて嬉しく思います。早速試してみました。
これまで遅くて難があったゲームが高速化されていい感じですね。
キーマップの変更やジョイスティックへのキーの割り当てががあると更に快適になりそうですね。
にがさん、コメントありがとうございます。
仕事が多忙になり細々とコードを書いていたのが、ようやく形になった感じです。
キーマップの変更は考えてみます。
ジョイスティックの方はハードの製作と合わせて検討してみますね。
エミュレータv2でジョイスティック(ゲームパッド)に対応してみました。
ネイティブモード(アドレス$CC02の値を使うモード)はまだです。
楽しんでいただければ幸いです。
また、キーマップの変更機能ではどんなことができればいいか、よろしければ教えていただけると嬉しいです。