Skip to content

Instantly share code, notes, and snippets.

@GOROman
Last active September 1, 2026 05:47
Show Gist options
  • Select an option

  • Save GOROman/e83bacbbfe963acaf38b6e4dda909b44 to your computer and use it in GitHub Desktop.

Select an option

Save GOROman/e83bacbbfe963acaf38b6e4dda909b44 to your computer and use it in GitHub Desktop.
Blackroo Linux: SIO1・M5Stack・PS1作業記録(2026-09-01)

初代プレイステーション実機でLinuxをうごかしてみた(奮闘記)

第1章 Xで見つけてしまった(8/26〜8/31)

8月26日、Xには「8051でLinuxがブートしそう」という別件のRTが流れていた。これは今回のPS1 Linuxとは別の話だが、こういう無茶なハードウェアにLinuxを載せる話には、つい反応してしまう。

そして8月31日20:13、PS2 Linuxについての話をRTした直後、20:14に「初代プレステ Linux これかな??」とリンクを投げた。ここが今回の本当の起点だった。

元になったのは、Xで見つけた吉野@連邦さんの「初代プレイステーションに、Linuxが勝手移植!!」という投稿だった。

標準PS1の2MB RAMでLinux 2.4系が実機起動し、CD-Rからシェルまで表示できる。しかもDuckStation用の8MB版も動作確認済み。これはもう、試すしかない。

初代PlayStationといえば、ゲームをする機械という認識しかなかった。そこにLinuxを載せて、しかも標準機の2MB RAMでシェルを出すという。スペックだけ見ると「本当に入るの?」というサイズである。記事を読みながら、これは面白そうだな、でも自分でビルドするところまで行くのかな、と半分くらい他人事で眺めていた。

というわけで、Codexに「焼いて」と丸投げした。いつものことであるw

第2章 まずはCodexに焼かせる(8/31 20:41)

ちょうどBlackrooのイメージが用意されていたので、まずはCodexにISOを焼かせた。焼き込みは無事に成功し、SCPH-3500へ入れてみるところまでは進んだ。

イメージはBINとCUEの組み合わせだった。普通のISOを焼く感覚で済むのかと思ったら、PS1用はMode 2/2352のディスクイメージで、CUEが参照するBINを同じ場所に置いて扱う必要がある。ここで早くも「CD-Rに焼く」という一言の中に、いくつかの細かい作法があることを知った。

ただし、画面には何も映らない。起動していないのか、映像方式の問題なのかも分からない。CD-Rを焼くところまではできたのに、いきなり「何も見えない」という非常に分かりやすい壁にぶつかった。

焼き込みが成功したことと、実機で画面が出ることは別問題だった。ディスクは回っている。しかしテレビには何も出ない。この時点では、焼きミスなのか、リージョンなのか、起動ファイルなのか、映像方式なのか、候補だけが増えていった。

最初のCD-RはPAL版のイメージだった。日本版のSCPH-3500はNTSCなので、起動していても画面が出ない。ここでは「焼けた」と「実機で見える」が別物だということを、いきなり思い知らされた。

第3章 犯人はPALだった(8/31 21:19〜21:35)

画面が出ない原因を調べると、最初に焼いたイメージはPAL版だった。8月31日21:19には、すでにNTSC化すべくビルド中と投稿している。つまりPAL発覚は21:53ではなく、初回焼きのあと、NTSC版を作り始める前の出来事だった。

最初のCD-Rは、焼き方に失敗したわけではない。PALの映像信号をNTSC実機で見ようとしていただけだった。原因が分かれば話は早い。「仕方ない、NTSCでビルドし直そう」となった。

最初は「設定を一か所変えて、もう一度ビルドすれば終わり」くらいに考えていた。ところが、古いPS1向けソース、ブートローダー、カーネル、PS-EXE、CDイメージがそれぞれ別の工程になっている。画面方式だけを直したつもりでも、どの成果物を使っているのか分からなくなる。ここから、イメージの世代管理と、実際に焼いたCUE/BINを確認する作業も重要になった。

第4章 Mac StudioでNTSC版を作る(8/31 21:35〜21:53)

ここからが本番だった。古いMIPS向けLinux 2.4のビルド環境を、いまどきのMacで再現しなければならない。まずMac Studioに投げてソースを全ビルドした。

まずMacBook Neo(メモリ8GB)で挑戦した。しかし、古いEGCS 2.91.66系の32bit Linuxツールチェーン、MIPS little-endian、macOSのコマンド差、ISO生成ツールなど、相手があまりにも古い。メモリ8GBのMacBook Neoでは環境構築とビルドを最後まで安定して進めるのは厳しく、ここは潔く断念した。

そしてMac Studioへ移行。ローカルではDockerを使わず、Mac Studio側でブートローダーとISOを生成する構成に切り替えた。-mcpu-mtune、little-endian指定、macOSのsed、ホストツールの扱いなどを一つずつ調整し、ようやくNTSC版の生成にこぎつけた。

