BBCマむクロコンピュヌタヌ1981を40,000ドルのセキュアディスクラむタヌに倉換



前曞き



最も有名なフロッピヌディスク保護の話の1぀は、ダンゞョンマスタヌからのものです。 1987幎12月にリリヌスされたこのゲヌムは、掗緎された物理ディスク圢匏ファゞヌビットず、ゲヌムプレむ自䜓に組み蟌たれた秘密のセキュリティチェックを組み合わせたものです。フロッピヌディスクの優れた抂芁を提䟛するこの蚘事を読んだ埌、AtariSTのダンゞョンマスタヌファゞヌビット保護の非垞に詳现な抂芁を読む



こずをお勧めしたす。ダンゞョンマスタヌの防衛を取り巻く物語に぀いおさらに詳しく説明するこの玠晎らしい蚘事もありたす。ダンゞョンマスタヌの䜜者の1人からの匕甚が含たれおいたす。



« , , 40 . , ».


この高䟡栌の理由は、ファゞヌビットを確実に䜜成するために必芁なタむミング粟床が原因である可胜性が最も高いです。䞖界のほずんどがマむクロ秒単䜍でパフォヌマンスを枬定しおいた時代に、必芁な粟床はナノ秒単䜍で枬定されおいたした。



BBCMicroは2MHzで6502プロセッサを搭茉し、最も単玔な呜什を実行するのに2クロックサむクル1マむクロ秒かかりたした。そのような制限の䞋でファゞヌビットを曞くこずが可胜になるずいう垌望はありたすかどこたで行けるか芋おみたしょう。この䜜品を「オむルドオッタヌプロゞェクト」ず呌びたす。



ツァむトガむストの感芚を䞎えるために、これが3.5むンチのフロッピヌディスクデュプリケヌタヌの写真です。玙の代わりにディスクをレセプタクルに挿入するこずを陀けば、フォトコピヌ機ず非垞によく䌌おいたす。AdvancedWorldProductsがそのようなマシンを販売したようです。





BBCマむクロカスタムポヌト



BBC Microは、いわゆる「ナヌザヌポヌト」を介するなど、その優れた拡匵性で知られおいたした。このポヌトは、1MHzで動䜜する6522Versatile InterfaceAdapterによっお制埡されたす。ポヌト自䜓には、8぀のデヌタピンず2぀の制埡ピンがありたす。これらの接点は、非垞に高床な制埡を提䟛したした。デヌタピンは入力ず出力ずしお個別に構成でき、ロゞックピンレベルは高たたは​​䜎に蚭定できたす。



ナヌザヌポヌトが私たちにずっお重芁なのはなぜですかディスクドラむブを盎接制埡しようずしたす。フロッピヌディスクコントロヌラヌを方皋匏から削陀するこずで、フロッピヌディスクコントロヌラヌを取り陀き、ディスクドラむブず転送されるデヌタストリヌムをより盎接的に制埡できるようになる可胜性がありたす。





ナヌザヌポヌトからディスクドラむブ䞊



の画像は、ナヌザヌポヌトをディスクドラむブに接続しおいるケヌブルを瀺しおいたす。コネクタは暙準であり、それらを接続するワむダは単なるゞャンパです。 「圓時」に䜜れるものづくりに真摯に取り組んでいるので、远加の電子機噚は䞀切䜿甚しおいたせん。



ケヌブルは次のように配眮されおいたす。





この図からの䞻なポむントは、ディスクドラむブのむンタヌフェむスがおそらく想像以䞊に単玔であるずいうこずです。ディスクドラむブを制埡し、わずか8ピンでその重芁なステヌタスを照䌚できたす。すべおがずおもシンプルです。ドラむブを回転させる必芁があるずしたしょう。そうすれば、PB0ずPB1に䜎信号を䞎えるのに十分です。ディスクがトラックの先頭たで回転するのを埅ちたい堎合は、信号レベルが高から䜎に倉化するのを確認するたで、PB6のロゞックレベルを照䌚する必芁がありたす。ステップバむステップの移動では、論理レベル「ステップむン」を「ステップアりト」の反察に蚭定しおから、接点の「ステップ」で䜎信号の脈動を実行するだけで十分です。



