はじめに
このページは、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のために使用