FDのプロテクトについて、友人に聞かれたので超テキトーに書いておく。久々にPC88を見たら色々と良いことも悪いことも思い出した。特にコピーツール関連は思い出深い。筆者は昔からバックアップツールという偽善じみた言い方が好きではないのでコピーツールと呼ぶ。実際みんなバックアップ用途より、所謂不正コピー主体の使い方しかしていなかったね(笑)。


★超簡易フォーマット概略
 簡易すぎてわかんない人にはわからないかも(笑)。CD-Rと決定的に違う所はバウムクーヘンだということ。CD-Rは内側から一筆書きで全部繋がっているが、FDは各トラックが完全に独立している。外側から使い始め、どんどん内に向かって進む。2Dは全部で80トラック(TR0-79)ある。FD55系はオーバートラックと称して4トラック程余計に使えるが、エプソンのドライブ(TF-20とか)は使えなかった。最初にエプソンTF-20を買った筆者はそれを使ったプロテクトをコピーできずに泣いた。今でも恨みに思っています(笑)。

 1D・2Dの1トラックのアンフォーマット容量は6250Byte。ドライブによってばらつきがあり、FD55系は殆どが多め(6300Byte以上)でエプソン系はほぼ規格通りだった。ちなみに内側のトラックは線速度が遅く、ピークシフトとか色々な問題があって品質がよくない。データの詰め込みはやめましょう。1トラックは下のようになっている。上と下は繋がっていると考える。

①インデックスホール
 文字通り穴が開いていて、これを頼りにフォーマットの位置が決まる。創世記にはこれを複数開けて嫌がらせをしたプロテクトがあったが、(製造の苦労の割に)簡単に塞がれてコピーされてしまって意味が無かった。ご苦労様だ。筆者も試して面白がったことがある。プロテクト初心者は必ずやってみるフォーマットだね。

②プリアンブル(GAP0、IM、GAP1等)
 これは緩衝帯で無くても良い。フォーマットの時だけに自動的に書かれる。プリアンブルの大きさはほぼ一定なので(ドライブによってGAP1が削れて数Byte以内のバラつきがある)、ここの長さが極端に変な時はインデックス系のプロテクトが掛かっている可能性が大。

③IDエリア+GAP2
 GAP2はどうでも良いのでここに入れたが、IDエリアとデータエリアの緩衝帯である。長さは倍密で22バイト固定。

C(トラック番号)
H(ヘッド番号)
R(セクタ番号)
N(セクタ長)

 C、H、Nは通常は全て一定、Rはアタマから順番に並ぶが、インターリーブフォーマットと言って、わざとかき混ぜてフォーマットする場合がある。一般的に言ってインターリーブを掛けると読み書きが速くなる。ディスクベーシックで最速はインターリーブ13フォーマットだ。但し高速アクセス(高速ハンドシェイク)の場合は通常フォーマットの方が速い。例として88SR以降のシステムディスクのローダなど。

 ちなみにどれも好きな値にできるので、N=3で実体が256Byteのフォーマットとかもできる。読むときはN=3で読まれるため当然CRCエラーになるが、以降のセクタのID部分も読むことができる。これでプロテクトのチェックもできるわけだ。リードダイアグノスティックのできないフォーマットでは重宝する。このCHRNパラメータの使いこなしがプロテクト使いの基礎の基礎。創世記のフォーマットは大概この辺りの工夫がある。

④データエリア
 2Dではデータ長N=0(128Byte),1(256),2(512),3(1024),4(2048),5(4096)が選択できる。μPD765自体は6(8192)も選べるが、2Dは1トラック6250Byteなので入らない。これを利用してトラックをアンフォーマットにすることができる。2周させてデータやIDをGAP4で書き潰すわけね。また書き潰しはセクタ長混在フォーマットにも使われる。フォーマット長とNを変えてダミーセクタを書き潰すわけだ。これで混在の書けないマジックコピーとかベビーメーカーのオートは降参した。

⑤CRCエリア
 データ書き込みのときに必ず書かれる。データの正当性をチェックするが、CD-Rのように補完はできない。CRCエラーが出たらリトライする位しか手は無い。

