Vs. DualSystem

Discuss emulation of the Nintendo Entertainment System and Famicom.

Moderator: Moderators

lidnariq
Posts: 8690
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: Vs. DualSystem

Post by lidnariq » Mon Dec 31, 2018 11:42 pm

There is no mapper 0 Vs. System game. If you find one, it is a bad header.

The mapper 0 hardware is defined as "no PRG bankswitching, no CHR bankswitching" and that cannot happen on the Vs. System board: it is physically laid out such that you can't not have CHR bankswitching. It's not like putting an 8 KiB CHR ROM in a CNROM board and having a latch that does nothing: instead there are two physical sockets, and you can only put an 8 KiB (or smaller, but that was never done) ROM in each socket or fail to put anything in that socket: The result is still mapper 99 and the empty socket results in open bus.

It may work as mapper 0, in the same way emulators don't "have" to enforce bus conflicts on discrete logic mappers, but it's incorrect.


MAME's database is in https://github.com/mamedev/mame/blob/ma ... /vsnes.cpp
To convert common names to MAME codename, go to the bottom with the GAME macro.
To convert MAME codename into dipswitches, look for INPUT_PORTS_START( codename )
To convert MAME codename into ROM sizes and hashes, look for ROM_START( codename )

User avatar
Memblers
Site Admin
Posts: 3760
Joined: Mon Sep 20, 2004 6:04 am
Location: Indianapolis
Contact:

Re: Vs. DualSystem

Post by Memblers » Tue Jan 01, 2019 12:41 am

zeroone wrote:I am looking at the Dipswitch definitions file in Mesen. The number of switches and options suggests that the VS. DualSystem games have 16 DIPs instead of 8 DIPs. Perhaps this is possible since there are 4 controller ports instead of 2?
Yes, for a DualSystem game there effectively are 16 dipswitches. Each CPU sees 8, mapped into the same location. Other than the shared RAM, the 2 sides are symmetrical. In a dual cabinet it can run 2 UniSystem games independently. The single monitor cabinets use the same board but only install one CPU/PPU.

User avatar
zeroone
Posts: 929
Joined: Mon Dec 29, 2014 1:46 pm
Location: New York, NY
Contact:

Re: Vs. DualSystem

Post by zeroone » Tue Jan 01, 2019 7:00 pm

Do any of the VS games in GoodNES3.23b work in the current Mesen release? None of them seem to open.

NewRisingSun
Posts: 1025
Joined: Thu May 19, 2005 11:30 am

Re: Vs. DualSystem

Post by NewRisingSun » Tue Jan 01, 2019 7:55 pm

No. As mentioned before, you need to create them from MAME ROM sets.

User avatar
zeroone
Posts: 929
Joined: Mon Dec 29, 2014 1:46 pm
Location: New York, NY
Contact:

Re: Vs. DualSystem

Post by zeroone » Tue Jan 01, 2019 8:17 pm

NewRisingSun wrote:No. As mentioned before, you need to create them from MAME ROM sets.
Oh. Why are the GoodNES ROMs useless? There is absolute no way to run them? It's starting to sound like if I support the VS DualSystem, no one is going to have the games to play it.

lidnariq
Posts: 8690
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: Vs. DualSystem

Post by lidnariq » Tue Jan 01, 2019 8:37 pm

Historically, it's been impossible to encode Vs. DualSystem ROMs in iNES format because the iNES format implies exactly one chunk of PRG and one chunk of CHR.

The DualSystem requires two chunks of PRG and two chunks of CHR... NewRisingSun has lead the effort to define an official encoding of Vs. DualSystems into NES2.0, but that's very recent.

Supporting MAME romsets would be the most immediate way to make it easy for people to run.

User avatar
zeroone
Posts: 929
Joined: Mon Dec 29, 2014 1:46 pm
Location: New York, NY
Contact:

Re: Vs. DualSystem

Post by zeroone » Tue Jan 01, 2019 8:56 pm