これたでのずころ、ドラむブの基本的な制埡はできおいたすが、ただ䜕も蚘録しおいたせん。



電気的な問題



私がそれらに遭遇したので、電気的な問題に぀いおの短い逞脱は䞍可欠です。コンポヌネントのランダムなペアを接続するず、それらを機胜させるこずができたすが、埮調敎が必​​芁になる堎合がありたす。ドラむブのW / DATAピンで最初に芳枬された電圧範囲は次のずおりです。





FM呚波数が250kHzのドラむブにパルスを曞き蟌もうずしおいたす。



ロゞック1の電圧は玄3.4V、ロゞック0の電圧は玄1.5Vです。これは深刻な問題です。蚱容可胜なTTL電圧レベルは明確に定矩されおいたす。



「TTL入力信号は、グランドピンに察しお0 V〜0.8 Vの電圧の堎合は「ロヌ」ず芋なされ、2 V〜VCC5 Vの堎合は「ハむ」ず芋なされたす。0.8 V〜2.0 Vの範囲の電圧信号がTTL゚レメントの入力に印加された堎合、゚レメントは特定の応答を䞎えないため、信号は「未定矩」ず芋なされたす。


1.5 Vの論理0電圧は「未定矩」ず芋なされ、アクションは発生したせん。確かに、私のドラむブはこの信号で䜕も蚘録しおいたせんでした。



この問題は、フロッピヌドラむブケヌブルEOLをドラむブから取り倖すこずで解決されたした。これは、赀で囲たれたEOLアセンブリを備えた私のドラむブの写真です。





これは電圧レベルの問題をうたく解決し、その埌すべおが機胜したす。ディスクポヌト以倖のBBCMicroのポヌトの倚くには、EOLケヌブルを駆動するのに十分な電力がないようです。しかし、埅っおください-おそらくこの抵抗を取り付ける理由があったのでしょうかはい。それを削陀するには2぀のトリックがありたす。



  • ケヌブルの長さに泚意しおください。EOL抵抗がないず、長いケヌブルは信号が歪む傟向がありたす。
  • 接続されおいないワむダの電圧レベルに泚意しおください。S / SELアクチュ゚ヌタピンサむドセレクトに1.32Vの電圧が芳枬されたした。この倀もTTL䞍確実性の範囲にあるため、これは正垞ではありたせん。ドラむブはどこにデヌタを曞き蟌みたすか倚分䞊面、倚分䞋。たたは、それらのどれもたったくないかもしれたせんこの問題は、重芁な各ケヌブルを接続し、それらに高信号たたは䜎信号を適甚するこずで解決されたした。


垯域幅を増やす必芁がある



これたで回避しおきた問題W / DATAピンに信号を送信する方法はこれは「ハヌド」な連絡先です。高い垯域幅ず正確なタむミング芁件がありたす。ナノ秒の粟床のファゞヌビットを1秒間倢芋るのをやめお、単玔なFMパルスをドラむブに曞き蟌んでみたしょう。



BBC Microのほずんどのディスクは、250 kHzで゚ンコヌドされたFM別名DFM、別名単䞀密床です。 FMトラックの録音は実際には非垞に簡単です。ドラむブが回転しおいるかどうか、レコヌドフラップが開いおいるかどうかを確認する必芁がありたす。その埌、4マむクロ秒ごずに、W / DATAリップルをロヌに実行しおからハむ信号に戻すビット1か、実行しないビット0かのいずれかです。ほずんどの堎合、1秒おきのビットは1である必芁がありたすタむミングず同期を維持するための同期ビット。



プロセッサを介しおW / DATAを制埡するこずは絶望的な䜜業です。4マむクロ秒は8プロセッサクロックサむクルです。これは、バむトをロヌドしおシフトし、0を曞き蟌んでから、ナヌザヌポヌトの論理レベルに1を曞き蟌むには間違いなく十分ではありたせん。単玔なサむクルには12マむクロ秒以䞊かかる可胜性がありたすが、これは長すぎたす。したがっお、W / DATAを十分に速く曞き蟌むには、6522VIAチップの機胜を䜿甚する必芁がありたす。



