メモリマップ
ロックマン5いじりのロックマン6メモより、rock5easily氏の許可を得て引用・追記を行っています。
; スレッド関係
21-24 スレッドの状態(00 -> 未使用, 01 -> 休止中, 02 -> 実行中, 04 -> 実行可能, 08 -> 新規登録)
25-28 スレッドのスリープカウンタ
29-2C 新規スレッドのThread handler(low) / スレッドのスタックポインタ
2D-30 新規スレッドのThread handler(high)
31-32 新規スレッドのThread handlerを展開
33 Current thread (現在のスレッドのスロット番号)
34-37 8000-9FFFにマップするバンク
38-3B A000-BFFFにマップするバンク
3C-3F
; スレッド番号
00 メイン(使用スロット0)
01 パターンテーブル書き込みキュー監視(使用スロット3)
02 チャージ中のパレットアニメ(使用スロット1)
; パッド入力関係
40 Keys held on pad 1 1Pパッド入力(押しっぱなし)
41 Keys held on pad 2 2Pパッド入力(押しっぱなし)
42 Keys pressed on pad 1 1Pパッド入力(押した瞬間)
43 Keys pressed on pad 2 2Pパッド入力(押した瞬間)
44 40の値を全bit反転(42の値作成のため)
45 41の値を全bit反転(43の値作成のため)
01 右
02 左
04 下
08 上
10 スタート
20 セレクト
40 B
80 A
46 Palette changed(パレットの更新するなら0以外の値を入れる)
47 VRAM書き込みフラグ(0以外でVBlank中に$780~Drawing bufferのデータを元に書き込み。Drawing bufferのデータの総バイト数)
48 パレットの明るさ?(パレット更新の際,色の値からこの値を引いたものが書き込まれる)
49 パレットの明るさ?(jsr $CA71で使用)
4A New PRG bank 8000-9FFF
4B New PRG bank A000-BFFF
4C Last MMC3 command
4D チップ属性チェックX座標(low)
4E チップ属性チェックY座標(low)
4F チップ属性チェックX座標(high)
50 チップ属性チェックY座標(high)
51 Curent level
00 ブリザードマンステージ
01 ウインドマンステージ
02 プラントマンステージ
03 フレイムマンステージ
04 ヤマトマンステージ
05 トマホークマンステージ
06 ナイトマンステージ
07 ケンタウロスマンステージ
08-0B エックスステージ1-4
0C-0F ワイリーステージ1-4
52-53 マップデータ読み出しベースアドレス?
54-55 マップデータ読み出しアドレス?
56 Scroll X
57 Scroll X(high)
58 Scroll Y?(縦長の部屋は無いので固定値?/ビート呼出時の初期座標として使われる)
59 Scroll Y(high)?(同上)
5A
5B
5C-5D 縦/横スクロール用VRAM書き込み開始アドレス
5E-5F アトリビュート用VRAM書き込み開始アドレス
60 VRAM書き込みフラグ($7B0から読み込み, 値が#$68ならばVRAMアドレスインクリメント値+32)
61
62-63 16x16チップデータ読み出しベースアドレス?
64-65 16x16チップデータ読み出しアドレス?
66-67 32x32チップデータ読み出しベースアドレス?
68-69 32x32チップデータ読み出しアドレス?
6A
6B チップ破壊処理関連?
6C
6D 画面スクロール速度?
6E マップデータ読み出しバンク?(8000-9FFFにマップ)
6F マップデータ読み出しバンク?(A000-BFFFにマップ)
70 一番最近のスクロール方向?(01 -> 右, 02 -> 左)
71 エリア内移動可能なスクロール方向(+01 -> 右, +02 -> 左)
72 スクロール時のパレット変更番号
73 スクロール時のパターンテーブル書き込み番号
74-75 設置オブジェクトの部屋番号テーブルの先頭アドレス
76-77 設置オブジェクトの部屋番号テーブルの先頭アドレス(オリジナル)
78-79 設置オブジェクトのX座標テーブルの先頭アドレス
7A-7B 設置オブジェクトのX座標テーブルの先頭アドレス(オリジナル)
7C-7D 設置オブジェクトのY座標テーブルの先頭アドレス
7E-7F 設置オブジェクトのObjectIDテーブルの先頭アドレス
80 この値の16x16チップがDestroyed blocksに登録される
81-82 パターンテーブル書き込みデータ展開用
83-84 パターンテーブル書き込み用のグラフィックソースアドレス
85-86 パターンテーブル書き込みアドレス
87 書き込む8x8パターンの残数
88 書き込んだ8x8パターンの個数
89 パターンテーブルに書き込んだバイト数
8A グラフィックソースバンク
8B
8C Next OAM table offset
8D tmp
8E
8F Current sprite
90 Enemy Handler処理ルーチン突入時にスタックポインタを退避
91
92-93 ネームテーブル書込データロード用アドレス
94 ロックマンの状態
00 -> 静止
01 -> すり足
02 -> 歩行
03 -> スライディング
04 -> はしご
05 -> はしご(頂上)
06 -> ジェットロックマンで飛行
07 -> ジャンプ
95 スライディングカウンター(ロックマン用の汎用カウンタ?)
96 ロックマンのダメージ計算フラグ(1フレームの間に同時に複数の敵からダメージを受けるのを防ぐため?)
97 ショットポーズ維持時間?
98 ショットポーズフラグ(ショット中は#$18。他は0)
99 ロックマンの進行方向(左右, パッド入力中に立つ)
9A Aボタンチェック(Aボタンを押し始めたフレームならば#$80)
9B Current Rush Adaptor (01 -> ジェット, 02 -> パワー)
9C ジェットアダプターのゲージ量
9D 0ならジェットアダプターの残量回復を許可
9E チャージカウンター
9F ロックマンのX座標(low)?
A0-A1 ロックマンのX方向速度?
A2 ロックマンの無敵カウンター
A3 スライディングだと#$08、それ以外だと#$00(地形判定に利用)
A4 ロックバスター発射処理で使われている(読み出されてない?)
A5 パワーロックマンのゲージ量
A6 自機の麻痺フラグ?
A7 自機の中心上下が最後に接触したチップ属性(背景以外)
A8 ロックマンの画面左端侵入制限?(この値(X座標(low))より左に侵入できなくなる)
A9 残機
AA-AB スクロール関係データ読み出しポインタ?
AC スクロールデータ読み出し時に利用
AD 前景に隠れるかのフラグ?
AE 現在のロックマンのパレット変更番号
AF
B0-BF Sound queue
C0-D8 サウンドドライバ関係
D9 Sound queue Write pointer
DA tmp
DB Sound queue Read pointer
DC 再生したいトラックを書き込む
DD
DF-E0? 擬似乱数
E1 乱数関連?
E2 乱数関連?
E3-E6 パレットアニメーションの更新フレーム間隔?
E7-EA パレットアニメーションのパレット番号?
; オブジェクト移動サブルーチン$E4D5関係 (符号付整数)
EB オブジェクトのX方向速度(low) / 画面スクロール時のX方向速度(high)
EC オブジェクトのY方向速度(low) / 画面スクロール時のX方向速度(screen)
ED オブジェクトのX方向速度(high) / 画面スクロール時のY方向速度(high)
EE オブジェクトのY方向速度(high) / 画面スクロール時のY方向速度(screen)
EF シャッター表示フラグ?
F0 メインループ脱出フラグ(01でステージクリア時,02で死んだとき,03でゲームオーバー)
F1 ネームテーブル書き込みアドレス(high)に加算(多分00, 04, 08, 0C)
F2 VBL flag (1フレームで行う各スレッドの処理がすべて完了した時0となり, NMIでの画面更新が行われる.)
F3 Synchronous frame counter
F4 Split effect enabled(ラスタースクロール使用なら1,使用しないなら0)
F5-F6 大型ボス用のパレット関連処理(フェードイン?)の処理アドレス
F7 Scroll X
F8 ラスタスクロール関連?
F9 Scroll Y
FA Current nametable(00 -> $2000~, 01 -> $2800~)
FB ミラーリング方向(00 -> 垂直, 01 -> 水平)
FC Display Setting 1($2000に書き込む)
FD Display Setting 2($2001に書き込む) ?
FE 空き
FF 空き
100-1FF スタック
200-2FF OAM table
0 Y座標-1
1 パターンインデックス
2 アトリビュート
VHP000CC
||| ||
||| ++-カラーパレット上位2ビット
||+------BGとの優先順位、0:SPR優先、1:BG優先
|+-------左右反転フラグ、1:反転
+--------上下反転フラグ、1:反転
3 X座標
300-33F Attribute table
340-35F Destroyed blocks (1bitで破壊された16x16チップ番号を表す)
360-37F パレット
380-39F オリジナルパレット
; オブジェクトメモリ関係(スロット$16はObjectID:80の処理専用?)
3A0-3B6 ObjectID
3B7-3CD Display Flags
bit7 -> 上下反転
bit6 -> 左右反転
bit5 -> 背景に隠れる
bit1 -> 不可視(アニメーションもストップ)
bit0 -> 不可視(アニメーションは進む)
3CE-3E4 方向 (01=右,02=左: 16方向の場合, 時計周りで00 = 北, 01 = 北北東, 02 = 北東,…)
3E5-3FB HP(00で1を表すため実際より1小さい値を入れる)
3FC-412 設置オブジェクトのインデックス(設置オブジェクトでない場合FF)
413-429 Enemy Handler(high)
42A-440 Enemy Handler(low)
441-457 PRG Bank
458-46E Sprite Bank
46F-485 X座標(high)
486-49C X座標(low)
49D-4B3 X座標(fraction)
4B4-4CA Y座標(high)
4CB-4E1 Y座標(low)
4E2-4F8 Y座標(fraction)
4F9-50F アニメーションデータのサイズ?
510-526 アニメーションデータ読み出しポインタ?
527-53D アニメーションデータのアドレス(high)
53E-554 アニメーションデータのアドレス(low)
555-56B アニメーションタイマー
56C-582 オブジェクトの受けるダメージ
bit7-4 6で2ダメージを受ける
bit3-0 このフレームで受けるダメージ
583-599 属性?
bit7-4 -> ロックマン/武器との接触時の動作番号
番号 ロックマンと接触 武器と接触
00 何もなし 接触通知のみ?
01 ダメージ ダメージ
02 ブロック 武器を弾く
03 ダメージ 盾
04 ダメージ バリアで消せる弾
05 ブロック 何もなし
06 ダメージ 武器を弾く
07 接触通知のみ? 何もなし
08 ダメージ&ブロック 武器を弾く
09 ブロック ダメージ
0A 何もなし ダメージ
0B ダメージ ダメージ
0C ダメージ ×(アドレスがおかしい)
0D ダメージ 何もなし
0E ダメージ ダメージ
0F ダメージ ダメージ
bit3-0 -> 接触時のダメージ量
59A-5B0 当たり判定番号(00~68)
5B1-5C7 Y方向速度(low)?変数A?
5C8-5DE Y方向速度(high)?変数B?
5DF-5F5 Y方向速度(low)?変数C?
5F6-60C Y方向速度(high)?変数D?
60D-623 Y方向速度(low)?変数E?
624-63A Y方向速度(high)?変数F?
63B 城外観の経路表示や自機ブリザードアタック/プラントバリアの発射処理で使われる
63C 城外観の経路表示やゴリラタンクで使われている
63D ボス番号?
63E 8ボスのノックバック時間?
63F 8ボスの無敵中点滅管理変数?
640 8ボスの無敵時間?
641 8ボスのジャンプ中フラグ?(ノックバックで使用)
642 0以外でボスゲージ表示($3EDの値を表示)
643-648 Mr.Xステージ3の足場の位置
649 Next enemy in level
64A Previous enemy in level
64B 自機の中心上下が接触したチップ属性(直近フレーム)
64C
64D ジェットの上昇上限座標
64E ステージ開始時のパターンテーブル書き込み番号
64F 一番最近のスクロール時のパターンテーブル書き込み番号
650-65F? アイテム回収フラグ
660-66F
670
671 ラスタスクロール関連?($2006に入る値)
672 Current split position
676 Current split effect number
677 Next split effect number
678 ラスタスクロール関連?(地面のズレ現在値)
679 ラスタスクロール関連?(地面が動く速度?)
67A ブリザードマンステージの潜水艦用のY座標補正値?
67B ブリザードマンステージの潜水艦用のY座標補正値?
67C 自機の中心上下が接触したチップ属性(直近1つ前フレーム)
67D 0でなければデモプレイ用の入力がパッド入力($40,$42)に入る
67E デモプレイ入力用カウンタ
67F デモプレイ入力読み出しポインタ
680 一番最近のパターンテーブル先読みを行った部屋番号
681 外周デモのステージ番号(読み込まれるが書き込まれないので、ずっと#$00)
682 ネームテーブル書き込みデータ番号の保持?(パワーピストン戦での使用を確認)
683
684 中間復帰時の部屋番号
685 中間復帰時のパターンテーブル書き込み番号
686 中間復帰時のパレット変更番号
687 スクロール時のパレット変更番号($72と同じ?)
688-691 Weapon energy
688 ロックバスター(メニューを開くときに#$1Bになる。開くまでは通常#$80)
689 ヤマトスピア
68A ウインドストーム
68B ブリザードアタック
68C フレイムブラスト
68D プラントバリア
68E ナイトクラッシュ
68F シルバートマホーク
690 ケンタウロスフラッシュ
691 ビート
692-695 ステージクリア・プレートフラグ
692 - bit2 Bプレート
bit1 トマホークマン
bit0 ブリザードマン
693 - bit2 Eプレート
bit1 ヤマトマン
bit0 ウインドマン
694 - bit2 Tプレート
bit1 ケンタウロスマン
bit0 フレイムマン
695 - bit2 Aプレート
bit1 ナイトマン
bit0 プラントマン
696 エネルギーバランサー所持フラグ
697 スクロール元部屋番号
698
699 Current weapon
69A ロックマンを横方向に動かす(風やコンベア)速度(low)
69B ロックマンを横方向に動かす(風やコンベア)速度(high)
69C Vertical screen offset
69D Horizonal screen offset
69E 一番最近のスクロール時のパレット変更番号
69F 01でネームテーブル書き込み時に効果音を鳴らす
6A0 パレットバンク参照先が#$00(通常時)の時#$37、#$01(クリア後)の時#$28になる
6A1 E缶の所持数
6A2 メニューのカーソル位置?(武器選択枠)
6A3 メニューのカーソル位置?(武器選択枠)
6A4 メニューのカーソル位置(アダプタ/武器/E缶)
6A5 ビートプレート取得ボスを倒せば#$04
6A6 ネームテーブル書き込み時に出す効果音番号
6A7 Xスクロール値 (NMIで計算)
6A8 X Scroll(high) (NMIで$57の値をコピー)
6A9 ボスラッシュでの撃破後復帰X座標/ステージ選択画面のボス顔塗りつぶし用のカウンタに使用
6AA ボスラッシュでの撃破後復帰Y座標
6AB チャージカウンター上限
6AC ネームテーブル書込時の待機時間?
6AD ボス出現処理の中で使われている
6AE 武器の接触判定時にYレジスタの値退避に使用
6AF
6B0-6FF
700-77F サウンドドライバ関係
780-7D8 Drawing Buffer?
; フォーマット
byte0 -> bit7 = 1ならばVRAMインクリメント値=+32
bit6-0 -> 書き込むデータのバイト数
byte1 -> VRAM書き込みアドレス(high)
byte2 -> VRAM書き込みアドレス(low)
byte3- -> 書き込む値(byte0のbit6-0で指定した数だけ書き込む)
そしてbyte0に戻る
※データの総バイト数は$47で指定
7B0-7D8 Drawing Buffer?
;マップ描画用
;5C-5D 縦/横スクロール用VRAM書き込み開始アドレス
;5E-5F アトリビュート用VRAM書き込み開始アドレス
;60 VRAM書き込みフラグ($7B0から読み込み, 値が#$68ならばVRAMアドレスインクリメント値+32)
; $7B0~には単に書き込むデータをそのまま羅列
7D9-7EF OAM tableへのスプライトデータ展開順
7E8-7EF パターンテーブル先読み関係
7F0-7F7 パターンテーブル書き込みキュー
7F8 パターンテーブル書き込みデータ読み込みポインタ
7F9 パターンテーブル書き込みデータ書き込みポインタ
7FA 空き?
7FB 空き?
7FC 空き?
7FD 空き?
7FE 空き
7FF 空き