MacBook Neoで粘っていると、ビルドそのものより環境の面倒を見る時間が長くなっていく。そこでMac Studioへ切り替えた。結果的には、ソースを転送し、Mac Studioで生成し、完成したCUE/BINをSCPで戻す、という役割分担が一番分かりやすかった。

生成したNTSC版を21:43にCD-Rへ焼き、21:53にはSCPH-3500実機で起動した様子を投稿した。ここで、ようやく画面が映った。

第5章 画面は映った。では入力は?(8/31 21:53〜23:13)

NTSCでビルドし直したイメージを試すと、ようやく画面が映った。ここで一息つけるかと思ったら、次の問題が出た。画面は見える。しかしキーボード入力ができない。

NTSC版として焼き直したCD-Rと、分解されたSCPH-3500を並べて確認する。最初の「映らないCD-R」とは違い、今度は映像が出るところまで来た。

NTSC版PS1 LinuxのCD-Rと実機

そもそもPS1にはUSBポートがない。USBキーボードを直接つなげるわけがない。そこで本体を調べていくと、背面端子にシリアルポートがある。これがSIO1だった。

「PS1にシリアルポートがあるなら、ここから入出力できるのでは?」ということで、映像問題とは別の、通信経路の調査が始まった。

ここでようやく、画面が映った先に何が必要なのかが見えてきた。Linuxが起動しても、入力できなければシェルを操作できない。PS1にはUSBキーボードを挿す場所がない以上、昔の本体に残されている通信機能を使うしかない。ゲーム機としては普段意識しない背面端子が、急に開発用の入口に見えてきた。

第6章 分解、ピンアサイン、はんだ付け(8/31 夜)

SIO1に接続するため、PS1を分解して基板のハンダ面を確認した。8ピン部のピンアサインを調べ、RXD、TXD、GNDの位置を特定する。

分解したPS1、CD-R、M5Stackを同じ机の上に並べると、ソフトウェアの話だったはずのものが、急に工作の話になる。ここから先は、ソースコードだけでは完結しない。

分解したPS1とSIO1配線の作業風景

基板のハンダ面を見ながら、SIO1の8ピン部の並びを確認する。ピン番号の並びは、コネクタをどちら側から見ているかで簡単に逆転するので、写真だけで決め打ちしない。

PS1 SIO1の8ピン部ピンアサイン

M5Stack bridgeをCodexに作らせながら、私は横でPS1の基板にせっせとはんだ付けをする。ところが、ChatGPTが自信満々に出してきたピン情報が、実際の基板とどうも合わない。AIの回答を信じて煙を出すわけにはいかないので、結局はテスタを当てて導通を確認した。

テスタで実物を確認し、RX・TX・GNDをはんだ付けして外へ引き出した。AIにコードを書かせるのは便利だが、基板のピンは最後に自分で測る。今回の教訓である。

基板のハンダ面は、写真を見ただけでは左右や上下を取り違えやすい。だから最後は、番号を信じるのではなく、実物の導通と電圧を測った。RX、TX、GNDを確定してから配線したことで、ようやく安心して電源を入れられた。

第7章 M5Stackをbridgeにする(8/31 23:01〜23:13)

PS1から来る文字を表示し、外部から入力した文字をPS1へ返すため、M5Stack CoreS3をUART bridgeにした。PS1のSIO1から引き出したRX・TX・GNDをCoreS3へ接続し、PS1とホストの間を取り持たせる。

ソースコードはM5Stack UART bridgeのPR #1にまとめた。LCDは黒背景に黄緑文字、小さめのフォント。見た目はだいぶそれっぽくなった。

CoreS3は、PS1から来るSIO1の文字をLCDへ表示するだけではなく、USBシリアル側から受け取った文字をPS1へ返す役目も持たせた。つまり、PS1とMacの間に小さな通訳を一人置くようなものだった。

実際に配線して電源を入れると、M5Stackの小さな画面にBlackroo Linuxの文字が出てくる。PS1の中で動いているLinuxの出力が、SIO1を通って、机の上のM5Stackに現れる。ここはかなりテンションが上がる瞬間だった。

M5Stack UART bridgeでPS1のLinuxを表示

ところが、今度は改行が変だった。CRLF、LF、LFCRが混ざっていて、CRを改行として扱うと余分な空行が出る。そこで、CRは行頭へ戻るだけ、LFは次の行へ進む、という端末本来の動作に戻した。最下行まで来たらスクロールAPIに頼らず、画面をクリアして先頭から表示する仕様にした。

このあたりは、見た目の問題に見えて実際には端末の状態管理の問題だった。CRを「改行」として扱うと、行頭へ戻る動作と次の行へ進む動作が一度に起きてしまう。CRとLFの役割を分け、CRLFでもLFCRでも余分な空行を作らないようにした。