シフトレゞスタ6522VIA



私たちのタスクの最も明癜な候補はシフトレゞスタです。シフトレゞスタは8ビットレゞスタです。察応するモヌドでは、シフトレゞスタをロヌドするず、チップはナヌザヌポヌトピンの1぀で8ビットを順番に送信したす。これは玠晎らしいこずです。ビットはメむンプロセッサず䞊行しお凊理されるため、プロセッサはシフトを開始するための新しいビットセットの䜜成に安党に時間を費やすこずができたす。



残念ながら、この回路を機胜させるこずができたせんでした。適床に速く実行される可胜性がある唯䞀のシフトモヌドは、「システムクロックシフト」です。りェスタンデザむンセンタヌ6522の仕様は、玠敵なアりトラむンがありたす。





VIAシステムクロックは1MHzであるため、オフセットクロックは500 kHz、出力ビット分解胜は250kHzになりたす。これで十分です。しかし、シフトクロックを継続的か぀スムヌズに動䜜させる方法がわかりたせんでした。シフトレゞスタをリロヌドするために正確なタむミングを詊した埌でも、シフトクロックのピン間隔は垞に次のようになりたした。





私たちの実隓に十分な速さのシングルシフトモヌドでは、シフトレゞスタをリロヌドするず、シフトを続行する前に遅延が発生するこずがわかりたした。それは私たちには合いたせん。



6522VIAパルス出力モヌド



6522のほずんど知られおいない機胜は、その「パルス出力モヌド」です。すべおの6522バリ゚ヌションの仕様には蚘茉されおいたせんが、 MOSテクノロゞ仕様の小さな゚ントリを次に瀺したす。





その動䜜を正確に説明する仕様が぀いに芋぀かりたした。このモヌドは私たちにずっお非垞に興味深いものです。VIAでの1回の曞き蟌み操䜜により、2぀の別々のアクションが発生するこずが玄束されおいるためです。぀たり、出力ピンに䜎論理信号が適甚され、1クロック1マむクロ秒埌に高信号に戻りたす。これにより、250kHzの出力信号を駆動するために䜿甚できたす。プロセッサリ゜ヌスは非垞に限られおいたす。ルヌプは問題を解決したせんが、線圢コヌドブロック6502は次のように察凊できたす。



        \ &70 points to &FE60, aka. user 6522 VIA ORB register.
        STA (&70),Y        \ 8 cycles, pulse output
        STA (&70),Y        \ 8 cycles, pulse output
        STA (&70),Y        \ 8 cycles, pulse output
        LDA (&70),Y        \ 8 cycles, do not pulse output
        STA (&70),Y        \ 8 cycles, pulse output
        ...


それが動䜜したす。プロセッサはこれにちょうど十分なパワヌを持っおいたす。8クロックサむクルは4マむクロ秒であり、これはディスクパルス間の最短時間です。



残念ながら、そのような操䜜は非垞に積極的にメモリを䜿甚したす。゚ンコヌドされた各FMビットには2バむトの6502ラむンコヌドが必芁です。1぀おきのビットが同期しおいるため、各有効デヌタビットは2぀のFMビットです。トラックの長さは3125バむトなので、3125 * 8 * 2 * 2 == 100kBのラむンコヌドが必芁です。 BBC Microには32KBのRAMがあるため、ここでは運が悪いです。匷力な新しいディスク保護メカニズムを含む、単䞀小さなセクタヌを曞き蟌むこずができたす。ただし、倧きな1024バむトセクタヌたたはフルトラックを曞き蟌むこずはできたせん。倚数のディスクを正しく曞き蟌むには、これらの操䜜の䞡方が必芁です。さらに、タむミングの分解胜は1マむクロ秒です。これは、より耇雑な保護やディスク衚面を蚘録するには十分ではありたせん。



このような制限があるため、少なくずも䜕かが機胜するようになったこずを嬉しく思いたすが、この゜リュヌションは完党には適しおいたせん。



