SCPH-1000RJ NEON (1 - 6)

SCPH-1000RJ NEON (1)

 PlayStation Classic SCPH-1000RJ を中古で購入したので、カスタマイズを試しました。
 ネットで調べて、gpghax と bleemsync 1.2 を使って、PSCのデータのバックアップを USBメモリーに作りました。
 バッファローの USB 3.0 32GBメモリー(RUF3-WBE32G)や、セルフパワー型 USB 3.0 HUBを使用して USB SSD 120GBも、linux mint 19.3の gpartedで fat32フォーマットして使えました。
 バックアップした PSCのデータは linux mint PCの HDDに移動しました、debian系の gpartedは度々エラーが出るので、USBメモリーに入れっぱなしは安心出来ません。

 SONY公式の Open Source Software Used in PlayStation®Classic ではパッケージのバージョンやコンパイルオプションが殆ど分からないので、PSCと linux mint PCを USB接続して調べました。

 PSCが動作不良に成った場合に、バックアップデータを戻せない方は試さないで下さい、自己責任でお願いします。

 PSCは HDMIとコントローラーを外して PCに USB接続、PSC電源ON後に 端末から lsusbコマンドで PSCを確認。
 linux mintの USBネットワーク接続をローカルに変更。

 putty起動。
169.254.215.100 Port 23
 Telnetで接続。

root
mount -o remount rw /
exit

 filezilla起動。
169.254.215.100 root パス無し Port 21 で接続。

 PSCの中が見えましたので、ライブラリを調べました。

libjpeg-turbo-1.5.2
libpng1.6-1.6.34
pixman-0.34.0
alsa-lib-1.1.2
libSDL2-2.0.4

 バージョンが近かったので、linux mint 19.3のソースファイルをダウンロード。
 クロスコンパイルの設定が面倒だったので、raspberry pi4の raspberry pi os 32bitでソースコンパイルしました。

 raspberry pi4と PSCの USB接続は電力関係の問題で不安定なので、ケーブルを繋ぎ変えたり、micro SDHCにファイルをコピーして PCと交代しながらの煩雑な作業に成りました。

*************************
 raspberry pi osで arm-linux-gnueabihf-gcc、build-essential、libtool、cmake などの開発用ツールをインストール。

autoconf、automake、gawk、nasm
libjpeg62-turbo-dev
libpixman-1-dev
libpng-dev
libasound2-dev
libsdl2 関係の -dev
 上記をインストール。

 足りない物は configureのメッセージを見て、追加インストールして下さい。

https://drive.google.com/drive/folders/10dKKIbtDakc2Yn1gZWTlFglRgX4HRzkc?usp=sharing
 圧縮ファイルをダウンロードし、解凍して下さい。

libjpeg-turbo
ーーーーーーーーーーーーーーーーーーーーーーーーー
autoreconf -fiv
CC=arm-linux-gnueabihf-gcc CFLAGS="-g -O3 -marm -mcpu=cortex-a35 -mtune=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard" ./configure --disable-static
make -j4
ーーーーーーーーーーーーーーーーーーーーーーーーー

libpng、pixman、alsa-lib
ーーーーーーーーーーーーーーーーーーーーーーーーー
CC=arm-linux-gnueabihf-gcc CFLAGS="-g -O3 -marm -mcpu=cortex-a35 -mtune=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard" ./configure --disable-static
make -j4
ーーーーーーーーーーーーーーーーーーーーーーーーー

sdl2
ーーーーーーーーーーーーーーーーーーーーーーーーー
cd libsdl2-2.0.8+dfsg1
CC=arm-linux-gnueabihf-gcc CFLAGS="-g -O3 -marm -mcpu=cortex-a35 -mtune=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard" ./configure --disable-rpath --disable-static
make -j4
ーーーーーーーーーーーーーーーーーーーーーーーーー
libSDL2-2.0.so.0.8.0 ー> libSDL2-2.0.so.0.4.0 リネーム。

 出来た .soライブラリファイルを PCにコピーして、PCと PSCを再接続。
 PSCの /usr/local/lib に .soをアップロード。

 PSCの /etc/ld.so.conf を編集。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
LD_PRELOAD=/usr/local/lib/libasound.so.2.0.0
LD_PRELOAD=/usr/local/lib/libjpeg.so.62.2.0
LD_PRELOAD=/usr/local/lib/libpixman-1.so.0.34.0
LD_PRELOAD=/usr/local/lib/libpng16.so.16.34.0
LD_PRELOAD=/usr/local/lib/libSDL2-2.0.so.0.4.0
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 PSCと切断して電源OFF、PSCに HDMIとコントローラーを接続して電源ONで動作確認。

追記:
 raspberry pi os 32bit からソースファイルを使用する事に変更しました。
 ソースコンパイルしたライブラリをリネームして、PSCにアップロードしました。

