Gigamix Online

懐かしの8bitおもちゃPC「MSX」を骨までしゃぶり尽くそう。MSXの最新ニュース、ブログ、自作ソフトの配布など。

しくじり先生:ファームウェア更新に失敗したCarnivore2の復旧と更新を目指すブログ(完結編)

f:id:nf_ban:20201023164750j:plain

 およそ一ヶ月前の2020.9.23頃、自分の無知・無能が原因でCarnivore2のファームウェアを壊し、ブートメニューすら起動しなくなりました。既にあとに引けない状況なため、PCからCarnivore2のFPGAファームウェアを書き込む正式な方法で復旧することを目指します。

 これまでの人生経験の中で電子工作という作業を殆どして来なかった自分がどこまでできるのかを、恥を晒しながら記録に残します。

 そして2020.10.23、Carnivore2のファームウェア並びに各種BIOSが復旧し、再び利用できるようになりました。

事前準備

Carnivore2ユーザーガイドを正しく知る

 マニュアルは正しく読みましょう。

sysadminmosaic.ru

 そもそもの失敗は、ブートメニュー=ファームウェアだと勘違いをしていました。マニュアルの「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
  • 「USB Blaster」と呼ばれるFPGA書き換え用USBデバイス
  • 「ASコネクタ」と呼ばれる、基板とUSB Blasterを接続するためのコネクタ
  • カートリッジ基板への電源供給用USBケーブル
  • OSはWindows 10(「USB Blaster」の中華製ジェネリック品を利用する場合はWindows 7が便利らしいが玄人向きなので割愛)

 FPGAの書き換えに必要なソフトウェアは…

  • 「Quartus」と呼ばれるFPGA開発ツール
  • 場合によってはQuartusに含まれているUSB Blaster用デバイスドライバの手動インストールが必要

 FPGAの書き換え用バイナリーデータは、メーカー・RBSCの公式GitHubからダウンロードできます(Firmwareディレクトリ、拡張子は .pof)。

github.com

FlashROM

 ブートメニュー、IDE BIOS、FMPAC BIOSの3点については、FlashROMを書き換えます。

 FlashROMの書き換えに必要なハードウェアは…

  • MSXの実機。turboR規格の場合、Z80モードに切り替えての運用をメーカーは推奨しているようです。
  • OSはMSX-DOS2またはNextor

 FlashROMの書き換えに必要なソフトウェアは、C2MAN、C2BACKUP等です。RBSCのGitHubからダウンロードできます(Utilディレクトリ、拡張子は .COM)。

 それぞれのFlashROMの書き換え用バイナリーデータは、RBSCのGitHubから3ファイルをダウンロードできます(BIOSesとBootMenuディレクトリ、拡張子は .BIN)。これらはバイナリーデータの先頭2バイトが「AB」となっていて「起動できるROMイメージ」の体になっています。それぞれのBIOSは個別に書き換えできます。3つまとめて更新する必要はありません。

 なお、これらのデータはファームウェアに含まれませんファームウェアを最新版に書き換えたからと言ってブートメニューが最新になるわけではありません。私はここを勘違いしていました。

物理的に必要なもの

 マニュアルを読むと、以下のパーツが必要な様子。

  • 「USB Blaster Programmer」と呼ばれるFPGAを書き換えるためのケーブルセット
  • カートリッジへ5Vを供給するための簡単なUSBケーブル
  • ASカートリッジのコネクターに挿入するための2列のピンヘッダー

カートリッジへ5Vを供給するための簡単なUSBケーブル

https://sysadminmosaic.ru/_media/msx/carnivore2/usb_blaster_5v_01.png?w=350&tok=0f303a

 ケーブルの目的は理解できるものの、ケーブルの呼称がさっぱり分からない。検索キーワードが思いつかない。「電源供給」「USB」「FPGA」などの語句でネット検索してみても該当するケーブルが見つけられない状態。

 そもそも売り物なのか、自作する必要があるのか。構造は簡単かもしれんけど、電子工作経験がほぼ無い人間がこれを用意することができるのか…!?と考えていたら、識者の皆さんから自作する場合の商品を教えていただきました。

給電用USBケーブル(その1)

 ケーブルを構成するパーツの最小構成を集めて作成する方法。いわゆる電子工作。

www.aitendo.com  この端子部分は「USBコネクタwith基板」という名称でした。