⑥GAP3(緩衝帯)
 タダの緩衝帯でなくても良いが、1バイトはライトデータ(データ書き込み)コマンドにより必ず書かれてしまう。最低1バイトということになるが、ドライブの回転ムラに起因するビットずれもあるからもっと必要だ。セクタ長により違うが通常は50~60バイトくらいだろう。市販ソフトのように書き込みをしないなら極端に切り詰め出来る訳だ。

----------------------------------------
 以下③から⑥までがセクタ数分続く。
----------------------------------------

⑦ポストアンブル(GAP4、緩衝帯)
 タダの緩衝帯でなくても良い。しかし極端に短いと動作不良の危険もあるかも。フォーマットの時、インデックスホールまでの余った部分を埋める感じで書かれる。④で書いた通りこの性質によりアンフォーマットができるのだ。

①インデックスホール(1回転して冒頭と同じ所)

 省略しているが、各エリアにはSYNCと呼ばれるドライブ同期用のマークがある。大きさは倍密で12バイト。



★プロテクトの歴史

①創世記
 この時期のプロテクトはディスクベーシックに付属していたbackup.n88がターゲットだった。フロッピーディスクは単価1000円以上だったし、コピーしてもあまり割が良くなかったかもしれない。それでも一部ではこのようなプロテクトが掛けられた。平和な時代でした。テープのプロテクトは末期に来ていたけどね(この辺は別の人の解説を読んでね)。

 ちなみにこの時期のプロテクトはチェックしていないのが多い。恐らくは掛けた当人にもチェックする能力がなかったのだと思われる。偶にあったとしてもBASICのDSKFとかだったり…。筆者の持っていたのでは「森田オセロ市販版」がアンフォーマットプロテクトだった。筆者は起動時間がかかるのでノーマルにしてしまった。起動時間が速くなる&ノーマルコピーできるようになるマジックコピーのファイラーも作った。


②創世記2
 初代マジックコピーなどが出てきた。アンフォーマットはプロテクトとは呼べなくなった。そのためNを実際に変えてデータを入れたりした、CHRNがメチャクチャなのはもう当たり前。プロテクトも実際にリードコマンドでチェックするようになって来た。筆者の見た奴では「インターナルトラブル」(1983)とかがこの辺りの典型。

 そうそう、ハングアッププロテクトなんてのもあったな。倍密で単密のあるデータを読み込むと帰ってこなくなるという、μPD765のバグを利用した陰険なプロテクト。コピーツールを固まらせるためだけに作られたトラップで、読み込むとドライブが固まって動かなくなる。また固まったら正規品、というのもあったらしいけど筆者は見たことがない。

 ハングアップは時間を計っておいて、タイムアップしたらFDCリセットを掛ければなんてことはない。88だとリセットはノーマルではできないので、モーターをストップすることで回避できる。モーターストップすると強制的にリセットが掛かる仕様だった。


③創世記3
 セクタ長を変えたオリジナルフォーマットもすぐに対処された。そこでミックスセクタが編み出された。これは1つのトラックにセクタ長の違うセクタが混在しているのだ。勿論IDだけではなく実際にデータが入っている。またMB8877等、μPD765ではないFDCでフォーマットされた物が出てきた(FM8や7で作った奴)。こうなるともうPC88/98等765搭載マシンのソフトコピーツールはお手上げだ。98の場合はソフトでFDCリセットができるのでかなり自由度が高かったが(注1)。

 これで勝負はあったのか?ちなみに現在の光学ディスクのプロテクトはこの辺りで止まっている。いくら特殊なフォーマットを作ってもチェックの方法がないからだ。そのレベルは極めて低いと言える。この辺りでは765で作れるけど「ロードランナー」辺りが傑作かな(ちなみに初代アインシュタインでもコピーできない)。ロードランナーはチェッカーもよく出来ていた。当時はプロテクトチェックがよく解らなかったので参考になりました。チェック外しの勉強したい人は、これをノーマルにしてみるのがいいんじゃないかな。


