日本語版
最新ニュース
世界

ハッカーはNESテトリスをゲーム内から再プログラムする方法を発見

拡大する / テトリバースを制御するコードが見えてきました!オーリッヒ・ローソン 今年の初めに、私たちは古典的な NES がどのようにして作られたのかについての話を共有しました。 テトリス プレイヤーは初めてゲームの「キル スクリーン」に到達し、40 分間、1,511 行にわたる驚異的なパフォーマンスの後にクラッシュをアクティブにしました。 現在、一部のプレイヤーはそのキル スクリーンとそれによって可能になる複雑なメモリ操作を使用して、新しい動作をバージョンにコード化しています。 テトリス 変更されていないハードウェアとカートリッジ上で実行されます。 私たちは、次のようなゲームにおける同様の「任意のコード実行」の不具合を取り上げてきました。 スーパーマリオワールド、 ペーパーマリオ、 そして ゼルダの伝説 時のオカリナ 過去に。 NESに外部コードを導入する基本的な方法 テトリス この問題は、プレイヤーがゲームの逆コンパイルされたコードを調査していた少なくとも 2021 年以来、公に理論化されてきました (HydrantDude 氏は詳しく調べています) テトリス 過去にクラッシュしたこともあり、コミュニティには以前から、システムを完全に制御する方法について非公開で知られていた方法があるとも述べています。 テトリス' ラム)。 Displaced Gamers が NES を再プログラムする方法を説明します…

ハッカーはNESテトリスをゲーム内から再プログラムする方法を発見

1715087603
2024-05-06 22:16:32

拡大する / テトリバースを制御するコードが見えてきました!

オーリッヒ・ローソン

今年の初めに、私たちは古典的な NES がどのようにして作られたのかについての話を共有しました。 テトリス プレイヤーは初めてゲームの「キル スクリーン」に到達し、40 分間、1,511 行にわたる驚異的なパフォーマンスの後にクラッシュをアクティブにしました。 現在、一部のプレイヤーはそのキル スクリーンとそれによって可能になる複雑なメモリ操作を使用して、新しい動作をバージョンにコード化しています。 テトリス 変更されていないハードウェアとカートリッジ上で実行されます。 私たちは、次のようなゲームにおける同様の「任意のコード実行」の不具合を取り上げてきました。 スーパーマリオワールドペーパーマリオ、 そして ゼルダの伝説 時のオカリナ 過去に。 NESに外部コードを導入する基本的な方法 テトリス この問題は、プレイヤーがゲームの逆コンパイルされたコードを調査していた少なくとも 2021 年以来、公に理論化されてきました (HydrantDude 氏は詳しく調べています) テトリス 過去にクラッシュしたこともあり、コミュニティには以前から、システムを完全に制御する方法について非公開で知られていた方法があるとも述べています。 テトリス‘ ラム)。

Displaced Gamers が NES を再プログラムする方法を説明します テトリス ゲーム内で。

しかし、Displaced Gamers の最近のビデオでは、このアイデアが個人的な理論から公開実行にまで発展し、NES の入手方法について綿密に詳細が説明されています。 テトリス ゲームのハイスコアテーブルをマシンコード命令として読み取り始めます。

コントローラーポートで楽しい

NESのコピーを引き継ぐ テトリス これは主に、ゲームがクラッシュする特定の方法によって発生する可能性があります。 あまり詳しくは説明しませんが、NES のクラッシュ テトリス これは、ゲームのスコア ハンドラーがフレーム間の新しいスコアを計算するのに時間がかかりすぎる場合に発生します。レベル 155 以降に発生する可能性があります。この遅延が発生すると、制御コードの一部が新しいフレーム書き込みルーチンによって中断され、次のフレームにジャンプします。次の命令を探すためにゲームの RAM の意図しない部分が使用されます。

通常、この予期しない割り込みにより、コードは RAM の先頭にアドレス指定するようにジャンプし、そこでガベージ データがコードとして読み取られ、多くの場合、急速なクラッシュにつながります。 しかし、あまり知られていない気まぐれな方法のおかげで、プレイヤーはこのジャンプを操作できます。 テトリス 日本語版のコンソール、ファミコンで実行する場合の潜在的な入力を処理します。

