Neet.NEWTYPE-X1におけるF5F6F7の書き込みについて先日ネットを徘徊していたらトロPCのコピーツールについての記事を見かけた。詳しい内容のサイトで個人的にもいい勉強になったのだが、一部引っ掛かる点があったのでブログのネタにしてみることにした。トラック番号やセクタ番号にこの3つの値を含めると、uPD765ではそういうフォーマットができるけれど、MB8877では作れない。F5F6F7は当時の8bitパソコンのキャラクタコードで「時分秒」に相当するので、通称「時分秒プロテクト」と呼ばれた。したがって当時のコピープロテクトはMB8877では書けるけどuPD765では書けないフォーマットと、その逆の時分秒プロテクトを組み合わせるのが定番だった。これならどっちのパソコンでもコピーできない。*両者の方式は異なるが、一番のポイントは同じ。実はMB8877自体にはディスクのサイド(表裏)を切り替える機能がなく、別途簡単な回路を組んで実現されていた。FDCのコントロールの外でCPUが直接切り替えられる。Writeでデータを書いている途中で無理矢理サイドを切り替えると、データは途中までしか書かれない。ディスクドライブ側に保護回路があって裏面に続きが書かれるということはなかったようだ。F5を書きたかったらそれに近いビットパターンを持つデータを書けとFDCに指令しておいて、FDCがそのデータを書いている最中にサイドを切り替えてしまう。ビットが1の状態というのは磁性体の磁気が反転している場所だから、反転させなければいいという理屈。F5よりも余分なビットが1のデータを書かせておいて、そのビットを書いている時だけサイドを切り替えて、そのビットを書かせない。上記のようにそのサイトでは「NEWTYPE-X1」などがライトトラック時にF5F6F7に書き込みを実現する方法は途中で書き込むディスクの面を強制的に変更するやり方だと記されている。その場合どういうことになるかというと、書き込みを切り替えてしまった場合、それ以前の段階で書き込まれているデータのビットがそのまま残ることになる。これで実現できると思ってしまう人もいるだろう。フロッピーディスクの回転というのは非常に不安定なものであって、完全に同じタイミングで書き込むことはまずできない。1ビットたりともデータがずれず同じタイミングというのはある種奇跡に近いのかもしれない。途中で書き込み面を切り替えてしまったら、その部分はちゃんと読み込めない異常なデータになってしまう可能性が高いのだ。サイド切り替えでちゃんとしたデータが書き込めるというならサイド切り替えを行った場合にはデータの書き込みが行われないというのではなく、本来書き込まれるはずだった反転データが非反転データの書き込みになってしまうという説明でなければならない筈。「NEWTYPE-X1」はどうやってライトトラック時にF5F6F7を書き込むのだろうか。これについては実は当方なりの推測があったりする。いい機会だから初公表してみたい。記憶だけで書いており資料を調べ直したりはしてないのでなにかしら記憶違いがあるかもしれない。その辺は注意してほしい。「NEWTYPE-X1Ver1.0」発売後、どうやって件のコピーツールがF5F6F7を書き込んでいるのだろうと考えつつFDCの資料(CQ出版のパソコン周辺LSI規格表)を読んでいたらちょっと気になる注意書きを見つけた。「FDCがREADYになってない状態でデータ書き込みをしてはいけない」というものである。WD179X互換のFDCはチップがBUSY状態であるかどうかにか変わらずデータポートに書き込みがあった場合、そのデータをラッチしてしまうということだろう。この場合のラッチというのはデータバスに出力されているデータをチップ内に取り込むことである。当然ながら本来はBUSY中はデータを取り込まないような設計をするのが理想なのではあるが昔はこの手のハード設計のちょっとした手抜きというのは多々存在したのだ。チップ設計や量産のコストを押さえるためには些細な手抜きが重要だった時代なのである。FDCがPCから渡されたデータを書き込み中に次のデータに差し替えられた場合どうなるか。そのデータは正常には書き込めない。差し替えられたタイミングからそれ以降のビットは新しいデータになってしまうだろう。ライトトラック時にデータの途中差し替えを行ったらどうなるのだろうか。事前にF5F6F7と似たデータを用意しておき途中で本物のF5F6F7とすり替えることによりライトトラック時のF5F6F7チェックをすり抜けることが出来る筈なのである。「NEWTYPE-X1Ver3.0A」のマニュアルに記述されていた内部データ構造解説を読んだときの記憶によればF5F6F7はライトトラック用内部データにおいてはB5F5、B6F6、B7F7で表現されている。ちなみに本来のB5B6B7はB5B5のように同じものを2回で表すことになっている。上から二つ目のビットのd6だけが違うデータから本来のデータに差し替えるのだろう。FDCのデータ書き込みが最下位ビットd0からなのか再上位ビットd7からなのかはよく知らないがおそらくは最上位ビットからだろう。1ビット分最上位ビットだけ書き込まれてる間にデータを差し替えていると思われる。B5、B6、B7と3タイプにわざわざ分類してあるのはB5B7B7直後にくるデータと一度コンペアするだけで本物のB5B6B7かの判定が済むようにしているためと思われる。いう訳で「NEWTYPE-X1」の内部データ構造でもデータの差し替えを意識した構造になっているのは事実である。ちなみに件のサイトのサイド切り替えによるビット反転の抑制という説明ではこのデータ構造の説明はできない。非反転データから反転データという並び方は反転の抑制という観点からは非効率であるからだ。いうわけで当方の仮説では「MB8877などのWD179X互換FDCでのライトトラック時のF5F6F7書き込みは書き込み面切替での実現は困難。FDCの常時データラッチという特性を使って書き込みデータの途中差し替えで実現してるはず」になります。念のため言っておきますが当方は別にプロテクトの専門家でもなればハッカーでもないただの元コピー厨です。上記の推察に間違いがあっても一切責任を負いません。おかしい点があったらどんどん指摘してください。X1」の最終バージョンでもF5F6F7をライトトラック時に書き込めるタイプのディスクコピーが可能だったりしますが、こちらは「NEWTYPE-X1」の高安定性とは異なり、結構な頻度でベリファイエラーを起こします。したらこちらの方は書き込みサイド切り替えを行っていたという可能性も万に一つくらいはあるかも。ちなみに記事中で「時分秒」という表現をつかってないのはX1ではF5F6F7は違うキャラクタコードだからです。X1ではF5から順に「火月日時分秒」となっており綺麗にずれてたりします。X1はFMやNECとは違うんだというメッセージ性を感じたり感じなかったりします(笑)。|プロフィールAuthor:しめすへんどこにでもいるようなダメ人間。派遣切りで無職になったのでのたれ死ぬ前にとオタク関係のブログを開始する。gmailのアカウントはshimesuhentwitterのアカウントもshimesuhenコメント欄にてhttpを禁止しています。(11/04)最新コメント:萌えオタクの正体はマイルドヤンキーである。(02/24):萌えオタクの正体はマイルドヤンキーである。