シェル側も、出力は/dev/console、入力は/dev/brconへ分けた。DuckStationのRedirectToTTY = trueは出力をTTYへ送るだけで、TTYからPS1へ入力を返してくれる魔法ではなかった。そこを直して、SIO1からのキー入力が通るようになった。

第8章 メモリーカードが8スロットあることになっている(9/1 10:36)

起動ログを見ると、PSX joined card: detecting card in slot 3まで進んでしまう。M5Stackの表示バグかと思ったが、原因は起動していたISOが古かったことと、Linuxカーネル側も8スロットを走査していたことだった。

今回必要なのはmultitapの全階層ではなく、直接接続された2ポートだけ。カーネルとブートローダーを2スロット対応へ揃え、余計な検出を止めた。

ログが先へ進むこと自体は、最初は動いている証拠にも見えた。けれども、存在しないスロットまで探し続けるので、どこまで行けば正常なのかが分かりにくい。必要な2スロットだけに絞ることで、起動ログも実機の構成に合った、読みやすいものになった。

第9章 Mac StudioからSCP、そしてログイン(8/31 23:35〜9/1 10:39)

Mac Studioでカーネル、ブートローダー、ISOを生成し、完成したCUE/BINをSCPで戻した。古いDuckStationプロセスが新しいCUEを読み込まず、ゲームリストだけ表示されることもあったので、既存プロセスを終了してCLIから起動し直した。

そしてついに、MacからプレステのLinuxにログインできた!? というところまで到達した。ここまで来ると、最初に「焼いて」と丸投げした人間としては、かなり満足である。寝る!

最初はXで見つけた記事を見て「動くらしい」と思っただけだった。それが、CD-Rを焼き、PALとNTSCで悩み、MacBook Neoを諦め、Mac Studioへ移り、PS1を分解してテスタを当て、はんだ付けまでしている。気づけば、単なるエミュレータ上の実験ではなく、手元のSCPH-3500でLinuxへログインするところまで来ていた。

DuckStationでの起動画面

NTSC設定の修正版をDuckStationで起動した画面。VIDEO: 320x240 60HZNTSC-J、シェルメニューとSIO1コンソールの表示を確認できる。

DuckStationで起動したBlackroo Linux

時系列

時刻はX投稿、会話ログ、Gitコミットを突き合わせたJSTです。

時刻(JST) できごと
8/26 00:06 RT @pgate1。8051でLinuxがブートしそう、という別件
8/31 20:13 RT @yunkya2。PS2 Linuxは2.6/MMUあり、今回のPS1は2.4/2MB
8/31 20:14 初代プレステ Linux これかな??。今回の起点
8/31 20:41 CodexがISOを焼いたという引用
8/31 20:57 PS1でLinux、果たして起動できるのか?!と動画を投稿
8/31 21:19 NTSC化ビルドのハードルを記録
8/31 21:35 Mac Studioに投げてソースを全ビルド
8/31 21:43 ビルド成果をCD-Rへ焼いた
8/31 21:53 SCPH-3500実機でNTSC版を起動。Macビルドから実機へ
8/31 23:01 SIO用UART bridgeをM5Stack CoreS3で作成。PCから入力する方針
8/31 23:10 シリアル経由でアクセス可能に
8/31 23:13 Macからキー入力できるようにした動画を投稿
8/31 23:35 MacからプレステLinuxへログインできた。ここで就寝
8/31 23:36 RT @otani_ai_memo。「いじれると分かってからの速度が異常」
8/31 23:40 返信 @ooba。Linuxを起動してodでダンプする話
8/31 23:49 RT @pgate1。自作エミュでLinuxをブートしかけ、キーボード未実装で停止した話
9/1 06:58 返信 @Imaha486。「昨日PS1でLinuxが動くと知ってしまい」
9/1 07:40 RT @yunkya2。PS1はMMUなし、PS2はMMUあり。当時uClinuxは本家未マージ
9/1 07:41 引用。PS2 LinuxのSync on Greenについて
9/1 08:17 RT @crazybocan。「起きたらPS1 Linuxなってた」
9/1 10:35 SIO1のキー入力対応をソース改変。Macからログイン成功、UART bridgeはM5Stack
9/1 10:47 NTSCパッチを公開。デフォルトPALでは実機で画面が出ないことを説明
9/1 13:02 RT @hanyazou。初代プレイステーションでLinuxが動く話
9/1 13:03 RT @yoshinokentarou。標準2MBでLinux 2.4を実機起動、CD-Rブート、DuckStation 8MB版の紹介

成果

  • NTSCの実機映像を確認
  • SIO1キー入力を実機で確認
  • M5Stack CoreS3 UART bridgeを実機転送し、LCD表示を確認
  • CR/LFを端末標準の動作へ修正
  • メモリーカード検出を2スロットへ限定
  • Mac Studioでカーネル、ブートローダー、ISOを生成
  • PR #1〜#5をすべてマージ、Issue #6〜#7をすべてクローズ

GitHub上の記録

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment