SEGA Ferrari F355 Challenge Deluxe顛末記Part5
はじめに
2024年10月19日。
今まで生きてきて確実に五本の指に入るやべえ買い物の結果のブツを某所に搬入しました。
https://x.com/yuu0419/status/1847573321845788959?s=46&t=BU0pr-V7jAH0tbDe7FlqyA
このnoteでは入手までの経緯、レストアの履歴、近い未来のことを書ける範囲でなるべく詳細に記録し、間違いなく人生後半戦に差し掛かったわたしが将来もっと歳を食った際に読み返して「あぁ、あの頃は本当に楽しかった」と笑顔でココアを啜りつつチョコレートと共に肴として眺めるべく残すログになる予定である。
さて5記事目のnoteである。今回はだいぶえらいことになりました。
これを一つに全てを纏めるには余りにも長すぎるので前後編に分けるとします。
フェラーリ乗らないと出られない部屋計画(前編)
前回のnoteで触れた通り、筐体の保守パーツとしてうっかりF355 Challenge Deluxeの基板を入手してしまったらですね・・・。
「あ、部屋で遊びたい」という欲望がフツフツとですね・・・。
よくないですね。地獄への入り口ですね・・・。
が、思い立ってしまったからには色々調べ、様々な関門を乗り越えある程度形になったのでとりあえず今回は前編として書き残そうと思っています。
実現したいこと
やりたいことは以下のとおり。どうせやるなら全部やりたい。
市販のステアリングコントローラーを使用できること
デラックス版ならでは、6MTを再現できること
全部出来たら三画面用意してコックピットも作りたい
とまあこんな感じです。とまあこんな感じ、と簡単に言うにはあまりにもアレな感じですが順番に解決していこうか。
とりあえずは絵出しから
で、NAOMIなんですがちゃんとしてまして。
起動確認をしようにも、写真のようなI/Oボードを繋がないままNAOMIを起動してしまうとチェックが入り

”NO I/O BOARD”で止まってしまいゲームが起動しないんですね。これじゃあ何も出来ないのでまずはこれを解決しないと基板の起動確認もできない。というわけで出てくるのがとよしま氏の
です。機能その他については公式のGitにあったり、そもそもわたしが解説するまでもなく色んな方が紹介していますが、市販のUSB A to BケーブルとUSB-C(5V)を与えてあげればJVSのI/Oボードとして振る舞えるし、そこに対応しているUSBコントローラーやらを繋げばJVS(含JVS’)規格の基板が遊べてしまうステキすぎる同人ハード。というわけでまずはコイツを基板に接続して絵が出せるかどうかを試していこうか。

NAOMIのI/O制御
さて、火を入れる前にもう少しだけ解説すると。
「ここ最近のゲーセン店員はJAMMAなんぞ知らん」というポストをXで見て、「さもありなん」という感想くらいしかありませんがNAOMIは新JAMMA、いわゆるJVSで動作しています。
JAMMA規格のように基板本体にI/OやRGB信号やCSYNC、音声信号をやりとりするエッジコネクタがあるわけではなく、上に書いたI/Oボードが別途必要になります。
知らない人に超簡単にJVSの説明をすると、
「形はUSBだけど中身は全然違う」
んですね。いやまあシリアル通信という意味では広義で一緒なんですけども、市販のUSBアケコンとかを直に挿しても絶対に動きません。これを解決する一つの解がMP07-IONA-USなわけだ。
そして絵が出る
流石はMP07-IONA-US。繋げばサクっとチェックをクリアして絵出し成功。映してる液晶はみんなの味方、秘密結社まぐろ、ではなくKVClab.で買ったNAOMIの31KHz映像をちゃんと受けてくれる15/24/31KHz対応9.7インチ液晶。今は狭額タイプの後継機もあるからみんなはそっち買おうね。

某氏に調達してもらった日本語BIOSもちゃんと認識してて何より。
この時点でマニュアル通りスピーカー繋いでも何故か音が出ないけどまあ大した問題ではあるまい。と当時は思ったけど後ですんごい苦労したよ・・・。次、I/Oをどうにかします。
ハンコンを基板に繋ぎたい
探せばもっと沢山あるんでしょうが、ダイレクトドライブな感じのハイエンドを除けば、巷に出回ってる手頃な価格のハンコンといえばLogitech(日本だとLogicool)かThrsutmasterの二択になるんじゃないかと思います。
なんですが、わたしが使いたいのはThrsutmaster一択です。なぜか。なぜなのか。
TH8A(7速+Rシフター)がカッコいいから