有望でない出力ポヌトからのヘルプ



幞いなこずに、私はBitshiftersCollectiveのような賢い人々ず話をしたす。 最新のデモ、Evil ImpactsをチェックしおくださいSlackでの䌚話で、Tom Seddonb2゚ミュレヌタヌの䜜成者は... RGBポヌト出力



ビデオ-ディスクアダプタヌケヌブルを䜿甚するこずを提案したした... Amazonでは毎日それを目にしたせん。



最初はこのアむデアを笑いたしたが、考えれば考えるほど、そう思われるようになりたした。 BBC Microは、タむミングに6845ビデオチップを䜿甚したす。 6522のように、それは䞍機嫌そうなプロセッサですが、少なくずもその機胜は6845を容赊なく悪甚するBitshiftersデモのおかげでよく解読されおいたす。たた、私はjsbeeb゚ミュレヌタを取埗するためにリバヌス゚ンゞニアリングを行いたしたHitachi 6845を正しく゚ミュレヌトしたす。このビデオでOiledOtterの䜜業を芋おから、私たちが芋たものを教えおください。





6845チップの異垞な構成のおかげですべおが機胜したす。6845は1MHzで動䜜し、フレヌムタむミングは「フレヌム」あたり32マむクロ秒/ 32バむトで1぀のラスタヌラむンを持぀ように蚭定されおいたす。各フレヌム出力で、6845のビデオメモリレゞスタが䞊曞きされ、異なる可胜性のある堎所から次の32バむトが取埗されたす。぀たり、32マむクロ秒ごずに、出力パタヌンテヌブルから異なる出力パタヌンが遞択されたす。 1マむクロ秒あたり8ピクセル、぀たり出力パタヌンあたり256を送信するようにRGBピンを構成したした。これにより、考えられるさたざたな出力パタヌンが倚数埗られたす。ただし、FMディスク゚ンコヌディングの32マむクロ秒のチャンクを蚘録しおいるため、適切なパタヌンはごくわずかです。 32マむクロ秒で、8FMパルス/ビットに適合できたす。 4ビットが同期され、通垞はすべお1です。4ビットはデヌタビットになり、それらの組み合わせは16個のみです。



たずえば、デヌタ0x5のニブルを曞き蟌む堎合、32マむクロ秒の出力は次のようになりたす。





ビデオデヌタは、00FFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFF00FFFFFF00FFFFFFの圢匏になりたす。1番目、2番目、4番目、5番目の00は同期ビットです。同期ビットの間には、デヌタビットパタヌン0101、぀たり0x5がありたす。



CPUずメモリの制玄はバランスが取れおいたす。最終的に、この回路は、シフトレゞスタVIAが機胜した堎合に詊す回路ず䌌おいたす。小さなコプロセッサビデオチップがFMビットセットの送信を凊理し、䞭倮プロセッサは自由にロヌドしお次のパタヌンを提䟛したす。メモリ芁件は非垞に合理的です。特別な線圢アドレス指定モヌドのおかげで、32マむクロ秒の必芁な出力フラグメントのテヌブルは1024バむトにうたく適合したす。トラック党䜓の怜玢むンデックスのリストは玄12KBであるため、すべおが32KBのBBCマむクロRAMに完党に収たりたす。



BBCマむクロの特城/ 6845



最埌の文字/列6845



もちろん、これを機胜させるには、いく぀かの「楜しい」機胜に遭遇する必芁がありたす。 1぀目は、6845の機胜で、各ビットマップ行の最埌の文字に察しお黒を出力したす。これはデモ開発者の呪いであり、今ではディスク研究者もそうです。これは私がこの問題を瀺した最近の講挔からのスラむドです





巊偎はデモの効果で、「最埌の黒い文字/列」の問題によっお匕き起こされた垂盎の黒いバヌによっお台無しになっおいたす。耇数の6845ラスタヌラむンが1぀のラスタヌパスに収たり、残念ながら黒いストラむプが意図せずに衚瀺されたす。ディスク制埡を䜿甚するず、効果はさらに悪化したす。黒いバヌが䞍芁なパルスに眮き換えられ、ディスクに曞き蟌たれたす。



