トップ > 日記らしきもの
------------
日記らしきもの(超不定期更新)

ゲーム解析関係や、トップに書くほどでもない近況などを書いていく予定…
飽きたりして年単位で更新しなくなる可能性もあります。

・解析関連に関しては細かく説明することもありますが、
 大抵は「〇〇を解析した」ということやその感想程度の内容になると思います。
 前提となる情報を詳しく書いておらず、意味不明に見える場合もあると思います。
 また解析したものについて、必ずしも結果の公開やツール作成等をする訳ではありません。
・内容の正確性は保証しません。詳しく調査せずに勘違いしている可能性もあります。
・文中の用語・名称などは「私が勝手にそう呼んでいる」だけで正式な呼び方ではない場合があります。
・日付は「記載日」です。ページの更新日や実施日と一致しない場合があります。
 (基本リアルタイムではありません、ある程度溜まるか、他ページの更新と
  同時になることが多いかと思います)


[過去ログ]
 2024年
 2023年
 〜2022年

[解析情報リンク]
 電車でGO! FINAL PS2版 ダイヤ・車両関連情報(判明している分だけ)



------------
2025/11/27
  ライゼリートのBGM情報についてのメモが出てきたので忘れないうちにここに書いておきます。
  変換せずに聴けるようにいつかps2_adpcmconvに対応できれば良いですが…

  [*.pcm] 16bit 24000Hz ステレオのpcm形式
  $00 ファイルサイズ-$800、PCM部分の実データサイズ?
  $04 サンプル数?(↑の値÷4になる)
  $08 ループ開始位置(サンプル単位、ループしない場合は0)
  $0c ループ終了位置

  $400〜 何かデータが入っているが不明
  $800〜 PCMデータ本体

  なお、ループ終了位置以降にはフェードアウトするデータが入っている


  [*.gfs] ギターのミニゲーム用のデータ(同じ番号の*.pcmファイルがBGM)

  $0000〜 譜面情報(下記参照)
  $1000〜 音色の格納情報(4byte単位でデータの開始位置($1800が基準(=0))がデータ数分並ぶ)
  $17F0  音色の数
  $17F4  不明(23 00 00 00)
  $17F8  不明(05 00 00 00)
  $17FC  音色部分のサイズ(=ファイルサイズ-$1800)
  $1800〜 音色データ本体(ADPCM形式) 7000〜7003は22050Hz、7004〜7005は18000Hz位?

  譜面情報
  0x08単位
  +$00 時間位置(1/30sec単位)
  +$04 種類指定($01=赤,$02=緑,$04=青 / $10=小節線(太),$20=小節線(細))
     同時押しの場合は足した値
     Ex / Ex plus譜面の場合の譜面はどういう法則で作られるのかは不明
  +$06 音色番号(小節線の場合は0xFFFF)