④アインシュタイン出現
 ところがドッコイ、禁断のツールが現れた。アインシュタインはハードウエアのコピーツールである。今までの765だろうが8877だろうが、ソフトで作ったフォーマットは何でもコピーできちゃう。素人考えでは「プロテクトなんてベタ(ビット)コピーをすれば完璧さ!」と思えるだろうが、それをホントに実現してしまったのがこのツール。しかしそれは浅墓な素人考えで、この方式には絶対に逃れられない欠点がある。そしてその欠点から最後まで逃れることはできなかった。

 その欠点とはトラックの書き継ぎ点のチェックである。FDのトラックはバウムクーヘン状の輪切りなので、何処かに必ず書き継ぎ点ができてしまう。初代アインはこれをインデックスホールでバカ正直に書き継いでいた。このため最初はソフトだけでやっつけられた。所謂二周フォーマットやトップシフトと呼ばれるフォーマットである。これらはインデックスホール上にデータが来るので、アインだとデータが壊れて使い物にならない。

 実は書き継ぎ点は一応アインのソフトで対処したのだが、完全オートというわけではなかった。インデックス系は量産が難しい?のであまり普及しなかったが、最後まで有効なフォーマットだった。拙作のG-Basic1.1もこの方式だった。これはインデックス信号を意図的に遅らせた専用のPC88で書いた、何の変哲もないディスクベーシックのノーマルフォーマットだった。それでもアインもナポレオン(注2)もオートではコピーできない。ちなみにこの特殊88は切り替えとかはなかったので、書いたデータが全てインデックスシフトする。

 また初代アインシュタインは容量をチェックされると終わっていた。当たり前だがディスクの容量には限りがあり、ビットコピーしても容量を詰め込まれると書けないのだ。ちなみに読み込みはVFOの力で何とかなる。筆者の実験では1トラック(通常6250Byte)にN=1で24セクタ(GAP3を1Byteとしても6697Byte)書いたのも全く正常に読み出せた。しかし書き込みは速度を落としたり周波数を上げなくては書けない訳。これはガマの油と呼ばれるスピンコントローラ(回転数を変えるオプションパーツ)で対処された。実際は書き込み周波数を変えていたのだと思う。持っていないので分らないけど。

 知っている人は知っているだろうが、当時のTheBASIC誌にはアインシュタインのパクリみたいなハードウエアコピーツールの自作記事が出ていた。今考えるとすごいな~。当時の記事はまだ持っている(と思う…未確認)。いずれ自作してみようと思いつつ20年の歳月が流れた(17歳なのに20年前から生きているのかという突っ込みはナシで…先代の話です)。

⑤これ以降は専門メーカーのワンパターンでツマラン
 以後プロテクトフォーマットは専門のデュプリ業者(音研、東京電化など)が開発し、ハードウエアコピーツールだけがターゲットとなっていく。ソフトでフォーマットを再現するコピーツールはこの時点でほぼ消えたが、実力ある会社は書き換え法と呼ばれるコピーで生き残った。これはプロテクトのチェッカー潰しである。この点では画期的といわれた不安定フォーマット(ギャップ内不安定→4Byteコロコロ)とかウエーブフォーマット(注3)、穴あきフォーマット(注4)も、外す方には単なる通過点に過ぎないですね。チェッカー潰されたらノーマルフォーマットだし。なはは。

 チェッカーもこの時期から趣味で作っているんじゃないかと思うくらいむちゃくちゃな物が増えてきた(ソープランドストーリーとか…ちなみに限度以下のクソゲー)。レベルはある意味今より高いだろうな。リセットしてもVRAMやT-VRAMがリセットされない88を作ったり、VRAMにデコードプログラムを走らせたり苦労したぞ。筆者のデバッガはROM版だったから書きつぶれないよ~だ。


 まだ大分内容に不足があるが…飽きてきた(FDイメージを作りながら書いている)。これ以上知りたい人は筆者に「解らない事だけ」を直接聞いてくださいね(笑)。筆者は本来は弁舌の人なので?何時間でも飽きずに語ります。「このソフトのプロテクトを外して」というお願いは(友人以外は)ダメよ。いずれWeb版にちゃんとしたプロテクトの歴史を書きたい(創世記の裏パソコン史~消費者版~)。