です。シフトはやはり抵抗感のあるフィールで金属シャフトをガコンガコン入れたいんすよ。だってそっちのほうが「機械操ってる」感があるだろう。
なおわたしは懇意にしているちょっとクルマ好きのお客様と会話していて、
「やっぱりミッション車がいいんすよね」と藁半紙より薄っぺらいコメントをされた後に
「え?もしかしたらマニュアルトランスミッションのことですか?」
とデカい声で答えて大分険悪な雰囲気になったことがあるけど1mmも後悔していない。だってわたし間違ってないもの。
なんならF355 ChallengeにはReverseはないんでRも要らないまである(この問題は後に3Dプリンタでなんとかした)。
しかし、MP07-IONA-USが如何に優秀といえど、このnoteを書いている2026/4時点でTH8A含めてなんでもかんでも繋がるわけではないので代替案を考えねばなりません。
Linux(Raspberry Pi)によるJVS環境構築
ここから先はだいぶ濃い話になってきてわたしもボケている暇があんまりないんで、ようわからんって方は写真だけ見て文章はすっ飛ばしてもらえればと思いますが、I/O関連で実現したい項目は以下の通り。
Thrustmasterのハンコンが反力(FFB)を含めて動作すること
Thrustmaster TH8Aが動作すること
追加ボタン類をアケコン用基板で操作できること
これが当然実機なら各種ハーネスを配線図とにらめっこしながら繋げばいいんですが、縦横高さがほぼ2mずつ、重量500kgオーバーの筐体をもうひとつ買って普通に搬入できる環境には残念ながら住んでいないので、逆のアプローチが必要になるわけです。
で、色々調べてみるとどうやらLinux(Raspberry Pi)で実現できそう、というか出来たのでこのnoteを書いているのですが。
ThrustmasterハンコンのLinux用ドライバー導入
JVSを再現するにも、まずはOSレベルでちゃんとハンコンが認識/制御できなきゃいけない。というわけでラズパイ4Bを普通に構築後にGithubで有志が公開しているドライバを導入。
が、いきなりここで挫折しそうになる。というのも、当初の手持ちのハンコンは同じThrustmasterでもモデルがTXだったんですね。
つまりはT300RSのXBOX版という。が、まー動かない動かない。XBOX用とPS用なんて認証方式くらいの違いしかないんでないの?むしろコンシューマ機以外で使うんならどっちもPCモード一択なんだから一緒なんでないの?と思って繋いだけどピクりとも、いや正確にはピクりとしか動かない。
いや、なんならUSBケーブルを挿すタイミング次第で動いたりダメになったりする。デリケートにも程がある。
うーん。
うーん。
ここでわたしが採った解決策は
T300RSを買う
でした。うむ、一発認識。そして部屋に巨大なコントローラがまたひとつ増える。ついでにTH8Aもうもうひとつ増える。さ、次いこ。
もはや誰も止められんのだ。
OpenJVS構築(ハードウェア編)
世の中にはいろんな素晴らしいギークな方々がいまして。Linux上で動かすJVS I/Oボードエミュレータというものが存在するんですね。
その名はOpenJVS。
おーすげーこんなのあるのかーと感動したので早速導入、となったけどしかしまあコレもなかなか難儀しました。
実際やる人は稀かもしれませんが、どこかで誰かが「どうしても使いたいコントローラーがあるのでわざわざ超絶便利なMP07-IONA-USを使わずにJVS環境を構築する」という意思のもと検索で辿り着いた際、一助となるように設定方法は日本語で書き残しておこうと思います。(全部書くと長すぎるんで端折ります。細かいところはコメントいただければわかる範囲で回答します)
とりあえずGitリポジトリからのclone/make/install方法そのものはもうGit読んでくれとしか言いようがない。
で、だ。まずはハードウェアの準備からしなければいけません。
先の段落で、「JVSのプロトコルはUSBに非ず」と記載しましたが、使いたいデバイスはUSBです。
なので、これらUSBデバイスをJVSがわかるプロトコル(RS-485)に変換してあげなければいけません。ここで出てくるのが
FTDIチップ内蔵のUSB-RS485コンバーター

です。これを、GitのガイドにあるようにNAOMI基板側のUSBポートとラズパイ間で配線します。USB(A to B)ケーブルをぶった切って配線をひん剥くか、端子から取り出せるコネクタを使って+-GND、あとはSENSE(赤色)を分岐して片方はラズパイのGPIO12、もう片方は1kΩの抵抗を挟んでラズパイのGNDへ。絵だとこんな感じ。