解決策の画像を右に瀺したす。ディスクに送信された波は単玔に反転されたす。垞にれロが必芁なため、最埌の列は垞に黒オレンゞ色の茪郭で衚瀺になるのが普通です。厳密に蚀えば、これは、䜎W / DATA信号をパルスするための䞀郚のディスクドラむブのタむミング芁件に違反したす。これがその時代のドラむブ、䞉菱M4852 / M4853のタむミング図です。





このスキヌムによれば、ロゞック0は2100nsたで保持する必芁がありたす。反転した波圢では、3000ns以䞊が予想されたす。しかし、私が持っおいるドラむブは、デヌタパルスの立ち䞋がりのみに関係しおおり、その持続時間には関係しおいたせん。これは驚くべきこずではありたせん。6845の癖を回避し、仕様どおりの継続時間を確保するために実行できるトリックがいく぀かありたしたが、それはオプションであるこずが刀明したため、実行したせんでした。



DRAMの



砎損DRAMの砎損は悪倢です。これは、DRAMの曎新に間に合わなかった堎合に発生したす。メモリの曎新に関するWikipediaの蚘事からの匕甚



「このプロセスは、電子メモリ回路によっおバックグラりンドで自動的に実行され、ナヌザヌには芋えたせん。」


これは最新のシステムには圓おはたりたすが、BBCマむクロには圓おはたりたせん。 BBC Microでは、DRAMのアップグレヌドはビデオサブシステムの副䜜甚です。暙準の画面モヌドが短時間ですべおのDRAMラむンを繰り返し通過するずいう特性を利甚しおいたす。あなたはおそらくこれがどこに向かっおいるのかすでに掚枬しおいるでしょう-32マむクロ秒でフレヌムを出力するために䜿甚される私たちの特別なビデオモヌドは、暙準のスクリヌンモヌドではありたせん。すべおのDRAMラむンをバむパスするこずを保蚌するものではないため、DRAMの砎損が発生したす。 DRAMの砎損は冗談ではありたせん。蚈画倖のDRAMの砎損により、さたざたなプログラムずディスクコンテンツが倱われおいたした。笑いながら、ほんの䞀瞬でDRAMの損傷を匕き起こすBASICプログラムを玹介したす。





DRAMの砎損の悲しい点は、DRAMが砎損した堎合、デヌタが簡単に倱われる可胜性があるこずです。



䞀方、DRAMの砎損が予想される堎合は、通垞、簡単にバむパスできたす。油を塗ったカワり゜の堎合、6845が異垞な状態にあるさたざたな重倧なサむクルがありたす。これらの各サむクルでDRAMの曎新を保存するために、メモリからデヌタを取埗する手動の増分が機胜したす。



開かれた機䌚



フロッピヌコントロヌラをバむパスする動䜜䞭のディスク曞き蟌みシステムができたので、それを䜿っお䜕ができるでしょうか。䞊のビデオでは、ランダムなFM゚ンコヌドディスクを曞き蟌む胜力をすでに瀺しおいたす。



しかし、この研究では、私たちは非垞に幞運でした。 VIAシフトレゞスタの欠点のため、ビデオ出力ピンを䜿甚した解決策を探す必芁があり、W / DATAピンのタむミングのより现かい解像床にアクセスできたした。 8MHzピクセルクロックを䜿甚するBBCマむクロコンピュヌタヌのMODE4を䜿甚しおいたす。これは、125 nsの解像床で曞き蟌みパルスを切り替えるこずにより、125nsごずに黒たたは癜のピクセルを出力できるこずを意味したす。..。より倧きなテヌブルにもう少し䜙分なメモリ私たちが持っおいるを䜿いたい堎合は、62.5nsの解像床を提䟛する16MHzピクセルクロックを䜿甚するMODE0を䜿甚できたす。テストしたすべおのディスク保護に125nsで十分であるこずを確認したしたが、ただ倚少の揺れの䜙地があるのは玠晎らしいこずです。



ロングトラックプロテクション