lidnariq wrote:The DualSystem requires two chunks of PRG and two chunks of CHR...
The existing GoodNES VS DualSystem .nes files are twice the size as their regular counterparts. Is the PRG and CHR ROMs not just doubled up?

lidnariq
Posts: 8690
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: Vs. DualSystem

Post by lidnariq » Tue Jan 01, 2019 9:11 pm

At the very least, the GoodNES 3.23b's Vs. System image for Balloon Fight is only one half. (The other half is named "(Player 2 Mode) [b1]" but it isn't a bad dump, it's the same hashes as in MAME).

Balloon Fight for NES/Famicom is a 16+8 game. Balloon Fight for the Vs. DualSystem is a 32+32+16+16 game. (Almost all DualSystem games are 32+32+16+16. Except Vs. Mahjong, which is 24+24+8+8)

There's no way for the original iNES format to mark whether the contents of the file is one PRG chunk or two. That's one of the things that NewRisingSun added in NES2.0.

NewRisingSun
Posts: 1025
Joined: Thu May 19, 2005 11:30 am

Re: Vs. DualSystem

Post by NewRisingSun » Wed Jan 02, 2019 2:54 am

zeroone wrote:It's starting to sound like if I support the VS DualSystem, no one is going to have the games to play it.
As more emulators add Vs. Dual System support, future versions of No-Intro and GoodNES (if there ever is one again) will likely include the proper NES 2.0 ROMs in their their datfiles and the associated collections, so I would say it's more of a temporary problem.

User avatar
zeroone
Posts: 929
Joined: Mon Dec 29, 2014 1:46 pm
Location: New York, NY
Contact:

Re: Vs. DualSystem

Post by zeroone » Wed Jan 02, 2019 7:43 am

lidnariq wrote:At the very least, the GoodNES 3.23b's Vs. System image for Balloon Fight is only one half. (The other half is named "(Player 2 Mode) [b1]" but it isn't a bad dump, it's the same hashes as in MAME).

Balloon Fight for NES/Famicom is a 16+8 game. Balloon Fight for the Vs. DualSystem is a 32+32+16+16 game. (Almost all DualSystem games are 32+32+16+16. Except Vs. Mahjong, which is 24+24+8+8)

There's no way for the original iNES format to mark whether the contents of the file is one PRG chunk or two. That's one of the things that NewRisingSun added in NES2.0.
Ouch. Those GoodNES files are going to confuse anyone who wants to play those games. For the emulators that support the VS DualSystem, those ROMs are going to create the impression that the support is incomplete or buggy.
NewRisingSun wrote:As more emulators add Vs. Dual System support, future versions of No-Intro and GoodNES (if there ever is one again) will likely include the proper NES 2.0 ROMs in their their datfiles and the associated collections, so I would say it's more of a temporary problem.
This is the first time I heard of "No-Intro". Is it a better collection than GoodNES?

More importantly, I agree with your sentiment. Let me PM you with a proposal.

lidnariq
Posts: 8690
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: Vs. DualSystem

Post by lidnariq » Wed Jan 02, 2019 1:55 pm

No-Intro is a community-run effort to replace Cowering's GoodTools, especially after he took leave for a decade.

Currently their NES/FC set don't include headers: it's just hashes of known good dumps. Official headers might be included there after NewRisingSun / Kevtris release a canonical set.

User avatar
zeroone
Posts: 929
Joined: Mon Dec 29, 2014 1:46 pm
Location: New York, NY
Contact:

Re: Vs. DualSystem

Post by zeroone » Sat Jan 05, 2019 12:08 pm

lidnariq wrote:There is no mapper 0 Vs. System game. If you find one, it is a bad header.

