Twitterでご報告した通り、DevTerm A06のRetroArchでX68000エミュレータ(PX68k)が動くようになった。しかしサウンド周りでの不具合(テンポがずれる、ノイズが乗るなど)が解決出来ず、困った状態が今!
一旦、この状態で情報を公開しつつ、協力者の出現を待とうという魂胆だ!(ToT)
我こそは思う方、ぜひご協力お願いします(T_T)
はじめに
以前、DevTermでRetroArchを利用してX68000エミュレータを動かそうとしてうまくいかず、その時は断念したということをブログに書いた。
その後もチャンスが有ればX68000エミュレータを動かすためにアレコレやっていたのだが…なかなかどうして上手く行かなかった。
RG351MPで初めてRetroArchが動いているのを見た。そう、今まで一度も動いてるところを見たことがなかったのだ!(^^;
なるほどこういう構造だったのか…と(なんとなく大雑把に)理解。その知識をもってもう一度DevTermに挑んでみた!
私自身がRetroArchを正しく理解していない可能性が高いため、書いてある事が支離滅裂になってる可能性も否定できない。自分に自信がないことを書くのってそうなりがち(T-T)
RetroArchインストール
まずはDevTermにRetroArchをインストールする。
この辺りは別作業と同時に進めてしまったため、もしかしたらこの情報だけでは足りない可能性もある。そこは適宜自己解決してもらえると助かります!←
DevTermはaptコマンドでパッケージをインストール出来るのでとても便利だ!意味も無く入れまくってしまう!(せめて意味は持たせてほしいが…)
terminalで以下のコマンドを打ち込む。
sudo apt install retroarch-assets libretro-*
これが終わるとウィンドウマネージャーのメニューにRetroArchが追加される。
起動するとこんな感じの画面↓が表示される。
多分……プレステ系の画面を見てる人ならば馴染み深いメニューなのかも?
私はプレステ系はPS2が最後、PS Vitaは持ってるけどほぼ使ったことがない…という感じなので、見覚えはあっても使い慣れてはいない…。
この後、いろんな設定を変えてはテストしていたのだが…なぜかメニューの表示が変わってしまい、元に戻す事ができなくなってしまった!!!
今は起動するとこんな感じの画面↓が表示される(T-T)
以降、この画面で説明していくけどごめんなさい(T-T)
ここで私はRetroArchの使い方が分からず、だいぶ苦戦した(T-T)
なんとなく理解した流れは
・Load Coreで使いたいコアを選ぶ
・Load Contentで読み込ませたいファイルを選ぶ
という感じだ。
インストールしたばかりの状態ではX68000(PX68k)のリストは見えているけれども、選択が出来ないという状態だった。
coreファイルが置かれている場所(/usr/lib/aarch64-linux-gnu/libretro)にpx68k_libretro.soが存在しないのが原因と思われた。
biosというか本体起動に必要なROMファイルは ~/.config/retroarch/bios 以下に置く。
cd ~/.config/retroarch/bios
mkdir keropi
cp ファイルのある場所/{iplrom.dat, cgrom.dat} keropi/
無理やり起動してみる
ここは他の人が試すのは難しいと思うけど、私が試した実験として記載(^^;;
まず前提としてDevTerm A06の実行形式ファイルはarm64。
この形式のファイルが欲しい。
しかし少し前にMac上でPX68kを動かそうと頑張ったが、どうも64bit環境との相性がよくなさそうな感じで、ビルドは通せても実行する事が出来なかった。
もしかしたら64bit環境では動かす事が出来ないのでは…と思い込んでいた。
そしたら…RG351MP上でRetroArchのX68000が動いた。RG351MPは実行ファイルがarm64なのだ。あらら…と思いRG351MPにログインして内部を探ってみると、64bit用のpx68k_libretro.soを発見!
そうかビルドしてちゃんと動くんだ…と思いつつ「このファイルをDevTermにコピーしちゃったら動くのかな…」と興味がわいてくる!
なーんにも考えずにファイルをコピーしておそるおそる起動してみる……
おおおお!これよこれ!これが見たかった!!!
この画面が表示されるってことはpx68k_libretro.soが動いてるって事!(^^)
ゲームを動かしてみたけれども……音飛びや耳障りなノイズが入って耐えられない(T-T)
オプションの調整で直るのかな……(-_-;;
とりあえず当初の目的だった「ファイルを準備したら動くのか」はクリア出来た!
px68k_libretro.soをビルドする
twitterにてNochiさん(@shikarunochi)がRetroArch用のpx68kがあることを教えてくれた!
当時ビルドできるソースを探していた時、libretroというのが何なのかを理解していなかったので、特に気にせずスルーしていた。今ならばRetroArchで使えると理解出来る!(^^;
これをダウンロードしてきてDevTermでビルドしてみる!
Makefileベースの環境で、gcc(g++)が使えればビルド出来るっぽい。問題はプラットフォームをどうするかとかかなぁ…と思いつつMakefile.libretroを読み進める。
どうやら platform、arch、system_platform辺りを正しく設定出来れば良いみたいだ。
そこで、Makefileの先頭に以下の3行を追加した。
書き方としてはどうなの?って気はするけど、まずはビルドを通すことを優先したい(^^)
あんまり深く考えず、makeしてみたところ、なんと一発でビルドが通った!
マジか!←カミュ風
出来上がったpx68k_libretro.soを見てみると、ファイルサイズが4MBほどある。対してRG351MPから持ってきたファイルは約800KBほど。あらら?いくらなんでも差がありすぎない??
これは多分アレだろうな…と思い、Makefileを見ていくとやっぱり定義されてました、-gオプションが。積極的にデバッグする事もないだろうから-gは外す事に。
ここはMakefile.libretroの62行目を直接変更してみる。
# CFLAGS += -g -O2
# CXXFLAGS += -g -O2 -fno-merge-constants
CFLAGS += -O3
CXXFLAGS += -O3 -fno-merge-constants
ついでにオプティマイズオプションもお祈りを込めて-O3にしてみる。
本当はMakefileにDevTermのエントリを追加する対応が正しいんだろうけど、とりあえずまずは先に動かしてみたい。体裁よりも動く実績だ!(^-^) ←イイワケ
これでmakeしてみたところ、約900KBの実行ファイルが出来上がった。最適化のオプションもあるので、まぁこんなモンだろう。
ちなみにmakeに掛かる時間は約10分ほど。これはm68000/c68k/c68kexec.cをコンパイルするのに時間が掛かってるからだ。非常に大きなswitch〜caseがあるので、この部分の最適化に時間がかかってるようだ。#pragmaで最適化レベルを変更してやると瞬時にビルドが終わるようになるので、テスト中はその方が良いかも知れない(^^)
自前ビルドしたpx68k_libretro.soを試す
出来上がったpx68k_libretro.soを試してみよう。
ファイルをそのままコピーしても良かったけど、私は何度か修正変更するかも…と思い、シンボリックリンクを張った。
cd /usr/lib/aarch64-linux-gnu/libretro
sudo mv px68k_libretro.so px68k_libretro.rg351mp
sudo ln -s /{ビルドした場所}/px68k_libretro.so .
さっそく起動実験してみよう!
メニューからRetroArchを選択して起動すると…
↑この画面になるので、ここでLoad CoreでAボタン。
px68kの画面が出た!!!
エミュレータを普段から使われている方には見慣れた画面?
私はほぼ初めて使ってみるので操作であたふた(^^;;
それぞれのドライブに何のファイルを割り当てるかという指定なので、カーソルで移動しつつファイルを選択する。
そしてRESETを選択。
出たね!(^-^)
でも…やっぱり音は遅れるしノイズでガビガビ(T-T)
DevTermでFn+F1(数字の1キー)を押せばRetroArchのメニューが表示される。
ここのメニューにあるOptionは、px68k_libretro.soの設定みたいだ。
このメニューからBボタンを押して表示されるメニュー↓が、RetroArch全体のメニュー。
ここにあるSettings以下に各種設定項目がある。
Drivers、Video、Audio辺りをかなり変更してみてんだけど、サウンドは直らず。ノイズが乗らないようにはなったけれど、遅れまくったりするのは変わらない。
ちなみにPX68k実行中でもCPUパワーはあまりまくっているので、エミュレーションそのものの実行時間が間に合っていないわけではなさそう。
うーん、どなたかRetroArchの設定に詳しい方、解決法を伝授してもらえないだろうか…(ToT)
今日のところはここまで!(^^;;
ではまた次回!(^-^)ノ