初代ポケモンとアセンブリ、スタティックRAMの時代

注意

以下の記事は、ゲームにおける裏技、いわゆるチートを推奨するものではありません。
ゲームは正しい方法で遊びましょう。

本編

UnsplashNikが撮影した写真

ゲーム開発者へのリスペクトを保つ意味でも、詳しくは触れませんが、
初代ポケモンにおいて「セレクトバグ」「ミュウ釣り」「けつばん」が、
最も有名な実機上でのバグ技でした。

現在のコンプライアンスからは、あまり想像出来ない話かも知れませんが、
20年程前のゲームの攻略情報が交わされるコミュニティでは、
正確性・成功率の保証なしで、裏技(バグ技)の話題で盛り上がっていました。
(仮に、悪意のある投稿でも、それを見抜く方法がないというリスクもありました。)

2024年3月現在、ポケモンシリーズは第7世代となりましたが、
YouTubeにおいて、初代ポケモンの3つのバグ技について、
内部のプログラムを用いて解析している有志の方もいます。

また、彼らの研究欲はそれだけに留まらず、
カセットのRAMという領域を自在に書き換えるという極地に行き付きました。※1
これは入力したテキスト→機械語→アセンブリ言語の命令文に変換するものですが、
全て実機の一時記憶領域のみで行っています。(行っているはずです)

これは、コンプライアンス的に、正直褒められた行為ではないと思いますが、
素人の私がとやかく邪推するのも野暮でしょう。

正直、中途半端な理解のままで記事を書くのも嫌だと思うので、
以下はゲームのメモリと、命令を除くデータについて触れようと思います。
なお、以下の文章は、特に但し書きがない場合、第一世代の事を語っています。

ロムカセットの中身は、大きく分けて、ROMとRAM

ロムカセット(ゲームボーイシリーズ、ファミコンシリーズのカセット)は
電化製品と同じ基盤が格納されていますが、
主となる部分はROMとスタティックRAMです。

ROMはゲームのプログラムデータです。
RAMは、現在では用途が非常に多様で、
一つに絞る事は出来ませんが、電源を切ると消えてしまう(揮発性)、
短期記憶のメモリとして用いられる事が専らです。
ゲームのセーブデータが記憶されるのはRAMの方です。

スタティックRAMとフラッシュメモリ

「スタティック」はRAMの揮発性を補った「ダイナミックRAM」と
対比的に用いられましたが、フラッシュメモリが主流になった現在では、
ゲームのセーブデータとしては用いられなくなりました。

ファミコンシリーズ、ゲームボーイシリーズでは、
フラッシュメモリが主流になる以前は、スタティックRAMが用いられましたが、
セーブデータを維持する為に、電池が使われていました。

プレイステーション1のメモリーカード(1994年~発売)は、
フラッシュメモリが早くも使用されていましたが、その容量は128KBであり、
現在、同じ価格で買えるSDカードより、8桁も少ないのです。

ポケモンシリーズでは、第2世代までスタティックRAMが使われており※2、
私が遊んだ限りでは、内臓電池が切れた以外で、
セーブデータが消えた経験はありませんでした。

C系言語やJavaScriptとの違い

初代ポケモンでは、ゲームデータやセーブデータは
16ビット(4つの16進数)のメモリアドレスに格納されています。

これは、C#において変数の型を宣言したり、JavaScriptにおいて、
定数や変数を宣言するのと似ていますが、
こちらは1つのメモリアドレスあたり1バイト(8ビット)の制限が与えられています。※3

ゲームボーイのカセットでは、定数(書き換えて欲しくない部分)は、
ROMに格納され、それがカセットまたは本体のRAMへと複製され、
必要に応じて変数として使用されます。
セーブデータや進行状態や設定などはRAMに記憶され、
ゲームそのもののデータに干渉しないように棲み分けられています。

「セレクトバグ」が発生する原因(簡単に)と危険性

しかし、予期せぬ命令により、メモリアドレスのデータが入れ替わる事があります。
それが、最も有名と言っても良い「セレクトバグ」です。

予期せぬ命令によりデータが入れ替わると、ゲームが進行不能になったり、
セーブデータが破損したりする恐れがありますが、
子供達が仕組みも分からずに、それを実行していたのは、
後々どういう影響が出るか分からないという意味では、
決して真似をさせるべきではなかったと思います。

しかし、ゲーム自体が、疑似的にギャンブル的な感覚を味わえる以上、
そうしたスリルや未知の事柄を示すのは、当時の私達に取って、
その延長線上にあったのだと思います。

出典

※1
https://w.atwiki.jp/pokemonbug/pages/26.html

※2
https://wiki.xn--rckteqa2e.com/wiki/%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88

※3
https://atonechance.com/pokemon-select-bug/

タイトルとURLをコピーしました