The mapper 0 hardware is defined as "no PRG bankswitching, no CHR bankswitching" and that cannot happen on the Vs. System board: it is physically laid out such that you can't not have CHR bankswitching. It's not like putting an 8 KiB CHR ROM in a CNROM board and having a latch that does nothing: instead there are two physical sockets, and you can only put an 8 KiB (or smaller, but that was never done) ROM in each socket or fail to put anything in that socket: The result is still mapper 99 and the empty socket results in open bus.

It may work as mapper 0, in the same way emulators don't "have" to enforce bus conflicts on discrete logic mappers, but it's incorrect.


MAME's database is in https://github.com/mamedev/mame/blob/ma ... /vsnes.cpp
To convert common names to MAME codename, go to the bottom with the GAME macro.
To convert MAME codename into dipswitches, look for INPUT_PORTS_START( codename )
To convert MAME codename into ROM sizes and hashes, look for ROM_START( codename )
FCEUX contains a table describing each VS UniSystem game:

Code: Select all

VSUNIENTRY VSUniGames[] =
{
	{ "Baseball", 0x691d4200ea42be45LL, 99, 2, RP2C04_001, 0 },
	{ "Battle City", 0x8540949d74c4d0ebLL, 99, 2, RP2C04_001, 0 },
	{ "Battle City(Bootleg)", 0x8093cbe7137ac031LL, 99, 2, RP2C04_001, 0 },

	{ "Clu Clu Land", 0x1b8123218f62b1eeLL, 99, 2, RP2C05_004, IOPTION_SWAPDIRAB },
	{ "Dr Mario", 0xe1af09c477dc0081LL, 1, 0, RP2C04_003, IOPTION_SWAPDIRAB },
	{ "Duck Hunt", 0x47735d1e5f1205bbLL, 99, 2, RCP2C03B, IOPTION_GUN },
	{ "Excitebike", 0x3dcd1401bcafde77LL, 99, 2, RP2C04_003, 0 },
	{ "Excitebike (J)", 0x7ea51c9d007375f0LL, 99, 2, RP2C05_004, 0 },
	{ "Freedom Force", 0xed96436bd1b5e688LL, 4, 0, RP2C04_001, IOPTION_GUN }, /* Wrong color in game select screen? */
	{ "Stroke and Match Golf", 0x612325606e82bc66LL, 99, 2, RP2C04_002, IOPTION_SWAPDIRAB | IOPTION_PREDIP, 0x01 },

	{ "Goonies", 0xb4032d694e1d2733LL, 151, 1, RP2C04_003, 0 },
	{ "Gradius", 0x50687ae63bdad976LL, 151, 1, RP2C04_001, IOPTION_SWAPDIRAB },
	{ "Gumshoe", 0x87161f8ee37758d3LL, 99, 2, RC2C05_03, IOPTION_GUN },
	{ "Gumshoe", 0xb8500780bf69ce29LL, 99, 2, RC2C05_03, IOPTION_GUN },
	{ "Hogan's Alley", 0xd78b7f0bb621fb45LL, 99, 2, RP2C04_001, IOPTION_GUN },
	{ "Ice Climber", 0xd21e999513435e2aLL, 99, 2, RP2C05_004, IOPTION_SWAPDIRAB },
	{ "Ladies Golf", 0x781b24be57ef6785LL, 99, 2, RP2C04_002, IOPTION_SWAPDIRAB | IOPTION_PREDIP, 0x1 },

	{ "Mach Rider", 0x015672618af06441LL, 99, 2, RP2C04_002, 0 },
	{ "Mach Rider (J)", 0xa625afb399811a8aLL, 99, 2, RP2C04_001, 0 },
	{ "Mighty Bomb Jack", 0xe6a89f4873fac37bLL, 0, 2, RC2C05_02, 0 },
	{ "Ninja Jajamaru Kun", 0xb26a2c31474099c0LL, 99, 2, RC2C05_01, IOPTION_SWAPDIRAB },
	{ "Pinball", 0xc5f49d3de7f2e9b8LL, 99, 2, RP2C04_001, IOPTION_PREDIP, 0x01 },
	{ "Pinball (J)", 0x66ab1a3828cc901cLL, 99, 2, RCP2C03B, IOPTION_PREDIP, 0x1 },
	{ "Platoon", 0x160f237351c19f1fLL, 68, 1, RP2C04_001, 0 },
	{ "RBI Baseball", 0x6a02d345812938afLL, 4, 1, RP2C04_001, IOPTION_SWAPDIRAB },
	{ "Soccer", 0xd4e7a9058780eda3LL, 99, 2, RP2C04_003, IOPTION_SWAPDIRAB },
	{ "Star Luster", 0x8360e134b316d94cLL, 99, 2, RCP2C03B, 0 },
	{ "Stroke and Match Golf (J)", 0x869bb83e02509747LL, 99, 2, RCP2C03B, IOPTION_SWAPDIRAB | IOPTION_PREDIP, 0x1 },
	{ "Super Sky Kid", 0x78d04c1dd4ec0101LL, 4, 1, RCP2C03B, IOPTION_SWAPDIRAB | IOPTION_PREDIP, 0x20 },

	{ "Super Xevious", 0x2d396247cf58f9faLL, 206, 0, RP2C04_001, 0 },
	{ "Tetris", 0x531a5e8eea4ce157LL, 99, 2, RCP2C03B, IOPTION_PREDIP, 0x20 },
	{ "Top Gun", 0xf1dea36e6a7b531dLL, 2, 0, RC2C05_04, 0 },
	{ "VS Castlevania", 0x92fd6909c81305b9LL, 2, 1, RP2C04_002, 0 },
	{ "VS Slalom", 0x4889b5a50a623215LL, 0, 1, RP2C04_002, 0 },
	{ "VS Super Mario Bros", 0x39d8cfa788e20b6cLL, 99, 2, RP2C05_004, 0 },
	{ "VS Super Mario Bros [a1]", 0xfc182e5aefbce14dLL, 99, 2, RP2C05_004, 0 },
	{ "VS TKO Boxing", 0x6e1ee06171d8ce3aLL, 4, 1, RP2C04_003, IOPTION_PREDIP, 0x00 },
	{ 0 }
};
The value to the right of the checksum is mapper number. Several games function outside of mapper 99. And a few are mapper 0.

