Linux ZaurusでX68000!

この「○○でX68000」というネタでどこまで引っ張るんだろう…(-_-;;

読んでる方はとっくに飽きていると思うけれど、もう少しだけ書くよ!(^^)

ちなみに今回も結構な苦労をしているので、ネタはたくさんありそうだ(^^;;

 

Linux ZaurusX68000

前回、NetWalkerX68000を動かした後に「もっとパワーが無くて苦労しそうなマシンでX68000を動かしてみたい」という、ちょっぴり歪んだ考えが脳裏に浮かんだ!

だって簡単に動いちゃったらプログラマとして工夫するところがないじゃん!(^^)

 

まずは動かす。

その上で、さらに何か工夫が出来ないかを考えるプロセスがとても楽しい。

プログラムを組む上での楽しさってそこなのかなーと最近思う(商業除く)。

 

Linux ZaurusX68000を動かす場合、いくつかの心配がある。

 

まず1つめは本体RAMの64MBというサイズ。

px68kを動かすのは、X-Windowを使わなければおそらく大丈夫であろうと予測。

問題はビルドだ!こちらはマジで困る…。

だって512MBあるポメラDM200でもメモリオーバーになるプログラムですぞ?

いったい何メガのswapを用意したら良いのやら…。

そもそも一晩とかでビルド終わるの??(T-T)

 

これはもう別の環境を用意して解決しようと思った。

おそらく32bit Linuxの環境であればある程度の互換性はありそうだけど、Linuxのバージョンなど解決しなければならない問題が多すぎる。うーん…

 

2つめが、フレームバッファの直アクセスできるんだっけ?

以前使ってた時に試した覚えがない。

これが出来ないと実行速度が出ないかもなー。わかんないけど!

これは本体が起動したら試してみる必要がありそう。

 

3つめが、Zaurusへのファイル転送方法は??

SDカード経由で頑張るか、ネットワーク経由で行うか。

確かCFの10BASEカードを持っていた気がする…

 

今の段階では謎が多いけど、だからといって諦めたらもったいない!

ダメであっても、ダメな理由をちゃんと検証してから諦めたい(^^)

 

Linux Zaurusを探せ!

当時、アホみたいにハマったのでLinux Zaurusは確か3台くらい持ってる。

私はとにかく引っ越しが多い人でして(not 夜逃げ)、そのたびに段ボールを開けるのが面倒になってしまい、そのまま山積みにしてしまっている。

 

以前、いくつかのダンボールを整理してる時にLinux Zaurusを見つけた記憶がある。その時に「あー、こんなところにあった。これじゃあ二度と見つけられないよな…。でももう使わないからいいか」と思い、戻してしまった事を強烈に覚えていた。

 

その状態から見つけないといけないハメに…orz

結局、探し当てるまでに5日間掛かった!

ミューゼオを見てくれてる読者なら分かると思うけど、私は細かい荷物が多い!

小さいものを探すには忍耐力が必要なのだ(^^;;

ちなみに書籍の大半はミューゼオに登録していない…orz

3000冊くらい持ってるので全登録は無理でしょ(T-T)

 

こんな感じにエアーキャップにくるまった状態で見つかったZaurus

SL-C860SL-C3000

この後、別の場所からSL-C760も発見された。

 

当時使っていた環境は?

当時はSL-C860を開発機として使っていたようだ。

ファイルスタンプを見る限り、使っていたのは2004年頃らしい。

記憶ではカスタムファームウェアみたいなものは利用せず、素のSHARP Linuxを使っていた…ような印象だったけど、起動してみたらpdaXromを入れていた!

普段、この手のカスタムファームウェアは入れない派なんだけど、この時はなぜかインストールしたらしい。目的はなんだったんだろ…?(-_-;;

 

覚えているのは、QUASI88(PC-8801エミュレータ)をZaurusで動くように改造してた。

速度が出なかったので、必死に高速化した覚えがあるけれども、結局速度は間に合わないままだった。今チャレンジすればもしかしたら??(^^;

 

あとは有り余る通勤時間を使ってEmacsLispを覚えようと頑張ってた時期があった!

ちゃんと覚えたとは言い難いけど、おかげでLispを見ても構えない程度には慣れた(^^)

 

入っていたLinuxカーネルのバージョンは2.4.18。

物理メモリは64MB、スワップが32MB用意された状態。

そしてディスクも今となってはそんなに空いてない。

ふむ。

入っているgccは3.3.2。

 

同時にネットワークカードも見つかったので有線LANを繋げた。

これでsshでログイン出来る!(^-^)/

 

早速動かしてみる

一通りの開発環境が入っていたので、何か動かしてみたい!(^^)

というわけで、移植が早そうなものをいくつか。

自分で作ったものなので移植も何もないんだけど、CP/M80エミュレータ

これはcursesライブラリに依存しているだけで、他は難しい部分がない。

ソースはPOSIX準拠の標準的な作りで、make一発ビルド終了!

速度もZ80の4MHz以上の速度が余裕で出る!(コマンドで速度を変えられる)

 

FM-7もソースをコピーしてきて、makeと打っただけで動いてしまった(^^;;

そっか、gccの若いバージョンでも問題なくビルド通るのかー(試した事なかった)

速度的には実機よりは速い感じ。

PSGの処理は入ってないのでそんなもんかな?

 

X68000に挑戦!

CP/M80とFM-7が動いたのに気を良くして、X68000にもチャレンジしてみる!

はい、そうですよねー、本体でビルドするにはメモリが足りません!

さあ、これは予想していたけれども解決は面倒だぞ…(-_-;;

 

Zaurusには512MBのSDカードしか入れてない。

Brainでpx68k_libretroをビルドした時は、384MBのスワップを用意した。

今回も同じ方法を取れなくはないけれども、メインメモリ64MBのZaurusでソレは現実的だろうか??(T0T)

 

いろいろと調べたところ、以下のようなものを見つけた!

これは……Dockerイメージを作るためのファイル群!!

上手に利用すればビルド環境を作れそうだ!(^^)

 

……と言いたいが、実は私、Docker使ったことない!(^^;;;

なんか便利そうな話は聞くんだけど、今までチャンスが無くて一度も触ったことがなかった。

せっかくなので使ってみるかー!

 

でも…見てみると、どうやらこれはIntel CPUで動くイメージらしい。

私はIntel CPUの入ったマシンをほとんど持ってない!

仕方ないのでGPD WinでDockerを使ってみたけれど、なんだかイマイチ??

途中から自分が何をしているのか分からなくなってしまった(T-T)

 

一旦リセット!←脳内リセット

ジタバタしてる時に、友人からM1 Mac+Rosetta2で動かす事が出来ると聞いた。

なるほど、それで出来たら開発環境がM1 Macの1台で完結する!

 

そして手元のM1 Macで動かす事に成功したので、その手順を書いてみる!

多分正解じゃないです!でもこれで動いてるので一応(^^;;

 

まずは上記GitHubから一式をダウンロードして展開。

仮に~/docker/zaurus-cross-compile-on-dockerというフォルダにしてみる。

 cd ~/docker/zaurus-cross-compile-on-docker

 

Dockerfileの先頭にあるFROM centos:6 の数字を7に変更した。

なぜか6だとうまく行かなかったが、試行錯誤してる中で変更してたので、もしかしたら6のままでも行けるのかも!?

 

 docker image build --platform linux/i386 -t zaurus:v1 .

これでカレントにあるDockerfileに基づいてイメージを作成する…のだと思う。

そしてplatformをi386に指定。これが正解かどうかも不明だけど…汗

 

イメージを実行してコンテナを作成?

言葉がわからん…。

 docker run --name zaurus -it zaurus:v1 /bin/bash

 

これで起動したbashが、zaurus環境でビルド出来るはず。

makeコマンドが入ってなかったので、これをインストール。

 docker exec -i -u root zaurus yum install make -y

 

そして、px68k関連のファイルを外からコピーする。

 docker cp px68k-fb zaurus:/tmp

 

良い感じの場所(~/srcなど)にコピーしてビルド開始!

 

ここからが……結構大変だった!!(T_T)

全部書けるわけじゃないけれども、大雑把にこんな感じの変更をした。

・ビルドオプションの変更

・関数の途中にある型宣言の修正
・WDマクロ(windraw.c)が展開できない問題を解決

・libretro_core_options.hに
 #define HAVE_NO_LANGEXTRA
 を追加

 

ビルドが通るようになるまでに、丸一晩掛かってしまった(^^;

途中で気が滅入ってふて寝したのはナイショだw

ちなみに、フルビルドで1分掛からないのはさすがM1 Macだ。

M1→Intelのバイナリ変換が動いているというのに!

 

Zaurusの/dev/fb0は深度16ビット、スクリーンサイズは640x480ドット。

これに合わせてフレームバッファ書き込みプログラムを調整。

 

出来上がったpx68kの実行バイナリをdockerから外へ、そしてZaurusへコピー。

この手順は面倒だけどずっと手作業で行っていた(^^;;

一発で起動画面が出た時は、本当に嬉しかった!(^^)

さっそくTwitterでご報告!

 

見て分かる通り、速度がだいぶ遅い。

これは画面サイズを目一杯大きくした影響が大きい。

せっかくなので大きな画面で見たいと思ったが、思いっきり遅くなってしまった…。

 

テキスト画面に関しては、768x512ドットと入り切らないが、無理にスケーリングして収めるよりも、はみ出た部分は表示しないようにした!

割り切り方!!(^^;;

 

いくつかのソフトを動かしてみたが、うーん遅い(^^;;

遅いけどちゃんと動いてる!

ZaurusX68000が動いてるよ!!(^-^)

これはこれで感動だ!!ヽ(=´▽`=)ノ

 

キーボードがちゃんと入らないなど、まだ気になるところがいくつか残っているので、もう少しだけ修正してみようと思う!

何か大きな変更があったらツイートします!(^^)

 

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