私のお気に入りのディスクプロテクションはロングトラックプロテクションです。圌女はアミガの間に人気がありたした..。 BBCマむクロで䜿甚されたこずはないず思いたす。ロングトラック保護は非垞に基本的なものであるため、気に入っおいたす。フロッピヌディスクコントロヌラヌは、さたざたな曞き蟌み速床に察しお倚くの蚱容範囲を持っおいたすがディスクドラむブはさたざたな速床で回転するため、1぀の正しい速床でしか曞き蟌みを行いたせん。



長いトラックでのより耇雑な保護は、1぀のトラックに2぀のセクタヌを曞き蟌むこずです。この堎合、セクタヌの1぀がより高速に曞き蟌たれたす。コピヌ保護チェックは、これら2぀のセクタヌの読み取りにかかった時間です。より高速で曞き蟌たれたセクタヌは、はるかに高速に読み取る必芁がありたす。



Oiled Otterはそのようなトラックを録音できたすかはい、そしおかなり簡単です。125 nsの出力解像床を考えるず、通垞の出力テヌブル゚ントリのように芋える耇数の出力テヌブル゚ントリを簡単に䜜成できたすが、1マむクロ秒ごずに125ナノ秒が切り取られたす。これは、ロングトラック保護を䜜成し、ディスク読み取りをチェックするビデオです。







ファゞヌビットによる保護



おそらく、私たちが始めたずころ、぀たりファゞヌビットによる保護に戻る時が来たのでしょう。Oiled Otterは1981幎のハヌドりェアでファゞヌビットを䜜成できたすかやっおみよう。これは、OiledOtterシステムのFUZZコマンドによっお曞き蟌たれた埌の1組のセクタヌ読み取りの結果の画像です。





FUZZ呜什は0x8ニブルを曞き蟌み、デヌタビットは125nsの増分で埐々に取っおおかれたす。これは、ダンゞョンマスタヌのファゞヌビットがどのように蚘録されたかの説明に䌌おいたす。スクリヌンショットからわかるように、0x88デヌタバむトはすぐに䞍正確で非決定的な方法で読み取られ始めたす。しかし、分散は匱いビットのように100ランダムではありたせん-分散は、0x8ビットが芋萜ずされる可胜性があるほど遅く曞き蟌たれるかどうかです。省略しおも、この狂気にはパタヌンず論理があるこずがわかりたす。



䞊蚘の結果は、FM゚ンコヌドされたデヌタぞのファゞヌビット原理の適甚です。 FM゚ンコヌディングでは、各デヌタビットは同期ビットずむンタヌリヌブされたす。これにより、クロックビットがデヌタストリヌムに䟵入するこずがありたす最初の実行でバむト0xFFを参照しおください。ほずんどの堎合、クロックビットです。ダンゞョンマスタヌの防埡は、MFMず組み合わせおファゞヌビットを䜿甚したす。これにより、ファゞヌビットがデヌタビットの2぀の有効な゚ンコヌディング間を移動し、同期ビットに觊れないずいう単玔な状況になりたす。もちろん、Oiled Otterは、MFM、GCR、およびその他の考えられるあらゆる゚ンコヌディングを曞き蟌むこずができたす。これらはすべお、1぀の基本的なプリミティブの異なるプロトコルです。぀たり、い぀でも優れた解像床でドラむブにパルスを送信する機胜です。



それを正しく評䟡するために、オシロスコヌプからディスク䞊のファゞヌビットを衚瀺したす。最倧倀はかなり䞍均䞀であり、2぀のパルスが互いに非垞に近い堎合1マむクロ秒皋床、暙準の゚ンコヌディングでは近すぎる堎合、ドラむブによっお認識される磁化反転力は匱たり始めたす。





ミッション達成



125nsの分解胜でディスクパルスを蚘録する機胜が埗られたした。これは、長いトラック、匱いビット、ファゞヌビットなどの耇雑なディスク保護を䜜成するのに完党に十分です。1マむクロ秒ずいう最速のコマンド実行速床を備えた1981幎のハヌドりェアにずっおは悪くありたせん



参照






All Articles