takeru
 プロテクトチェッカー最終部分の例。自販機ソフト(笑)のもっとも安易な組み込み汎用タイプである。チェック合格が50H(GO!の意味?)で、不合格が42H(死に?)を何れも6144H番地にストアして戻る。メイン側はD100Hからのルーチンでこれを種にして真実のIPLを生成する。これで大体解るだろうが、ノーマルバックアップして真実のIPLを書き込めば出来上がりということになる。もっとも後チェック(ゲーム中のプロテクトチェック)があるかもしれないが、少なくともこのゲーム(リバティー)には存在しなかった。ちなみに00C1番地はサブ側のプログラムの終了アドレスである。



注1:書き込み中にFDC(μPD765)をリセットする外道技。当然CRCを書く前に書き込みが途中で終了する。これをやるとかなりの精度でデータ入りCRCエラーが作れるし、GAP3内データもチェックが甘ければ作れた。実はFDCリセットができない88でも「モーターストップ」という更に外道な技を用いて同じことができた。精度は更に低いので実用性は?だったが。筆者は無理せずにFDCリセット機能を改造して付けてました。

 いずれにしてもビットずれする(TEACのポンコツドライブだし…)からチェックが厳しいとすぐにコケル。どこかの掲示板では、8877や765リセットにやたら期待している人が居たがそういう訳なんで悪しからず。

注2:かなり後になって出てきたハードウエアコピーツール。アインのサンプリング方式と違って、タイムカウント法というアーキテクチャーを採用していた。これは一定期間で回数を決めてサンプリングするのではなく、力の限りずっとサンプリングし続けて0→1に変化した時間を記録する方式である。この方式だと容量プロテクトやウエーブフォーマットは意味を成さない。

 その後同じ方式の「玲於奈」というのも出てきたが、88末期だったので実際にどれだけ売れたのかは知らない。98のはソコソコ売れたらしいけど実物は一度しか見たことがない。持っている人は見せてください(できれば回路図を)。

注3:アインシュタインを終わらせたフォーマット(多分未対応)。セクタ長を変化させずに時間(ビット長)を変化させる。語弊があるが広義にはジッタープロテクトと言ってよい。具体的にはIDのタイムカウント間隔がバラバラになる。作り方はリアルタイムに書き込み周波数を変えながらノーマルにフォーマットする(意外と簡単に作れる)。アインでもマニュアル(手作業)で作れるだろうな。筆者も実験的にドライブの回転数を変えながら作ったことがある。チェッカーがID間隔しかチェックしていなかったら、アインでGAP3をバラバラにすれば実現できるかな?そんな甘いチェッカーはないか。ドライブがボロイX1ではできたんだよな。

注4:文字通り、セクタの真ん中にレーザー?で穴が開けてあるフォーマット。筆者が初めて見たのはサイキックウォー(工画堂スタジオ)だったかな。これはアインは勿論ナポでもコピーできないフォーマットだ。何故普及しなかったかといえば、恐らく製造のコストが高いからだろう(音研だったかな)。筆者も実験的に作ったことがある。職人の手で傷つけるので量産は無理だったが(笑)。

 チェックはそのセクタに書き込みをして直ちに読み出す。するとデータ入りCRCエラーになるからチェックする。仮にハードコピーツールがデータ入りCRCエラーを再現しても、穴がなければ書き込んだ時点でCRC正常になってしまう。ここまで書けば分るとおりオリジナルはプロテクトシールが貼れない。貼ったら書き込みチェックできないからね。勿論世間では「ドライブのヘッドが死ぬ~」とか「書き込んだらオリジナルが壊れる~」とか最低最悪の評判だった。その点では歴史に残るな。

 しかしサイキックウォーのブーイングの一番大きな理由は、最先端の高度なプロテクトの割にクソゲーだったことではないだろうか…好きな人には申し訳ないが…。筆者もゲームデザインに嫌気が差して完走できず、90年代になる前に速攻で手放した。オークションでは何故か人気あるみたいだね(笑)。穴が見たいんだろ?そうだろ?
続きを読む