------------
2025/10/26
  セレクト100関係の続きです。
  今回はプログラム側の解析を行いました。
  DuckStationはCPUデバッグ機能でブレークポイントという機能があり、
  特定のアドレスへのアクセス時に一時停止が出来て
  プログラムのどの部分でアクセスしているのかが分かるので非常に助かりました。

  ※前回の記事同様、アドレスは通常版の場合です。(SuperLite1500版は未調査)

  まず、前回の方法で複数データ使用の作品で1番目のデータしか聴けない点に対応するため、
  データ開始位置の参照位置をずらしてタイトル画面で2番目のデータを読むようにしてみます。
  ※メモリカード2枚使用作品はセレクト100上では一続きにプレイできますが、
   内部的にはセーブデータが2つ分そのまま入っていて、
   ゲーム側(セレクト100側)で「1番目の1〜3面、2番目の1〜3面の全6面」の様な情報を基にして
   途中でデータを切り替えています。(EASY EDITモードはこの機能の応用?)

  各ゲームのデータおよびコメント画像はSTRDATAというファイルにまとめられています。
  プログラムファイル内(MAIN.EXE)内に各作品毎の情報があり(メモリアドレス上では$8009dc7c〜)
  STRDATA内のデータ位置を指定する形でどのデータを読み込むかが設定されていて
  2byteずつで1番目のゲームデータの位置、2番目、3番目と続いています。
  (2024/09/05の記事参照、未使用部分はデータ位置は0000になっている、
   領域的には3つ分あるが収録作品は最大でも2つまで)
  1番目の作品である影狼のデータ開始位置の情報は先頭から$3cした$8009dc88ですが、
  最上位の$800...の部分は無視して良いみたいなので、$9dc88の読み込みで一時停止するように設定してみると
  リスト上でのゲーム選択後とゲーム開始時のどちらにおいても
  80034DE0のlhu a0,0x3c(v1)(値:9464003C)の部分で開始アドレスが読み込まれていました。
  ([v1レジスタの値+$3c]のアドレスの値(2byte)をa0レジスタへ読み込むという内容の処理です)
  これの3cの部分を3eにして(9464003E)読み込み位置を+2すると参照先が1つ分後ろにずれるので
  本来1番目のデータを読む所で2番目のデータを読み込むことになります。

  エミュレーターのチート機能でパッドコードと組み合わせるなどしてON/OFFを切り替えるように
  する必要がありますが、一応この方法で2つ目のデータの曲を聴くことが可能です。
  なお上記変更をした状態では、本来2つ目のデータを読み込む場面や、元々1つのデータしか使わない作品では
  使用しない次の番号を読み込んでしまうことになりますが、未使用部分のデータ開始位置0というのは
  影狼のデータ位置と同じなので、影狼のデータが読み込まれるだけでフリーズなどは起こらない(はず)です。

  ※これを書いた後にプログラムを解析するよりもパッドコードと組み合わせて
   読み込み位置の情報を直接書き換えた方が早かったんじゃないかと気付きました…

  で、そもそもDATA SAVEで全曲出力できるようにすればいいのでは?と思い、
  前回書いたBGM設定が入るアドレス$187230、$18CC18への読み込みアクセスを調べた所、
  DATA SAVEのメモリーカードチェック前(アドレス80034CC4)とセーブ中(80035E48/80035E60)が該当しました。
  このうち、前者に当たる80034CC4は00〜0Fの値をBGM設定の各項目と比較するような内容だったので
  値が一致しているかを比較する箇所、
   80034CCC beq v0, s0, $80034ce8 (値:10500006) を常に一致=無条件ジャンプ(10000006)に変更したら
  全曲出力されるようになりました。

  最後に、セレクト100はデザエモン+より音量が大きい?せいか音割れしやすいので
  音量を下げてみようと調査してみました。
  PS2DIS付属のPS1.MAPというファイル内にPS1のSPUのアドレス情報が書かれていたので
  まずはマスターボリューム(1F801D80(左)/82(右))を下げるようにしてみたのですが、
  音量自体は下がったものの音割れは改善しないので、
  各チャンネル、今回はch1の音量(1F801C00(左)/02(右))の書き込みをチェックしてみると
   1F801C00:8004C1A8で書き込み
   1F801C02:8004C288で書き込み
  という結果になっていました。
  ここに入る値はどちらの場合もレジスタa0とa1をor演算したものになるのですが、
  a1の方に音量らしき値($0000〜$3FFF?)が入るようなので
  手前のnopになっている箇所(8004C168/8004C248)をsrl a1,a1,1(00052842)にして
  a1の値を1bit右シフト(=値を1/2)にした所、音割れが軽減されました。
  ※まだ音割れがあるという場合はsrl a1,a1,2(00052882)にするなどして更に下げてください


  なおセレクト100のBGM指定の無い未使用曲のうち、No.30 BLUE GENOCIDEの7番の曲のみ
  例外的にDATA SAVEで出力されます。
  これは内部的にはSFC版同様に6面のBGM設定の領域(ステージ曲とボス曲の2つ)が残っていて、
  DATA SAVE時の使用番号チェックでこの領域の番号も調査してしまっている為です。
  通常はサンプルデータの番号(23番・27番、SFC版DAIOH GALEと同じ)なので影響はないのですが、
  当作品のみ?7番・10番が指定されている為、7番が使用されている曲と判断されて
  出力されるようです。
  (この7番・10番という設定はデザエモン+収録のSFCコンテスト作品のHARD MACHINEの6面と一致するので
   未調査につき推測ではありますが、恐らく裏技のコンテスト作品からユーザーデータへの出力機能で
   ここの部分が7番・10番に書き換わり、かつその後のデータ削除などでも初期化されずに残った為と思われます)


