INES Mapper 083: Difference between revisions
(ew) |
m (defaultsort) |
||
(12 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:iNES Mappers | {{DEFAULTSORT:083}}[[Category:iNES Mappers]][[Category:Mappers with cycle IRQs]][[Category:Mappers with large PRG RAM]] | ||
[[iNES Mapper | iNES Mapper 83 is used for games from Cony, also known as Yoko. There are three somewhat incompatible subtypes, denoted by [[NES 2.0 submappers/Proposals#083:_Cony|submappers]], although the proper subtype is easy to heuristically discern by looking at the CHR-ROM size: | ||
* 256 KiB CHR-ROM => '''Submapper 0''' (1 KiB CHR-ROM banking, no WRAM) | |||
** Street Fighter II Pro/Street Blaster II Pro | |||
** Street Fighter IV Pro 10/Street Blaster IV Pro 10 | |||
** Street Blaster V Turbo 20 | |||
** Street Fighter X Turbo 40 | |||
** Fatal Fury 2/餓狼伝説 2 | |||
** Fatal Fury 2'/餓狼伝説 2' | |||
* 512 KiB CHR-ROM => '''Submapper 1''' (2 KiB CHR-ROM banking, no WRAM) | |||
** Super Blaster VII Turbo 28 | |||
** World Heroes 2/快打英雄榜 2 | |||
** World Heroes 2 Pro//快打英雄榜 2 Pro | |||
* 1024 KiB CHR-ROM => '''Submapper 2''' (1 KiB CHR-ROM banking with outer bank, 32 KiB banked WRAM) | |||
** Dragon Ball Party | |||
A fourth Yoko mapper, functionally similar but with different register addresses, has been assigned to [[NES 2.0 Mapper 264]]. | |||
=Registers= | |||
==Mode Register ($8100, write)== | |||
Mask: $8300 | |||
7654 3210 | |||
--------- | |||
ED6M M.mm | |||
|||| | ++- Select nametable mirroring type | |||
|||| | 0: Vertical | |||
|||| | 1: Horizontal | |||
|||| | 2: One screen, page 0 | |||
|||| | 3: One screen, page 1 | |||
|||+-+---- Select PRG banking mode | |||
||| 0: 16 KiB PRG-ROM bank at $8000-$BFFF, determined by PRG register 4 ($8000) | |||
||| 16 KiB PRG-ROM bank at $C000-$FFFF, fixed to last bank | |||
||| 1: 32 KiB PRG-ROM bank at $8000-$FFFF, determined by PRG register 4 ($8000) SHR 1 | |||
||| 2: 8 KiB PRG-ROM bank at $8000-$9FFF, determined by PRG register 0 ($8300) | |||
||| 8 KiB PRG-ROM bank at $A000-$BFFF, determined by PRG register 1 ($8301) | |||
||| 8 KiB PRG-ROM bank at $C000-$DFFF, determined by PRG register 2 ($8302) | |||
||| 8 KiB PRG-ROM bank at $E000-$FFFF, fixed to last bank | |||
||| 3: same as mode 2 | |||
||+------- '''Submappers 0 and 1''': Enable/disable 8 KiB PRG-ROM at $6000-$7FFF | |||
|| 0: Disabled, open bus at $6000-$7FFF | |||
|| 1: 8 KiB PRG-ROM bank at $6000-$7FFF, determined by PRG register 3 | |||
|| '''Submapper 2''': no function | |||
|+-------- IRQ counting mode | |||
| 0: Increment | |||
| 1: Decrement | |||
+--------- IRQ Enable latch | |||
0: Disabled | |||
1: Enabled | |||
In '''Submapper 2''', PRG banking as described above applies to the inner bank within | |||
the 256 KiB outer bank selected by the Outer Bank register ($8000) bits 4-5. | |||
No | ==PRG-ROM registers 0-3 ($8300-$8303, write)== | ||
Mask: $8313 | |||
$8300: PRG register 0 (8 KiB PRG-ROM bank at $8000-$9FFF in PRG banking mode 2) | |||
$8301: PRG register 1 (8 KiB PRG-ROM bank at $A000-$BFFF in PRG banking mode 2) | |||
$8302: PRG register 2 (8 KiB PRG-ROM bank at $C000-$DFFF in PRG banking mode 2) | |||
$8303: PRG register 3 (8 KiB PRG-ROM bank at $6000-$7FFF if Mode Register ($8100) bit 5 is set | |||
('''Submappers 0 and 1''' only) | |||
==PRG-ROM register 4/Outer Bank register ($8000, write)== | |||
Mask: $8300 | |||
7654 3210 | |||
--------- | |||
WWOO PPPP | |||
|||| ++++- Select 16 KiB PRG-ROM bank at CPU $8000-$BFFF in PRG mode 0 | |||
|||| +++-- Select 32 KiB PRG-ROM bank at CPU $8000-$FFFF in PRG mode 1 | |||
||++------ '''Submapper 2''' only: Select 256 KiB Outer PRG/CHR-ROM bank | |||
++-------- '''Submapper 2''' only: Select 8 KiB WRAM bank at CPU $6000-$7FFF | |||
==CHR-ROM registers ($8310-$8317, write)== | |||
Mask: $831F | |||
'''Submapper 0 and 2''': | |||
$8310: Select 1 KiB CHR-ROM bank at PPU $0000-$03FF | |||
$8311: Select 1 KiB CHR-ROM bank at PPU $0400-$07FF | |||
$8312: Select 1 KiB CHR-ROM bank at PPU $0800-$0BFF | |||
$8313: Select 1 KiB CHR-ROM bank at PPU $0C00-$0FFF | |||
$8314: Select 1 KiB CHR-ROM bank at PPU $1000-$13FF | |||
$8315: Select 1 KiB CHR-ROM bank at PPU $1400-$17FF | |||
$8316: Select 1 KiB CHR-ROM bank at PPU $1800-$1BFF | |||
$8317: Select 1 KiB CHR-ROM bank at PPU $1C00-$1FFF | |||
$8318-$831F: No function | |||
In '''Submapper 2''', these registers select the inner CHR-ROM bank, while the Outer Bank register ($8000) bits 4-5 select the 256 KiB outer CHR-ROM bank. | |||
'''Submapper 1''': | |||
$8310: Select 2 KiB CHR-ROM bank at PPU $0000-$07FF | |||
$8311: Select 2 KiB CHR-ROM bank at PPU $0800-$0FFF | |||
$8312-$8315: No function | |||
$8316: Select 2 KiB CHR-ROM bank at PPU $1000-$17FF | |||
$8317: Select 2 KiB CHR-ROM bank at PPU $1800-$1FFF | |||
$8318-$831F: No function | |||
==DIP Switch ($5000, read)== | |||
Mask: probably $DF00 | |||
7654 3210 | |||
--------- | |||
.... ..DD | |||
++- DIP switch setting | |||
Several games display different names (''Street Fighter'' versus ''Street Blaster'') depending on the DIP switch setting. Some games will display a garbled title screen | |||
at some DIP switch settings, and the "good" setting is not always 0 or 3! | |||
==Scratch RAM ($5100-$5FFF, read/write)== | |||
Mask: probably $DF03 | |||
$5xx0: Scratch RAM byte #0 | |||
$5xx1: Scratch RAM byte #1 | |||
$5xx2: Scratch RAM byte #2 | |||
$5xx3: Scratch RAM byte #3 | |||
==IRQ Acknowledge and Counter Low ($8200)== | |||
Mask: $8301 | |||
A write directly changes the low eight bits of the 16-bit IRQ counter and acknowledges the IRQ. | |||
==IRQ Enable and Counter High ($8201)== | |||
Mask: $8301 | |||
A write directly changes the high eight bits of the 16-bit IRQ counter, and copies bit 7 of the Mode register | |||
to the actual IRQ Enable register (which is not directly accessible). | |||
=IRQ Operation= | |||
If the IRQ counter is enabled (by writing a value to $8201 after setting bit 7 in the Mode register), and the counter is not zero, the counter is increased (Mode register bit 6 clear) or decreased (Mode register bit 6 set) on every M2 cycle. If it reaches zero, an IRQ is raised, and the IRQ counter is automatically disabled. |
Latest revision as of 18:50, 24 April 2019
iNES Mapper 83 is used for games from Cony, also known as Yoko. There are three somewhat incompatible subtypes, denoted by submappers, although the proper subtype is easy to heuristically discern by looking at the CHR-ROM size:
- 256 KiB CHR-ROM => Submapper 0 (1 KiB CHR-ROM banking, no WRAM)
- Street Fighter II Pro/Street Blaster II Pro
- Street Fighter IV Pro 10/Street Blaster IV Pro 10
- Street Blaster V Turbo 20
- Street Fighter X Turbo 40
- Fatal Fury 2/餓狼伝説 2
- Fatal Fury 2'/餓狼伝説 2'
- 512 KiB CHR-ROM => Submapper 1 (2 KiB CHR-ROM banking, no WRAM)
- Super Blaster VII Turbo 28
- World Heroes 2/快打英雄榜 2
- World Heroes 2 Pro//快打英雄榜 2 Pro
- 1024 KiB CHR-ROM => Submapper 2 (1 KiB CHR-ROM banking with outer bank, 32 KiB banked WRAM)
- Dragon Ball Party
A fourth Yoko mapper, functionally similar but with different register addresses, has been assigned to NES 2.0 Mapper 264.
Registers
Mode Register ($8100, write)
Mask: $8300
7654 3210 --------- ED6M M.mm |||| | ++- Select nametable mirroring type |||| | 0: Vertical |||| | 1: Horizontal |||| | 2: One screen, page 0 |||| | 3: One screen, page 1 |||+-+---- Select PRG banking mode ||| 0: 16 KiB PRG-ROM bank at $8000-$BFFF, determined by PRG register 4 ($8000) ||| 16 KiB PRG-ROM bank at $C000-$FFFF, fixed to last bank ||| 1: 32 KiB PRG-ROM bank at $8000-$FFFF, determined by PRG register 4 ($8000) SHR 1 ||| 2: 8 KiB PRG-ROM bank at $8000-$9FFF, determined by PRG register 0 ($8300) ||| 8 KiB PRG-ROM bank at $A000-$BFFF, determined by PRG register 1 ($8301) ||| 8 KiB PRG-ROM bank at $C000-$DFFF, determined by PRG register 2 ($8302) ||| 8 KiB PRG-ROM bank at $E000-$FFFF, fixed to last bank ||| 3: same as mode 2 ||+------- Submappers 0 and 1: Enable/disable 8 KiB PRG-ROM at $6000-$7FFF || 0: Disabled, open bus at $6000-$7FFF || 1: 8 KiB PRG-ROM bank at $6000-$7FFF, determined by PRG register 3 || Submapper 2: no function |+-------- IRQ counting mode | 0: Increment | 1: Decrement +--------- IRQ Enable latch 0: Disabled 1: Enabled
In Submapper 2, PRG banking as described above applies to the inner bank within the 256 KiB outer bank selected by the Outer Bank register ($8000) bits 4-5.
PRG-ROM registers 0-3 ($8300-$8303, write)
Mask: $8313
$8300: PRG register 0 (8 KiB PRG-ROM bank at $8000-$9FFF in PRG banking mode 2) $8301: PRG register 1 (8 KiB PRG-ROM bank at $A000-$BFFF in PRG banking mode 2) $8302: PRG register 2 (8 KiB PRG-ROM bank at $C000-$DFFF in PRG banking mode 2) $8303: PRG register 3 (8 KiB PRG-ROM bank at $6000-$7FFF if Mode Register ($8100) bit 5 is set (Submappers 0 and 1 only)
PRG-ROM register 4/Outer Bank register ($8000, write)
Mask: $8300
7654 3210 --------- WWOO PPPP |||| ++++- Select 16 KiB PRG-ROM bank at CPU $8000-$BFFF in PRG mode 0 |||| +++-- Select 32 KiB PRG-ROM bank at CPU $8000-$FFFF in PRG mode 1 ||++------ Submapper 2 only: Select 256 KiB Outer PRG/CHR-ROM bank ++-------- Submapper 2 only: Select 8 KiB WRAM bank at CPU $6000-$7FFF
CHR-ROM registers ($8310-$8317, write)
Mask: $831F
Submapper 0 and 2:
$8310: Select 1 KiB CHR-ROM bank at PPU $0000-$03FF $8311: Select 1 KiB CHR-ROM bank at PPU $0400-$07FF $8312: Select 1 KiB CHR-ROM bank at PPU $0800-$0BFF $8313: Select 1 KiB CHR-ROM bank at PPU $0C00-$0FFF $8314: Select 1 KiB CHR-ROM bank at PPU $1000-$13FF $8315: Select 1 KiB CHR-ROM bank at PPU $1400-$17FF $8316: Select 1 KiB CHR-ROM bank at PPU $1800-$1BFF $8317: Select 1 KiB CHR-ROM bank at PPU $1C00-$1FFF $8318-$831F: No function
In Submapper 2, these registers select the inner CHR-ROM bank, while the Outer Bank register ($8000) bits 4-5 select the 256 KiB outer CHR-ROM bank.
Submapper 1:
$8310: Select 2 KiB CHR-ROM bank at PPU $0000-$07FF $8311: Select 2 KiB CHR-ROM bank at PPU $0800-$0FFF $8312-$8315: No function $8316: Select 2 KiB CHR-ROM bank at PPU $1000-$17FF $8317: Select 2 KiB CHR-ROM bank at PPU $1800-$1FFF $8318-$831F: No function
DIP Switch ($5000, read)
Mask: probably $DF00
7654 3210 --------- .... ..DD ++- DIP switch setting
Several games display different names (Street Fighter versus Street Blaster) depending on the DIP switch setting. Some games will display a garbled title screen at some DIP switch settings, and the "good" setting is not always 0 or 3!
Scratch RAM ($5100-$5FFF, read/write)
Mask: probably $DF03
$5xx0: Scratch RAM byte #0 $5xx1: Scratch RAM byte #1 $5xx2: Scratch RAM byte #2 $5xx3: Scratch RAM byte #3
IRQ Acknowledge and Counter Low ($8200)
Mask: $8301
A write directly changes the low eight bits of the 16-bit IRQ counter and acknowledges the IRQ.
IRQ Enable and Counter High ($8201)
Mask: $8301
A write directly changes the high eight bits of the 16-bit IRQ counter, and copies bit 7 of the Mode register to the actual IRQ Enable register (which is not directly accessible).
IRQ Operation
If the IRQ counter is enabled (by writing a value to $8201 after setting bit 7 in the Mode register), and the counter is not zero, the counter is increased (Mode register bit 6 clear) or decreased (Mode register bit 6 set) on every M2 cycle. If it reaches zero, an IRQ is raised, and the IRQ counter is automatically disabled.