きえてしまいました・・・・・・これは当時小学生のわたしが、スーファミ版ドラクエ3をやっている最中の悲劇でした。トイレに行こうと思っただけなんですよ。したらうっかりコントローラのケーブルに足を引っかけてしまいましてね。それで画面が真っ暗になって、ブーって音がずっとなってる状態になっちゃったんですよ。それで慌てて電源を入れ直したのですが、もう後の祭りですね。クリア後のしんりゅうまで倒したデータはみごとに消え去りました。20年たった今でも忘れられないトラウマです。この記事はこんな方にオススメ!ぼうけんのしょが消えた経験のある方。飲み会での雑談ネタがほしいファミコン・スーファミ世代の方。この記事では、ぼうけんのしょが消えてしまう仕組みを、現役エンジニアの目線で解説していきます。今となってはいい思い出...かなむかしは電池と回路でデータを保存していたそもそもむかしは、ゲームのデータをセーブするって概念がなかったんですよね。ドラクエ2の時には「ふっかつのじゅもん」というパスワードが使われていました。データがセーブできないゲームのイメージを、下に描いてみました。ファミコンはカセット(ROM)からマップやモンスターの情報を読み込みます。ROMはデータを読み出すことはできますが、書き込むことはできません。カセットから読み込んだデータは、ファミコンのRAMに一時的に記憶されます。ゆうしゃの経験値や所持アイテム、今マップのどこにいるか等の情報なんかがこれにあたります。RAMは電源が切れると情報が消えてしまうので、ふっかつのじゅもんのように紙などにゲームデータを記録する必要がありました。この方法だとゲームが複雑になるにしたがって、パスワードの長さがとんでもないことになります。「カセットの中にゲームのデータを保存できないかな?」と考えた結果、ぼうけんのしょができました。ぼうけんのしょの正体は、SRAMと呼ばれる記憶装置と、そのSRAMに電力を供給するボタン電池の二つです。当時はまだフラッシュROMが研究段階であり、ハードディスクも家庭用ゲーム機に載せるには高価であったため、このような構成となりました。SRAMは回路の一種です。この記事では詳しく説明しませんが、電気の流れ方で経験値や所持ゴールドを記録していると思ってもらえればいいです。ゲームの途中で王さまに話しかけると、経験値や所持ゴールドがSRAMにコピーされます。このコピーしたデータを、ゲームを再開するときに読み込むのがぼうけんのしょの仕組みです。当時のエンジニアは苦労してたんですね。「きえてしまいました」のではなく「けしました」ここからが本題です。ぼうけんのしょが消えてしまう主な理由は、ゲームデータの書き込み失敗です。SRAMは電気の流れでデータを保存する回路ですので、変な電流が流れるとデータがあっさり破損します。「リセットボタンを押しながら電源を切ってください。」っていわれたの覚えていますが?あれは、ファミコンのCPUが動作しているときに電源を切ると、CPUの電圧が下がったときに間違ってSRAMに書き込みをしてしまうことがあるからなんです。リセットを押している間はCPUの動作が停止するので、その間に電源を切れば安全だろうという考えです。この破損したぼうけんのしょを読み込むとどうなるのでしょうか。ドラクエは、ぼうけんのしょを読み込んだときに、そのデータが正しいかどうかを毎回チェックしています。正しくないデータを読み込んでしまうと、ゲームの進行に支障をきたすかもしれないからです。読み込んだデータが正しくなかった場合、正常にゲームを進めるためにドラクエはぼうけんのしょを削除します。ぼうけんのしょは「きえてしまった」のではなく「けしました」が正しいです。ゲームが誤動作しないための処理だったんですね。リセットすれば復活する!?「呪いの音楽が鳴っている間にリセットを押せば、ぼうけんのしょが復活する」という噂がありました。この噂は半分本当で、半分は間違っています。正確には、「データは正しく書き込めているけど、読み込むときに失敗した」ときだけ、リセットを押すと復活します。下の図を見てみましょう。ファミコンが読み込んだ情報は破損しているので、ドラクエはぼうけんのしょを消そうとします。SRAMには冒険のデータが正しくかかれています。ぼうけんのしょは呪いの音楽が鳴り終わった後に消されているので、呪いの音楽が鳴り始めたらすかさずリセットを押します。リセットを押すと、今回は正しく読み込むことができました。ぼうけんのしょの内容自体はなにも変わっていませんが、あたかも復活したようにみえます。これがぼうけんのしょが復活する理由です。今となってはいい思い出...かないかがでしょう。この話はファミコン世代の方々に刺さるかなと思って書きました。いまどきのゲームと違ってなにかと不便な環境でしたが、それでも当時のゲームの思い出は楽しかった記憶ばかりがのこっていますね。ぼうけんのしょを全て吹っ飛ばしたときは放心状態になりましたが、今回記事のネタにできたからよかったかなと思います。みなさんの雑談の小ネタにしていただければ幸いです。「苦手な先輩だな」と思われないための、プログラミングの教え方の3つのコツプロフィール石塚幸司(@Kumikomi83)働き方やプログラミング、エンジニアとしてのテクニックについて発信しています。リツアンSTCのエンジニアです。既婚で妻と二人暮らし。メーカー正社員とエンジニア派遣会社の両方を経験。プログラムで機械を動かすのが得意&大好き!組み込みソフトがメインですがそれ以外もいろいろやります。