Wizardry(NES) 重要ルーチン ========================== 汎用的なルーチンを抜粋。 読み書きする値については本質的なものだけ記す(雑用的な変数や下請けルーチンま で含めて考えると多くなりすぎるので) PRG #7 ------ $C145 - 無限ループによるNMI待ち(他の処理も行うが) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 無限ループ中に乱数値をインクリメントし続ける。 $C1B1 - PRGROM 切り替え ~~~~~~~~~~~~~~~~~~~~~~~ $C1B3, $C1B5 がエントリポイントとなることもある。 $C1B1 がエントリポイントの場合、$FB に保存されているPRGROM IDに切り替える。 $C1B3 がエントリポイントの場合、A で指定したPRGROM IDに切り替え、さらにその IDを $FB に保存する。 $C1B5 がエントリポイントの場合、単に A で指定したPRGROM IDに切り替える。 $C2A9 - 乱数生成器コア ~~~~~~~~~~~~~~~~~~~~~~ 乱数値 $40 に依存する値を返す。乱数値自体の更新も行う。 Read: $40 乱数値(16bit) Write: A 乱数値 $40 に依存する値 $40 乱数値(16bit) $C58B - メッセージ表示 ~~~~~~~~~~~~~~~~~~~~~~ 詳細未解析。 Y でメッセージIDを指定するようだ。 $C7A6 - メッセージ表示 ~~~~~~~~~~~~~~~~~~~~~~ 詳細未解析。フォーマット機能付き? Y でメッセージIDを指定するようだ。 $CD1A - ダイスを振る ~~~~~~~~~~~~~~~~~~~~ Read: X ダイス個数 $00 ダイス面数 $01 ダイス追加値 Write: A ダイス値下位バイト $01 ダイス値 (16bit) $CD3C - [0, n) の乱数を発生する ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Read: A n Write: A, $04 結果の値 下請けルーチン $CD4B で乱数の範囲を限定する処理を行っている。 $CF1F - モンスターデータをロードする ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 指定されたモンスターの MonsterData 構造体を $7E03 以下にロードする。 $CF2A がエントリポイントとなることもある。 $CF1F がエントリポイントの場合、Y で指定されたキャラ番号からグループ番号を算 出し、そのグループのモンスターデータをロードする。 $CF2A がエントリポイントの場合、A で指定されたモンスターIDのデータをロードす る。 $CFA9 - アイテムデータをロードする ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 指定されたアイテムの ItemData 構造体を $0500 以下にロードする。 Read: A アイテムID $DEE2 - 指定した範囲での乱数を発生する ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Read: $08 RandomRange 構造体 Write: A 結果の値 $F32A - 除算器 ~~~~~~~~~~~~~~ Read: A 除数 $00 被除数(16bit, リトルエンディアン) Write: A, $02 余り $00 商(16bit, リトルエンディアン) $F32C がエントリポイントとなることもある。この場合、$02 が除数となる。 除数が0の場合、商は 0xFFFF, 余りは被除数となるようだ。