------------
2025/10/14
  デザエモンKids!付属のセレクト100に関して動画を作りたかったのですが
  作成する暇がなさそうなので文章だけで…

  ・セレクト100の未使用曲に関して
   セレクト100収録作品はDATA SAVEでのメモリーカードへのコピーを行う際、
   どの場面にも使用設定がされていない曲はなぜか空白データになってしまいます。
   (4面で終了設定だが5面に設定されている、という場合は大丈夫の模様)
   未使用曲をセレクト100内で簡易的に聴く方法として、エミュレーターのチート機能などで
   ゲーム中の曲番号の設定を書き換える方法を挙げてみます。

   ※下記のアドレスは通常版の場合、SuperLite1500版は未調査

   各作品をプレイ中、アドレス$18CC18〜に曲番号の設定情報が入り、このうち$18CC24にタイトル画面の曲番号が入ります。
   (※BGM番号は内部的には0から始まるので、エディタ上での番号と1ずれるので注意してください)
   このタイトル曲の番号を未使用曲の番号に書き換え、一度ゲームを始めてポーズ→ESCAPEでタイトル画面に戻ることで
   その曲を聴くことができます。
   なお、$18CC18〜の領域の最初のほうは1面の道中→ボス→2面道中→ボス...の順になっていますが、
   この部分はゲーム開始時にもう1つの設定情報の格納領域である$187230〜からコピーされて上書きされてしまうので
   1面の曲を変えたい場合はそちら側を書き換える必要があります。

   ただこの方法では制限があり、複数データを使用(メモリーカードを2枚使用)している作品では1番目のデータしか聴けない、
   一部のデータに存在する、ループ部分より後ろにあるフレーズを聴くことができないという欠点もあります。

   ちなみにどの番号が未使用かは当サイトのデザエモン+用画像表示ツールで確認できますが、
   未使用曲扱いとなっていても音が数音置かれている程度だったり、
   使用されている曲とほぼ同じだったりする可能性もあります。

   エディタ上の番号→メモリ上の値の対応
    No.01 → 00
    No.02 → 01
    No.03 → 02
    No.04 → 03
    No.05 → 04
    No.06 → 05
    No.07 → 06
    No.08 → 07
    No.09 → 08
    No.10 → 09
    No.11 → 0A
    No.12 → 0B
    No.13 → 0C
    No.14 → 0D
    No.15 → 0E
    No.16 → 0F


------------
2025/10/03
  ようやくWindows11環境に移行しましたが、タスクバーの仕様変更で2段表示とクイック起動が無くなってしまって使いにくく
  何でわざわざ変えてしまうのか?と思いました。
  そしてやっぱりエクスプローラーのフォルダツリーには横スクロールバーが無いんですね…
  なお電GOシリーズはdgVoodoo2併用でとりあえず起動はするようです。(ちゃんとプレイできるかはまだ未確認)

  (以下は個人的なメモ・以前も発生してすっかり忘れてた)
  ePSXeでゲームを起動しても真っ暗のまま落ちる場合
  メニューバーのオプション→CPUオーバークロックの設定が未設定になっているのが原因なので
  x1にチェックを入れる
  ※新規環境への導入後や設定情報を消した場合は確実に発生する?ので特に注意


------------
2025/09/07
  8月にyoutubeに山陽新幹線編の自動運転の動画を上げたのですが、
  元ネタとなる7/13の記事を今まで更新していませんでした。(すみません…)

  ちなみに自動運転と入門編の関係について補足すると、
  自動運転では1段階ずつなめらかにマスコンレベルが変化するのですが
  入門編では指示が出るのは変化が落ち着いてからになっているようです。
  自動運転では停車直前はブレーキが細かく上下して微調整しているのですが、
  入門編ではほぼ一定レベルで停止する指示になるものの、きちんと誤差10cm以内に停まれています。
  これに加え、指示から1段階ずれた状態でも指示で画面が止まらない場合があるのですが
  停車位置・時刻は毎回同じになります。

  このことと、プレイヤー側のマスコン状態が他のモードと別のアドレスになっている事から、
  おそらくプレイヤー側のマスコン状態は指示通りかどうかのチェックにしか使われておらず、
  運転そのものは自動運転のみで行われている(プレイヤーの操作は一切影響しない)と思われます。


------------
2025/08/10
  PS1エミュレーターのDuckStationってPS2のBIOSファイルも使えたんですね。
  ePSXeと違って実機BIOS必須と聞いていて、私にはPS1での吸出し環境が無く
  後でPS3のシステムアップデートファイルから取り出す方法を知ったものの、
  ソフトのインストールやら面倒だったので今まで使っていなかったのですが
  PS2のBIOSを使えると知っていたらもっと早く使っていたのに…

  ※なお、私はPS2-PAR3(無印版)+この方法を使ってDUMPBIOS_USB.ELFを実行して
   PS2実機よりBIOSを吸い出しています。(後から出たPAR3 Ver3.5は標準でELFファイル実行機能があるらしいです)
   現在は薄型PS2+FreeDVDBoot(+吸い出しツール&USBメモリ)という方法でPAR無しでも出来るようです。