このハックを機能させる鍵となるのはファミコン拡張ポートです。
拡大する / このハックを機能させる鍵となるのはファミコン拡張ポートです。

アメリカの Nintendo Entertainment System とは異なり、日本のファミコンには 2 つのコントローラーがユニットに配線されていました。 サードパーティ製コントローラーを使用したいプレイヤーは、システム前面の拡張ポートを介してコントローラーを接続できます。 の テトリス ゲーム コードは、この「追加の」コントローラ ポートから入力を読み取ります。アダプタを使用すると、これに 2 つの追加の標準 NES コントローラを含めることができます (これは、ファミコンが完全に異なるバージョンの NES を取得した場合でも当てはまります)。 テトリス Bullet-Proof ソフトウェアから)。

たまたま、RAM の領域は、 テトリス この追加のコントローラー入力を処理するために使用される関数は、前に説明したジャンプ ルーチンのメモリ位置にも使用されます。 したがって、そのジャンプ ルーチンがクラッシュによって中断された場合、その RAM には、それらのコントローラーで押されているボタンを表すデータが保持されます。 これにより、プレイヤーはクラッシュが発生した後にゲーム コードがどこに移動するかを正確に制御できる可能性があります。

ハイスコアテーブルでのコーディング

Displaced Gamers のジャンプ コントロール方法では、プレーヤーは 3 番目のコントローラーで「上」を押し、4 番目のコントローラーで右、左、下を押し続ける必要があります (後者の組み合わせでは、左右の方向を同時に入力できるようにコントローラーを操作する必要があります) )。 これにより、ゲームのハイスコアリストの名前とスコアを保持する RAM の領域にジャンプ コードが送信され、プレーヤーが直接操作できる RAM の面積がさらに大きくなります。

Bタイプのハイスコア表の対象部分に「(G」を入れることで、強制的にゲームをジャンプさせることができます。 別の ハイスコアテーブルの領域で、Displaced Gamers が「ベアメタル」コードと呼ぶものとして名前とスコアを順番に読み取り始めます。文字と数字は NES CPU のオペコードを表します。

この非常に具体的な名前とスコアの組み合わせは、実際には Displaced Gamers の概念実証でコードとして読み取られます。
拡大する / この非常に具体的な名前とスコアの組み合わせは、実際には Displaced Gamers の概念実証でコードとして読み取られます。

残念ながら、名前入力エリアで使用できる記号は 43 個しかなく、ハイスコアの一部となる数字は 10 個しかありません。 これは、NES で利用可能なオペコード命令のごく一部だけが、利用可能な攻撃対象領域を使用してハイ スコア テーブルに「コーディング」できることを意味します。

これらの制限にもかかわらず、Displaced Gamers は、ハイスコア テーブル データに変換できる短い概念実証コード スニペットをコーディングすることができました。 (A name of '))"-P)'、および A タイプ ゲームでの 2 位のスコア 8,575 が顕著な要因となっています)。 この単純なルーチンにより、ゲームのスコアの上の桁に 2 つのゼロが追加され、クラッシュを引き起こすスコアの処理時間が短縮されます (ただし、プレイを続けるとスコアは最終的に再びクラッシュの「危険ゾーン」に達します)。

もちろん、バッテリーバックアップの保存システムがないため、ハッカーは電源を入れるたびに手動でこれらのハイスコアを達成する必要があります(そしてこれらの複雑な名前を入力する必要があります)。 テトリス ストックNESで。 また、ハイスコアテーブルのスペースが限られているため、その上に複雑なプログラムを直接コーディングする余地はあまりありません。 テトリス‘ 実際のコード。 しかし、この制限を回避する方法はあります。 HydrantDude は、特定のハイスコアの名前と数字のセットを書き、「[s] すべての RAM に対する完全な制御を許可する別のブートストラップを構築する別のブートストラップ。」

そのような完全な制御があれば、トップレベルのプレーヤーは理論的には NES を再コードできるでしょう テトリス クラッシュバグを完全に修正します。 これは、ゲームが実際にレベル 0 の平穏な状態に戻るレベル 255 を突破するのに苦労しているプレイヤーにとって、非常に役立つ可能性があります。 スーパーマリオワールド スピードランナーとトランスフォーム テトリス の中へ フラッピーバード

#ハッカーはNESテトリスをゲーム内から再プログラムする方法を発見

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。