2021年12月5日更新
2020年9月23日頃、自分の無知・無能が原因でCarnivore2のファームウェアを壊し、ブートメニューすら起動しなくなりました。既にあとに引けない状況なため、PCからCarnivore2のFPGAへファームウェアを書き込む正式な方法で復旧することを目指し、識者の皆さんのアドバイスのおかげで無事に復旧できました。
これまでの人生経験の中で電子工作という作業を殆どして来なかった自分がどこまでできるのかを、恥を晒しながら記録に残します。
事前準備
Carnivore2ユーザーガイドを正しく知る
マニュアルは正しく読みましょう。本当に、まずは取説です。
そもそもの失敗は、ブートメニュー=ファームウェアだと勘違いをしていました。マニュアルの「How to upload the firmware」の項を読み飛ばした(「How to enable the cartridge and install BIOS ROMs」を先に読んでしまった)ために、ブートメニューの更新はPCを利用せずMSXの実機でも可能と勘違いし、その後の事の重大さに気付きませんでした。
本体更新について正しく知る
もうひとつの失敗は、ファームウェアはブートメニューや各種BIOS等も内包するものだと勘違いをしていました。実際は「FPGA」と「FlashROM」の分離構造になっていて、Carnivore2における「本体を書き換える」シーンが2種類存在していました。書き換えの影響範囲が違いますので、何を更新したい場合は何をすべきなのかは正しく知っておきましょう。
ファームウェアは、FPGA
ファームウェアについては、FPGAを書き換えます。FPGAは1MB増設RAM、内部スロット拡張、SCC互換音源、MSX-MUSIC互換音源等の物理ハードウェア部分が含まれています。一方、ブートメニュー、IDE BIOS、FMPAC BIOSはファームウェアに含まれていません。
FPGAの書き換えに必要なハードウェアは…
- Windows PC
- OSはWindows 10(「USB Blaster」の中華製ジェネリック品を利用する場合はWindows 7が便利らしいが玄人向きなので割愛)
- 「USB Blaster」と呼ばれるFPGA書き換え用USBデバイス
- 「ASコネクタ」と呼ばれる、基板とUSB Blasterを接続するためのコネクタ
- カートリッジ基板への電源供給用USBケーブル
FPGAの書き換えに必要なソフトウェアは…
FPGAの書き換え用バイナリーデータは、メーカー・RBSCの公式GitHubからダウンロードできます(Firmwareディレクトリ、拡張子は .pof)。
FlashROM
ブートメニュー、IDE BIOS、FMPAC BIOSの3点については、FlashROMを書き換えます。
FlashROMの書き換えに必要なハードウェアは…
FlashROMの書き換えに必要なソフトウェアは、C2MAN、C2BACKUP等です。RBSCのGitHubからダウンロードできます(Utilディレクトリ、拡張子は .COM)。
それぞれのFlashROMの書き換え用バイナリーデータは、RBSCのGitHubから3ファイルをダウンロードできます(BIOSesとBootMenuディレクトリ、拡張子は .BIN)。これらはバイナリーデータの先頭2バイトが「AB」となっていて「起動できるROMイメージ」の体になっています。それぞれのBIOSは個別に書き換えできます。3つまとめて更新する必要はありません。
なお、これらのデータはファームウェアに含まれません。ファームウェアを最新版に書き換えたからと言ってブートメニューが最新になるわけではありません。私はここを勘違いしていました。
FPGAの書き換え
マニュアルを読むと、以下のパーツが必要な様子。
試行錯誤した結果のマイベスト「Carnivore2 復旧セット」
カートリッジ給電用USBケーブル
マニュアルには「カートリッジへ5Vを供給するための簡単なUSBケーブル」と書いてあります。ケーブルの目的は理解できるもののケーブルの呼称がさっぱり分からない。検索キーワードが思いつかない。「電源供給」「USB」「FPGA」などの語句でネット検索してみても該当するケーブルが見つけられない状態。
そもそも売り物なのか、自作する必要があるのか。構造は簡単かもしれんけど、電子工作経験がほぼ無い人間がこれを用意することができるのか…!?と考えていたら、識者の皆さんから商品を教えていただきました。
市販のUSBケーブルを給電用に加工する
既製品・マザーボード接続用のUSBケーブルを転用する方法。不要なものを取り除けば完成。
www.sanwa.co.jp 「USBケーブル USB Aコネクタメス-バラ4P メス」これを分解して作れそう。端子が分離されている状態を「バラ」と呼ぶのか。オスのケーブルも一見良さそうに見えるのだがバラ側がピンになっているので、メスのケーブルのほうが加工が楽そう。
上のケーブルに1個250円くらいの「USB オス-オス変換アダプタ」を付ければ給電できるはず。これは超手軽。工作不要!
給電用のUSBケーブルをどこから給電するか?は、PCやUSBハブから給電するのではなく、コンセントに接続する「USB充電器(AC充電器)」から給電することをおすすめします。
これは重要な指摘。Carnivore2は販売元が複数あり、それぞれの販路で基板構成が違います。ものによっては電源ピンが出ていない基板があるそうです。基板のロット違いも存在しているかもしれません。自分のカートリッジの場合はどうなのか、を知る必要があります。
信頼できるUSB Blaster
まずはAmazonで購入。IchigoJamの福野さんのサイトでこれが紹介されていました。FPGA更新用のASコネクタケーブルと給電用のminiUSBケーブルが付属されていました。
ところがUSB Blasterが認識しないトラブルが発生。
今回調達した中華製のUSB Blasterがいわゆる「ジェネリック品」であることがFPGA書き込み不能の原因である可能性が強まる。しかもモノは複数入り乱れているらしい。
別の業者から2個目のUSB Blasterを調達。2個目には「ALTERA」の文字が入っていたりして、ラベルの表記が微妙に違っている。
信頼できるminiUSBケーブル(あれば便利)
USB Blasterの購入時に給電用のminiUSBケーブルが付属されていましたが、FPGAに書き込めない原因の一つ(USB Blasterへ正しく給電しない可能性)を未然に防ぐために、信頼できるケーブルがあれば安心です。
USB Blasterに付属するmini USBケーブルが不良である可能性を除去するため、念のため新品のケーブルを調達。
FPGA書き込みアプリ「Quartus」でUSB Blasterを認識させる
Windows PCからUSB Blasterを通してFPGAを書き換えるためのアプリです。が、QuartusのバージョンやUSB Blasterの個体によってはお互いを認識しないことがあるようです。
Quartusのダウンロードは無料で可能ですが、Intel FPGAプログラムへのアカウント登録(無料)が必要。けっこう個人情報を入力させられる…
が、USB Blaster(1個目)が認識しないトラブル発生。
USB Blasterのドライバがインストールされていないことを確認。Quartusと同時にドライバがインストールされるかと思ったら実際はドライバはインストールされない様子。手動でのドライバインストールが必要。ここもハマりポイントでした。
QuartusのインストールフォルダにUSB Blasterのドライバが付属されているが…
中華のUSB Blaster用署名なしドライバというものがインターネット上に存在する(インストール方法も特殊な)のですが、このドライバをインストールしてもQuartus II 15.0、Quartus Prime 20.1 LiteのどちらでもUSB Blasterを認識しませんでした。頭がこんがらがったのでUSB Blasterのドライバをいったん削除してみることに。
その後Quartus II 15.0 Web editionに付属するUSB Blasterのドライバがインストールできたものの、USB Blasterを付けてQuartusを起動したらブルースクリーンでフリーズするトラブル発生。何度試しても同じ症状。ドライバと本体が合っていないのでは…?ハードウェア側のトラブルの疑いを持つ。
kansaizineさんの事例に合わせることを目指すことに。Quartusのバージョンは15.0(Quartus II Web Edition)、USB BlasterのバージョンはAltera 15.0.0.145(Web Editionに付属のもの)。
1個目のUSB BlasterではQuartusで認識できませんでしたが、2個目のUSB Blasterでは無事に認識できました。USB BlasterのドライバはQuartus II 15.0 Web editionに付属したものを継続使用。
…というように中華製のUSB Blasterは低価格でありますが品質・相性問題のリスクが発生しますので十分にご注意ください。
ファームウェアの流し込み(FPGAの更新)
QuartusでUSB Blasterを正しく認識できたなら、FPGAを書き換えましょう。FPGA流し込み用のファームウェアは、Carnivore2のGithub→Firewareにあります。拡張子は *.pof です。
Quartusを用いた正確な手順は公式マニュアルに準じます。→ https://sysadminmosaic.ru/en/msx/carnivore2/carnivore2#how_to_upload_the_firmware
ファームウェアデータの流し込み設定。
Carnivore2のユーザーガイドでASコネクタを斜めにする写真が上がっていた理由を、ここで理解する。半田付けしないでピンへの接点を確実に行うために、コネクタを斜めに固定することが必要だったのです。
FPGAへの流し込みが完了した?のか!?
しかしMSXの実機ではCarnivore2がまったく認識しないまま。本当に書き込みできたのか!?ファームウェアだけではダメなのか。他にも何か作業が必要なのか?→その後、認識しない原因はFlashROMの流し込みミスであったことが判明しました。
FPGA書き込み成功・失敗の判断材料
Quartusで指定するFPGAの種類は「EPCS4」です。
今回はFPGAの書き込みに成功しましたが、本来はASコネクタのピンの接点を固定して(場合によってはハンダ付けもしながら)確実に通電させることが正しい接続方法です(後述)。
RBSCサポートからの情報によると、FPGAの書き込みに成功した・失敗したの判断は、本体メモリが1MB増設されたか否かが一つの判断材料だそうです。起動時にメモリが1MB増設されている場合は「FPGA自体は正常動作している=書き込みに成功している」ことが確定しています。本体が起動しない・増設されない場合はFPGAの書き込み手順に問題があります。
Quartusの処理にてVERIFYに成功している=FPGAの書き込みには成功している、と判断して概ね良いかと思います。Carnivore2の動作不良について、FPGAの書き込みには成功していてもFlashROMの書き込みが正しいかは全く別の問題です。
参考:ファームウェア更新の手順(タイムライン)
RBSCサポートに診ていただき、私が作業した上記twitterスレッドのタイムラインは正しい手順と判断していただきました。参考にしてください。
FlashROMの流し込み
ファームウェアとFlashROMは別物ですので、ファームウェアを書き換えて動作しない場合は、FlashROMに記録されている各BIOS(3種類)も書き換える必要があります。これはMSXの実機が必要です。メンテナンスツール「C2MAN」を用います。FlashROM流し込み用のBIOSは、Carnivore2のGithub→BIOSesにあります。拡張子は *.BIN です。
なお、実機がturboR規格の場合、Z80モードに切り替えての作業をメーカーは推奨しています。念のためCPUモードを変更しておきましょう。
で、FlashROMを流し込んではみたものの、当初は正常に動作しませんでした。
誤動作1:FlashROMのダウンロードミス→異常なBIOSが流し込まれていた
前述の先頭2バイト「AB」に繋がる話ですが、簡潔に書くと私のBIOSデータのダウンロード方法にミスがあり、ダウンロードに失敗した各BIOSのBINファイルをCarnivore2のFlashROMへ書き込んだことが原因で私のCarnivore2が起動しなくなったことが判明しました。
GitHubからバイナリーデータを取得したつもりが実際は正しく取得しておらず、しかもダウンロードしたファイルのファイルネームはBINファイルそのものに見えるため、BIOSの内訳をダンプで確認するまでダウンロードミスに気付けませんでした。ここが、私的には一番大きなハマりポイントでした。
誤動作2:IDE BIOSの相性問題でCFカードが利用不能→Nextor起動不能に
各種BIOSもv2.40提供のものに書き換えたら、ブートメニューやFMPAC BIOSは正常動作しているものの、Nextorの起動に不具合が生じるようになってしまいました。
RBSCサポートからの情報によると、IDE BIOS(BIDECMFC.BIN)はデバイスドライバ「Sunrise IDE Driver v0.1.5」が含まれていますが、このBIOSは一部のCFカード・SDカードとの相性問題があるそうで、Nextorの起動に問題が出る場合はIDE BIOSを「Alternate版と呼ばれるバイナリーデータ(BIDECMFC.ALT)」に差し替えてください(ファイルネームを「BIDECMFC.BIN」にリネームしてC2MANからインストールしてください)、とのことです。ここもハマりポイントです。
Alternate版はデバイスドライバ「Sunrise compatible IDE Driver v0.1.7」が含まれています。私の環境下ではv0.1.5ではNextorの起動に不具合が生じましたので、v0.1.7で利用しています。
IDE BIOSをv2.30提供のAlternate版(v0.1.7)でFlashROMを書き換えたら、Nextorが正常に起動しました!
その後、v2.40のAlternate版(v0.1.7)で更新しても、Nextorが正常に起動しました。めでたく復旧!!
補足:FMPAC BIOSのライセンスについて
Carnivore2の公式が配布するFMPACのBIOSは松下電器産業(現:パナソニック)製の製品から無許可でBIOSを抜き出して英訳したものであり、著作権を侵害しています。
ライセンスが気になる&1chipMSXの実物をお持ちの方への回避策
HRA!さんの「Carnivore2内蔵 FMPAC用 BIOS生成ツール」を用いることで、実物からのBIOSデータを作成することができます。→http://hraroom.s602.xrea.com/msx/
ライセンスが気になる&FMPACの実物をお持ちの方への回避策
Sean Youngさんの「SAVEROM.COM」を用いることで、実物からのBIOSデータを作成することができます。→http://bifi.msxnet.org/msxnet/utils/saverom
なお、作成した代替データは「FMPCCMFC.BIN」というファイルネームに変更してからC2MANよりインストールします。
補足:IDE BIOS(Sunrise IDE 互換カーネル)について
IDE BIOSについてはCarnivore2のGithub→BIOSesで入手できるデータよりもNextor開発者のkonamimanさんが提供するデータのほうが最新版(安定版)である可能性があります。
2021年1月19日現在、Carnivore2の「BIDECMFC.ALT」はNextor kernel version 2.1.0 beta 2、Konamimanさんの「Nextor-2.1.0.SunriseIDE.ROM」はNextor kernel version 2.1.0(安定版)でした。
なお、どちらのBIOSも「BIDECMFC.BIN」というファイルネームに変更してからC2MANよりインストールします。
検討した結果とりやめた作業
給電用USBケーブルの工作
ケーブルを構成するパーツの最小構成を集めて自作する方法。いわゆる電子工作。のちに市販のUSBケーブルで代用できることが分かり、工作する必要がなくなりました。
www.aitendo.com この端子部分は「USBコネクタwith基板」という名称でした。
www.aitendo.com このケーブルは「ジャンパワイヤ」という名称でした。
こんな感じになるらしい。USBコネクタ側ははめ込むだけでOKだが、ピン側はハンダ付けが必要。ピンの長さをどの程度出すべきなのかはよく分からないので、長めに付けてから切ることを考える。
ASカートリッジのコネクターに挿入するための2列のピンヘッダーの工作
PLD 2×5、2.54 mm。プログラマケーブルのコネクタをこの形に変形しないとケーブル接続できない。
www.aitendo.com 必要なぶんだけ折って切り離せるらしい。便利!
私は勘違いをしていました。ピンヘッダーは「L字」という商品があったのを忘れて「ストレート」を買ってしまいました。ストレートだと折らないといけないので半田付けが面倒臭い。
ボックスヘッダの工作
本来はボックスヘッダを基板に固定したうえでASコネクタを接続させるべきなのですが、ボックスヘッダを基板に固定してしまうとカートリッジケースに収まらなくなることが判明し、ASコネクタを斜めに当てて手を抑えながらFPGAを更新することにしました。
www.aitendo.com この部品は「ボックスヘッダ」という名称らしい。aitendoの商品の場合サムネイル写真はピン数が多く見えるものの、6ピンから40ピンまで種類が豊富にある。今回の場合は「10ピン」が該当。
こんな感じでつなげるらしい。10ピンの部分はそのまま差さるけど、裏側は1.5mm程度しかピンが出ないので、できればハンダ付けをやらないで済ませたい…
コンタクトピン(あれば便利)
コンタクトピンと呼ばれる部品で半田付けなしに手軽に固定できるらしいことを教えていただきました。
失敗までの顛末
ファームウェア2.30のCarnivore2を所有していますが、デュアルスロット設定の新機能が備わっている最新版の2.40の情報を知り、自分のCarnivore2も2.40へ更新したくなりました。開発元・RBSCのGithubにはBIOSやブートメニュー等のリポジトリが登録されていました。
前述の通りブートメニュー=ファームウェアだと勘違いをしていたため、必要な3つのBINファイル(BOOTCMFC.BIN、BIDECMFC.BIN、FMPCCMFC.BIN)をCarnivore2のメンテナンスツール「C2MAN」で更新すればファームウェアが更新される?と考え、ユーザーズマニュアルの「How to enable the cartridge and install BIOS ROMs」の手順でFlashROMの書き換えを実行したわけです。
一度はブートメニューが2.40に更新されたCarnivore2が起動していましたが、Nextorが起動しないような不安定さでした。
工場出荷時のFlashROMの内容はCarnivore2のFlashROMバックアップツール「C2BACKUP」でバックアップしていました。バックアップデータは8MB強のファイルサイズになっていました。
そこで、Carnivore2のFlashROMを工場出荷時の内容へ「C2BACKUP」で書き戻し、復旧しました(2.30へ戻る)。
再度2.40への更新を目指し、最新のリポジトリから上記3ファイルをダウンロードし「C2MAN」でFlashROMへ書き換えた(2回目)ところ、1回目とは違って以後まったく起動しなくなりました。スルーされています。
「C2BACKUP」で戻そうとしましたが、1回目とは違い2回目は以下のようなメッセージを表示してアプリが終了するようになってしまいました。
WARNING!
Uninitalized cartridge or wrong version of Caanivore cartridge found!
Only Carnivore2 cartridge is supported. The program will now exit.
(要約)
初期化されていないカートリッジまたは間違ったバージョンのCarnivoreカートリッジが見つかりました!
Carnivore2カートリッジのみがサポートされています。 プログラムは終了します。
「C2MAN」も2回目以降は警告を発するようになりました。
Uninitalized cartridge or wrong version of Caanivore cartridge found!
Using this utility with the wrong cartridge version may damage data on it!
Proceed only if you have an unitialized Carnivore2 cartridge. Continue? (y/n)
(要約)
初期化されていないカートリッジまたは間違ったバージョンのCarnivoreカートリッジが見つかりました!
間違ったカートリッジバージョンでこのユーティリティを使用すると、データが破損する可能性があります。
初期化されていないCarnivore2カートリッジがある場合にのみ続行してください。 続けますか?(y/n)
後々分かったことですが、GitHubからダウンロードしたBIOS3ファイルのダウンロード方法をミスしていたにも関わらず「C2MAN」でFlashROMへ更新してしまったことで「C2BACKUP」ではメンテナンスできない状態にしてしまいました。「C2BACKUP」でいつでも工場出荷時の設定に戻せると思っていた考えは、浅はかだったわけです。
俺みたいになるな!!
謝辞
貴重な情報を提供していただいた皆様に感謝します。メーカー・RBSCサポートチーム、twitter @applesorce @goripon_tw @kansaizine @narikuni @piyota99 @sdhizumi @tme205 @thara1129 @uniskie @6am6oo 識者の方々…本当にありがとうございました。