If this is incorrect, does that mean that description of Mapper 99 on the wiki is incomplete since it needs to absorb characteristics of other mappers for certain games?

NewRisingSun
Posts: 1025
Joined: Thu May 19, 2005 11:30 am

Re: Vs. DualSystem

Post by NewRisingSun » Sat Jan 05, 2019 12:41 pm

Mapper 99 is the CHR-ROM bank switch built into the Vs. System hardware. Since all games run on the Vs. System hardware, they will at minimum have mapper 99. Vs. Slalom merely has only one 8 KiB CHR-ROM bank, so not emulating the $4016 CHR-ROM switch by specifying mapper 0 amounts to the same result. But pedantically speaking, it's wrong. Other games do indeed bring their own mappers 1, 206, and 67/68. Mapper 151 is a duplicate of 75, meaning VRC1. Their existence does not mean that Mapper 99's description is incomplete, though.

User avatar
zeroone
Posts: 929
Joined: Mon Dec 29, 2014 1:46 pm
Location: New York, NY
Contact:

Re: Vs. DualSystem

Post by zeroone » Sun Jan 06, 2019 9:27 am

NewRisingSun wrote:Other games do indeed bring their own mappers 1, 206, and 67/68. Mapper 151 is a duplicate of 75, meaning VRC1. Their existence does not mean that Mapper 99's description is incomplete, though.
Does the NES 2.0 header indicate the use of these other mappers?

NewRisingSun
Posts: 1025
Joined: Thu May 19, 2005 11:30 am

Re: Vs. DualSystem

Post by NewRisingSun » Sun Jan 06, 2019 10:22 am

Of course. Just look at the Vs. System's ROM files...

Post Reply