www.aitendo.com  このケーブルは「ジャンパワイヤ」という名称でした。

 こんな感じになるらしい。USBコネクタ側ははめ込むだけでOKだが、ピン側はハンダ付けが必要。ピンの長さをどの程度出すべきなのかはよく分からないので、長めに付けてから切ることを考える。

給電用USBケーブル(その2)

 既製品・マザーボード接続用のUSBケーブルを転用する方法。不要なものを取り除けば完成。

www.sanwa.co.jp  「USBケーブル USB Aコネクタメス-バラ4P メス」これを分解して作れそう。端子が分離されている状態を「バラ」と呼ぶのか。オスのケーブルも一見良さそうに見えるのだがバラ側がピンになっているので、メスのケーブルのほうが加工が楽そう。

 上のケーブルに1個250円くらいの「USB オス-オス変換アダプタ」を付ければ給電できるはず。

 これは超手軽。工作不要!

 これは重要な指摘。Carnivore2は販売元が複数あり、それぞれの販路で基板構成が違います。ものによっては電源ピンが出ていない基板があるそうです。基板のロット違いも存在しているかもしれません。自分のカートリッジの場合はどうなのか、を知る必要があります。

ASカートリッジのコネクターに挿入するための2列のピンヘッダー

https://sysadminmosaic.ru/_media/msx/carnivore2/usb_blaster_as_02.png?cache=&w=900&h=484&tok=67e771

 PLD 2×5、2.54 mm。プログラマケーブルのコネクタをこの形に変形しないとケーブル接続できない。

www.aitendo.com  必要なぶんだけ折って切り離せるらしい。便利!

 私は勘違いをしていました。ピンヘッダーは「L字」という商品があったのを忘れて「ストレート」を買ってしまいました。ストレートだと折らないといけないので半田付けが面倒臭い。

ボックスヘッダ

www.aitendo.com  この部品は「ボックスヘッダ」という名称らしい。aitendoの商品の場合サムネイル写真はピン数が多く見えるものの、6ピンから40ピンまで種類が豊富にある。今回の場合は「10ピン」が該当。

 こんな感じでつなげるらしい。10ピンの部分はそのまま差さるけど、裏側は1.5mm程度しかピンが出ないので、できればハンダ付けをやらないで済ませたい…

コンタクトピン(あれば便利)

 コンタクトピンと呼ばれる部品で半田付けなしに手軽に固定できるらしい。

信頼できるUSB Blaster

 まずはAmazonで購入。IchigoJamの福野さんのサイトでこれが紹介されていました。

ところがUSB Blasterが認識しないトラブルが発生。

 今回調達した中華製のUSB Blasterがいわゆる「ジェネリック品」であることがFPGA書き込み不能の原因である可能性が強まる。しかもモノは複数入り乱れているらしい。

 別の業者から2個目のUSB Blasterを調達。2個目には「ALTERA」の文字が入っていたりして、ラベルの表記が微妙に違っている。

信頼できるminiUSBケーブル(あれば便利)

 USB Blasterに付属するmini USBケーブルが不良である可能性を除去するため、念のため新品のケーブルを調達。

FPGA書き込みアプリ「Quartus」

 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に付属のもの)。

 2個目のUSB Blasterは、Quartusで認識できました。USB BlasterのドライバはQuartus II 15.0 Web editionに付属したものを継続使用。

ファームウェアの流し込み

 ファームウェアデータの流し込み設定。

 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」を用います。

 前述の先頭2バイト「AB」に繋がる話ですが、簡潔に書くと私のBIOSデータのダウンロード方法にミスがあり、ダウンロードに失敗した各BIOSのBINファイルをCarnivore2のFlashROMへ書き込んだことが原因で私のCarnivore2が起動しなくなったことが判明しました。

 GitHubからバイナリーデータを取得したつもりが実際は正しく取得しておらず、しかもダウンロードしたファイルのファイルネームはBINファイルそのものに見えるため、BIOSの内訳をダンプで確認するまでダウンロードミスに気付けませんでした。ここが、私的には一番大きなハマりポイントでした

 各種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を書き換えたら、Carnivore2が正常に起動しました!めでたく復旧!!

失敗までの顛末

 ファームウェア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 @kansaizine @narikuni @piyota99 @sdhizumi @tme205 @uniskie @6am6oo 識者の方々…本当にありがとうございました。