------------
2025/07/13
  掲示板での対応で今更気付きましたが、電GO山陽新幹線のATC9999km/hのコードの1行目って
  無くても動くような気がするのですが、もし何かあったら嫌なのでそのままにしておきます。
  確か最初やってた方法で効果が無い場合があって別な方法に変えた記憶はあるので
  その時の残骸なのかもしれませんが…

  このコードを作る時に見つけたATC関連のアドレスですが、
  PS2初期版の場合、(※以降のアドレス情報も全てPS2初期版のもの)
   28C6E0 $28C6E8と同じ値?(使用箇所不明)
   28C6E4 速度計のATC表示値
   28C6E8 ATC制限速度
   28C6EC ATCの段階(下から何段階目かを示す、こことATCの速度パターン定義から制限速度が決まる)
  になっています。(いずれも値は整数値、ATC制限のないフリーランモードでもここに値自体は入る)
  これらのアドレスは毎フレーム書き換えされるのですが、コードではその部分で28C6E4/28C6E8の値を固定しています。
  また27C4A0〜には2byte*11単位(*18種類?)で車種別?のATC速度パターン定義があります。


  また、本作の入門編はマスコンやブレーキが指定された段階に入っていないと画面が止まるタイプですが、
  ATCの速度を変えるとマスコン指示もそれに従って変わります。(ATC9999km/h改造ではマスコン最大指示になる)
  つまりあらかじめ設定したものを固定で出しているのではなく、ちゃんと現在の速度とATC速度を基に計算されているようです。
  この計算する部分を見つけて、その値を現在のマスコン・ブレーキ段階が入るアドレスにコピーするようにすれば
  他のモードで自動運転ができるんじゃないか?と思って調べてみました。

  まずはマスコン指示が出た時にその値を絞り込み検索してアドレスを探しましたが、
  意外にも入門編では他のモードおいて現在のマスコン・ブレーキ段階が入るアドレスに指示される値が直接入り、
  (28C57C:ブレーキ、28C580:マスコン、シリーズ他作品と順番が逆なのは新幹線の運転台に合わせてと思われます)
  現在の状態は別のアドレス(ブレーキ28CB94/マスコン28CB98)に格納されるようになっていました。

  で、入門編の28C57C/28C580への書き込み箇所をエミュレーターのブレークポイント機能で調べてみた所、
  状況によってばらつきはあるものの、アドレス201430から始まる関数の中で行われていました。
  201430の呼び出し元は2箇所あり、そのうちの片方である2013BCは処理をさらに手前に辿っていくと
  17351C〜で「アドレス28C51Cの値が0以外」ならば(2013B0経由で)処理を行うようになっていました。
  この28C51Cは普段は入門編で1になりるのですが(メニューに戻ってきた時点で0に戻る)
  試しに通常の運転モードで1にしてみると、指示が出ることもなく自動運転になりました。
  ※フリーランだと発車時にマスコンとブレーキが同時に入って出発できないので(出発前の演出が無いせい?)
   手動でメモリを書き換えるなどしてブレーキを切る必要あり
   なおフリーランではATC制限が無いが、内部的には制限速度の取得自体は行われるので
   走行〜停車自体は問題無く動作する

  201430へのもう一つの呼び出し元に関してはどういう処理で使われるのかは不明ですが
  まあ今の状態で動くからいいか、ということで今の所はこれ以上の調査はしないつもりです。
  自動運転機能そのものが入っていて、しかも特定アドレスの値を1にするだけでできるとは思いませんでしたが、
  自前で処理を作ったりする手間が省けて助かりました。

  バージョン・機種ごとの書き換えるアドレスは下記の通りです。
  PS2初期版:28C51C
  PS2ベスト版:28F7AC
  Windows版:71660E
  (本格的シリーズ版+アップデート適用後の場合)
  上記アドレスを1にすると自動運転になります。