が、出来ない。悲しみのNO I/O BOARD ERRORしか出ない。本当に出ない。

試行錯誤の結果、原因は以下のふたつであることがわかりました。
GNDをもう一本追加。RS485コンバーター↔ラズパイ間で電位を合わせないとダメ
Raspberry Pi OSが新しくなってGPIOの考え方が変わった
サラっと二行で書いてるけど、このふたつの問題を特定して解決するのに一週間ほど要したよまったくもう。
参考リンクは以下ふたつ。
https://akkiesoft.hatenablog.jp/entry/20240412/1712893089
メインの定義ファイルで上の図にあるSENSE LINEはラズパイのGPIO何番です、と定義するんですが、そのまま12って書いてもピクりとも動きませんでした。正解は524。初見でわかるかこんなの。というわけで最終的な配線はこんな感じでエラーが出なくなりました。

OpenJVS構築(ソフトウェア編)
ようやくNO I/O BOARD ERRORとはおさらば出来たとしても、次は各デバイスをF355 Challenge Deluxeで利用できるようにしなければいけません。
次は構造の理解にまずそこそこ時間の掛かったソフトウェア設定を。
OpenJVSの構成
実行ファイル
/use/local/bin/openjvs
メインコンフィグファイル
/etc/openjvs/config
起動時に読まれるファイル。ここにハードウェア編で書いたSENSE LINEのGPIO番号や、エミュレートするI/Oボードの種類、呼び出すゲーム毎の定義ファイルを記載
user@hostname:/etc/openjvs $ more config
#OpenJVS Config
#Author: Bobby Dilley
#Setup the default game to emulate
#Use ROTARY for the rotary controller on the HAT
DEFAULT_GAME f355dx(自分で作る)
#Setup which IO to emulate by default
EMULATE sega-type-2(デフォルトで存在)
#Setup the sense line
#SENSE_LINE_TYPE 0 - USB to RS485 with no sense line
#SENSE_LINE_TYPE 1 - USB to RS485 with sense line
#SENSE_LINE_TYPE 2 - Raspberry Pi OpenJVS Hat
SENSE_LINE_TYPE 1(NAOMIは基本これ)
SENSE_LINE_PIN 524(少し上の段落で書いたもの:デフォルト値が12なので迷うところ)
I/Oボードコンフィグファイル
/etc/openjvs/ios配下
エミュレートする各I/Oボードの定義ファイル。
namco-FCA1
namco-jyu
namco-na-jv
namco-v185
nrc-lion
sega-trackball
sega-type-1
sega-type-2
sega-type-3
こんな感じでナムコ系やセガ系のI/Oボードの定義ファイルがあります。他にもChihiroやLindbergh、Exaとかに対応してる筈ですが、たぶん自分で書かなきゃいけないんでしょうね。とりあえずF355 ChallengeのI/OボードはP/N:837-13844なのでsega-type-2となる。
user@hostname:/etc/openjvs/ios $ more sega-type-2
DISPLAY_NAME Sega Type 2 IO
NAME SEGA ENTERPRISES,LTD.;837-13844 I/O BD;Ver1.00 COMMAND_VERSION 19
JVS_VERSION 48
COMMS_VERSION 16
PLAYERS 2
SWITCHES 12
COINS 2
ANALOGUE_IN_CHANNELS 8
ANALOGUE_IN_BITS 10
ROTARY_CHANNELS 4
GENERAL_PURPOSE_OUTPUTS 22
RIGHT_ALIGN_BITS 0
中身はこんな感じで、NAOMIに対して名乗るI/Oボードの名前や各種スイッチ、アナログチャンネル数の定義をしている。ファイルの中身は特に触る必要なし。
デバイスコンフィグファイル
/etc/openjvs/devices配下
user@hostname:/etc/openjvs/devices $ more thrustmaster-thrustmaster-t300rs-racing-wheel
ABS_X CONTROLLER_ANALOGUE_X
ABS_Z CONTROLLER_ANALOGUE_R REVERSE
ABS_RZ CONTROLLER_ANALOGUE_L REVERSE
ABS_Y CONTROLLER_ANALOGUE_Z REVERSE
BTN_THUMB CONTROLLER_BUTTON_RIGHT_BUMPER
BTN_TRIGGER CONTROLLER_BUTTON_LEFT_BUMPER
詳しくはGitを目を皿のようにして読めば書いてあるけど、こんな感じで
OSが認識しているスイッチ名 OpenJVSで予め定義されている使用可能なスイッチ名
を組み合わせてマッピングとして書いていく。
一番上の行を例にして挙げると、ABS_XはOS(ラズパイ)側で認識しているステアリングのX軸の名前、これをOpenJVSで使用可能な定義名であるCONTROLLER_ANALOGUE_Xのスイッチにマッピングしているという感じです。
ラズパイ側で認識している各種スイッチの名称はevtestコマンド実行後に実際動かしてみてメモる。REVERSEって付いてるのは反転。つまり、「アクセルを踏み切った時にFFになるか00になるか」というやつですね。まあこんなの実際動かしてみなけりゃわからんよ。
そしてデフォルトで存在する定義ファイルはあるけど、接続しているデバイスのファイルがなかったら自分で作ることになります。たいへん。デバイス名はopenjvsに—listオプション付けて実行すると以下のように出てくるのでその名前で作成。以下はわたしの環境の一部。
thrustmaster-thrustmaster-t300rs-racing-wheel (usb-0000:01:00.0-1.2.1)
thustmaster-t500-rs-gear-shift (usb-0000:01:00.0-1.2.2)
ん・・・?
うん・・・・?
TH8Aはthustmaster-t500-rs-gear-shiftの名前で出てくるんだけど、これはデバイスがOS標準のデバイスドライバー経由で名乗った名前をOSで表示しています。もう一度ちゃんと読んで欲しい。
thustmaster
なのだ。スラストマスターではない。スストマスターになってしまっている。わたしが間違えているんではない。Thrustmasterが間違えているのだ。

