VRC6 nametable

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
VRC6 nametable
by on (#120022)
「VRC VI VRAM,VROM バンク仕様について」をみて、わかったこととわからなかったことがありますので記載します。不明点は確認が必要ですが、現時点ではなにもしていません。(気が向いたら調査します)

[register global assignments]
CPU address $b003 の register bitfield が記載されていますが、下記と解釈した方が良さそうです。
Code:
bit7   backup RAM (0:disable, 1:enable) #global
bit5:2 depened on bit1:0 #global
bit1:0 VRAM, VROM bank mode #global


[mode 0]
Code:
bit5   must be set 1 (inactive register?)
bit4   must be set 0 (PPU 0x2000-0x2fff is RAM)
bit3:2 nametable A10 output select (0:PPU A10, 1:PPU A11, 2:0, 3:1)


bit4=1 にして nametable 領域から ROM データがでるか確認した方が良さそうです。

[mode 1]
Code:
bit5   charcter ROM capacity expansion bit (1:max 2Mbit, 0:max 4Mbit)
bit4   nametable memory select 0:chracter ROM, 1:cartridge VRAM or system VRAM?
bit3:2 inactive register


mode1,2,3 はカートリッジ内部の PPU 側の ROM (Charcter ROM) を charcter と nametable として兼用可能です。VRAM もバンク制御ができるようになっているようです。
RAM はファミコン本体の VRAM またはカートリッジ内部に増設した VRAM の片方を使用できると思います。VRC6 の pinout を見る限り、VRAM A10 専用の出力がないので、市販品のカートリッジでは 25pin の charcter A10 が VRAM A10 に配線されているものと思われます。(要確認)

カートリッジ内部に VRAM を増設した場合はファミコン内部 VRAM を無効にするので、カードエッジの VRAM CS# は +5V にするものと思われます。

VRAM バンクは bank0-bank7 までの記述がありますが、"外部VRAM 64K-SRAM 使用時"のときであって、 2Mbit まで搭載が可能できるかもしれません。

[mode 1-0, charcter memory max 2Mbit]
1-0 の 1 は bit1:0, 0 は bit5 を指します。

PPU memory map
Code:
0x0000-0x07ff CR0 / charcter ROM bank #0
0x0800-0x0fff CR1 / charcter ROM bank #1
0x1000-0x17ff CR2 / charcter ROM bank #2
0x1800-0x1fff CR3 / charcter ROM bank #3
0x2000-0x23ff CR4 / nametable ROM/RAM bank #0
0x2400-0x27ff CR5 / nametable ROM/RAM bank #1
0x2800-0x2bff CR6 / nametable ROM/RAM bank #2
0x2c00-0x2fff CR7 / nametable ROM/RAM bank #3


charcter ROM address assignment with CR0 to 3
Code:
A17:11 = CRx7:1
A10 = PPU A10 (CRx0 is discarded)
A9:0 = PPU A9:0


nametable ROM/RAM address assignment with CR4 to 7
Code:
A17:10 = CRx7:0
A9:0 = PPU A9:0


[mode 1-1, charcter memory max 4Mbit]
bit5 = 1 の場合の仕様が公式資料ではよくわからなくて、実際に動かさないとわかりません。

PPU memory map
Code:
0x0000-0x1fff mode 1-0 と同じらしい
0x2000-0x2fff よくわからない


charcter ROM address assignment with CR0 to 3
Code:
A18:11 = CRx7:0, (=Chracter A17:10)??
A10:0 = PPU A10:0??


No. 17/18 に (ハード的に外部で接続の変更が必要)と書かれているのは ROM への address bus は 1bit shift する必要があるからだと思われる。

sheet 18/18 の 「VROM バンクについて」の記述では name table ROM bank を 0x400 byte 単位で管理できるような記述があるが、私はうまく理解できない。

「VRAM について」は脱字があって、本来は「VRAM バンクについて」だと思われる。配線方法で定義が変えられると書いてあるので address bus を shift するか否かを基板設計者に任せているものと思われる。

[mode 2]
Code:
bit5   must be set 1 (inactive register?)
bit4   nametable memory select (0:ROM, 1:RAM)
bit3:2 nametable register select


PPU memory map (charcter area)
Code:
0x0000-0x03ff CR0 / charcter ROM bank #0
0x0400-0x07ff CR1 / charcter ROM bank #1
0x0800-0x0bff CR2 / charcter ROM bank #2
0x0c00-0x0fff CR3 / charcter ROM bank #3
0x1000-0x17ff CR4 / charcter ROM bank #4
0x1800-0x1fff CR5 / charcter ROM bank #5


charcter ROM address assignment with CR0 to 3
Code:
A17:10 = CRx7:0
A9:0 = PPU A9:0


charcter ROM address assignment with CR4 and 5
Code:
A17:11 = CRx7:1
A10 = PPU A10
A9:0 = PPU A9:0


[mode 2-0 (2=bit1:0, 1=bit3:2)]
PPU memory map (nametable area)
Code:
0x2000-0x23ff CR6 / nametable RAM/ROM bank #0
0x2400-0x27ff CR7 / nametable RAM/ROM bank #1
0x2800-0x2bff CR6 / nametable RAM/ROM bank #2
0x2c00-0x2fff CR7 / nametable RAM/ROM bank #3


[mode 2-1]
PPU memory map (nametable area)
Code:
0x2000-0x23ff CR6 / nametable RAM/ROM bank #0
0x2400-0x27ff CR6 / nametable RAM/ROM bank #0
0x2800-0x2bff CR7 / nametable RAM/ROM bank #2
0x2c00-0x2fff CR7 / nametable RAM/ROM bank #3


nametable ROM/RAM address assignment with CR6 and 7
Code:
A17:10 = CRx7:0
A9:0 = PPU A9:0


[mode 2-2, 2-3]
未記載。2-2 では CR6, 2-3 では CR7 が nametable にが割り当てられているかもしれない?

[mode 3]
(消しました)
Re: VRC6 nametable
by on (#120051)
[mode 3]
モード2のキャラバンク、VRAMバンク、VROMバンクの機能と同様。ただし、画面構成が異なる。
Code:
bit5   must be set 1
bit4   nametable memory select (0:ROM, 1:RAM)
bit3:2 nametable register selection


PPU memory map (charcter area)
Code:
0x0000-0x1fff mode2 と同じ


[mode 3-0, 0 is bit3:2]
PPU memory map (name table area)
Code:
              even    odd
0x2000-0x23ff CR6   / CR6-1
0x2400-0x27ff CR7   / CR7-1
0x2800-0x2bff CR6+1 / CR6
0x2c00-0x2fff CR7+1 / CR7


[mode 3-1]
Code:
              even    odd
0x2000-0x23ff CR6   / CR6-1
0x2400-0x27ff CR6+1 / CR6
0x2800-0x2bff CR7   / CR7-1
0x2c00-0x2fff CR7+1 / CR7


[mode 3-2]
Code:
              even    odd
0x2000-0x23ff CR6+1 / CR6
0x2400-0x27ff CR7+1 / CR6
0x2800-0x2bff CR6+1 / CR7
0x2c00-0x2fff CR7+1 / CR7


[mode 3-3]
Code:
              even    odd
0x2000-0x23ff CR6   / CR6-1
0x2400-0x27ff CR6   / CR6-1
0x2800-0x2bff CR7   / CR7-1
0x2c00-0x2fff CR7   / CR7-1


[考察]
No.12/18 には「モード2のキャラバンク,VRAMバンク,VROM バンクの機能と同様。ただし画面構成が異なる。」とある。
No.13/18から16/18 のバンクデータが偶数/奇数の時の説明に、VRAM1からVRAM4とあるが VRAM0 から VRAM3 の誤記と判断した。左側は VRAM, VROM の物理アドレスで PPU のメモリアドレスではないと判断した。右側の VRAM BANK の名称が左側と重複するがこれは nametable (= PPU address) と判断した。
CR6 と CR7 のレジスタに書かれる値は加減算が発生しているが、bit0 を反転させるだけなのか、bit7:0 まで反映されるのかが不明なので要調査。

No.16/18 の末尾の文字がかすれている。
Quote:
VROM バンクについても VRAM バンクと同様、上Xの
計算方法で画面に出力されます。
又、内部 VRAM XXXXXX考えらXX


読めない文字は自信はないが下記だと思われる。

Quote:
VROM バンクについても VRAM バンクと同様、上記の
計算方法で画面に出力されます。
又、内部 VRAM についても同様に考えられます。


ここでの内部VRAMはファミコン内部VRAMの意味で、接頭辞がないVRAMはカートリッジ内部増設RAMだと思われる。
Re: VRC6 nametable
by on (#120054)
mode 別 PPU memory map 一覧を作ってみました。
Attachment:
vrc6.png
vrc6.png [ 15.8 KiB | Viewed 8972 times ]
Re: VRC6 nametable
by on (#132563)
I do not understand what is being mapped at PPU $3000-$3FFF.
Re: VRC6 nametable
by on (#132814)
I'm guessing nothing special mapped there, so mirrors of 2000-2FFF, except for the palette?