目次
03-04 1985年のパソコン事情
03-04 プロテクトの話
こんなツイートを見た。
昔は『ネットの使えないpc』が一般家庭に一般的に普及してたって、全然想像できないです!
— ちょまど@プログラマ兼マンガ家 (@chomado) 2016年3月4日
私はもともと「ネットに転がるBL小説が読みたくてパソコン始めた」(2008)だし、
そもそもケータイでもネットサーフィンしてたし、
ネットの無いパソコンが一般的だったというのはしっくり来ない
うーん、昔話ばかり書いている人間としては解説しないといけないか。
この人、人気者だから同じこと考えて解説する人は山ほどいそうだけど。
別のツイートで、スペックとかの話ではなくて、当時の日常の追想みたいなのを読みたい、と書かれていたので、そういう形式で。
まず、「ネットのないパソコンが一般的だったのはしっくり来ない」と書かれているけど、一般的ではなかった。
1985年ごろのパソコンは、全然一般的な製品ではなくて、よほど好きな人しか買わなかった。
40人のクラスに、1人か2人持っているかどうか…という感じだったから、5%くらい。
全然一般的ではない。
パソコンに興味を持つなんて中学生前後の男だったのだけど、ベビーブームの世代だ。
学校でもクラス数は多い。
僕の学校の場合、6クラスくらいあった。それで、学年でパソコンを積極的にやっているのは、10人くらい。
珍しい趣味を持っているわけで、クラスを超えて仲が良かった。
#実際に持っている人でいえば、もうちょっといる。
でも、買ったものの楽しめずに脱落、という場合も多いのだ。
当時のパソコンは、全く互換性がないものが多数あって、10人集まっても機種はバラバラ。
これで何をやるのか、といえば、大抵はゲームだ。
ゲームセンターに行けばゲームがあったけど、小中学生ではお金もあまりない。
でも、パソコンならゲームが遊び放題。
友達の家に集まっては、その家のパソコン用のゲームでみんなで遊ぶことになる。
#写真は、PC-6001mkII。仲の良い友達が持っていて、よく「スペースハリアー」で遊んだ。
今のパソコンと同じように「いろんなことができる」と考えると間違いで、「いろんなゲームができる」が正しい。
アルファベットとカタカナは使えるけど、漢字すら使えないので、ワープロにもならない。
当時はファミコンは発売された少し後で、まだゲームセンターのアクションゲームの移植が多かった。
ドラクエの発売と大ブームは 1986年だ。
パソコンでは、ゲームセンターの移植よりも、オリジナルのアクションゲームが多かった。
これは、性能が低かったから移植なんてできなかった、という面もあるのだけど、その分工夫を凝らした面白いゲームが多かったんだ。
ゲームセンターのゲームは、100円で少しの時間遊んでもらう、というのが基本なので、短時間のものが多い。
でも、パソコンのゲームは、じっくりと長時間プレイするように工夫されたものが多くて、ファミコンとは違う世界があった。
そして、当時のゲーム好きは、そうした「まだ見ぬゲーム」に強くあこがれていたんだ。
だからこそ、高くてもパソコンを買う必要があった。
当時の主な記録媒体は、カセットテープ。
機種にもよるけど、16KByte ~ 64KByte しかメインメモリがなかった。
今なら、小さな写真も納まらないサイズだ。
そして、このたった 64KByte のメモリにデータを読み込むのに、カセットテープでは 5~10分くらいかかった。
当時は今よりもずっと「漫画」の人気が高かったから、テープの読み込みを待ちながら漫画を読んでいた。
カセットテープにどうやって記録ができるのだろう?
ハードディスクなんかと同じ「磁性媒体」だとは言っても、あれにデジタル記録ができるとは思えない。
…と、現在の妻に言われたことがある。僕が昔話をするときに、妻が知らないからと、からかっていると思われたのだ。
もちろん、カセットテープはデジタルで記録できない。
だから、デジタル信号を、アナログの「音」に変換する。
1200Hz と、2400Hz の音。
これで 0/1 を表現し、1秒間に 1200bit を記録する。
#テープ記録の際には、1バイトの「最初」と「最後」にも信号が付き、1バイト 10bit で表現した。
だから、1秒間に 120バイト記録してあることになる。
音として聞くと、雑音にしかならない。
でも、テレビやラジオで放送して「パソコンのプログラムを届ける」なんて例もあったし、雑誌の付録にソノシート(ビニールで作られた安価なレコード)としてプログラムが付いてくることもあった。
市販のゲームだって、カセットテープで供給されている。
パソコンに読み込んで再セーブ…というような方法でコピーされないように、特殊な仕掛けなんかはしてあるのだけど、カセットテープだからダビングすることは難しくなかった。
もちろん違法だけど、当時のパソコンは最初に書いたように、マイナーな趣味。
違法だと啓蒙するような団体もなかった。
#写真は、PC-6001 の OLION のカセットテープ。
カセットテープ時代の有名プログラマ、竹内あきら氏の作品。
どういうご縁か、現在仕事で時々会います…
しばらくたって、フロッピーディスク (5inch) が普及し始めた。
僕の家の近所の書店が、パソコンの時間貸しサービスをやっていた。
その書店では、PC-8801 と PC-9801 、IBM-JX の3機種を置いていた。
当時はまだ PC-9801 にはゲームが少なく、中高生には PC-8801 の人気が高かった。
#写真は PC-8801 。http://www.emu-france.com/ から引用。
PC-8801 は、標準ではフロッピーディスクを扱えない。
しかし、その書店では、外付けドライブが繋げられていた。
そして、友人がフロッピー版のゲームを購入。
友人の家には、ディスクドライブはおろか、パソコンもなかった。
その「時間貸し」で遊ぶつもりで購入したものだ。
フロッピーって、速いっていうけどどれくらい速いんだろう?
カセットテープだとロード(読み込みの意味)に10分くらいかかるけど、1分で終わったりするのかな。
…なんて言いながら起動すると、数秒でゲームが始まって驚いた。
#僕が初めてフロッピーディスクの速度を知ったゲーム。
PC-8801 用、ハイドライド。
当時は OS という概念は一般的ではなくて、パソコンに搭載された ROM に BASIC が入っていた。
今なら BIOS とか UEFI とか、そういうものに該当する部分。
BASIC というのはプログラム言語なのだけど、BIOS も OS も兼ねていた。
言語の機能として、メモリに直接自由な値を書き込んだり、そのメモリを実行したりできたので、BASIC からほかのプログラムを実行したりしたのだ。
カセットテープのゲームは、まず BASIC の LOAD 命令で読み込まれる。
読み込みが終わった時点では、その気になればプログラムが読める。BASIC で書かれているからだ。
でも、普通は内容は、メモリに書き込むデータの羅列。意味が分からない。
実行すると、メモリにプログラムを書き込んで実行する。その結果、さらに大きな機械語プログラムをテープから読み込み、即実行する。
先に「読み込んでからセーブしてコピーすることは出来ない」と書いたのは、こういう仕組みだから。
ゲームが動き始めたら、止めるにはリセットするしかないし、リセットすればプログラムは失われる。
1983年ころだと、機械語を使わずに BASIC で書かれたようなゲームも普通に出回っていた。
BASIC は初心者向けの言語で、実行速度も遅かった。
今でいえば、Javascript なんかと同じなのだけど、CPU が遅いことに加えてプログラム言語の技術がまだ低いので、ずっと遅い。
でも、腕に覚えがある人なら自分でアクションゲームを作れたし、アクションではないパズルなどを作る人もいた。
そうしたゲームが、BASIC のまま市販されることもあった。
でも、雑誌なんかに投稿され、掲載されているものもあった。
だから、雑誌に載っているリストを打ち込む根気さえあれば、非常に安くゲームを遊ぶことができた。
まぁ、雑誌に載るゲームは素人が作ったものだから、それほど面白くはないかもしれないけどね。
僕も、2度ほど雑誌に載ったことがある。
僕が使っていたのは、ファミリーコンピューターの周辺機器として発売された、ファミリーベーシック。
#写真は、「マイコン BASIC マガジン」。当時のプログラム投稿雑誌で一番人気があった。
雑誌の上に紙が載っているのは、僕のプログラムが掲載されたときの原稿料の通知書です。
先に「当時のゲーム好きはパソコンを買う必要があった」と書いたけど、僕は貧乏で買えなかった。
でも、ゲームが遊びたかったというより、プログラムが組みたかったので、これでよかったんだ。
当時のパソコンの使い方を「大抵はゲーム」と最初に書いたけど、おそらく2番目の需要がプログラム。
プログラムで何かを作りたい、というよりは、プログラムそのものをやってみたい、という需要。
何を作るかと言えば、やっぱ大抵はゲームなんだけど、絵を描くだけでも楽しかったし、音楽を演奏するだけでも楽しかった。
そして、ゲームを作ったとしても、すごく面白い作品になんてなるわけがない。
ゲームを作る、ということ自体を、一種のパズルゲームとして楽しんでいるだけ。
当時のパソコンはゲームしかできないものだったけど、「俺の考えた最強のゲーム」を作ることは…作ろうとすることは出来る、夢の箱だった。
最初にあげたツイートの反響の中に、「当時はネットもなくて、どうやってプログラムをインストールしていたのだろう」と言っている人がいた。
えーと、ハードディスクがないので、インストールという概念もないです (^^;
しかしまぁ、ここまでに書いた通り、ゲームで遊ぶことは出来たし、パソコンショップで買ってくることもできた。
そして、パソコンショップの一部は…いや、半分くらいかな。
「ソフトレンタル業」をやっていた。
今では違法行為だけど、当時は法律がなくて、ソフトは映画ビデオなどと同じものとされていたのね。
大体、市販価格の10分の1くらいで、3日くらい借りられる。
先に書いたように、パソコンのゲームは「じっくり楽しむ」ものが多かった。
3日でゲームを終わらせる、なんて無理な注文だし、誰もそんなこと考えてない。
もちろん、レンタルソフトはコピーするものだった。
レコードレンタルだってコピーするのが普通で、複製保証金がカセットテープの生テープに含まれていた。
だから、パソコンソフトだってコピーするのが当然、とみんな思っていた。
この頃になると、もうフロッピーディスクの多い時代。
カセットテープと違って簡単にはダビングできず、特殊な方法で「コピープロテクト」が施されている。
でも、私的複製は法律でも認められた権利なので、コピープロテクトを外してコピーするためのソフト、というのも売られている。
何百種類ものソフトに対応し、コピーできるのだけど、自分自身のコピープロテクトは外せない、という仕組みなので、コピーソフトだけは買うしかなかった。
#他社のソフトのプロテクトを外す、という機能はそれなりにあったけど、コピーソフト会社同士の不文律か、外せるソフトは少なかった。
後に、レコードなどと違って、デジタル情報のコピーは劣化せずにいくらでも作れてしまう、ということが問題となり、こうした「パソコンソフトのレンタル行為」は違法となる。
でも、レンタルは違法でも、中古ソフト販売は違法ではなかった。
だから、こうした店では中古ソフトを7割の値段で売り、3日以内に再度売りに来た場合は6割の値段で買いとる、なんて行為が横行した。
それは事実上レンタルだろう、という裁判所の判断が下りて警察が動き、やがてすべての店が消えうせたけど。
冒頭にあげたツイートでは、BL が見たくてパソコン始めた、と書かれていた。
当時だってもちろん、そういう需要はあった。
BL というより、エロ、特に 1985年には流行していた「ロリコン」ってやつが多かったようだけど。
#ロリコンっていうのは性的指向の意味だけど、当時は特定の絵柄やシチュエーションに対して「ロリコン」という言葉が使われた。
実は僕はこっちの方向は疎くてそれほど知らない。
いや、恥ずかしくて格好つけているとかではなくて、本当に当時興味がなかったのよ。
それでも、雑誌広告などに入っていたので記憶はある。
当時はエロ漫画だってエロ写真集(当時、ビニール袋に入れて立ち読みされないようにしたことから、ビニ本と呼ばれた)だって、モザイクやぼかしが入っていた。
だけど、パソコンなんて一部の人しか知らないマイナー世界。
簡単な線画とはいえ、局所をモザイクなしで描いたゲームが普通に市販されていた。無法地帯。
ここら辺、黎明期のインターネットと似ているね。
内容だってひどいもんで、今だと確実に問題になりそうなシチュエーションを楽しむようなゲームが多かった。
そしてもちろん、そういうソフトが目当てでパソコンを買うような人だっていた。
いつの時代でも、エロと戦争は技術を進化させる。
こちらは、自分のページポリシーで写真なしで…
脱ぎ麻雀コレクターでタモリ倶楽部に出たことでも有名なみぐぞうさんのページに素晴らしいまとめがありました。
とりあえず、思いつくことをだらだらと書いた。
時代背景としては、1985~1990 くらいの話かな。
このページにすでに書いた文章で重複しているものも多いと思う。
特に、ぎーちさんとの対談とは重なる部分が多い。
#ぎーちさんとの話は、パソコンというよりゲームの話題も多かったので、守備範囲が多少違う。
特に関連する話題にはリンクしてあります。
興味があればそちらもお読みください。
後から追記
後から「画像があると想像しやすい」ってリクエストいただいて、画像などを入れ込みました。
普段画像なんて入れ込まないから、入れ方にセンスがないよ(笑)
どこかのサーバーにあった画像などは、直接リンクさせてもらったうえで、出典を明記しています。
問題があれば削除いたしますので指摘してください。
こうした「当時の世相」みたいなものも、どこかでまとめたいと思っていたのですが、とりとめが無くなりやすく、まとめる機会がありませんでした。
今回は簡単な形ですが、まとめるきっかけを与えていただけたことに感謝いたします。
後から追記その2
いろいろと続編書きました。
レンタルソフトのコピーが当然の権利だと考えられていた時代の、コピープロテクトの話。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
先の思い出話の勢いで書いてしまおう。
コピープロテクトの話をいつか書きたいと思っていた。
かける側と、破る側の攻防が好きなのね。
実は、もう3年くらい前に書いて、詰めが甘いのでお蔵入りさせていたやつ。
というのも、技術を網羅できるほどには僕が詳しくなかったもので。
そのまま…出せる感じではないので、ある程度リライトしつつ。
プロテクトの話と言えばまずはフロッピーディスクなのだけど、仕組みを知らないとわからない部分も多いので、ざっと説明。
今では 3.5inch も使ったことがない、という人が多いのだけど、3.5inch は「入れれば読める」ので特に難しくはない。
裏表を間違えて入れようとしても入らないし、ドライブに入れる前は磁性体がシャッターで保護されるし、一番よくできたディスクだ。
5.25inch の場合、裏表逆にしても入ってしまう。
裏表逆でも入ってしまう、というのが面白くて、後で書くのだけどわざと逆に入れることもあった。
そして、ドライブに入れただけでは読めない。
入れた後に、「ノブ」を回してやる必要があった。
このノブは、物理的にディスクの抜き差しを禁止するのと、内部でディスクを上下から抑え込み、挟んで回転させる機構に密着させるのと、両方の意味合いがあった。
8bit コンピューターの時代…1980年代後半は、5.25inch が普通だった。
シャッターもついていないし、3.5inch よりもジャケット(外側の保護プラスチック)が柔らかいので、取り扱いに注意が必要だった。
もっと大きいと 8inch ディスク。実は、これが「標準ディスク」と呼ばれる。
1980年代のパソコンでは使われていない。その時代でも、オフィスコンピューターでは使われていたけど。
詳しくは、8inch ディスクの開発者、シュガートの話でも読んでくれ。
さて、ディスクというのは非常に複雑な機構を持つのだけど、あまりに複雑なので、ディスクドライブだけに専用の LSI を持たせるのが普通だった。
フロッピーディスクコントローラー (FDC) と呼ばれる。
ただし、Apple II では FDC を持たなかった。CPU で直接フロッピーディスクを制御するので、変なことがいろいろできた。
先に書いたけど、PC-8801 では、フロッピーディスクは当初は外付けだった。
外付けだと、CPU との通信にも時間がかかる。これを少しでも効率化するために、ドライブ内にも CPU を搭載した。
なので、メイン CPU とドライブの CPU を通信して、ドライブの CPU が FDC を制御して、FDC がフロッピーディスクを駆動した。
こちらも、変なことがいろいろできる。
プロテクトの基本は、「読めるけど書けない」だ。
ディスクをコピーするときは、読み込んで、同じ内容を書く。
でも、書けなければコピーできない。単純な理屈だ。
問題は、どういうデータが読めるけど書けないのか、だ。
僕もすべてを網羅するほど詳しくないのだけど、いくつか書いてみよう。
(詳しくないし、当然資料も持ち合わせていない。なので、書いてあることには間違いがあるかもしれない。
いろんな方法がある、という読み物として楽しんでもらい、詳細を知りたければ自分で調べてみてほしい)
▼セクタ数が違う
非常に初歩的なもの。
フロッピーディスクは、データを「セクタ」という単位で区切っている。
セクタはさらに集まってトラックを作る。
これらをいくつにするかは、ある程度融通が利く。
セクタやトラックの数を変えることだってできる。
当時は BASIC が OS みたいなものだったので、BASIC が使用する標準ディスクフォーマット、というものがあった。
そして、この標準ディスクをコピーするソフトも、BASIC のセットに付属していた。
「ユーザーは、このソフトでコピーを取ろうとするだろう」という前提で、BASIC のフォーマットとはセクタの数を変えてやる。
すると、全部のセクタをコピーしたつもりでも、実はコピーできてないセクタが生じる。
でも、すぐに「どのようなセクタ数でも、解析して全部をコピーするソフト」が登場する。
セクタ数を変える、というプロテクトは、短期間しか通用しなかった。
▼CRC プロテクト
ディスクには、セクタごとに CRC というデータがつけられている。
データが壊れていないか検出する、「チェックサム」と呼ばれるものの一種だ。
これを書き換えて、わざと「壊れている」ようなセクタを作るとどうなるか?
FDC は、一応データを読み込みはするのだけど、「壊れている」という報告を返す。
ソフトのほうでは、壊れているなら再読み込みをするのだけど、何度読んでも壊れている。
仕方がないので、何度目かのトライで読み込みを諦め、その時読み込めたデータを信用するしかない。
そして、コピーのためにそのデータを書き戻す際には「正しい」 CRC を再計算して、書き込む。
この CRC の書き込みは FDC の仕事なので、「正しくないものを書き込め」とは指示できない。
ソフト起動時に、このセクタを読み込んでエラーが出れば、正規品だ。
これを再現するには、何度読んでも CRC エラーが出るセクタを見つけたら、そのセクタのデータを書き込んでいる最中に「FDC をリセット」するように CPU から指示を送ればいい。
FDC は、セクタの途中で書き込みをやめてしまう。当然、CRC は計算されず、「それまで書き込まれていたもの」のままだ。
これでセクタはエラーとなる。
▼未フォーマット(コロコロプロテクト)
新品のディスクは、フォーマットしてから使う。
上に書いた、「セクタ」や「トラック」に、データ的な目印をつけてから使うのだ。
ところが、特定のセクタやトラックだけ、わざとこの「フォーマット」作業を行わない、という技法がある。
すると、磁気データが一切書き込まれない。
これは不安定な状態で、データを読もうとすると、読むたびに違う結果が返ってくる。
コピーソフトは、「読むたびに違う」なんて思わないから、1回読み取って書き込んでしまう。
すると、とにかくその時のデータで「確定」してしまう。
プログラムの起動時に、該当セクタを 3 回読み取り、すべてが内容が同じかチェックする。
正規品は、フォーマットが行われていないので、「内容が変わる」はず。
でも、コピーしたものは、常に同じ内容が返ってくる。
一度も使っていない生ディスクを使い、(もしくは、一度使ったディスクに磁石を近づけて内容を破壊し)、コピーする際に同じセクタを複数回読みながら、未フォーマットと思われる部分は飛ばしてコピーする、という手法が現れた。
▼時分秒プロテクト
FM-7 などで使用された FDC では、フォーマット時のコマンドとして F5 F6 F7 の3つの値が使われた。
それぞれ別の意味だが、ともかくフォーマットに必要な処理を行う。
もちろん、これらが意味を持つのはフォーマット時のみで、通常のデータとして書き込む際には、これらの数値は問題なく書き込める。
では、フォーマット時に書き込まないといけないデータ部分に、F5 F6 F7 の数値を利用したらどうなるか?
これは、「使えない」というのが、その FDC での仕様だった。
では、逆に、わざとこのデータを書き込んでしまえばプロテクトになる。
読み込みには問題は出ないが、書き込もうとしても絶対に書き込めない。
F5 F6 F7 は、FM-7 の文字コードでは「時分秒」の文字が入れられていたため、時分秒フォーマットと呼ばれた。
該当 FDC は、もともと「片面ディスク」用に作られたもので、両面ディスクで使用する際には、この FDC とは別に読み書き面を切り替える回路を設けるのが普通だった。
そして、この回路は FDC とは独立して動作する。
なので、時分秒フォーマットを見つけたら、F5 F6 F7 の代わりに、FD FE FF を書き込む。
FD と F5 は、1bit だけ値が違う。他の数値も同様だ。
そして、時間を正確に測り、この 1bit を書き込むタイミングで、書き込み面の裏表を逆にしてしまう。
これで F5 を書き込むことができる。他の値も同様。
#説明が難しいが、信号を逆の面に送ることで、1 のビットは必ず 0 になった。
また、保護機構があって、裏面が 1bit だけ破壊される、ということはなかったらしい。
▼ダブルインデックスホール
5inch ディスクには、小さな穴が1つ開いていた。
未フォーマット時のディスクを初めてフォーマットするときは、何も目印がない。
そこで、この「穴」を検出できるようになっていて、この穴を見つけたらディスクが1周した、と考えてフォーマットを行った。
逆に言えば、フォーマット時くらいしかこの穴は使用されない。
これを利用して、穴を2つ開けてしまう。
穴が特定の位置を通ったかどうかは検出できるので、穴の通る時間間隔を調べれば、穴が1個か2個か、程度はわかる。
穴が2個開いていれば正規品、と考える。
自分で穴を開けるにしても、それなりに正しく穴を開けないと、時間間隔の微妙な違いでコピー品と見抜かれてしまう。
物理的な工作が必要なので、コピーソフトだけでは対応ができなかった。
▼穴あきプロテクト
上と同じような感じなのだけど、ディスクのデータ領域に穴を開けてしまおう、というプロテクト。
その部分を読むと、コロコロプロテクトと同じようなことが起きるので確認できる。
じゃぁ、コロコロと同じようにコピーできる。物理的に変わったことをしても、それほど意味はなかったようだ。
ついでに、穴が開いているために、ディスクドライブのヘッドを傷つける恐れがある、というので、どこかの会社が考えたものの、ほとんど使われなかったらしいプロテクト方法。
▼回転速度プロテクト
ディスクドライブには個体差もあるので、ディスクの回転数は常に同じ、とはならない。
ディスクの回転が異なれば、データの読み出し速度も変わる。
そこで、FDC では、多少読み出し速度のムラがあっても対応できるようになっていた。
ただ、書き込み時には基本的に同じ速度で書き込みを行う。
これを利用して、特殊なドライブで、ゆっくり回転するディスクにデータを書き込む。
ディスクはゆっくり回るので、普通のディスクよりも多くのデータを書き込める。
読むときは、多少の速度の違いは許容されるので、普通にデータが読める。
ただ、ディスク1枚に入るデータ量が、普通より多いだけだ。
この方法でディスクを作られ、データを詰め込まれると、コピーすることができない。
どんなにコピーしようとしても、全データを書き込むことができないのだ。
▼Apple II のプロテクト
先に書いたが、Apple II は FDC を持たず、CPU がすべてを制御する。
そのためおかしなフォーマットがたくさんあった。
ディスクを逆回転させるとか、読み取りヘッドが、普通の 1.5 倍の速度で動く、なんてやり方もあったようだ。
Apple II のディスクドライブは片面だったので、途中で「裏返す」ようなゲームも存在した。
先に書いたが、5inch ディスクは裏返しても入ってしまう。
これを積極的に利用したのだ。
#実際には、裏返して入れることは出来るのだけど、それで読み書きするにはちょっと加工が必要。
市販ゲームの場合は、もちろん最初から加工してあったし、簡単に加工するための工具も売られていた。
▼パッチ
プロテクトというより、外す側の最後の手段が「パッチ」だ。
最後の手段というか、末期には常套手段になっていた。
ここまでに書いた話では、「コピーする」というのは「オリジナルと同じものを作り出す」ことだった。
しかし、パッチでは、コピーしようとしているのに、オリジナルと積極的に変えてしまう。
ほぼすべてのプロテクトで、「正規品かどうかを確かめる」プログラムが動くことになっている。
このプログラムを動かさないようにしてしまえば、プロテクトを再現できなくてもソフトは動くのだ。
究極の方法…だけど、特に面白さを感じない。
当時はコピーが法的に「認められたもの」から「違法」へと移行しつつある時代で、まだコピーは当然の権利、と捉えられていた。
でも、それは自分で買ったゲームを、万が一の事故に備えてコピーしておく、というような場合だ。
市販ソフトをただで遊ぶためにコピーする、というのは、褒められた行為ではない。
そして、悪い行為に「面白い」も「面白くない」もないのだけど、パッチ当てはあまりにも即物的だ。
コピー、と言っているのだから、元と同じものを再現してやろう、というテクニックには、チャレンジ精神を感じる。
ちなみに、この「パッチ」を禁止してやろうと試みるプロテクトも存在したようだ。
パッチを開発するコピーソフト製作者は、CPU の動作を特別な方法で確認しながら、プロテクトを確認している該当プログラムを探そうとする。
でも、プロテクトの確認を「CPU 以外」がやっていたら?
通常の方法では、プロテクト確認のプログラムを見つけ出せない。
PC-8801 は、ディスクドライブに CPU を搭載していた。
そこで、こちらの CPU にプロテクト確認をさせよう、というプロテクトもあったようだ。
こうなると、パッチを作るのが難しくなる。
人間のやることだから、最後にはばれてしまうのだけど、少しでも「パッチ」に抵抗しようという、防御側の工夫が面白い。
以上。
多分、もっとたくさんのプロテクトが考案されていたはず。
ついでに、ゲーム機のほうのプロテクトの話も…とおもったら、これはすでに過去に書いていた。
追記 2016.7.4
2016.6.30に、ハイドライド作者の内藤さんがこのページを見てくださり、思い出話をツイートしていました。
これは貴重な話だと思ったので、ご本人に許可を頂いたうえで引用いたします。
元々は、引用されることなど想定せずに思い出を語っただけです。
間違いなどあっても内藤さんへの問い合わせをしないようにお願いします。
記録が残ることを想定していない文章を引用した以上、文責は僕にあります。
https://t.co/AIgrOaHU4S
— 内藤時浩 (@tokihiro_naito) 2016年6月30日
ちょっと懐かしい。私はプロテクトをかける側だったけど、私が作ったのは以下の通り。
・FDのセクタ間(GAP3)に特定の文字を書き込んだ。本物なら書いてある
・1トラック16セクタのところを18セクタに拡張した
そのうち、NECのFDCコントローラでは物理的にコピー不能なフォーマットを、FM-7やX1のFDCで作ったりして、プロテクトに開発時間を割くようになりました。割と本末転倒でした。ゲーム作れよと…。なので、この辺りから、デュプリ業者にプロテクトを依存するようになります。
— 内藤時浩 (@tokihiro_naito) 2016年6月30日
「パソコン向けソフト」の黎明期は、プログラムを作成したメーカーが自分のところで複製を行っていました。
しかし、後にはデュプリケート(複製)業者が現れ、大量生産を請け負うようになります。
そして、業者がオプションサービスとして、プロテクトも請け負うようになります。
また、パッチに対抗するためFM音源とBEEPドライバの2箇所にチェックを組み込んだりしました。環境の違いで動く動かないを作り出すことで、コピー屋を混乱させようとしたんですね。そしたら、コピー屋はIPLを丸ごと乗っ取って、ローディングと起動を自分で行うという荒業に出ました(苦笑)。
— 内藤時浩 (@tokihiro_naito) 2016年6月30日
PC-9801の頃になるとFDCを直接弄れなくなり、INT 21Hのファンクションコールしか許されなくなりました。そのため、FDチェック部分が簡単に検索されるようになって、プロテクト側の敗北で終了。で、そのハードから撤退して、ソフト供給が止まり、ハードの息の根も止まるというね…
— 内藤時浩 (@tokihiro_naito) 2016年6月30日
上記ツイートは、本人より INT 21H と書いたのは 1BH の間違いです、との訂正情報もいただいています。
INT 21H は DOS の機能を呼び出す機械語命令で、1BH は DISK アクセスのための機能を呼び出す機械語命令。
記憶のみでさっと書いて、よく使う数値を取り間違えただけの些細な問題です。
プロテクトでご連絡いただいたので、もうちょっと書いておこう。FDは80トラックまであったのですが、それを81トラックまで拡張したフォーマットが存在していました。これ、某社が採用していたと思うのですが、NEC互換機のドライブがシークが物理的に出来ないようになっていて…。
— 内藤時浩 (@tokihiro_naito) 2016年7月4日
当然、製品でもコピーとみなされるという事態になってパニックしてました。同様にマイナストラックもありました。シーク制限は物理的に存在していたので、シーク速度最大でマイナストラック移動実験をしたら、カツンツカンツカンツカンと大変なことにwww
— 内藤時浩 (@tokihiro_naito) 2016年7月4日
引用許可をいただいたら、さらに思い出話をしていただけました。
「互換機」などは結構頭の痛い問題です。
こちらは僕の思い出ですが、知人が FM-7 の外付けドライブを購入する際、安い互換品を買ったところ、正規に購入したゲームがコピー品とみなされて遊べない、という事態が発生していました。
MSX なんかは「互換機」しか存在しない市場なわけで、事実上強いプロテクトはかけられなかったようです。
MSX の場合、ROM カートリッジにすることが何より強いプロテクトでもありましたが。
以上、当時現場でプロテクトをかけていた側の方に思い出話をいただけたのは、非常に貴重なことかと思います。
引用の許可をいただき、ありがとうございました。
追記 2016.7.5
上の追記をした翌日、たいにゃんさんが SeeNa で使われた技術と共に、プロテクトの話をしてくださいました。
許可を得た…のかな (^^; リンクさせてくださいと言ったら「にゃーん」と答えられたのだけど。
SeeNa は、たいにゃんさんが PC-8801mkII 用に作られた、迷路の中を駆け抜ける3Dゲームです。
レース+RPG風味…かな? 今でも似たゲームは見当たりません。
本文に書いたように、PC-8801 のディスクドライブは、CPU を搭載しており、任意のプログラムを実行できます。
これを使ってゲームの処理をするという超絶技巧を使い、ヒットしたゲームでした。
SeeNa の技術についてはとても興味深いですし、そちらが話の主体なのですが、togetterまとめが作られているのでそちらを読んでください。
以下、プロテクトに関する部分を引用します。
こちらも、引用した以上文責は僕にありますので、たいにゃんさんに問い合わせしないように。
SeeNaプロテクトというか簡易暗号化部分
— たいにゃん (@bugnekotinyan) 2016年7月4日
add sub xorを使う簡単なものでしたが、diskごとにどれをつかうかとソルトの値は乱数で、
この復号部分のプログラムのバイナリ値を使って一部データを復号するので、簡単なパッチでは別diskに適用できぬくくなってたはず
一部トラックは変則的な単密度フォーマットにしてあり、読み込もうとすると、コントローラーがハングアップする確率が高く、
— たいにゃん (@bugnekotinyan) 2016年7月4日
これは単にコピーツールを作ってる人へのいやがらせでした
ゲーム中にはもちろんそのトラックにはアクセスしません
あと、ダミーのfatとかいれてあり、NEC純正のbackup.n88だとこぴーできて遊べるようにしてあったのも、
— たいにゃん (@bugnekotinyan) 2016年7月4日
コピーツール作者に、散々苦労しなくてもできちゃうんだよ、ご苦労様、けけけ
というメッセージでもあったのです
思い・・・だした
— たいにゃん (@bugnekotinyan) 2016年7月5日
たしかトラックも一枚ごとにシャッフルしてたと思う
0トラック以外
いろいろ分からなかったので、ツイッターで直接お伺いしました。簡単にまとめます。
SeeNa のプロテクトは多重構造になっていて、
・普通にプロテクトがかけられている
・プロテクトチェック部分はディスク1枚ごとに違う方法で暗号化され、パッチしにくい
・ディスク1枚ごとに、トラックの並び方が違う
・トラックのうち一本は「ハングアップを誘う」トラップ用
・並びの違いは、先に書いた「暗号化」されたデータ領域内に記録されているので、事前にわからない。
・でも、BASIC のディスクをコピーする純正ツールではコピーできる。
(BASIC のディスク構造を示す fat 領域を巧妙に作り込み、トラップに引っかからずコピーできる)
・ただし、純正ツールコピーでも、違法コピーしたことはゲームを遊ぶとわかるようになっている。
SeeNa はゲーム自体の技術も高かったのですが、プロテクトもすごい…
引用ツイート最初の暗号化部分、簡単に解説すると、シーザー暗号です。
IBM の各アルファベットを、ABC 順で1つ前にすると HAL になる、ってやつ。
ここで「1つ」という数値が「ソルト」と呼ばれます。
#暗号鍵と同じ意味。
なぜわざわざ違う言い方をするかは、説明が長くなるので興味ある人は調べて。
sub 1(1つ前にする)で暗号化したら、add 1(1つ後ろにする)で復号化できる。
ソルトが変われば数値部分を変える。sub と add を入れ替えると別の暗号になる。
さらに、xor でも別の暗号になる。
この演算は、2回繰り返すと元に戻ります。だから暗号化と復号化は同じ。
市販するディスクをコピーする際に、自動的に sub add xor のどれを使って暗号化するかを選び、ソルトもランダムに選び、暗号化したデータと一緒に適切な復号化プログラムをディスクに書き込む…というソフトを作成したのだそうです。
コピーソフトを作る業者が、プロテクトをチェックしている部分を回避しようと思ってパッチを当てようとしても、パッチを当てたいプログラムは暗号化されている。
しかも、その暗号データは、市販されているディスクの1枚づつで内容が異なる。
ここに、最後の引用ツイート、トラックシャッフルが組み合わさります。
本文最初の方で書きましたが、ディスクはセクタ単位で管理が行われ、セクタをまとめたものをトラックと呼びます。
トラックはディスクに対して同心円状に並び、物理トラック番号が割り振られます。
この順番をディスクごとにバラバラにシャッフルしてしまい、実際にアクセスするときは、シャッフル順を記録したデータを参照して実際の物理トラック番号に変換してアクセスするのですね。
これに加えて、特定の1トラックはおかしな構造で記録されていて、アクセスすると FDC がハングアップする。
シャッフルされているので、そのトラックがどこかはディスクごとに異なる。
ハングアップするトラックを飛ばしてコピーしよう、と考えたとしても、それがどこにあるかわからないのです。
ディスクから起動する場合は、まずトラック0のセクタ1が読み込まれます。
トラック0はシャッフルしない、という理由はこれ。
読み込むんだデータはプログラムとみなされ、実行されます。
これは1つのセクタに収まるほど小さなプログラムですが、続いて複雑なプログラムを読みこませるには十分です。
そして、おそらくここでトラック0から先に書いた「復号化プログラム」が呼び出され、シャッフルされたトラックのデータ(シャッフルテーブル)を含む、暗号化された重要データの復号が始まる。
以降はゲームのシーケンスに入っていくのでしょうが、データアクセスの際には、必ずシャッフルテーブルを参照して、そこに書かれたトラックにアクセスします。
これで、トラックがシャッフルされていても正しいデータにたどり着ける。
もちろん、ハングアップするトラックにはアクセスしないようになっている。
非常に巧妙です。
SeeNa は、「ソフトメーカーのお手製プロテクト」の時代としては、最後に近いものではないかと思います。
もう少し後になると、先に書いたように複製業者が出てきて、プロテクトのサービスを行うようになる。
SeeNa はヒットゲームだったので、後に「ワイド版」というバージョンが作られます。(続編ではない)
このときには、複製業者にプロテクトを頼んだのだそうです。
こうした複製業者のサービスは、専門家なので非常に技巧を凝らしたものだった一方で、あまり手の込みすぎることは出来ません。
すでに完成しているゲームにプロテクトを施すだけだからね。2重3重のトラップは作りにくい。
SeeNa は、非常に凝ったプロテクトの技術としては円熟期のゲームの一つなのだろうと思います。
こんなお話を伺えたのは、非常に貴重なことかと思います。
引用の許可をいただき(…にゃーん?)、ありがとうございました。
2018.7.24 追記
実際に、FM-7 の各種ゲームを中心にプロテクトがどのようにかけられていたか、コピーするとどうなるか、などを説明しているサイトを見つけました。
こういう実例、非常に面白いです。リンクしておきます。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 【あきよし】 AppleII のプロテクトの話で、面白い記事を見かけたのでメモ。救えるものと、こぼれ落ちるもの (2016-12-26 18:04:23) |