これに気が付かず、いや正確には気が付いてはいたけど「いやいやそんなことなかろうて」という謎の信用でスペルミス無しの定義ファイルを作ってしまいわたしの時間が一日失われた。頼むよスラストマスターさんよ。もういいけどさ。
最後にSTART/TEST/SERVICEのシステム系スイッチ、F355 Challenegeならではのエフェクトボタン4つ(Stability Control/Traction Control/Anti-Lock Brake System/Intelligent Brake System)はPICO Fighting BOARDを繋いでコンフィグを定義

ゲームコンフィグリスト
/etc/openjvs/games配下
このファイルの定義が本当に骨が折れる。
OpenJVS起動時に読みに行くゲームのリストファイル。ここに、上のデバイスコンフィグファイルで割り当てたOpenJVSのスイッチ名を実際のゲームで割り当てられているスイッチにマッピングする。当然のようにF355 Challenge Deluxe用のファイルなんぞ作った人が世界で誰も居ない気がするので手探りで全部書く。F355 Challenge Deluxeで使用するアナログ/デジタルスイッチ類は以下の通り。
ステアリング
アクセル
ブレーキ
クラッチ
6MT(1速/2速/3速/4速/5速/6速)
エフェクトスイッチ(Stability Control/Traction Control/ABS/Intelligent Brake System)
スタート
サービス
テスト
user@hostname:/etc/openjvs/games $ more f355dx
#Mapping file for Ferrari F355 Challenge Deluxe
#Author:yuu
#=======================================================
#-- Player 1: T300RS (Steering & Pedals) ---#=======================================================
#Steering
CONTROLLER_ANALOGUE_X CONTROLLER_1 ANALOGUE_1
#Accele
CONTROLLER_ANALOGUE_R CONTROLLER_1 ANALOGUE_2
#Brake
CONTROLLER_ANALOGUE_L CONTROLLER_1 ANALOGUE_3
#Clutch
CONTROLLER_ANALOGUE_Z CONTROLLER_1 ANALOGUE_4
#Paddle Shift UP
CONTROLLER_BUTTON_RIGHT_BUMPER CONTROLLER_1 BUTTON_1 PLAYER_2
#Paddle Shift DOWN
CONTROLLER_BUTTON_LEFT_BUMPER CONTROLLER_1 BUTTON_2 PLAYER_2
ファイル全体は結構な行数なので端折りますが、とりあえず例として最初のT300RSを。
devicesファイルで定義したopenJVSのスイッチ名 ゲーム内で使われているスイッチ名
という形式でマッピングしていく。
実際の作業は、まあこれやろという感じで雑にマッピングしてから、ゲーム内のI/O TESTモードでひたすら正解を探していってコンフィグファイルを編集するという地味な作業。なおやっぱり、わたしはこれに一週間かかりました。特に6MTの所為で。
Xにも書きましたが、アーケード系レースゲームでHパターンシフトが付いている場合、ギアそれぞれにスイッチが割り当てられていることは稀です。デイトナUSAもそうだし湾岸ミッドナイトもそうだし、基本的に上下左右のマトリクスで表現されます。つまり
1速:左+上
2速:左+下
3速:上
4速:下
5速::右+上
6速右+下
ニュートラル:上下左右OFF
のようになります。なお、実機だとこれがなぜか2P側の上下左右キーで表現するので、そもそもコンフィグの書き方やらINPUT TESTで正解を見つけるまでに苦労したよまったくもう。

