中古の P/ECE 本体（付属CDなし）を買って遊べるようにする

For English, see [Using P/ECE with Modern PCs](https://web.archive.org/web/20220808201420/https://explodingblood.space/?page_id=84#expand) (Archived).  [Original one](https://explodingblood.space/?page_id=84)

[P/ECE](https://aquaplus.jp/piece/) を中古で付属品なしで買ったときに、とにかくゲームを遊べるようになるまでの手順。
macOS や Linux 勢は [MacOSXでP/ECEにアプリ転送](https://qiita.com/zurachu/items/468b10312c812ad854d8) を参照。

## 前提条件

* P/ECE 実機
* Windows 10 x86/x64

## 箱の中身

本来は箱説付きで買うと以下のものが入っているはずです。初回生産版は違うかもしれないけど持ってないので不明。

* P/ECE 本体
* ソフトウェア CD-ROM（開発環境・デバイスドライバ）
* 取扱説明書（CD ケースに入っている）

![箱の中身](https://qiita-image-store.s3.amazonaws.com/0/69100/6b89b82d-ebd2-96b2-6f27-6eef9f74a4fc.jpeg)

付属の CD がある場合は [64bit版Windows 10で、P/ECEを使う手順](http://www.piece-me.org/piece_on_win10_x64/piece_on_win10_x64.html) を参照することで最新の環境にまで整備できます。ただし、文中の「デバイスドライバのインストール」でデバイスドライバの署名検証を無効化していてセキュリティ上懸念がある[^1] ため、デバドラインストールについては本記事を参照することをお勧めします。

[^1]: ドライバ開発者がこの設定を使うならともかく、セキュアブートを無効化しなければならないなど、特定のデバイスを使うために一般ユーザが使う設定ではない

付属 CD にはデバイスドライバが入っているため、CD がないと P/ECE の接続さえできなさそうですが、どのみち **当時のデバイスドライバは現在の Windows ではもう使えない** ため、CD があってもなくてもネット上にある代替ドライバを使ってインストールを進めることになります。

## 開発環境アップデートの入手

付属の CD には開発環境一式が含まれているため、中古で付属品なしの本体を買った場合は実機アプリの開発をすることはできませんが、開発環境のいくつかのファイルはアップデートが出ているために入手することができます。開発環境全体の再現はできませんが（例えばコンパイラは CD がないと手に入らない）、システムアップデートツールやフラッシュメモリイメージファイルなどの重要なファイルが入手できるため、中古で買った P/ECE のシステムアップデートや、ファイルシステムが破損している場合の修復を行うことができます。

[P/ECE 公式のダウンロード](https://aquaplus.jp/piece/dl/index.html) の「最新版システム＆追加アプリ」から、`PieceSystem ver1.xx` を順番にダウンロードします。

`C:\usr\piece` というディレクトリを作り、ここにアップデートを **古い順番で** 展開していきます。正しく展開できれば `c:\usr\piece\app` とか `c:\usr\piece\bin` というディレクトリができるはずです（v1.20 だけ `piece` ディレクトリを掘ろうとするので中身を移動する）。

メモ帳などで以下のような内容のファイルを作り、エクスプローラからダブルクリックして開き、レジストリ項目を追加します。この項目は開発環境が自身のインストール先を知るために使っています。

```:piece-installdir.reg
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\AQUAPLUS\PIECE]
"InstallDir"="c:\\usr\\piece"
```

## デバイスドライバのインストール

これからインストールする P/ECE 用デバイスドライバは、（純正とは異なり）ドライバ自体としては WinUSB 汎用ドライバフレームワークを利用しています。このため、ドライバのインストールとしてよくやる「.inf ファイルを右クリック→インストール」とか「デバイスマネージャからドライバの更新」などの流れはありません。かわりに以下のようにインストールします。

本家のドライバやその他の互換ドライバが入っているときは、P/ECE を接続した状態でデバイスマネージャを開き、デバイスを削除します。デバイスを削除する際に「このデバイスのドライバーファイルも削除します」にチェックしておきます。

P/ECE を USB 接続し、[Zadig](https://zadig.akeo.ie/) をダウンロードして実行します。すると以下のように `PIECE PME-001` が選択されているはずです。選択されていなければ選びなおします。もしリストに出ていなければ、ドライバの残骸が残っていることになるので上記削除の手順をやり直します。

![2018-09-24.png](https://qiita-image-store.s3.amazonaws.com/0/69100/21e6af7e-1265-93d7-b23a-5c0e951a45cc.png)

`WinUSB` が選択されていることを確認して、`Install Driver` を押します。 `The driver was installed successfully` と出れば成功です。

## `pieceif.dll` の置き換え

P/ECE との通信に対応した PC 側アプリは、デバイスドライバを直接利用せずに `pieceif.dll` というライブラリを通じて通信することになっています。純正の pieceif.dll は純正のドライバに対応した専用のものであり、互換ドライバであればそれ用の pieceif.dll が提供され、開発環境やアプリ添付のものを置き換えて使うことになります。

上記 Zadig でインストールしたドライバに対応する pieceif.dll が、拙作 [pieceif-libusb](https://github.com/autch/pieceif-libusb) です。WinUSB による汎用ドライバを libusb 経由でアクセスします。

[Releases ページ](https://github.com/autch/pieceif-libusb/releases) から `pieceif-libusb_######.zip` をダウンロードして展開すると、 `pieceif.dll` と `libusb-1.0.dll` が出てきます。 **これらを `C:\usr\piece\bin` に上書きコピーします。**

今後 P/ECE 関係の PC 側アプリで純正の `pieceif.dll` を同梱もしくは必要としている場合は、このように pieceif-libusb バージョンで上書きして配置することで動かせるようになります（P/ECE 開発環境にも数か所に pieceif.dll が分散している）。

## WinIsd の実行

P/ECE を接続した状態で `C:\usr\piece\bin\WinIsd.exe` を実行します。

![WinIsd 起動](https://qiita-image-store.s3.amazonaws.com/0/69100/8664b686-c43b-b013-d54f-9c24309a864e.png)

`作業フォルダ` で PC 側のディレクトリを指定すると、`PC 作業フォルダ情報` のリストに PC 側のファイルがリストされます。P/ECE へ転送したいファイルを選択して `→` を押すことで P/ECE へ転送されます。

P/ECE での実行ファイル形式は拡張子 `.pex` です。たとえば `作業フォルダ` を `C:\usr\piece\app\ojyo` と指定し、 `ojyomini.pex` を `→` で転送すると、P/ECE の画面に「お嬢魔女ミニ」が選べるようになっているはずです。アプリによっては `.pex` 以外のファイルも転送しなければいけないかもしれません。そのアプリのドキュメントに書いてあるはずです。

P/ECE 側にある `startup.pex` は電源投入直後のメニュー画面を担当するアプリです。ほかのアプリで上書きすると電源投入時にそのアプリが起動するようになります。

## 実機基本操作

<dl>
<dt>SELECT + B</dt><dd>スタンバイモードに入る。START + SELECT 長押しで復帰</dd>
<dt>START 長押し</dt><dd>システムメニューを開く</dd>
<dt>START+SELECT 長押し</dt><dd>現在のアプリを終了してメニューに戻る</dd>
<dt>SELECT + ↓ を押しながら背面の RESET</dt><dd>画面表示は何も出ないがリカバリモードに入る。システムアップデートを焼きそこなったりしたときに使う。リセットで（ROMが正常なら）通常状態に戻る。</dd>
</dl>

とりあえずここまで進めればネット上のアプリをインストールして遊ぶことができます。
現在でもアプリを公開しているサイトについては↓コメ欄で。