これらの用語はどちらも、アセンブリ言語でプログラムされたアーケードゲームのバグには適切ではなく、メモリ保護ハードウェアまたはオペレーティングシステムの利点なしで実行されます。
「未定義の動作」は、1989年にC標準委員会によって作成された、Cおよび関連言語の専門用語です。言語仕様が何をするかを定義しない場合、コードの動作は未定義です。Z80アセンブリ言語にはそのようなことはありません。すべての可能な入力でのすべてのオペコードの効果は明確に定義されています。「未定義の動作」の従来の英語の意味は適用するために読むことができます-キル画面はゲームを書いた人によって定義されていない動作です-しかし、私はこの文脈ではそれを使用しません印象。
「セグメンテーションフォールト」はPOSIXの専門用語であり、最終的にPDPシステムプログラミングの専門用語から派生しています。プログラムが何かに「マッピング」されていないメモリアドレスにアクセスしようとすると、セグメンテーションフォールトが発生します。ハードウェアとオペレーティングシステムがこれを検出し、プログラムが回復できるよう慎重に定義された方法で誤動作しているプログラムをシャットダウンします。のようなものこれは、Pac-Manゲームボードのバグの結果として発生した可能性があります。これは、Pac-Manの回路基板が、ROM、RAM、および周辺機器を含むZ80の64kBアドレス空間の半分よりも少しだけ少ないためですソフトウェアがマップされていないメモリにアクセスしようとした場合、実際のハードウェアが何をするかを知ることができました。それはどうしたらどのような(それも程度のパックマンのための「オペレーティングシステム」ので、しかし、「セグメンテーション違反」として記述することが不適切であると考えている 1)がありませんもう一度、Unixのの実装と、それは、間違った印象を与えるでしょう。
一方、レベル256のバグは、マップされていないメモリにアクセスしないため、意味がありません。
ゲームにはレベル256に進むと現れるバグがあると言うのは正確です。バグの根本的な原因は整数オーバーフローであり、その結果はメモリ破損(または同等に違反)であると言うことも正確ですメモリと型の安全性)。これらはすべて、特定の言語やOS環境を参照せずに定義された汎用CS用語です。
また、バグの影響が、セグメンテーションフォールトを引き起こさないメモリ破損バグの現代環境内の影響に類似していることを観察することも正確です。Project Zeroのエクスプロイトの記事を読むと、ドンホッジスのパックマンキル画面の分析と驚くほど類似していることがわかります。
パックマンROMを供給したときにキル画面を忠実に再現しないエミュレーターは、ゲームハードウェアを正しくエミュレートしていないことに注意してください。