ポメラで動かすX68000エミュレータ!

f:id:PocketGriffon:20220226081707j:plain

今回は、キングジムポメラ(DM200)でX68000を動かした話!

キングジムポメラ(以下DM200)は、メーカーのホームページに「最強のテキスト入力専用マシーン」と紹介されている、いわゆるワープロ専用機だ。

www.kingjim.co.jp

なんとなくフォルムがNECモバイルギアに似ているところがあるが、おそらくテキスト入力に特化するとカタチが似てしまうのかも知れない。

f:id:PocketGriffon:20220226082547j:plain

↑これはモバイルギア MC-MK32

 

そんなDM200でLinuxが動いてしまうのはご存知だろうか?

hitoriblog.com

こんな事を知ってしまったら、ヨコシマなおじさんなら興奮せざるを得ない!(^^)

私も2018年3月頃、この情報を知った上でDM200を手に入れた。

手に入れて以来、ずっとLinuxマシンとして使っているので、本来のワープロ機能については電源の切り方くらいしか覚えていない(^^;;

 

DM200のスペックを簡単に言うと

CPUはクアッドコア 800MHz

メモリ512MB

となる。

これをどう見るのかは意見が分かれると思うけれど、私の用途(プログラミング)でLinuxマシンとして使う分について、パワー不足/メモリ不足を感じた事は一度もない。

むしろ必要十分、余裕のあるスペックとさえ感じる。

 

f:id:PocketGriffon:20220226083915j:plain

画面サイズは1024x600ドットの構成で、X-Windowを立ち上げても十分広いサイズ。

OTG対応のUSBハブを介してマウスをつなげれば、立派なハンドヘルド機になる!

よく驚かれるのだが、液晶は白黒以外の色が出るw

 

私の普段使いはX-Windowを起動せず、コンソールでfbtermを使っている。Emacsが立ち上がりgccが使えればプログラミングが可能だ(^-^)

私はDM200でPythonを覚え、6809のアセンブラと逆アセンブラを作った。その流れで今もよく見るFM-7エミュレータの開発も行った。

全てはこのDM200が始まりだったのだ!(^o^)

 

やっと本題!

前置きが長くなったが…

ここ最近、いろんなマシンでX68000エミュレータを動かしている。

基本はRetroArchの機能を利用して、libretroのPX68kを動かしている。

私個人が開発したエミュレータでは無いことをご承知おきいただきたい。

 

少し前にRetroArchがなんたるかを理解し始めた頃、そういえばDM200でも動かせるのかな…と思い、試してみたことがある。

この時はRetroArchのメニューを表示しただけで4つのCPUがフル回転してしまい、メニュー選択すら受け付けてもらえない状況になってしまった!

こりゃダメだね……と、ワリとすんなり諦めがついた。

 

その後…DevTermやBananaPi M2 ZeroでX68000を動かした際、メニューを経由せずにエミュレータ(libretro.so)を立ち上げる方法を試していた。

この方法がDM200でも使えないか…と思ったのが今回の発端(^^;;

 

CPUパワーではDevTermやBananPiには敵わないものの、メモリはBananaPiと同じワケだし、遅くてもいいなら動くんじゃないかな…と想像した。

DM200の画面上でX68000の表示が出るって事が嬉しいのだ!(^^)

そう、目的は遊ぶことじゃなくて動かす事だ!!(^^;;

 

RetroArchを動かしてみる!

RetroArchは普通にapt installでインストールしたものを使用した。

以下、RetroArchに対する私の解釈は…

 retroarch(実行ファイル)が表示、入力、サウンド、メニューを担当(ランチャ)

 libretro.soが各マシンのCPUやメモリなどのハードをエミュレートする本体

という感じに理解している。

 

今回X68000を動かすというは、言い換えればpx68k_libretro.soを動かすという事。

さっそくlibretro.soが置かれていた /usr/lib/arm-linux-gnueabihf/libretro を見て見ると…残念ながら px68k_libretro.so は置かれていなかった(T^T)

f:id:PocketGriffon:20220226175503j:plain

これを見ると……PCエンジンとかメガドライブのエミュレーションなども出来るって事かな…イメージ持ってない(というかカセットあるけど吸い出し方法知らない…)から動かせないけど。

 

ということは、px68k_libretro.so自体を用意してやらないといけない。

言い方が違う!

px68k_libretro.soさえ用意できれば動く可能性があるって事だ!(^-^)

 

pocketgriffon.hatenablog.com

↑ここを参考にしてpx68k_libretro.soをビルドしてみた!

f:id:PocketGriffon:20220226180138j:plain

8分16秒で無事にビルド完了!(^-^)

ビルド自体はDM200本体で行った。

画面が青いのは、ssh経由でログインしてるからだ(^^; ←紛らわしい

ビルド中にメモリが足りなくなる可能性があったため、X-Windowから抜けてビルドした。

BananaPi M2 Zeroが7分16秒でビルド出来ていたので、ほぼほぼクロック数通りにビルドが出来たと思って良さそうだ。

 

一度試しに起動してみる。

 retroarch -v -L ~/src/px68k-libretro/px68k_libretro.so

…残念ながら起動に失敗してしまう(T-T)

 

起動オプションに-vをつけると、いろんな情報を出力しながら実行してくれるので、起動に失敗した時の原因などを探るのが簡単になる。

 

情報を見てみると、サウンド関連の初期化で失敗しているようだった。そりゃそうだ、DM200にはサウンド機能がない(T-T)

~/.config/retroarch/retroarch.cfgにある audio_enable"false"に設定して、オーディオ機能をカットする。

 

ログをよく見てみると、もうひとつエラーが出ていた。

/dev/input/event?にアクセスしようとして、Permission denied となっていた。

心のなかで「パーミッションでないど?」と可愛く読んで気持ちを落ち着かせるw

/dev/input/event?のグループがinputになっているのだが、実行してるユーザーがそのグループに属していないから出ているエラーと理解。

 sudo usermod -aG input dm200

これでログインし直してOK。

 

f:id:PocketGriffon:20220226182705j:plain

よっしゃー!画面出た!

これはpx68k_libretro.soが表示している画面!(^^)

ここまで動けば、なんとなく動く予感!

f:id:PocketGriffon:20220226182858j:plain

試しにHuman68Kを立ち上げてみたところ。

ドットがくっきり表示されていて、とてもキレイ!

この状態でキーボードを繋げて打ち込むと、ちゃんとコマンドが打てた!

そしてDIRしてみた時に気がついた、異常なほどの遅さ……(-_-;;

 

f:id:PocketGriffon:20220226183335j:plain

試しにゲームを立ち上げてみると…この画面に来るまで実機だと1分くらいしか掛からないと思うのだけど、DM200だと10分以上掛かる…。なんか遅いよね、じゃなくて動いてるの?って疑いたくなるほど遅い(T-T)

 

パラメータをいじってみる

これまでの経験上、こういった遅くなる原因の多くは表示側に問題があるケースが多い。

だから手元にソースのあるpx68k_libretro.soを高速化してみても効果が薄い(高速化出来るかどうかは別問題)。ここは単純にretroarchのパラメータをいくつか変更してみよう。

 

コンフィグファイル(retroarch.cfg)にある幾つかのパラメータを変更しては試し…を繰り返した結果、以下のパラメータを変更すると効果が大きな事が分かった。

 video_fullscreen="true"
 video_scale_integer="true"
 video_smooth="false"
 video_threaded="true"

これは主に表示に関するパラメータだ。

 

video_threadedは、おそらくビデオ描画処理を別スレッドにするパラメータだと思うけど、これがfalseになっている事に気が付かず、だいーぶ遠回りしてしまった…。

だって動かしてみると4コアとも処理が平均して重いんだもん…

とっくに別スレッドになってると思いこんでたよ…orz

 

f:id:PocketGriffon:20220226205014j:plainf:id:PocketGriffon:20220226205043j:plainf:id:PocketGriffon:20220226205102j:plain

f:id:PocketGriffon:20220226205119j:plainf:id:PocketGriffon:20220226205200j:plainf:id:PocketGriffon:20220226205139j:plain

f:id:PocketGriffon:20220226205314j:plainf:id:PocketGriffon:20220226205337j:plainf:id:PocketGriffon:20220226205354j:plainf:id:PocketGriffon:20220226205002j:plainf:id:PocketGriffon:20220226205449j:plainf:id:PocketGriffon:20220226205511j:plain

ようやく動作速度が速くなって動作確認がし易くなった!(^^)

音楽が鳴らないのでX68000のゲームとしては臨場感が薄くてアレですが、まごうことなくX68000でございます!(^o^)

 

ここまでやってみて思ったけど、なーんもクリエイティブしてないぞ私……。

ただ動くべきものを動くように設定したのみ…orz

うーん、こういうチャレンジも楽しいけど、やっぱ何か作りたいね!(^o^)

 

おわりに

このブログを見て「DM200いいなぁ、買おうかなぁ」とか思っちゃった人は、少しだけ待ってみてほしい!

 

ネット見てたら新しいポメラの噂がちらほらと!

新機種で簡単にLinuxが走るとは思えないが、もしかしたらこっちの需要を意識した上でメーカーが塞いでこない可能性もあるし…と夢が広がってしまう(^^)

 

DM200で動かしながら思ったけれど…

さすがに電子手帳Brainでは動かないよね、X68000…(^-^;;

うん、動かないよ、さすがに。

誰かチャレンジしないかなーとww

 

ではまた次回!(^-^)ノ