エミュレータ作っててターゲットのソフトを解析すると,範囲外アクセスや未定義動作に依存してて明らかにバグってるけどなんか奇跡的に動いてるとか,仕様を勘違いしてるけど別の勘違いと重なってなぜか動いてるとか見たりする事あって,きっとこう言うの一杯あるんだろうなおっかねぇと思ったりする https://t.co/skUpN4SZaR
— R. Shioya (@r_shioya) August 29, 2025
OSというか下層のライブラリを置き換えるのでも、(ABI的に許されている)破壊していいレジスタの値が変わっただけで動かなくなったりして、世の中にヤバいものが沢山あることに気づかされます…
— とみながたけひろ (@takehiro_t) August 29, 2025
本来見ちゃいけないレジスタやメモリ上のゴミを見ているものの,そのゴミの値は環境が一定なら決定的なのでなんだか安定して動いてるみたいのありますね.
— R. Shioya (@r_shioya) August 30, 2025
未定義領域を読むとバスのラッチに残ってるゴミが返されるので,これを正確に再現しないと動かないみたいのもであったことがあります.
ありますね…ROMに書き込みをするとバスに返事が来るのをタイムアウトまで待つけどバスエラーは無視されるので何となくタイミングがあって動く、みたいなのも経験したことがあります
— とみながたけひろ (@takehiro_t) August 30, 2025
>範囲外アクセスや未定義動作に依存
— anineko (@ANINEKObySYSTER) August 30, 2025
仕様書にはちゃんと詳細が書いてあるのよ?
同一仕様の単一機種を大量生産した結果よね。
— kurema (@kurema_makoto) August 30, 2025
そこにあるブツが仕様だもんね。抽象化もないし。
単為生殖で増える種は1つの病気で全滅しかねないのと似てる。
それでも同一商品の改良でチップ統合だのあれこれやってるから壊れそうだけれども、それはそれで製造側が同じようなことを考えたんだろう。
マジでこれ。とくにPlayStationは魔術だらけ。
— beepcap (@beepcap) August 29, 2025
任天堂がカセットにこだわった理由が少しわかる。 https://t.co/swChUB41ju
カセットはハードウェアで解決できるから魔術がすこし少ないのよね。
— beepcap (@beepcap) August 29, 2025
それはそれでカセットの中身の解析は大変だけどさ。
むかしのレンダリングの方式とか今調べると面白いよね
— きうきう (@kiukiu1919) August 30, 2025
かと言って、SFCのソフトは特殊チップだらけですからねえ。
— 断酒中@ (@kiyuzu) August 29, 2025
やはりゲームボーイあたりが、1番お手頃に学生とかでも手を出しやすいと思う。
クラッシュバンディクーシリーズのノーティードッグの頭がすごいエンジニアの人が、プレステのメモリーにロードされた基礎システムのうち、ゲームを動かすのに必要ない部分をゲームのデータに書き換えてデータ量を稼いでいたという話をYouTubeで観て仰天した覚えがありますね。 https://t.co/f7Z4F5TGmj
— Turbo鮪家🍣ゆたすけ寿司 (@Yutaske) August 30, 2025
プログラムの無駄に見える空白行とかを削除して可読性を改善しただけなのに、同じように動かなくなっておっかなびっくり元に戻した新人プログラマ時代の記憶… https://t.co/0grWmIShc1
— Hikaru (@hikaru_vcafe) August 30, 2025
あー、最初に作ったPS1のソフトで基本設計間違えてたのに発売後気がついたっけ 無事動いていたけど、CPUとGPUの処理速度差が少しでも違っていたら動かない仕様になっていた。エミュで動かねえって誰か言ってたな https://t.co/f4mDOBSaNu
— 卯辰 のへろに (@noheroni) August 30, 2025
ゲーム作ってた同僚の先生に話を聞くと、メーカーも(少なくとも公式には)把握していない、命令デコーダの未定義領域に(偶然)転がってた命令を見つけて開発に活かしたり、グラフィックメモリが足りずにオーディオチップ内の空きメモリに無理やり突っ込んだりと、なかなか凄いことをやってたそうで… https://t.co/c1klh8cqaH
— Naohiko Yamaguchi (@nycity1022) August 30, 2025
いやー
— 中川聡也@Indie Game Creatorを支援したい(FTD&浅草ゲームズ代表) (@xiombatsg) August 29, 2025
未定義動作ではなくて、マニュアルに書いてないだけなんですよ
昔のハードは隠してある命令セットとかレジスタとか
なんでかね出てくるんですよ
ドリキャスとかも https://t.co/afJNA7k2Cl
×稀にそういう奇跡で動いてるゲームがある
— けい (@keigame5) August 30, 2025
○全ての市場のソフトウェアはそういった偶然を孕みながらきちんと動いている
ちゃんと動いてるのはテストを経てるから
続編や機能拡張で手を加えようとすると高確率で実装ミスが見つかるもの
そしてそれを単に直すと必ず新たな不具合が火を噴く
必ずだ https://t.co/lRODAxwcU3
エミュじゃないけど、指定した年月の日数を返す方法を調べた時、間違ったコードを提示してるけどたまたま例として入力した引数で期待値が出ていたことがあったな
— たかみん/りんと🐏 (@r_takamine) August 30, 2025
当時はそのブログが検索トップに出る状態で、あれ見てバグ錬成しちゃった人もいるんじゃないかと思うなどした https://t.co/WmM9rZfe2V
特に表示関係で多そう。
— まっきー (@makin55) August 30, 2025
昔のCPUで1オブジェクトごとに表示範囲のクリッピングを行うと処理性能が追いつかないことが多かった。
仕様書には書いてないけど画像表示LSI側でクリッピング動作してくれるなら、表示範囲外の画面操作するコードをわざと書いてたわ https://t.co/eaqGdQgkVI
>範囲外アクセスや未定義動作に依存してて
— Cryo (@Preserved_Mum) August 30, 2025
>明らかにバグってるけどなんか奇跡的に動いてる
なにそれコワイ https://t.co/R53Md6qOn6
「2回間違えて動く」って、たまによくある過ぎる https://t.co/djXqhCstnc
— CycloneT (@cyclone_tr) August 30, 2025