SHARPの電子辞書Brainで動かすX68000エミュレータ、ついに最終話!(^^)/
今回は書くこともあんまり多くないので、さらっと済ませるよ!
最終版では、Linuxイメージを最新版に更新してみたことと、前に試してみてうまくいかなかったフレームバッファのメモリマッピング(/dev/fb0をmmapする)をもう一度試してみた。
Linuxイメージを最新にした!
Release ci-build20220125 · brain-hackers/buildbrain · GitHub
上ページにあるbuild20220125を試してみた。
unreleasedになっているので安定を求める方にはオススメしないのかも。
まだ使いはじめて半日も経っていないので特記すべき情報などは無いが、unreleased版と言いつつもかなり安定している。ずーっと電源つけっぱなしにしているが、不具合は今のところ起きていない。
私的に新しくしてこれは良かった!と思うところがひとつあって、有線LANを繋げた時にずーっと表示され続けてしまうメッセージが消えた事だ!(^-^)
精神的にとても気になっていたので、これだけでも新しくしてよかった!
フレームバッファをメモリマッピングできた!
以前、どうやっても成功しなかったフレームバッファのメモリマッピング化だが、今回正常に動作させる事に成功した。おそらく自分のバグだとは思うのだが…汗
フレームバッファのデバイス(/dev/fb0)をアクセスする際、主に2つの方法がある。
ファイルとしてアクセスする方法
メモリとしてアクセスする方法
上のファイルとしてアクセスする場合は、普通にfopenし、read/write→fcloseという、通常のファイルと同じ手順が取られる。
普通のファイルと同じ手順でアクセスが可能なため、とても手軽だ。
フレームバッファへアクセスする際は、必要な箇所までseekし、writeするという感じのプログラミングになる。
メモリとしてアクセスする方法は、openしたデバイスをmmapという関数でメモリへマッピングする。まさにメモリにあるFrameBufferへアクセスするのと変わらないため、プログラムもとても直感的になる。
フレームバッファという特性上、メモリとしてアクセスをした方が扱いやすいのだが、なぜか以前テストした時にどうしても成功しなかったのだ…。そのため、前回のブログではファイルアクセスの実装をしていた。
動作速度が少し向上するはずなので、なんとなくX68000 on Brainでの最後のチャレンジは、フレームバッファへのメモリマッピングアクセスと決めていた!
最終的な速度は…
さあ、お楽しみの速度を測ってみよう!
実行開始からロード画面が出るまでの時間
24分30秒 → 43秒 → 19秒
ロードが終了してタイトル画面が表示されるまでの時間
60分 → 2分47秒 → 1分35秒
ラスタースクロールが終了してタイトル画面完成
86分 → 3分14秒 → 1分56秒
当初に比べて約44倍以上になった!!!
メモリマッピングの効果すごい!(^^;;
前にDevTermで試した時にだいぶ効果が高かったので、Brainでもある程度は予想していたけれども……やはりプログラムの工夫次第で変わってくる。
これにて高速化のネタはやりきった!(^-^)
電子辞書でX68000、さらに1.5倍速で動くようになった!
— PocketGriffon (@GriffonPocket) 2022年3月4日
これにて高速化のアイディアはネタ切れw#X68000 #電子辞書 #Brain #Linux pic.twitter.com/MlbXfN7UwG
終わりに
電子辞書のジャンク品を100円で手に入れて、それがちゃんと動き、Linuxを入れ、X68000エミュレータを動かすというところまでやったわけだが、だいぶ満足度は高い(^^)
起動時の情報を見ると、CPUはARM926EJ-Sとなっている。この情報を元にWikipediaなどで調べてみると、どうやら動作周波数は200MHzほどらしい。
この動作クロック数を先に知っていたら、はたしてX68000を動かそうとしたのか…だいーぶ疑問だ(^^;
シングルコアで200MHz動作のARM CPU、おそらくMC68000CPUエミュレーションだけでも目一杯状態だろう。そう考えると、今の構造ではこの辺りが限界近いのかも…と思う。
この先は1%単位の高速化が主となっていくだろうが、どう頑張っても実機と同じ速度で動くとは思えない(^^;;
そう考えるとこの辺りが潮時なんだろうと思う!
最後に……実験と思って無名のSDカードにカーネルイメージを焼いてしまった。
おかげでビルドの時間が1.5倍に延びてしまったので、これだけはちゃんと直してからBrainでの作業を終了しようと思う!
お疲れさまでした!(^-^)
ではまた次回!(^-^)ノ