6.I/Oレジスタ




○I/Oレジスタマップ
アドレスRead/Write内容
$2000WPPUコントロールレジスタ1
bit7: VBlank時にNMIを実行(0:実行しない,1:実行する)
bit6: PPUマスター/スレーブセレクト(常に1にする)
bit5: スプライトサイズ(0:8x8,1:8x16)
bit4: BGパターンテーブルアドレス(0:$0000,1:$1000)
bit3: スプライトパターンテーブルアドレス(0:$0000,1:$1000)
bit2: PPUアドレスインクリメント(0:+1,1:+32)
bit1-0: 表示するネームテーブルアドレス番号
$2001WPPUコントロールレジスタ2
bit7-5: bit0=1のとき背景色/bit0=1のとき色強調
000:なし
001:緑
010:青
100:赤
それ以外の数字は不可
bit4: スプライト表示(0:非表示,1:表示)
bit3: BG表示(0:非表示,1:表示)
bit2: スプライトクリップ(0:画面の左8ドットを表示しない,1:クリップなし)
bit1: BGクリップ(0:画面の左8ドットを表示しない,1:クリップなし)
bit0: ディスプレイタイプ(0:カラー,1:モノクロ)
$2002RPPUステータスレジスタ
bit7: VBlank発生(1:VBlank中、ただしRead後0クリアされる)
bit6: スプライト#0ヒット(0:ヒットなし,1:ヒット)
bit5: スキャンラインスプライト数(0:8個以下,1:9個以上)
bit4: VRAM書きこみフラグ(0:書き込み成功,1:書き込み失敗)
$2003WスプライトRAMアドレスレジスタ
$2004を使ってスプライトRAMに書きこむアドレスを指定する。
$2004WスプライトI/Oレジスタ
$2003で指定したスプライトRAMにデータを書きこむ
$2005WVRAMアドレスレジスタ1
BGのスクロール値をセットする。
このレジスタは2度書きレジスタでXのスクロール値、Yのスクロール値の順でセットする。
$2002をReadするとセットの順番はリセットされ、X値をセットする番になっている。
$2006WVRAMアドレスレジスタ2
$2007を使ってVRAMに書きこむアドレスを指定する。
このレジスタは2度書きレジスタで上位8bit、下位8bitの順でセットする。
$2002をReadするとセットの順番はリセットされ、上位8bitをセットする番になっている。
$2007R/W$2006で指定したアドレスのVRAMデータを読み書きする。
読み書き後$2000のbit2の値により、VRAMアドレスが1または32足される。
$4000R/W矩形波チャンネル1制御レジスタ1
bit7-6: Dutyサイクル(positive/negative)
00: 2/14
01: 4/12
10: 8/ 8
11:12/ 4
bit5: エンベロープDecayループ/長さカウンタ無効(1:ループ/無効)
bit4: エンベロープDecay無効(1:無効,0:有効)
bit3-0: ボリューム/Decayレート
$4001R/W矩形波チャンネル1制御レジスタ2
bit7: スイープ有効(0:無効,1:有効)
bit6-4: スイープレート
bit3: スイープ方向(1:decrease,0:increase)
bit2-0: スイープ右シフト値
$4002R/W矩形波チャンネル1周波数レジスタ1
チャンネル1で使う周波数の下位8bitをセットする。
$4003R/W矩形波チャンネル1周波数レジスタ2
bit7-3: 音の長さ
bit2-0: 周波数の上位3bit
$4004R/W矩形波チャンネル2制御レジスタ1
bit7-6: Dutyサイクル(positive/negative)
00: 2/14
01: 4/12
10: 8/ 8
11:12/ 4
bit5: エンベロープDecayループ/長さカウンタ無効(1:ループ/無効)
bit4: エンベロープDecay無効(1:無効,0:有効)
bit3-0: ボリューム/Decayレート
$4005R/W矩形波チャンネル2制御レジスタ2
bit7: スイープ有効(0:無効,1:有効)
bit6-4: スイープレート
bit3: スイープ方向(1:decrease,0:increase)
bit2-0: スイープ右シフト値
$4006R/W矩形波チャンネル2周波数レジスタ1
チャンネル1で使う周波数の下位8bitをセットする。
$4007R/W矩形波チャンネル2周波数レジスタ2
bit7-3: 音の長さ
bit2-0: 周波数の上位3bit
$4008R/W三角波制御レジスタ1
bit7: リニアカウンタスタート
bit6-0: リニアカウンタ
$4009未使用
$400AR/W三角波周波数レジスタ1
チャンネル1で使う周波数の下位8bitをセットする。
$400BR/W三角波周波数レジスタ2
bit7-3: 音の長さ
bit2-0: 周波数の上位3bit
$400CR/Wノイズ制御レジスタ1
bit7-6: 未使用
bit5: エンベロープDecayループ/長さカウンタ無効(1:ループ/無効)
bit4: エンベロープDecay無効(1:無効,0:有効)
bit3-0: ボリューム/Decayレート
$400D未使用
$400ER/Wノイズ周波数レジスタ1
bit7: 乱数タイプ選択(0:32Kmode,1:93bitmode)
bit6-4: 未使用
bit3-0: 波長選択
$400FR/Wノイズ周波数レジスタ2
bit7-3: 音の長さ
bit2-0: 未使用
$4010R/WDMC制御レジスタ1
$4011R/WDMC制御レジスタ2
$4012R/WDMCアドレスレジスタ
$4013R/WDMCデータ長レジスタ
$4014WスプライトDMAレジスタ
メモリからスプライトRAMへDMA転送を行う
このレジスタに書きこんだ値をNをすると、
N×$100のアドレスから256バイトをスプライトRAMへ転送する。
$4015R/Wサウンドレジスタ
bit7: DMC(Delta Modulation Channel)のIRQステータス(Readのみ)
bit4: DMC(0:無効,1:有効)
bit3: ノイズチャンネル(0:無効,1:有効)
bit2: 三角波チャンネル(0:無効,1:有効)
bit1: 矩形波チャンネル2(0:無効,1:有効)
bit0: 矩形波チャンネル1(0:無効,1:有効)
$4016R/WパッドI/O1
bit4: ガンコントリガー(0:ON,1:OFF)
bit3: ガンコンスプライト検出(0:検出なし,1:検出)
bit0: パッドデータ(0:OFF,1:ON)
$4017R/WパッドI/O2
bit4: ガンコントリガー(0:ON,1:OFF)
bit3: ガンコンスプライト検出(0:検出なし,1:検出)
bit0: パッドデータ(0:OFF,1:ON)