はじめに
このページは、HVC-001モジュールの実装に関する情報をまとめたものです。
このモジュールは、下記サイトを参考に作成していますので、詳細は下記サイトを参照してください。
PPU
レジスタ一覧
アドレス | レジスタ名 | R/W | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
$2000 | PPU制御1 | W | V | P | H | B | S | I | NT |
$2001 | PPU制御2 | W | R | G | B | SPR | BG | SPL | BGL | GRY |
$2002 | PPUステータス | R | V | HIT | OVR | |
$2003 | スプライトRAMアドレス | W | ADDR |
$2004 | スプライトRAMデータ | W | DATA |
$2005 | スクロール位置 | W | POS |
$2006 | VRAMアドレス | W | ADDR |
$2007 | VRAMデータ | R/W | DATA |
$4000 | 矩形波CH1音色・音量 | W | D | L | E | R |
$4001 | 矩形波CH1スイープ | W | F | S | H | R |
$4002 | 矩形波CH1周波数下位 | W | F |
$4003 | 矩形波CH1周波数上位 | W | C | F |
$4004 | 矩形波CH2音色・音量 | W | D | L | E | R |
$4005 | 矩形波CH2スイープ | W | F | S | H | R |
$4006 | 矩形波CH2周波数下位 | W | F |
$4007 | 矩形波CH2周波数上位 | W | C | F |
$4008 | 三角波音量 | W | F | L |
$400A | 三角波周波数下位 | W | F |
$400B | 三角波周波数上位 | W | C | F |
$400C | ノイズ音量 | W | | L | E | R |
$400E | ノイズ周波数 | W | R | | F |
$400F | ノイズキー | W | C | |
$4010 | DPCM制御1 | W | I | R | | F |
$4011 | DPCM制御2 | W | | F |
$4012 | DPCM制御3 | W | F |
$4013 | DPCM制御4 | W | L |
$4014 | スプライトDMA | W | ADDR |
$4015 | 音声チャンネル制御 | W | | D | N | T | S2 | S1 |
$4015 | キー音ステータス | R | | D | N | T | S2 | S1 |
$4016 | コントローラ1制御 | W | | EXP | C |
$4016 | コントローラ1ステータス | R | | W | T | EXP | S |
$4017 | コントローラ2制御 | W | M | I | | EXP | C |
$4017 | コントローラ2ステータス | R | | EXP | S |
マッパー5(MMC5)
仕様
プログラムROM | サイズ | 最大1024KB |
バンクサイズ | 8/16/16+8/32KBから選択 |
キャラクターROM | サイズ | 最大1024KB |
バンクサイズ | 1/2/4/8KBから選択 |
ワークRAM | サイズ | 最大64KB※2 |
バンクサイズ | 8KB |
アドレス | $6000-$7FFFの他、プログラムROMバンク$8000-$FFFFに割り当て可 |
拡張RAM | モード | 以下から選択
- 第3のネームテーブル
- 分割画面のネームテーブル
- 16384パターン表示モード時の上位6Bitと8x8毎のパレット2Bit
- CPUアクセス可能なRAM
|
サイズ | 1KB |
アドレス |
拡張RAMのモードにより、マッピングされるアドレスが異なる
- CPU時 $5C00-$5FFF
- PPU時 ネームテーブルに割り当てているアドレス
|
ネームテーブルレイアウト設定 | あり |
以下を自由にレイアウト可能
- 本体内蔵のネームテーブル2つ
- 拡張RAMを
- 指定パターンで塗り潰し
|
画面分割 | あり |
指定位置から左側、又は右側に拡張RAMの内容を表示
水平方向は8dot、垂直方向は1dot単位で指定※3
|
割り込み | あり | スクリーン上の絶対行指定とPCMの終了 |
乗算器 | あり | 8bitx8bit(ウェイトなし) |
拡張音源 | あり | 矩形波2ch + PCM(8bit DAC) |
※1 | MMC5はスプライトと背景用のパターンデータを別々に定義することが可能。
スプライト用に512、背景用に256(8KBバンク時のみ512)パターンを使用可。 |
※2 | 32KBのRAMを2つサポート可。 |
※3 | y方向は1dot単位で指定できるが、8の倍数でない時に特殊な表示となるため、綺麗なスクロールは無理(演出などで使用できるかも) |
レジスタ一覧
アドレス | レジスタ名 | R/W | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
$5000 | 矩形波1コントロール | W | DUTY | KE | ENA | RATE |
$5002 | 矩形波1周波数下位 | W | FREQ |
$5003 | 矩形波1周波数上位 | W | KEY | FREQ |
$5004 | 矩形波2コントロール | W | DUTY | KE | ENA | RATE |
$5006 | 矩形波2周波数下位 | W | FREQ |
$5007 | 矩形波2周波数上位 | W | KEY | FREQ |
$5010 | PCMステータス | R | IRQ | |
$5010 | PCM設定 | W | ENA | | MODE |
$5011 | PCMデータ | W | DAC |
$5015 | 拡張音源ステータス | R | | KEY2 | KEY1 |
$5015 | 拡張音源設定 | W | | ENA2 | ENA1 |
$5100 | プログラムROMマッピングモード | W | | MODE |
$5101 | キャラクターROMマッピングモード | W | | MODE |
$5102 | ワークRAM書き込み保護1 | W | | WP1 |
$5103 | ワークRAM書き込み保護2 | W | | WP2 |
$5104 | 拡張RAMモード | W | | MODE |
$5105 | ネームテーブルマッピング | W | NT3 | NT2 | NT1 | NT0 |
$5106 | 塗り潰しパターン | W | PATTERN |
$5107 | 塗り潰し属性 | W | ATTR |
$5113 | ワークRAMマッピング | W | | CHIP | BANK |
$5114 | プログラムバンク1 | W | ROM | BANK |
$5115 | プログラムバンク2 | W | ROM | BANK |
$5116 | プログラムバンク3 | W | ROM | BANK |
$5117 | プログラムバンク4 | W | ROM | BANK |
$5120 | スプライト用バンク1 | W | BANK |
$5121 | スプライト用バンク2 | W | BANK |
$5122 | スプライト用バンク3 | W | BANK |
$5123 | スプライト用バンク4 | W | BANK |
$5124 | スプライト用バンク5 | W | BANK |
$5125 | スプライト用バンク6 | W | BANK |
$5126 | スプライト用バンク7 | W | BANK |
$5127 | スプライト用バンク8 | W | BANK |
$5128 | 背景用バンク1 | W | BANK |
$5129 | 背景用バンク2 | W | BANK |
$512A | 背景用バンク3 | W | BANK |
$512B | 背景用バンク4 | W | BANK |
$5130 | ワークRAMバンク上位ビット | W | | HI |
$5200 | 画面分割設定 | W | ENA | DIR | | XPOS |
$5201 | 画面分割y座標 | W | YPOS |
$5202 | 画面分割キャラクターROMバンク | W | BANK |
$5203 | 割り込み発生行 | W | LINE |
$5204 | 割り込みステータス | R | PEN | FRM | |
$5204 | 割り込み設定 | W | ENA | |
$5205 | 被乗数・演算結果下位 | R/W | MUL |
$5206 | 乗数・演算結果上位 | R/W | MUL |
ワークRAM管理
32KBRAMを2つサポートし、最大64KBまで実装可。
8KBを1バンクとし、CPUアドレス$6000-$7FFF、プログラムバンクのアドレスへマッピング可。
プログラムROM管理
▼マッピングモード($5100)
MODE |
プログラムバンクのマッピングモード。
プログラムバンクの切り替えは、MODEを指定後、プログラムバンク設定1-4へ書き込みにより行われる。
値 | 説明 |
0 | 32KB |
1 | 16KB |
2 | 16KB + 8KB x 2 |
3 | 8KB |
|
address | モード0 | | モード1 | | モード2 | | モード3 | | | | |
$8000 | | | | | | | | | | $5114 |
$A000 | | | | | | | | | | $5115 |
$C000 | | | | | | | | | | $5116 |
$F000 | | | | | | | | | | $5117 |
▼プログラムバンク設定1($5114)
ビット |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ROM | BANK |
1 | プログラムバンク数-1 |
|
書き込み |
初期値 |
▼プログラムバンク設定2($5115)
ビット |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ROM | BANK |
1 | プログラムバンク数-1 |
|
書き込み |
初期値 |
▼プログラムバンク設定3($5116)
ビット |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ROM | BANK |
1 | プログラムバンク数-1 |
|
書き込み |
初期値 |
▼プログラムバンク設定4($5117)
ビット |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ROM | BANK |
1 | プログラムバンク数-1 |
|
書き込み |
初期値 |
ROM | マッピング対象。
|
BANK |
マッピング対象のバンク番号で、。 |
キャラクターROM管理
▼マッピングモード($5101)
MODE |
プログラムバンクのマッピングモード。
MODEを変更しても、キャラクターバンクは切り替わらない。
プログラムバンクの切り替えは、プログラムバンク設定1-4を使用すること。
値 | 説明 |
0 | 32KB |
1 | 16KB |
2 | 16KB + 8KB x 2 |
3 | 8KB |
|
スプライト用マッピングモード毎のバンク
address | モード0 | | モード1 | | モード2 | | モード3 | | | | |
$0000 | | | | | | | | | | $5120 |
$0400 | | | | | | | | | | $5121 |
$0800 | | | | | | | | | | $5122 |
$0C00 | | | | | | | | | | $5123 |
$1000 | | | | | | | | | | $5124 |
$1400 | | | | | | | | | | $5125 |
$1800 | | | | | | | | | | $5126 |
$1C00 | | | | | | | | | | $5127 |
背景用マッピングモード毎のバンク
address | モード0 | | モード1 | | モード2 | | モード3 | | | | |
$0000 | | | | | | | | | | $5128 |
$0400 | | | | | | | | | | $5129 |
$0800 | | | | | | | | | | $512A |
$0C00 | | | | | | | | | | $512B |
$1000 | | | | | | | | | | |
$1400 | | | | | | | | | | $0000-$0FFF ミラー |
$1800 | | | | | | | | | | |
$1C00 | | | | | | | | | | |
▼スプライト用キャラクターバンク設定1($5120)
▼スプライト用キャラクターバンク設定2($5121)
▼スプライト用キャラクターバンク設定3($5122)
▼スプライト用キャラクターバンク設定4($5123)
▼スプライト用キャラクターバンク設定5($5124)
▼スプライト用キャラクターバンク設定6($5125)
▼スプライト用キャラクターバンク設定7($5126)
▼スプライト用キャラクターバンク設定8($5127)
▼背景用キャラクターバンク設定1($5128)
▼背景用キャラクターバンク設定2($5129)
▼背景用キャラクターバンク設定3($512A)
▼背景用キャラクターバンク設定4($512B)
拡張RAM
拡張RAMは、いくつかのモードがあり、CPUからのみアクセス可能なモードと、PPUからのみアクセス可能なモードがあります。
CPUからアクセスできる時は、5C00-$5FFFへマッピングされ、PPUからアクセスできる時はネームテーブルへマッピングしているアドレスからアクセスします。
また、モード毎の使用目的は以下になります。
-
ネームテーブル拡張
本内内蔵のネームテーブルとは別に、第3のネームテーブルとして使用
-
画面分割時のネームテーブル
画面分割をした時に表示する領域のネームテーブルとして使用
-
ネームテーブルの属性拡張
パターンデータの定義数が256から16384へ拡張され、8x8ごとにパレットの指定が可能になるモードで、パターン番号の上位6bitとパレット番号の2bitのために使用