libpixman-1.so.0.36.0 ー> libpixman-1.so.0.34.0
libpng16.so.16.36.0 ー> libpng16.so.16.34.0
libSDL2-2.0.so.0.9.0 ー> libSDL2-2.0.so.0.4.0

 カスタマイズした、alsa-lib-1.1.8、sdl2-2.0.9 を追加しました。

追記(2021/08/16): libdrm2-4.100 を追加しました。

追記 (2021/09/21): SDL2-2.0.9 修正。

追記(2022/03/06): alsa-lib-1.1.8 を微修正しました。

追記(2022/03/12): alsa-lib-1.1.8 に openmp-simdを使用しました、コンパイルオプションに -fopenmp-simd を追加します。

追記(2022/03/29): alsa-lib-1.1.8 に openmp-simdを追加しました。

以上です。


SCPH-1000RJ NEON (2)


 SDL-mixer-2.0.4をカスタマイズしました。
 試される方は自己責任でお願いします。
*************************

ーーーーーーーーーーーーーーーーーーーーーーーーー 
$ sudo apt install libsdl2-mixer-dev libflac-dev libfluidsynth-dev libmodplug-dev libmpg123-dev libogg-dev libopusfile-dev libvorbis-dev
ーーーーーーーーーーーーーーーーーーーーーーーーー
 足りない物は configureのメッセージを見て、追加インストールして下さい。

https://drive.google.com/drive/folders/10dKKIbtDakc2Yn1gZWTlFglRgX4HRzkc?usp=sharing
 圧縮ファイルをダウンロードし、解凍して下さい。

 sdl2-mixer
ーーーーーーーーーーーーーーーーーーーーーーーーー
CC=arm-linux-gnueabihf-gcc CFLAGS="-g -O3 -marm -mcpu=cortex-a35 -mtune=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard" ./configure --disable-static
make -j4
ーーーーーーーーーーーーーーーーーーーーーーーーー
libSDL2_mixer-2.0.so.0.2.2 ー> libSDL2_mixer-2.0.so.0.0.1 リネーム。

 出来た .soライブラリファイルを PCにコピーして、PCと PSCを再接続。
 PSCの /usr/local/lib に .soをアップロード。

 PSCの /etc/ld.so.conf を編集、sdl2-mixer 追加。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
LD_PRELOAD=/usr/local/lib/libasound.so.2.0.0
LD_PRELOAD=/usr/local/lib/libdrm.so.2.4.0
LD_PRELOAD=/usr/local/lib/libjpeg.so.62.2.0
LD_PRELOAD=/usr/local/lib/libpixman-1.so.0.34.0
LD_PRELOAD=/usr/local/lib/libpng16.so.16.34.0
LD_PRELOAD=/usr/local/lib/libSDL2-2.0.so.0.4.0
LD_PRELOAD=/usr/local/lib/libSDL2_mixer-2.0.so.0.0.1
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

以上です。


SCPH-1000RJ NEON (3)


 libretro-pcsx-rearmed を少しカスタマイズしてみました。
 2021/09/25 のマスターを githubからダウンロードして NEONカスタマイズを少し加えました。
 BleemSync 1.2 でテストしました、試される方は自己責任でお願いします。

*************************
https://drive.google.com/file/d/1PV5ZML7RJjmVh1lu400MiFe825oAZ1hF/view?usp=sharing
 圧縮ファイルをダウンロードし、解凍して下さい。

 make のエラーメッセージが出たら、足りないパッケージ等をインストールして下さい。

ーーーーーーーーーーーーーーーーーーーーーーーーー
$ cd pcsx_rearmed-master
$ platform=classic_armv8_a35 make -j4 -f Makefile.libretro
ーーーーーーーーーーーーーーーーーーーーーーーーー
 BleemSync 1.2 のUSBメモリーを挿して

SONY/bleemsync/opt/retroarch/.config/retroarch/cores/
 の pcsx_rearmed_libretro.so を pcsx_rearmed_libretro.so.bak にリネーム、
 コンパイルした pcsx_rearmed_libretro.so をコピー。
 linuxを終了して、BleemSyncを Playstation Classicに挿入してプレイ、OK。

*************************
 EmuELEC v4.2を Android tv box s905x2でテストしましたが、460P画質設定でも動作がガクガクでサウンドも酷くてゲームは無理でした。

 Retroarch libretro-pcsx-rearmed を比較。
EmuELEC s905x2 cortex-a53 1.8GHz✕4 64bit neon対応なし
Playstation Classic cortex-a35 1.5GHz✕4 32bit neon対応 (max 67% 制限有、720P画質)

 CPU性能では s905x2が高いですが、neon未対応と EmuELECの構造に無駄が多いのか、Playstation Classicの圧勝です。