------------
2025/06/22
  SIRENの音声抽出は掲示板で書いた通り、一部で2つのファイルにまたがるデータがあるので
  ps2_adpcmconv用のリストではなく、単体の抽出・変換ツールとして作っているのですが
  いざ実際に動かしてみると出力にものすごい時間が掛かる上に、
  ムービーの抽出と合わせて容量が約10GBも必要になる(ADPCM音声をWAVに変換すると容量が3倍位になるため)
  結構大きな問題が(今更)発覚しました。
  とはいっても音声が5000以上あるのでps2_adpcmconvだとスクロールが面倒など操作性が悪いので
  本当はタイトーメモリーズの再生ツールのように、ファイルリストとファイル内データの
  2つの選択リストに分けた形の再生機能が付いたツールを作れば
  データを書き出さずに再生できて一番手軽に使えると思うのですが、
  状況的に作るのは厳しいのでとりあえず現状の形(変換のみ)で公開します。
  ※一応、外部の重複データ削除ツールのログを基にして、
   割と数の多い重複データを出力しないようにもしました。

  あと今回気付いたのですが、adpcm.dllが終了フラグが無いデータを変換しようとすると
  終端に余分なデータを出力してしまうというバグが今更発覚しました。
  ※ps2_adpcmconvでは強制的にファイル終端に終了フラグを入れているので
   この問題は発生しません。(多分…)

  他にも掲示板でまだ対応できていない件があるのでこちらも何とかしないと…


------------
2025/05/31
  掲示板でps2_adpcmconvへの対応依頼があったSIRENですが、
  持ってないソフトは出来ない…と思いつつも結局は気になるので買ってきました。

  ファイル構成ですが、SIREN.000〜SIREN.008にメインのデータが512MB($20000000)単位に分割されて格納されている様です。
  この時点で「次のファイルにデータがまたがっている場合がある」場合の対応が必要になる可能性が出てきました。
  SIREN.TBLが格納情報っぽいですが、これはそのまま情報が格納されているのではなく、
  一旦全データをビット反転する必要があります。(解析対策?)
  何でビット反転だと気づいたのか?というと、この時は「これまでの経験から、何となく」ではあるのですが
  根拠としては32bit値(4byte値)の連続としてみた場合、最上位byte(4byte目)にFFが多く、
  ここに入るであろう、開始位置やサイズがそんな大きな値ばかりになる訳がなく、
  (ビットを反転した)00であるほうが自然なので、難読化の為?にビット反転させているのではないかと思いました。

  ビット反転させると、以下のような構造になっていました。
   $00 4byte 'SDT4' 53 44 54 34
   $04 4byte 0F 02 00 00 (=020F)  データ数
   $08 4byte B0 41 00 00 (=41B0)  TBLファイル自体のサイズ
   $0C 4byte 9E A6 79 E7      不明
   $10 4byte 20 00 00 00      ファイル情報開始位置?
   $14 4byte D4 18 00 00 (=$18D4) ファイル名群開始位置

   $20- 4byte*3*n データ開始位置→データサイズ→ファイル名位置の順
           これがファイル数分連続して格納されている

   データ開始位置は$15F90=SIREN.000の先頭となる
   以降、値が1増えるごとに開始位置が$800ずつ後ろになり、
   SIREN.000の終端のあとはSIREN.001の先頭、以降同様にSIREN.002〜SIREN.008と続く
   おそらくここの値はDVD-ROMのセクタ番号での指定と思われる
   (ISOイメージから読み出す場合、単純にここの値*$800の位置から読み出せば良い)
   ファイル名位置は$14のファイル名群開始位置(=$18D4)が起点(=00)となる

  とりあえずこの情報を基にとりあえずファイル単位で切り出してみました。
  前述の「データがSIREN.000〜008の各ファイルをまたぐ時の処理」を作るのが面倒だったので
  イメージ化したISOファイルから読み込むことにしました。
  ムービーはmovieフォルダ、音声はstrフォルダに入っていたのですが、strフォルダの音声が曲者で、
  恐らくステージ単位で使う音声を1つのファイルにまとめてあるのですが
  ファイル内に格納情報的なものは無く、プログラムデータからも見つけることはできませんでした。
  この為、無音を検出して区切ってリストを出力する形にしました。
  さらに大抵の音声はモノラルですが、各ファイルの先頭の方にあるイベント音声と
  途中にあるbgm(といっていいのものかは分からないですが)はステレオなのと、
  bgmは終端ギリギリまで音が続くので無音で区切る処理がうまくいかず、
  ほぼ確実に次の音声が入ってしまうので、この辺りはリストを手動で修正する必要があります。
  (現在、ここの作業をやっている途中です)

  そして内部でのファイル単位で調査してきたので、この結果をSIREN.000〜008の各ファイルに対応した
  アドレスに戻さないといけない&前述のファイルをまたぐ処理を作らないといけないという作業が残っています。
  なので完成にはもう少し時間が掛かりそうです。6月中には公開できれば良いですが…
トップページに戻る