|
|
(56 intermediate revisions by 7 users not shown) |
Line 1: |
Line 1: |
| [[Category:ASIC mappers]] | | #REDIRECT [[INES Mapper 019]] |
| The '''Namco 106''' group are [[:Category:ASIC mappers|ASIC]] [[MMC|mappers]]. The Namco 129 and 163 with expansion sound are assigned to [[INES Mapper 019|iNES Mapper 19]], while simpler variants using the Namco 175 and 340 ICs have simpler mirroring and are assigned to [[iNES Mapper 210]].
| | [[Category:Mappers with CHR ROM and CHR RAM]][[Category:Mappers using $4020-$5FFF]][[Category:ASIC mappers]][[Category:Mappers with ROM nametables]][[Category:Mappers with cycle IRQs]][[Category:Mappers with single-screen mirroring]] |
| | |
| == Overview ==
| |
| * PRG ROM size: Up to 512 KB
| |
| * PRG ROM bank size: 8 KB
| |
| * PRG RAM: Up to 8 KB
| |
| * CHR capacity: Up to 256 KB ROM and/or 32 KB RAM simultaneously [[Category:Mappers with CHR RAM]]
| |
| * CHR bank size: 1 KB
| |
| * Nametable [[mirroring]]: Controlled by mapper (Mapper 19), hardwired (Mapper 210)
| |
| * Subject to [[bus conflict]]s: No
| |
| | |
| == Banks ==
| |
| * CPU $6000-$7FFF: 8 KB PRG RAM bank
| |
| * CPU $8000-$9FFF: 8 KB switchable PRG ROM bank
| |
| * CPU $A000-$BFFF: 8 KB switchable PRG ROM bank
| |
| * CPU $C000-$DFFF: 8 KB switchable PRG ROM bank
| |
| * CPU $E000-$FFFF: 8 KB PRG ROM bank, fixed to the last bank
| |
| * PPU $0000-$03FF: 1 KB switchable CHR bank
| |
| * PPU $0400-$07FF: 1 KB switchable CHR bank
| |
| * PPU $0800-$0BFF: 1 KB switchable CHR bank
| |
| * PPU $0C00-$0FFF: 1 KB switchable CHR bank
| |
| * PPU $1000-$13FF: 1 KB switchable CHR bank
| |
| * PPU $1400-$17FF: 1 KB switchable CHR bank
| |
| * PPU $1800-$1BFF: 1 KB switchable CHR bank
| |
| * PPU $1C00-$1FFF: 1 KB switchable CHR bank
| |
| | |
| == Registers ==
| |
| | |
| The n106 has 19 registers within $4800-$FFFF, except $6000-$7FFF which is WRAM. Each register occupies a range of $800 bytes, so $4800-$4FFF all refers to one register, $5000-$57FF all refers to another register, and so on.
| |
| | |
| === Sound Data Port ($4800-$4FFF) r/w (Namco 129,163 only) ===
| |
| See [[Namco 163 audio]].
| |
| | |
| === IRQ Counter (low) ($5000-$57FF) r/w (Namco 129,163 only) ===
| |
| 7 bit 0
| |
| ---- ----
| |
| IIII IIII
| |
| |||| ||||
| |
| ++++-++++- Low 8 bits of IRQ counter
| |
| | |
| === IRQ Counter (high) / IRQ Enable ($5800-$5FFF) r/w (Namco 129,163 only) ===
| |
| 7 bit 0
| |
| ---- ----
| |
| EIII IIII
| |
| |||| ||||
| |
| |+++-++++- High 7 bits of IRQ counter
| |
| +--------- IRQ Enable: (0: disabled; 1: enabled)
| |
| | |
| === CHR Select 1 ($8000-$87FF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| CCCC CCCC
| |
| |||| ||||
| |
| ++++-++++- Select 1KB page of CHR-ROM or CHR-RAM at $0000
| |
| '''Note:''' Pages $E0-$FF are CHR-RAM, as long as $E800.6 is set to 0. If $E800.6 is set to 1, then pages $E0-$FF refer to the last $20 pages of CHR-ROM as you'd expect.
| |
| | |
| === CHR Select 2 ($8800-$88FF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| CCCC CCCC
| |
| |||| ||||
| |
| ++++-++++- Select 1KB page of CHR-ROM or CHR-RAM at $0400
| |
| '''Note:''' Pages $E0-$FF are CHR-RAM, as long as $E800.6 is set to 0. If $E800.6 is set to 1, then pages $E0-$FF refer to the last $20 pages of CHR-ROM as you'd expect.
| |
| | |
| === CHR Select 3 ($9000-$97FF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| CCCC CCCC
| |
| |||| ||||
| |
| ++++-++++- Select 1KB page of CHR-ROM or CHR-RAM at $0800
| |
| '''Note:''' Pages $E0-$FF are CHR-RAM, as long as $E800.6 is set to 0. If $E800.6 is set to 1, then pages $E0-$FF refer to the last $20 pages of CHR-ROM as you'd expect.
| |
| | |
| === CHR Select 4 ($9800-$9FFF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| CCCC CCCC
| |
| |||| ||||
| |
| ++++-++++- Select 1KB page of CHR-ROM or CHR-RAM at $0C00
| |
| '''Note:''' Pages $E0-$FF are CHR-RAM, as long as $E800.6 is set to 0. If $E800.6 is set to 1, then pages $E0-$FF refer to the last $20 pages of CHR-ROM as you'd expect.
| |
| | |
| === CHR Select 5 ($A000-$A7FF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| CCCC CCCC
| |
| |||| ||||
| |
| ++++-++++- Select 1KB page of CHR-ROM or CHR-RAM at $1000
| |
| '''Note:''' Pages $E0-$FF are CHR-RAM, as long as $E800.7 is set to 0. If $E800.7 is set to 1, then pages $E0-$FF refer to the last $20 pages of CHR-ROM as you'd expect.
| |
| | |
| === CHR Select 6 ($A800-$AFFF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| CCCC CCCC
| |
| |||| ||||
| |
| ++++-++++- Select 1KB page of CHR-ROM or CHR-RAM at $1400
| |
| '''Note:''' Pages $E0-$FF are CHR-RAM, as long as $E800.7 is set to 0. If $E800.7 is set to 1, then pages $E0-$FF refer to the last $20 pages of CHR-ROM as you'd expect.
| |
| | |
| === CHR Select 7 ($B000-$B7FF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| CCCC CCCC
| |
| |||| ||||
| |
| ++++-++++- Select 1KB page of CHR-ROM or CHR-RAM at $1800
| |
| '''Note:''' Pages $E0-$FF are CHR-RAM, as long as $E800.7 is set to 0. If $E800.7 is set to 1, then pages $E0-$FF refer to the last $20 pages of CHR-ROM as you'd expect.
| |
| | |
| === CHR Select 8 ($B800-$BFFF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| CCCC CCCC
| |
| |||| ||||
| |
| ++++-++++- Select 1KB page of CHR-ROM or CHR-RAM at $1C00
| |
| '''Note:''' Pages $E0-$FF are CHR-RAM, as long as $E800.7 is set to 0. If $E800.7 is set to 1, then pages $E0-$FF refer to the last $20 pages of CHR-ROM as you'd expect.
| |
| | |
| === Nametable Select 1 ($C000-$C7FF) w (Namco 129,163 only) ===
| |
| 7 bit 0
| |
| ---- ----
| |
| NNNN NNNN
| |
| |||| ||||
| |
| ++++-++++- Select nametable at $2000:
| |
| $00-$DF: Use a 1KB page of CHR-ROM as a nametable
| |
| $E0-$FF: Use the NES's internal nametables (even values for A, odd values for B)
| |
| '''Note:''' On mapper 210, this register has no effect.
| |
| | |
| === External PRG RAM enable ($C000-$C7FF) w (Namco 175 (340?) only) ===
| |
| 7 bit 0
| |
| ---- ----
| |
| .... ...E
| |
| |
| |
| +- 1: Enable PRG RAM
| |
| | |
| === Nametable Select 2 ($C800-$CFFF) w (Namco 129,163 only) ===
| |
| 7 bit 0
| |
| ---- ----
| |
| NNNN NNNN
| |
| |||| ||||
| |
| ++++-++++- Select nametable at $2400:
| |
| $00-$DF: Use a 1KB page of CHR-ROM as a nametable
| |
| $E0-$FF: Use the NES's internal nametables (even values for A, odd values for B)
| |
| '''Note:''' On mapper 210, this register has no effect.
| |
| | |
| === Nametable Select 3 ($D000-$D7FF) w (Namco 129,163 only) ===
| |
| 7 bit 0
| |
| ---- ----
| |
| NNNN NNNN
| |
| |||| ||||
| |
| ++++-++++- Select nametable at $2800:
| |
| $00-$DF: Use a 1KB page of CHR-ROM as a nametable
| |
| $E0-$FF: Use the NES's internal nametables (even values for A, odd values for B)
| |
| '''Note:''' On mapper 210, this register has no effect.
| |
| | |
| === Nametable Select 4 ($D800-$DFFF) w (Namco 129,163 only) ===
| |
| 7 bit 0
| |
| ---- ----
| |
| NNNN NNNN
| |
| |||| ||||
| |
| ++++-++++- Select nametable at $2C00:
| |
| $00-$DF: Use a 1KB page of CHR-ROM as a nametable
| |
| $E0-$FF: Use the NES's internal nametables (even values for A, odd values for B)
| |
| '''Note:''' On mapper 210, this register has no effect.
| |
| | |
| === PRG Select 1 ($E000-$E7FF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| MMPP PPPP
| |
| |||| ||||
| |
| ||++-++++- Select 8KB page of PRG-ROM at $8000
| |
| |+-------- Namco 129, 163 only: Disable sound if set
| |
| ++-------- Namco 340 only: Select mirroring
| |
| 0: One-screen A
| |
| 1: Vertical
| |
| 2: Horizontal
| |
| 3: One-screen B
| |
| | |
| === PRG Select 2 / CHR-RAM Enable ($E800-$EFFF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| HLPP PPPP
| |
| |||| ||||
| |
| ||++-++++- Select 8KB page of PRG-ROM at $A000
| |
| |+-------- Disable CHR-RAM at $0000-$0FFF (Namco 129, 163 only)
| |
| | 0: Pages $E0-$FF are CHR-RAM
| |
| | 1: Pages $E0-$FF are the last $20 banks of CHR-ROM)
| |
| +--------- Disable CHR-RAM at $1000-$1FFF (Namco 129, 163 only)
| |
| 0: Pages $E0-$FF are CHR-RAM
| |
| 1: Pages $E0-$FF are the last $20 banks of CHR-ROM)
| |
| | |
| === PRG Select 3 ($F000-$F7FF) w ===
| |
| 7 bit 0
| |
| ---- ----
| |
| ..PP PPPP
| |
| || ||||
| |
| ++-++++- Select 8KB page of PRG-ROM at $C000
| |
| | |
| === Write Protect for External RAM AND Sound Address Port ($F800-$FFFF) w (Namco 129, 163 only) ===
| |
| 7 bit 0
| |
| ---- ----
| |
| KKKK DCBA
| |
| |||| ||||
| |
| |||| |||+- 1: Write-protect 2kB window of external RAM from $6000-$67FF (0: write enable)
| |
| |||| ||+-- 1: Write-protect 2kB window of external RAM from $6800-$6FFF (0: write enable)
| |
| |||| |+--- 1: Write-protect 2kB window of external RAM from $7000-$77FF (0: write enable)
| |
| |||| +---- 1: Write-protect 2kB window of external RAM from $7800-$7FFF (0: write enable)
| |
| ++++------ Must = b0100 to enable writes
| |
| Also see [[Namco 163 audio]].
| |
| | |
| == IRQ Operation ==
| |
| The IRQ is a 15-bit CPU cycle up-counter. $5000 and $5800 provide ''direct'' access to the counter itself (i.e., this isn't a reload value). Games can read and write to these registers in realtime.
| |
| | |
| The IRQ counter increments on each CPU cycle. Upon reaching $7FFF, an IRQ is fired. However, it is unknown if the counter wraps to $0000 afterwards. Reading/Writing to $5000 or $5800 will acknowledge any pending IRQs.
| |
| | |
| == References ==
| |
| All of the below are in Japanese:
| |
| *[http://forums.nesdev.org/viewtopic.php?p=77795#77795 Naruko's post to the forum]
| |
| *[http://unagi.sourceforge.jp/cgi-bin/hiki/hiki.cgi?163_namco Wiki on same]
| |
| *[http://d.hatena.ne.jp/na6ko/20110501/1304181038 Naruko's blog's post on mirroring on the 340]
| |
| *[http://d.hatena.ne.jp/na6ko/20110430/1304099059 Naruko's blog's post on the write protect register at $F800]
| |