追記 (2021/10/22):サウンドの爆音バグ修正しました。
 NEON intrinsicsで、右シフト命令で空いた左側に 0が入ると決まっていない様で、バグが出る事が有りました。
 ARM NEON intrinsicsの詳しい解説などが見つからないので、バグが出ると訳が分からなくなります、解説本も買いましたが入門までしか書かれてませんでした。
 NEONアセンブリコードに対して NEON intrinsicsはコーディングの簡易さで開発コストの低減を目的にしている様ですが、ガイドは命令のリストしか無く注意点も書かれていないし、コンパイル後のコードに無駄が有るとか、開発時間に対して効果も低いので採用が少ないのかなと思います。

 グラフィックプラグインの テクスチャ演算で openMPを入れてみましたので、3D処理の速度UPしました、鉄拳3もスムーズに動く様に成りました。

追記 (2021/11/17):Android tv box s905x2で EmuELEC v3.9 (32bit最終版) を試してみましたが、pcsx-rearmed コアは 720P画質でも高速に動作しました、NEON命令が有効だったのかもしれません。
 Android tv boxでは 4GB以下のメモリーが殆どなので、 EmuELEC 64bit版は逆効果かなと思います ARMv8 NEONに未対応なライブラリや libretroコアばかりです。

追記 (2022/02/11):libretro-pcsx-rearmedを見直して NEONカスタマイズを追加しました、他のカスタマイズと合わせて利用する事で速度で不満は出ないと思います。

追記 (2022/03/25):pluginsの gpu_neonに openmp-simdの追加をしました。

追記 (2023/06/24):openmpの仕様変更?なのかソースコンパイルが通らなく成ったので、openmp-simdに書き換えました、ソースも githubから 2023/06 にDLしたものを使用しました。
 ムービー再生時のバグ修正しました。

以上です。

SCPH-1000RJ NEON (4)


 libcairo2 のカスタマイズを追加しました。
 試される方は自己責任でお願いします。

******************************

 libcairo2-dev と aclocal-1.15 をインストールして下さい。
 足りない物は configureのメッセージを見て、追加インストールして下さい。

 前記事と同じ場所から、圧縮ファイルをダウンロードし、解凍して下さい。

 cairo-1.16.0
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
CC=arm-linux-gnueabihf-gcc CFLAGS="-g -O3 -marm -mcpu=cortex-a35 -mtune=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard -fopenmp-simd" ./configure --disable-static
make -j4
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 libcairo.so.2.11600.0 を libcairo.so.2.11400.6 にリネーム。
 libcairo.so.2.11400.6 を PCにコピーして、PCと PSCを接続。
 PSCの /usr/local/lib に .soをアップロード。

 PSCの /etc/ld.so.conf を編集、libcairo2 追加。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
LD_PRELOAD=/usr/local/lib/libcairo.so.2.11400.6
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

******************************
 画像位置のチェックや演算と、2Dグラフィックサブルーチンの処理速度が向上しました。
 鉄拳3での技も出やすく成りましたし、ダライアスで連射速度も向上しました。

 コードのミスかコンパイルオプションが足らないのか、起動しないソフトが出てしまいました、使用は注意して下さい。

追記 (2022/01/16):Raspberry pi os (32bit)で libcairo2を普通にソースコンパイルをしてインストールした後、chrominumで youtubeを見ようとしたら chrominumが落ちました。
 Ryzen PCで openSUSE Leap 15.3で、libcairo2を AVX命令でカスタマイズして試した時は、問題無く youtube動画再生は出来たので、debianの問題でバグっていると思います。

追記(2022/03/14): cairo-1.16.0 に openmp-simd の追加をしました。

以上です。


SCPH-1000RJ NEON (5)


 2022/12/24 weston-5.0.0 のカスタマイズを追加しました。

 試される方は自己責任でお願いします。

******************************
https://drive.google.com/drive/folders/1-Ko4Yabg8Qg0xftqk1SAHR-FB6kDifOl?usp=sharing
ld.so.confと weston-500.libs 圧縮ファイルをダウンロードし、解凍して
 PSCの /usr/local/lib に .soをアップロード。
 ld.so.confを PSCの /etc にアップロード。
******************************

 今までのカスタマイズしたライブラリが、バグが取り切れていない為、起動しないソフトが有りますので注意して下さい。
 

以上です。


SCPH-1000RJ NEON (6)


 2023/12/01 libfreetype のカスタマイズを追加しました。
 試される方は自己責任でお願いします。

******************************
https://drive.google.com/drive/folders/1-Ko4Yabg8Qg0xftqk1SAHR-FB6kDifOl?usp=sharing
ld.so.confと libfreetype.so をダウンロードして
 PSCの /usr/local/lib に .soをアップロード。
 ld.so.confを PSCの /etc にアップロード。
******************************

以上です。

この記事が気に入ったらサポートをしてみませんか?