さらに、エフェクトスイッチ4つは普通に考えればボタン1-4やろ、と思ってたらまさかの1P側上下左右なんですよ・・・。武力ONEか昔のクイズゲームかよ・・・。ちなみにこの辺はさっき書いたPICO Fighting BOARDで実装。ピンアウトがBrook互換で一番安いのがいい。
で、海外フォーラムやDiscordのコミュニティの助けを借りてコンフィグの書き方含めてファイル編集。
そして最後にメインのコンフィグファイルでNAOMIに対して名乗るI/Oボードとマッピングするゲーム名を定義して起動、という感じ。
で、OpenJVSを起動。動いた・・・やっと動いた・・・。

フォースフィードバックについてはフランスのコミュニティに相談したりで書ききれないくらいの紆余曲折があったけどLinuxに用意されているffsetコマンドで実装できたので、この時点で残タスクはひとつ。
サウンド問題
そう。鳴らんのだ。NAOMI側のRCA端子にスピーカーを繋いでも全く鳴らんのだ。一枚基板の通常のNAOMIであればRCA端子にさえ繋げれば100%鳴るというのに・・・。
正確に言うと、システムテストメニューのスピーカーテストではテスト音が鳴るのに、ゲーム音が鳴らない。あのTipo F129Bが奏でるV8のソプラノが聞けんのだ。
ちなみにこれも解決には一週間かかりました。いい加減にしてくれ。
これも結論から先に言ってしまうと、なぜかゲーム内音量の調節は個別のアナログスイッチが割り当てられているという。実機の配線図で言うとこんな感じ。

で、これをOpenJVSのコンフィグで個別のアナログチャンネルを割り当てるわけです。この辺りも海外のアーケード関係でのDiscordでのやりとりがすごく有用でした。ドリームキャストの有名エミュレータの作者にわたしが持ってる情報との交換条件で教えてもらいました。わかるかこんなの。
そして幸いにも、以前保守パーツを買い漁っている時にシステム系のボタンも買ったんですが、これにボリューム(ポテンショメータ)が付いてたのを見て
「なんとなくカッコよさそう」
という理由で3DプリントしたT300RSの追加パネルにもボリューム用の穴を空けていたんですね。本当に使うとは思わなかったけどこれにボリューム専用のコントローラを割り当てることで解決。

ここで出てくるのがArduino Pro Micro。ジョイスティック用のスケッチを書き込んで5VとGNDとアナログ入力に配線すれば可変抵抗付きUSBコントローラの完成。ケースは3Dプリントで。いい時代になりましたなぁ・・・。
参考にしたのはこの辺。Linuxの音量が変わっても困るので、ボリュームコントローラとしてではなくジョイスティックとして作成しました。


よって、最終的にF355 Challenge Deluxeで使用するアナログ/デジタルスイッチ類は以下の通りになりました。わかるかこんなの。
ステアリング
アクセル
ブレーキ
クラッチ
6MT(1速/2速/3速/4速/5速/6速)
エフェクトスイッチ4つ(Stability Control/Traction Control/Anti-lock Brake System/Intelligent Brake System)
スタート
サービス
テスト
ボリューム(New!!)

時は来た
ここまでやってやっと・・・やっと映像が出て操作ができてV8の音が鳴るように。
映像系や音声系を除いた最終的な配線図はこんな感じ。

これが専用設計のひとつの箱の中で完結している大型筐体ってすごいんだなと改めて感動しちゃう。
さて、前編はここまで。後編はコレ書いてる時点で現在進行形な、基板の最終的な設置場所の確保やハンコンシートの設置、「現代にあのトリプルスクリーンを如何に高精細かつ遅延や違和感なく再現できるか」あたりを書いていければと思います(必要なブツを選定したり発注したり)。
あ、「ROMボードを最近知り合ったアメリカ人からもう一枚買ったのでコッチのF355 Challengeも2になりました」も追加で。

またそのうち、よしなに。
