Published on: 2021-06-11
Updated on: 2021-06-21
特に断らない限りリトルエンディアン。
アドレス | 型 | 内容 |
---|---|---|
$00-$0F | 雑用 | |
$10 | u8 | PPU $2000 退避用 |
$11 | u8 | PPU $2001 退避用 |
$12 | u8 | PPU 描画有効フラグ (0:false, 1:true) |
$13 | u8 | PPU スクロールx ($2005 ) |
$14 | u8 | PPU スクロールy ($2005 ) |
$15 | u8 | ゲームへの入力 (ABSTUDLR) |
$16 | u8 | 前フレームで Start を入力したか (0:false, 0x10:true) |
$17 | u8 | デモ中かどうか (0:false, 1:true) |
$18 | u8 | ゲームシーン描画有効フラグ (0:false, 1:true) |
$19 | u8 | 地形が有効かどうか (0:false, 1:true) |
$1A | u8 | 通知 |
$1B | u8 | 通知タイマー |
$1C | u8 | 敵弾スプライト書き込みルーチンで次に対象とする敵弾のインデックス |
$1D | u8 | オブジェクトスプライト書き込みルーチンで次に対象とするオブジェクトのインデックス |
$1E | (未使用) | |
$1F | u8 | フレームカウンタ |
$20-$21 | ptr | 地形の圧縮データへのポインタ |
$22 | u8 | 宇宙内の行インデックス |
$23 | u8 | 地形内の行インデックス |
$24 | u8 | 地形のローテートフラグ (0:false, 0x80:true) |
$25 | (未使用) | |
$26 | (未使用。起動時に 0xC8 が代入される) | |
$27 | u8 | 敵編隊出現テーブル内インデックス |
$28 | u8 | 現在の敵編隊出現テーブルエントリ値 (bit0-5:オブジェクトID, bit6:ボスフラグ, bit7:複合禁止) |
$29 | u8 | 敵編隊パラメータロード済みフラグ (0:false, 1:true) |
$2A-$2B | ptr | 現在の敵編隊パラメータへのポインタ |
$2C-$2D | ptr | 現在の敵編隊パラメータ バイトコードへのポインタ |
$2E | u8 | 現在の敵編隊パラメータ 基本メタスプライトID |
$2F | u8 | 現在の敵編隊パラメータ 出現間隔 |
$30 | u8 | 現在の敵編隊パラメータ 初期座標x |
$31 | u8 | 現在の敵編隊パラメータ 初期座標y |
$32 | u8 | 現在の敵編隊 残り出現数 |
$33 | u8 | 現在の敵編隊 次の個体出現までの残り時間 |
$34 | u8 | 現在の敵編隊パラメータ内インデックス |
$35 | u8 | 現在の敵編隊 ボスフラグ (0:false, 0x40:true) |
$36 | u8 | 現在の面 (1..=16 ) |
$37 | u8 | 残機 |
$38 | u8 | 自動連射処理 作業用 |
$39 | u8 | 星スプライトの基本タイルID (0x3D..=0x3F ) |
$3A | u8 | 自機座標x |
$3B | u8 | 自機座標y |
$3C | u8 | 自機パワー (0:初期, 1:スピードアップ, 2:3way弾, 3:バリア(3way/5way)) |
$3D | u8 | 自機バリア耐久力 (0..=5 ) |
$3E | u8 | 自機状態 |
$3F | u8 | 自機状態タイマー |
$40 | u8 | 自機無敵タイマー |
$41 | u8 | 自機が裏潜り中か (0:false, 1:true) |
$42 | u8 | 自機がレーザーモードか (0:false, 1:true) |
$43 | i8 | 星の速度y 基本値 |
$44-$47 | u8[4] | パレットアニメーションタイマー |
$48-$4B | u8[4] | パレットアニメーション明滅フラグ (0:明るくする, 1:暗くする) |
$4C | u8 | スターブレインが逃走タイミングに達するまでのカウント (0..=5 ) |
$4D | u8 | $4C が 0 になったか (0:false, 1:true) |
$4E-$4F | ptr | スターブレインBGデータへのポインタ |
$50 | u8 | フェードアウト演出における PPU スクロールy 目標値 |
$51 | u8 | (スターブレイン下降中) スターブレインのHP回復およびBG書き込み回数管理用 (0..=16 ) |
$51 | u8 | (スターブレイン戦闘中) スターブレイン状態管理用 (16:生存, 16未満:撃破演出中) |
$51 | u8 | (スターブレイン撃破/逃走後) スターブレインのBG消去状態管理用 (0..=16 ) |
$52 | u8 | スターブレインの水平移動タイマー (0..=2 ) |
$53 | u8 | スターブレインの垂直移動タイマー (0..=3 ) |
$54 | u8 | スターブレインの水平移動方向 (0:右, 1:左) |
$55 | u8 | スターブレインの垂直移動方向 (0:下, 1:上) |
$56 | u8 | スターブレインの種別 (0:ビッグ, 1:通常) |
$57 | u8 | CHR バンクID bit0 (これと $C9 の和が CHR バンクIDとなる) |
$58 | u8 | 各種演出用タイマー |
$59 | u8 | 星をBGの前面に表示するか (0:false, 1:true) |
$5A | u8 | フェードアウト演出におけるパレット変更タイマー |
$5B | u8 | 自機狙い弾生成パラメータ (bit4-5:スピード, bit7:誘導弾) |
$5C-$5D | ptr | 仮想マシン作業用: バイトコードへのポインタ |
$5E | (未使用) | |
$5F | u8 | フェードアウト演出におけるパレット変更間隔 |
$60 | u8 | ワープ処理における星速度制御用 |
$61-$62 | ptr | 現在の面前半の地形の圧縮データへのポインタ |
$63-$64 | ptr | 現在の面後半の地形の圧縮データへのポインタ |
$65-$66 | ptr | 現在の面の地形の特殊セルデータへのポインタ |
$67 | u8 | 野沢ボーナスを既に取得したか (0:false, 1:true) |
$68 | u8 | デライラ同時撃破判定用タイマー |
$69 | u8 | エクステンドした回数 |
$6A | u8 | 現在の地形のパレットアニメーション種別 (0:なし, 1:ローテート, 2:明るくする, 3:暗くする) |
$6B-$6D | (未使用) | |
$6E | u8 | エクステンド音を鳴らす残り回数 |
$6F | u8 | ワープ地形に触れた直後かどうか (0:false, 1:true) |
$70 | u8 | 敵弾の最大数 (1..=8 ) |
$71 | u8 | 敵弾の発射間隔 (0..=7 ) |
$72 | u8 | 敵弾の発射間隔管理用カウンタ |
$73 | u8 | フルパワーの裏技を使っているか (0:false, 1:true) |
$74 | u8 | タイトル画面で Select を入力した回数 |
$75 | u8 | フェードアウト演出における PPU スクロールy 変更量 |
$76 | u8 | 黄金の指アイテムを取得したか (0:false, 1:true) |
$77 | u8 | 現在レーザーを撃っているか (0:false, 1:true) |
$78 | u8 | 現在撃っているレーザーに含まれる弾数 (0..=15 ) |
$79 | u8 | レーザーの下端の座標y |
$7A | u8 | レーザーアイテムを取得したか (0:false, 1:true) |
$7B | u8 | 前フレームでマイク入力を行ったか (0:false, 4:true) |
$7C | u8 | マイク入力認識用タイマー |
$7D | u8 | 前フレームで Select を入力したか (0:false, 0x20:true) |
$7E | u8 | 地上物の爆発オブジェクト生成先インデックス |
$7F | u8 | スターブレインを既に逃がしたか (0:false, 1:true) (自機が死ぬと 0 になる) |
$80 | u8 | タイトル画面からデモに移行するまでのカウント (0..=10 ) (BGM終了後、64F ごとにデクリメント) |
$81 | u8 | デモ入力生成用乱数インデックス |
$82 | u8 | 生のコントローラ入力 (ABSTUDLR) |
$83 | u8 | 敵編隊出現テーブル内インデックス保存用 (自機死亡時の復元に使われる) |
$84 | u8 | 現在行動中の敵の弾抑制フラグ (0:false, 0x01:true) |
$85 | u8 | 現在行動中の敵の弾高速化フラグ (0:false, 0x02:true) |
$86 | u8 | 現在行動中の敵の誘導弾化フラグ (0:false, 0x04:true) |
$87 | u8 | 現在行動中の敵の再行動フラグ (0:false, 0x08:true) (再行動後は 0) |
$88 | u8 | 現在行動中の敵の高速化フラグ (0:false, 0x10:true) |
$89 | u8 | 現在行動中の敵のランク (0..=7 ) |
$8A | u8 | 現在行動中の敵の難易度 |
$8B | u8 | ゼグ破壊数 |
$8C | u8 | 効果音管理用 (低優先度) (bit0-6:効果音ID, bit7:効果音初期化済フラグ) |
$8D | u8 | 効果音管理用 (高優先度) (bit0-6:効果音ID, bit7:効果音初期化済フラグ) |
$8E-$91 | u8[4] | 効果音 各チャンネルの残り再生時間 (F) (BGMとの排他制御用) |
$92 | u8 | 効果音 タイマー1 |
$93 | u8 | 効果音 タイマー2 |
$94 | u8 | 効果音 音符インデックス |
$95 | u8 | bit0-6:BGM ID, bit7:BGM初期化済フラグ |
$96 | u8 | BGM 中断状態管理用 (bit0:中断フラグ, bit7:消音完了フラグ) |
$97-$9C | ptr[3] | BGM 各トラックデータへのポインタ (矩形波1, 矩形波2, 三角波) |
$9D-$9F | u8[3] | BGM 各トラックの音の再生時間 (F) |
$A0-$A2 | u8[3] | BGM 各トラックの音の残り再生時間 (F) |
$A3-$A8 | ptr[3] | BGM 各トラックのループ開始アドレス |
$A9-$AB | u8[3] | BGM 各トラックのループカウンタ |
$AC-$AD | u16 | BGM 作業用変数 (周波数タイマー値) |
$AE | u8 | BGM 作業用変数 (雑用) |
$AF-$B1 | u8[3] | BGM 各トラックの設定値 ($4000 , $4004 , $4008 に書き込まれる) |
$B2-$B4 | u8[3] | BGM 長さカウンタマスク (8 固定。$4003 , $4007 , $400B に書き込む際に OR) |
$B5 | u8 | BGM 現在処理中のトラック (0:矩形波1, 1:矩形波2, 2:三角波) |
$B6 | u8 | BGM 作業用変数 (BGM終了フラグ) |
$B7 | u8 | BGM 作業用変数 (読み出したトラックデータ) |
$B8-$BF | u8[8] | 現在の面の地形設定(前半、後半) |
$C0-$C7 | u8[8] | スコア (1桁1Byte, 上位桁から下位桁へ) |
$C8 | (未使用) | |
$C9 | u8 | 周回数 (0:1周目, 2:2周目) |
$CA-$D1 | u8[8] | ハイスコア (1桁1Byte, 上位桁から下位桁へ) |
$D2 | (未使用) | |
$D3-$DA | u8[8] | ソフトリセット判定用 magic 文字列 ("NONTAMA." が書き込まれる) |
$DB-$FF | (未使用) | |
$0100-$018F | u8[144] | スタック領域 |
$0190-$01DF | u8[80] | 現在の地形に対応する PPU 属性テーブルバッファ |
$01E0-$01FF | u8[32] | パレット |
$0200-$027F | u8[128] | PPU へのデータ転送キュー (低優先度) |
$0280-$02FF | u8[128] | PPU へのデータ転送キュー (高優先度) |
$0300-$03FF | Sprite[64] | スプライトバッファ |
$0400-$0417 | u8[24] | オブジェクト ID |
$0418-$042F | u8[24] | オブジェクト 座標x |
$0430-$0447 | u8[24] | オブジェクト 座標y |
$0448-$045F | u8[24] | オブジェクト メタスプライトID |
$0460-$0477 | u8[24] | オブジェクト 基本メタスプライトID |
$0460-$0477 | u8[24] | (爆発オブジェクトの場合) 爆発タイマー |
$0478-$048F | u8[24] | オブジェクト 仮想マシンのプログラムカウンタ |
$0490-$04A7 | u8[24] | (ザコの場合) 被弾時の仮想マシンのジャンプ先 |
$0490-$04A7 | u8[24] | (ボスの場合) HP |
$04A8-$04BF | u8[24] | オブジェクト 仮想マシンのバイトコードへのポインタ下位 |
$04A8-$04BF | u8[24] | (ルイドの場合) 自機追尾タイマー (32 から 8F に1回デクリメントされ、1 で止まる) |
$04A8-$04BF | u8[24] | (リュークの場合) 自機追尾タイマー (0 から 1F に1回インクリメントされ、0xFF で止まる) |
$04A8-$04BF | u8[24] | (ソープラーの場合) 速度x変更用タイマー |
$04A8-$04BF | u8[24] | (パワーアップアイテムの場合) 水平移動の方向 (0:左, 1:右) |
$04A8-$04BF | u8[24] | (スターブレインのコア/砲台の場合) VRAM空間 (512x480) 内座標x上位 |
$04A8-$04BF | u8[24] | (地上物の爆発オブジェクトの場合) VRAM空間 (512x480) 内座標x |
$04C0-$04D7 | u8[24] | オブジェクト 仮想マシンのバイトコードへのポインタ上位 |
$04C0-$04D7 | u8[24] | (ルイドの場合) 移動方向 (0..=0xF ) |
$04C0-$04D7 | u8[24] | (スターブレインのコア/砲台の場合) VRAM空間 (512x480) 内座標x下位 |
$04D8-$04EF | u8[24] | オブジェクト ボスかどうか (0:false, 非0:true) |
$04F0-$0507 | u8[24] | オブジェクト パーツ番号 |
$04F0-$0507 | u8[24] | (スターブレインの砲台の場合) 向き (0..=0xF ) |
$0508-$051F | u8[24] | オブジェクト x方向の動きを反転するか (0:false, 0xFF:true) |
$0520-$0537 | u8[24] | オブジェクト y方向の動きを反転するか (0:false, 0xFF:true) |
$0520-$0537 | u8[24] | (スターブレインのコア/砲台の場合) VRAM空間 (512x480) 内座標y |
$0538-$054F | u8[24] | オブジェクト 仮想マシンのループカウンタ |
$0538-$054F | u8[24] | (スターブレインの砲台の場合) 弾発射タイマー (0..=16 ) |
$0550-$0567 | u8[24] | オブジェクト 仮想マシンのスリープタイマー |
$0568-$057F | u8[24] | オブジェクト 仮想マシンの自機追尾タイマー |
$0580-$0597 | u8[24] | オブジェクト 仮想マシンのループ開始アドレス |
$0598-$0617 | u8[64][2] | 星の (座標y,座標x) |
$0618 | u8 | 乱数インデックス |
$0619 | u8 | 乱数ルーチン内雑用 |
$061A | (未使用) | |
$061B-$0629 | u8[15] | 自弾 状態 |
$062A-$0638 | u8[15] | 自弾 座標x |
$0639-$0647 | u8[15] | 自弾 座標y |
$0648-$064F | u8[8] | 敵弾 状態 |
$0650-$0657 | u8[8] | 敵弾 座標x |
$0658-$065F | u8[8] | 敵弾 座標y |
$0660-$0667 | u8[8] | 敵弾 方向 |
$0668-$0687 | u8[32] | オブジェクトIDごとのランク (0..=7 ) |
$0688 | u8 | 地形外観変更要求リングバッファ tail |
$0689 | u8 | 地形外観変更要求リングバッファ head |
$068A-$06C9 | u8[64] | 地形外観変更要求リングバッファ |
$06CA-$06D9 | u8[16] | CHR-ROM 内の magic string チェック用 |
$06CA-$07F5 | u8[15][20] | 地形 |
$07F6-$07FF | (未使用) |
$15
- ゲームへの入力ABSTUDLR 形式。
デモ中ならばデモ専用の乱数で生成された入力となる。
デモ中でなければ $82
と同じ値になる。
$1A
- 通知画面中央の文字列表示("BONUS 80000" など)を「通知」と呼ぶ。
通知には以下の種類がある:
通知ID | 内容 |
---|---|
0 | (通知なし) |
1 | "STAGE ?? START" |
2 | "PAUSE" |
3 | "GAME OVER" |
4 | "ATTACK BIG STAR BRAIN" |
5 | "ATTACK STAR BRAIN" |
6 | "BONUS ???????" |
7 | "BRAIN ESCAPED" |
8 | "WARP NEXT STAGE" |
9 | "COMPLETE WARP" |
ボーナス通知(ID:6)の場合、ボーナスIDに対応した文字列が表示される:
ボーナスID | 内容 |
---|---|
0 | "80000" |
1 | "2000000" |
2 | "40000" |
3 | "10000" |
4 | "4000" |
5 | "1000" |
6 | "500" |
7 | "80000" |
$1A
の内容は以下の通り:
通知は通知タイマー $1B
が非0である間表示される。
$3E
- 自機状態ID | 名称 | 説明 |
---|---|---|
0 | 通常状態 | 自機が生存しており、プレイヤー操作可能 |
1 | 小爆発状態1 | 自機が死亡して小爆発中 (1段階目) |
2 | 小爆発状態2 | 自機が死亡して小爆発中 (2段階目) |
3 | 小爆発状態3 | 自機が死亡して小爆発中 (3段階目) |
4 | 小爆発状態4 | 自機が死亡して小爆発中 (4段階目) |
5 | ワープ状態1 | スターブレイン撃破直後、またはワープセルに触れた直後。自機が y=240 まで自動で上へ移動する |
6 | ワープ状態2 | ワープ状態1で自機が y=240 まで移動した後、またはスターブレインが逃走してフェードアウトした後 |
7 | 出撃状態1 | 自機が現在の面に出現した直後 (自機座標y を 240 に設定し、直ちに出撃状態2へ遷移する) |
8 | 出撃状態2 | 自機が現在の面に出現し、自動で上へ移動している状態 |
0x80 | 不在状態 | 自機が死亡して小爆発が終了した直後、または周回クリア時 |
$7C
- マイク入力認識用タイマー普段は 0。マイク入力の変化を検出すると 60 になり、1F で 1 ずつ減少して 0 に戻る。
この値が非0の間、マイク入力が認識される。
on->off, off->on いずれの場合もマイク入力として認識されることに注意。
これは、ファミコンのバージョンによってはマイク入力 bit が反転している問題に対処するため。
(参考: 「助けてハドソン!」とマイク入力 | Colorful Pieces of Game)
$82
- 生のコントローラ入力以下の全入力の論理和(ABSTUDLR 形式):
$0200-$027F
, $0280-$02FF
- PPU へのデータ転送キューPPU へのデータ転送を非同期に行うための機構。
メインスレッドで転送すべきデータをキューに書き込み、NMI スレッドがキューからデータを取り出して実際の転送を行う。
NMI スレッドはキュー $0280-
が空でなければそれを処理し、さもなくばキュー $0200-
を処理する。
データ転送キューの要素は以下のような構造になっている:
フィールド | 型 | 内容 |
---|---|---|
ヘッダ | u8 | 0:キュー終端, 1:横方向へ書き込み, 2:縦方向へ書き込み |
PPUアドレス | u16be | 転送先 PPU アドレスの始点。 |
書き込みサイズ | u8 | |
書き込むデータ | u8[] |
$068A-$06C9
- 地形外観変更要求リングバッファバッファの要素は 2Byte 単位で、以下のような構造になっている:
型 | 内容 |
---|---|
u8 | 列 |
u8 | bit0-3:行, bit4-7:外観変更ルーチンID (テーブル $A29E 参照) |