未来神話ジャーヴァス (FC) 攻略/解析

RAM

本体内蔵 RAM に加え、カートリッジ側に Save RAM ($7F80-$7FFF) が存在する。 Save RAM はセーブ/ロード時のみ有効化される。

メモリマップ

アドレス内容
$00u8現在のマップデータインデックス (0..=15)
マップIDとは異なる
SRAM テストルーチン内では雑用変数として使われる
$01-$07雑用
$08u8
$09ptr
$0Bu8
$0Cptr
$0Eu16le
$10u16le
$12u8
$13u8
$14u8$2000 (PPU_CTRL) 管理用
$15u8$2001 (PPU_MASK) 管理用
$16u8NMI スレッドで読み取った1P生入力 (ABSTUDLR, 拡張ポート対応)
NMI ハンドラ内で毎回更新される
$17u8メインスレッドで読み取った2P生入力 (ABSTUDLR, 拡張ポート対応)
$18u8(write-only) 前回 NMI スレッドで読み取った1P生入力 (ABSTUDLR, 拡張ポート対応)
$19u8前回メインスレッドで読み取った2P生入力 (ABSTUDLR, 拡張ポート対応)
$1Au8
$1Bu8
$1C-1D(未使用)
$1Eu8$2005 (PPU_SCROLL) x 管理用
$1F(未使用)
$20u8$2005 (PPU_SCROLL) y 管理用
$21-$3Bu8[3][9]現在のイベントリスト
$3Cu8TODO: 入力関連
$3Du8TODO: 入力関連
$3E-$53TODO: オーディオドライバ関連
$54TODO: オーディオドライバ関連
$55-$5D(未使用)
$5Eu8NMI ハンドラ内で各種タスクを行うかどうか (0:false, 非0:true)
通常は常に true
$5F-$62TODO: スクロールマージン関連
$63雑用
$64u8スロットル処理において NMI 待ち中であるフラグ (0:false, 1:true)
NMI ハンドラが実行されると true になる
$65u8ゲームシーンを 20fps で動かすためのスロットルカウンタ
NMI ハンドラ内で毎回インクリメントされ、メインスレッド側では mod 3 で扱われる
$66-$6B雑用
$6Cu8現在のイベントIDまたはワープ先ID
$6Du8TODO: イベント関連
$6Eu8メインスレッドで読み取った1P生入力 (ABSTUDLR, 拡張ポート対応)
$6Fu8前回メインスレッドで読み取った1P生入力 (ABSTUDLR, 拡張ポート対応)
$70u8
$71u8
$72
$73
$74-$93u8[0x20]現在見ているアクター共用体をロードして操作するためのバッファ
$94-$DF(未使用)
$E0u8
$E1u8
$E2-$E3
$E4u16le
$E6-$E9雑用
$EAu82 つのアトリビュートバッファのうちどちらを転送するか (0:A, 1:B)
転送を行うたびにトグルされる
$EBu8$7EF6 (マッパー 80 VRAM ミラーリング) 管理用
$ECu8NMI を指定回数待つためのカウンタ
NMI ハンドラが PPU タスクを処理するたびにインクリメントされる
メインスレッド側では、たとえばこの変数を -2 (0xFE) に設定し、0 になるまで待つことで NMI を 2 回待てる
$EDu8NMI スレッドに対する PPU タスク要求
$EE
$EF
$F0-$FF雑用
$0100-$013Fu8[0x40]アトリビュートバッファ A
転送先は常に $23C0
$0140-$017Fu8[0x40]アトリビュートバッファ B
転送先は H ミラーなら $2BC0, V ミラーなら $27C0
$0180u8$1E 退避用
$0181u8$20 退避用
$0182u8$14 退避用
$0183-$01FFスタック領域
$0200-$02FFSprite[64]スプライトバッファ
$0300-$031Fu8[0x20]主人公アクター構造体
$0320-$03FFTODO: アクター共用体たち
$0400u8主人公の現在HP
$0401u8主人公の最大HP
$0402u8主人公の力 (作戦画面での表記は「こうげき」)
$0403u8主人公の耐久 (作戦画面での表記は「ぼうぎょ」)
$0404u16le主人公の経験値
$0406u8主人公のレベル
$0407u8主人公の名声値
$0408u16le所持金
$040Au8薬所持数
$040Bu8手形所持数
$040Cu8兵力: 将軍
$040Du8兵力: 隊長
$040Eu8兵力: 魔道士
$040Fu8兵力: 参謀
$0410u8兵力: 医師団
$0411u16le兵力: 志願兵
$0413u16le兵力: 傭兵
$0415u16le兵力: グルカ兵
$0417u16le兵力: アマゾネス
$0419u8主人公の職業 (0:無職, 1:剣術士, 2:格闘士, 3:魔術師)
$041Au8主人公の近接武器
$041Bu8主人公の防具
$041Cu8主人公の遠隔武器
$041Du8ゲームシーンにおける B キーの機能 (0:コマンドメニュー, 1:遠隔攻撃)
$041Eu8
$041Fu8所持道具マスク (bit0:ハーモニカ, bit1:曼荼羅, bit2:スコープ, bit3:クリスタル, bit4:ベルト)
$0420u8主人公の習得魔法マスク (bit0:でほると, bit1:まんぴー, bit2:とらんじ, bit3:すらっぷ, bit4:へりおん, bit5:くるすく)
魔法は職業が魔術師でないと使えないが、この値の計算自体は職業によらず行われる
$0421u8占領地マスク (bit0:ユース, bit1:ラタニア, bit2:リカントス, bit3:タクテカ, bit4:オシーランド, bit5:エウロン, bit6:キネラシア)
$0422u8精霊ワープ習得マスク (bit0:石, bit1:骨, bit2:木, bit3:切り株)
$0423u8各種洞窟の解錠マスク (bit0:ラモン洞, bit1:バンス洞, bit2:リカルド洞, bit3:パタン洞)
$0424u8
$0425u8クエスト: 壺
$0426u8クエスト: どくろばな
$0427u8クエスト: モンスター 50 体討伐 (アネイデアの町のクエスト屋)
$0428u8クエスト: ひかりごけ
$0429u8クエスト: 金貨
$042Au8クエスト: ダイヤ
$042Bu8クエスト: 浮遊石
$042Cu8クエスト: 黒真珠
$042Du8クエスト: 象牙
$042Eu8クエスト: モンスター 100 体討伐 (リカルドの町のクエスト屋)
$042Fu8クエスト: 財布
$0430u8クエスト: 悪魔の角
$0431u8クエスト: サイの足跡
$0432u8クエスト: なくしたハート
$0433u8クエスト: 海の涙
$0434u8クエスト: 風の粉
$0435u8クエスト: 金のリボン
$0436u8クエスト: 星のかけら
$0437u8現在のマップID
$0438-$043Bu8[4]$0303-$0306 セーブ/ロード用中間バッファ
$043C-$043Fu8[4]$0E-$11 セーブ/ロード用中間バッファ
$0440u8$00 セーブ/ロード用中間バッファ
$0441u8$031B セーブ/ロード用中間バッファ
$0442u8マッパー 80 $8000-$BFFF の PRG バンクID (0x4000 バイト単位) 管理用
$0443
$0444
$0445(未使用)
$0446-$0447
$0448
$0449u8NMI カウンタ (NMI ハンドラの呼び出しごとにインクリメントされる)
$044A雑用
$044Bu8現在発動中の持続魔法 (0:(なし), 1:まんぴー, 2:すらっぷ, 3:へりおん)
$044C-$044D
$044Eu8魔法「へりおん」発動直前の主人公の元の力
$044Fu8魔法「すらっぷ」発動直前の主人公の元の耐久
$0450u8スタート地点に戻る2コン技 (UUDDABAB) の現在の入力インデックス
$0451i16le持続魔法の残り時間カウンタ
負数で初期化され、負のとき NMI ハンドラ内で毎回インクリメントされ、0 になると持続魔法の効果が切れる
$0453-$0491(未使用)
$0492-$0496
$0497u8戦力画面における助言内容選択用カウンタ (mod 4 で扱われる)
助言を聞くたびにインクリメントされる
$0498-$049F(未使用)
$04A0-$04EBcodeTODO: オーディオドライバ用 RAM コード領域
lda $????,x; rts が 19 個並んでいる
$04EC-$04FF(未使用)
$0500-$05EFTODO: 地形バッファ
$05F0-$05FF(未使用)
$0600-$0603雑用
$0604u8次のテキスト出力位置のタイルテーブル内タイル座標x
$0605u8次のテキスト出力位置のタイルテーブル内タイル座標y
$0606u8次のテキスト出力位置のタイルテーブルID (0..=1, V ミラーを仮定)
$0607雑用
$0608u8カーソルが最上段にあるときのカーソルスプライト座標y
$0609u8現在のカーソルスプライトタイルID
$060A-$060F(未使用)
$0610-$0611雑用
$0612u8メッセージウィンドウ内部左上隅のスクリーン内タイル座標x
$0613u8メッセージウィンドウ内部左上隅のスクリーン内タイル座標y
$0614u8メッセージウィンドウ幅 (外枠含む) のインデックス (1:8タイル, 2:16タイル, 3:24タイル)
$0615雑用
$0616-$0635u8[32]BG上へ 1 行のタイル列を転送要求する際のバッファ
$0636-$063D
$063E雑用
$063F
$0640雑用
$0641
$0642雑用
$0643-$0648
$0649-$064D雑用
$064E-$0653
$0654u8メッセージウェイトタイマー (NMI ハンドラが呼ばれるたびにデクリメントされる)
$0655-$0659
$065A-$065E雑用
$065F(未使用)
$0660u8作戦画面/戦力画面へのテキスト出力位置のタイル座標x
$0661u8作戦画面/戦力画面へのテキスト出力位置のタイル座標y
$0662-$0663雑用
$0664(write-only)
$0665(write-only)
$0666-$0667(未使用)
$0668-$066C雑用
$066D-$0670
$0671u8直前にコマンドメニューで決定したコマンド (0:(キャンセル), 1:はなす, 2:なかま, 3:まほう, 4:どうぐ, 5:たんさく, 6:ようす)
$0672u8コマンドメニュー「まほう」「どうぐ」の引数 (対象となる魔法ID/道具ID)
$0673雑用
$0674-$06AF(未使用)
$06B0-$06DF
$06E0
$06E1
$06E2u8
$06E3-$06E5
$06E6u8バトル開始直前の主人公の元のHP
$06E7(未使用)
$06E8u8敵が不可視かどうか (0:false, 1:true)
特定のマップでのみ意味を持つ
魔法「とらんじ」または道具「すこーぷ」を使うと false になる
$06E9-$06EF(未使用)
$06F0u8
$06F1-$06FF
$0700-$073Fu8[0x40]横方向 PPU データ転送キュー A
$0740-$077Fu8[0x40]横方向 PPU データ転送キュー B
$0780-$07BFu8[0x40]縦方向 PPU データ転送キュー A
$07C0-$07FFu8[0x40]縦方向 PPU データ転送キュー B
$7F80u8TODO: SRAM テスト関連
$7F81-$7F87u8[7]セーブデータが存在することを示す magic 文字列 ("*INAGE*") が書き込まれる
$7F88-$7FC9u8[66]セーブデータ本体
$7FCAu8セーブデータのチェックサム (セーブデータ本体 $7F88-$7FC9u8 総和)
$7FCB-$7FFE(未使用)
$7FFFu8TODO: SRAM テスト関連

詳細

$ED - NMI スレッドに対する PPU タスク要求

$0425-$0436 - クエスト進行状況値

bit7 はクエストを請けているかどうかのフラグ (0:false, 1:true)。 bit0-6 はクエストの内容により意味が異なる: