デコカセとドングル

非常に高度な技術をお持ちのMAME Devであるチャールズ・マクドナルドさんのページにデコカセのドングル動作についての解説が出ています。

DataEastカセットシステムは、各ゲーム固有のセキュリティドングルを使用しています。これにより、テープの音データを生カセットに単純にコピーすることで複製できないようにしています。基本的なドングルのデザインには何種類かあり、それぞれが各ゲーム固有のデータを持っています。

テープからロードしたBIOSとソフトは6502CPUが処理します。6502は、シリアルインタフェース上でテープドライブを制御している8041MCUからのコマンドとデータバイトを交換することができます。ドングルは6502と8041の間に入り、データ通信時にデータ変更、置換、未変換などの処理を行います。ロードされたプログラムはまた、8041やテープの内容とは関係がない追加データをドングルに対して求めることもできます。

今回、6502と8041のインタフェースを模倣する回路を作り、ドングルの動作をあらゆる角度から調べることにしました。一部のドングルにはリセットジェネレータがあって、初期ステートを初期化するものがあるため、ドングルリーダには、必要に応じて強制的にリセット状態を作るソフト制御電源を搭載しました。

これまでに、通称タイプ3ドングルでテストが成功しています。このドングルには、通常の動作モードの他、4Kx8のPROMをシーケンシャルに読み出しできる"PROMモード"が搭載されています。データとコマンドのレジスタに書き込まれた値、またコマンドレジスタから読み込まれた値は、リセット後も変化しません。データレジスタから読み込んだ値はビット6と7が交換され、ビット0は以前に読み込んだバイトからラッチした値になります。

8041は通常、00-7Fの範囲のコマンドを使い、高位の値は無視します。これにより、テープドライブに対して動作を引き起こさず、80-FFをコマンドとしてドングルに送ることが可能になります。タイプ3ドングルについては、Cx(ビット3-0は関係ない)を書き込むと、PROMモードが有効になります。現在の設定では、コマンドレジスタへの値の書き込みを行うと、12ビットカウンタのうち、12-8ビットをロードします。また、ビット3-0はゼロにリセットします。コマンドレジスタの読み込みを行うと、PROMの現在のアドレスにあるバイトを返し、カウンタを1増やします。カウンタはFFFまでいくとゼロに戻ります。このように、ロードしたプログラムはPROM全体の内容を読み出すことができます。

ここで奇妙なのが、8041インタフェースはこのモードでは無効にされているようで、データレジスタ、またはコマンドレジスタへの書き込みは、データバスをトライステート化し、8041によるオープンバス値のラッチ動作を発生させます。同様に、データレジスタの読み込みも処理も、オープンバス値を返します。BIO-8基板や、タイプ3ドングルには既知ステートへデータラインを引き出すレジスタが無いので、実際に存在する値は不規則になります。

もしかすると、Cxコマンドを受けたあと、以降の6502とのコミュニケーションについては、8041が全て無視するようになっているのかもしれません。パワーが1サイクルすると、システムとドングルはリセットされて通常の動作が継続し、テープドライブが再びアクセス可能になります。その他のタイプのドングルについてもテスト予定で、動作がわかり次第報告していきます。

Charles MacDonald's Home Page

前の記事
次の記事