Talk:Mirroring: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(→‎Castlevania 3: looks suspect to me too)
(→‎Castlevania 3: Where 3 nametables are used.)
Line 132: Line 132:
The article claims (since [http://wiki.nesdev.org/w/index.php?title=Mirroring&oldid=1394 March 2010]) that "Castlevania 3 uses the third nametable RAM available on the MMC5". Given that the Japanese version did '''not''' have 3 nametables at its disposal, I find this claim to be highly suspect - exactly where in the game is ExRAM used as a nametable? --[[User:Quietust|Quietust]] ([[User talk:Quietust|talk]]) 07:34, 5 March 2017 (MST)
The article claims (since [http://wiki.nesdev.org/w/index.php?title=Mirroring&oldid=1394 March 2010]) that "Castlevania 3 uses the third nametable RAM available on the MMC5". Given that the Japanese version did '''not''' have 3 nametables at its disposal, I find this claim to be highly suspect - exactly where in the game is ExRAM used as a nametable? --[[User:Quietust|Quietust]] ([[User talk:Quietust|talk]]) 07:34, 5 March 2017 (MST)
: I just searched through the entire game data; the game seems to reliably copy ZP $25 to $5105 in the NMI, and it seems to always set ''that'' using <tt>LDA #im / STA $25</tt>. The only immediate bytes I found were $44, $50, and $55. Seems likely that that's wrong... —[[User:Lidnariq|Lidnariq]] ([[User talk:Lidnariq|talk]]) 13:06, 5 March 2017 (MST)
: I just searched through the entire game data; the game seems to reliably copy ZP $25 to $5105 in the NMI, and it seems to always set ''that'' using <tt>LDA #im / STA $25</tt>. The only immediate bytes I found were $44, $50, and $55. Seems likely that that's wrong... —[[User:Lidnariq|Lidnariq]] ([[User talk:Lidnariq|talk]]) 13:06, 5 March 2017 (MST)
: It's used in the Aquarius level where the water rises - the difference between the VRC6 version and MMC5 version is major here. In the japanese version, the game switch to horizontal mirroring, enables left-8 column hide and has a glitchy scrolling for that part. The MMC5 version uses the 3rd nametable for the rising water and leaves the mirroring and scrolling engine to normal operation, resulting in clean scrolling.[[Special:Contributions/69.20.131.234|69.20.131.234]] 02:44, 6 March 2017 (MST)

Revision as of 09:44, 6 March 2017

PAxx vs. PPU Axx vs. CHR Axx

These edits by infiniteneslives confuse me a bit. I've seen "CHR A10" and "CHR A11" used for the lines going to the CHR ROM. In ASIC mappers, these tend not to match PPU A10 (PA10 for short) and PPU A11 (PA11). --Tepples (talk) 12:04, 23 February 2013 (MST)

"L" mirroring

Using a single and-or-invert gate, or three NAND or NOR gates, along with two bits from a latch gets you controllable 1/H/V/L mirroring. This is roughly what mapper 243 does. —Lidnariq (talk) 00:32, 4 May 2013 (MDT)

4-screen capable mappers

lidnariq wrote here:

None of MMC3, MMC5, m77, nor m99 "are capable of mapping some of their CHR[...] into the nametable space". The question of CHR as nametables is largely orthogonal to 4-screen layout; I don't think it belongs here.

I think any mapper that can map 4 different 1k pages into the 4 nametable regions is relevant to 4-screen mirroring (this is what I consider the definition of 4-screen mirroring). Why don't you think they belong there?

  • MMC3 - Rad Racer 2.
  • MMC5 - Using fill-mode as a 4th nametable qualifies, I think, but is very limited.
  • VRC6 - Lets you map CHR-ROM into nametable pages arbitrarily. (Not sure if any games do it.)
  • Namco 163 - Lets you map CHR-ROM into nametable pages arbitrarily. (See Final Lap.)
  • iNES Mapper 077 - Uses combination of VRAM and CHR-RAM to create 4 RAM nametables. (Napoleon Senki)
  • iNES Mapper 099 - Not sure why this became a mapper, but as described I don't see why it doesn't qualify as 4-screen capable?

- Rainwarrior (talk) 10:42, 14 May 2015 (MDT)

The sentence discusses mapping some of their CHR into the nametable space. Which is false for four of the examples, and orthogonal to how four-screen mirroring works. If rephrased to instead be what actually belongs in the section ("allows treating nametable address space as a 64x60 tile map") it's then redundant with the surrounding text. (MMC5 supports three real nametables and a fourth where all 960 locations are the same tile and same attribute... which I personally wouldn't count here) —Lidnariq (talk) 10:58, 14 May 2015 (MDT)
I don't think it's orthogonal at all! What do you mean by this? Mapping CHR-RAM or CHR-ROM into the nametable space is one way of implementing 4-screen mirroring. I've separated MMC5 and the Vs mapper. VRC6, N163, and 77 all map their CHR-RAM or ROM chips directly into the nametable space, so I don't know which four examples you think are false; at most it would just be MMC3? I thought Rad Racer 2 mapped CHR-ROM as nametables, but I would have to check again. - Rainwarrior (talk) 11:07, 14 May 2015 (MDT)
CHR is stored on memory. Memory itself is not CHR. That Napoleon Senki uses one 8 KiB RAM that's used for both two nametables and for 6 KiB of CHR-RAM doesn't mean that the CHR is mapped into the nametables. Additionally, I say it's orthogonal because you don't mention JY Company or Sunsoft 4 in this section (but instead mention them in the "other" section).
If you replace "CHR" with "on-cartridge PPU memory" then this specific sentence is redundant with the surrounding text: "MMC3" is redundant with "Add a 6264 8 KB RAM on the board. CIRAM /CE is pulled high, and the cartridge RAM is enabled at $2000-$3FFF. The PPU itself never uses $3000-$3FFF during rendering, but 8 KB RAMs are easier to find than 4 KB RAMs.". The missing "MIMIC-1" is redundant with "Add an extra 2 KB of RAM on the board. Decoder logic enables CIRAM only for $2000-$27FF and the cartridge RAM $2800-$2FFF.". Mapper 77 is repeated in the list below. —Lidnariq (talk) 11:18, 14 May 2015 (MDT)

Okay, so what I was really hoping to provide was a list of mappers that can do 4-screen mirroring, and a brief description of each. I've reorganized them into a bulleted list in this way, and I hope this obviates the problem you had with the sentence as it was. What is MIMIC-1, should it be on the list? (I can't seem to find info on it in the Wiki.) - Rainwarrior (talk) 11:28, 14 May 2015 (MDT)

Yes, this solves my complaint. Thanks!
MIMIC-1 was Tengen's rebadged Namco 108, so it's redundant with the m206 mention. Might want to figure out how to rephrase the Vs. System bullet too, because the mappers used with it intrinsically had 4-screen layout, not just m99. Tangenting: No VRC6 games used 4-screen layout (let alone ROM nametables); apparently no m211 (JY Company) did either. But the hardware certainly supports it... —Lidnariq (talk) 11:43, 14 May 2015 (MDT)

The only mapper *not* capable of 4-screen mirroring I can think of is MMC5. All the others are capable of it by adding an additional chip on the cartridge (or two). The fact very few games used this is a different matter. Also, the ROM nametables have absolutely nothing to do with 4-screen mirroring, it's two completely different things. When we talk about "Nametable mirroring", we normally have RAM in mind, ROM is a very rare and particular case that is its own weird beast.Bregalad (talk) 11:31, 14 May 2015 (MDT)

Whether nametables are ROM or RAM is important, and related, but it's not "mirroring" at all. Extra nametable RAM is its own thing, separate from mirroring, but it's generally very important how it is combined with it. We need to cover both here. (Also, with the iNES 2 format, it becomes an arbitrary choice for VRC6/N163.) Both cases are pretty rare; you're arguing that 3 games is less rare than 2? This is not a case where one is an edge case and the other dominates. (They are all edge cases.) - Rainwarrior (talk) 11:40, 14 May 2015 (MDT)
I like your point that any mapper can do 4-screen RAM, though. I added an entry noting that it's available as an iNES header flag, and I think the hardware how-to covers the case of actually adding it to a board that didn't have it. I think the rest of the list is important because these are the only boards you will find ready for 4-screen, just like it's important to know which boards would normally be set up for CHR-RAM and not CHR-ROM. - Rainwarrior (talk) 11:51, 14 May 2015 (MDT)

Man what happened to my mirroring chart!

Back when I created this, the idea was to have a quick and simple overview though the different basic mirroring/scrolling combinations, letting the reader adult enough to understand this on his own and extend this to whatever he feels.

Someone apparently turned it into the current monstrosity that attempts to document every single mirroring/scrolling combination ever possible with NES hardware, including many which were never used by any games or not even homebrew tech demoes (I think especially of the so called "3-screen mirroring" here). This is downright ridiculous, and it lost its original sense of the very reason why I created this chart back then.Bregalad (talk) 01:55, 15 May 2015 (MDT)

Once, including a commercial games, it will be helpful for the production of one of homebrew games.--PGCX864 (talk) 07:57, 15 May 2015 (MDT)

It's not currently helpful at all. I'm sorry. What you seem to be doing is trying to categorize everything you can find; this is very different than providing a helpful guide! Right now you have 4 columns (status bar, parallax, etc.) and 11 categories; that's 44 different cases you are throwing at the reader? Someone who is struggling to understand mirroring will have no idea how to pick from this or figure out what they need from it. This chart isn't even much use for someone who knows how mirroring works already.
If you want to categorize every game in existence by how they do rendering and their mirroring approach, that might be okay on its own article page, like how we have things like List of games with expansion audio or Sprite overflow games, but what you're doing now is too much information (or maybe just too poorly organized) for this article about Mirroring. Maybe List of games by mirroring technique? Perhaps reference like that organized in one place would be useful to somebody, and we can just link to it from this mirroring article. Just leave a small handful of useful/common examples here, the initial grid was supposed to be a tutorial and quick summary. - Rainwarrior (talk) 09:50, 15 May 2015 (MDT)
To explain what I mean about it not being helpful. Think of what you need to know about mirroring and NES rendering to understand how to implement having a status bar on the top or bottom. Mirroring and NES rendering is not something you can just look up in a chart and pick an answer. Nobody's going to be able to make Guardian Legend or After Burner after reading that chart, they have to understand a lot more about rendering, not just mirroring. The mirroring teaches you next to nothing about how those games' rendering works. What we want to do in a tutorial is illustrate how mirroring works with a few easy to understand examples. - Rainwarrior (talk) 10:02, 15 May 2015 (MDT)

Another way of thinking about this: if Battletoads can do 2D scrolling with a status bar, using only single screen mirroring and no IRQ, really you can do any scrolling method with any mirroring, if you want to work hard enough for it. The short of it is that for 1D scrolling, there are a few choices that make it easy (horizontal, vertical, metroid), and there's no turnkey solution for 2D scrolling but we can make a few good suggestions (like to look at SMB3), but beyond that the solutions are very game-specific and tricky, far too detailed to summarize here, and you can do it 1000 different ways (each of which would need a whole article to properly explain). Hmm, this is pretty much exactly what the chart already expressed before PGCX864 started adding to it: revision 8215. I think there's use for a comprehensive catalogue of which games use which mirroring techniques, but it doesn't belong in this article. - Rainwarrior (talk) 23:53, 16 May 2015 (MDT)

That revision is way better, but is still too much because it mention the never-used L shaped and diagonal mirroring. I do not think there is a need to document the list of mirroring/scrolling combinations all games uses, this is almost endless and each game is specific. If you are interested about a particular game, just look at an emu with a NT viewer, it's always interesting. There's even less need to document every unused mirroring/scrolling combination we could ever think off. Personally, as the creator of this mirroring char back then I believe it's purpose has been completely misunderstood and that, with the distance, I can see this chart was never very useful. I believe removing it completely is probably the best option. The animation on the SMB scrolling article is probably a better approach at documenting the thing.Bregalad (talk) 06:46, 17 May 2015 (MDT)

This revision [1] is probably how this page should have stayed, without those ugly image with barely readable letters Bregalad (talk) 06:58, 17 May 2015 (MDT)

I've made an attempt to rebuild the table with just the simple/straightforward techniques, and I've moved the monster table over to List of games by mirroring technique, which will need some organizational work but I think might make a good start for a nice survey of the advanced techniques out there. - Rainwarrior (talk) 17:00, 17 May 2015 (MDT)
Thank you Rainwarrior, it is much better now. The table makes sense again. However, there is just a little tiny weakness. It says Horizontal mirroring makes it difficult to use a status bar. Taken like this without any additional information it is hard to understand why. I'd suggest replacing it with Vertical scrolling makes it tougher to use a status bar. This has the advantage of being more exact:
1. Vertical scrolling makes it tougher because you have to use $2006 as well as $2005
2. Vertical scrolling makes it tougher because you need to plan carefully where the status bar and playfield will go in VRAM (no matter the mirroring)
3. The use of thougher makes it clear it's still perfectly possible and reasonable, the use of difficult makes it sounds like it's not a reasonable choice.
Also, why the wiki links for status bar? Is there an intention to create a status bar page later?Bregalad (talk) 03:19, 18 May 2015 (MDT)
Well, the reason I said "horizontal mirroring" and not "vertical scrolling" is that if you do vertical scrolling with a different type of mirroring (e.g. single screen) it's a lot easier to make a status bar. It seems to me that it's specifically horizontal mirroring that causes the problem, mostly because of how to lay out the nametables so you can scroll split to it. I don't think of having to use $2006 is tougher, we have a simple recipe for that and it doesn't require compromises or extra planning. There's no recipe for the nametable layout problem, though- you have to do something special to get around it. Every game I can think of that has horizontal mirroring + a status bar had to do something pretty advanced. SMB3 and Jaws get around the problem by limiting Y scroll. Crystalis has 2 splits requiring an IRQ. Can you think of any others? I can think of a lot of games that have vertical scrolling and status bars, but I'm having a hard time finding any others that use horizontal mirroring. Also, yes I figure status bar should have its own article eventually, just leaving a redlink as a reminder of that. - Rainwarrior (talk) 11:41, 18 May 2015 (MDT)
I think there was also a scrolling tech demo a while back (can't find it at the moment) that relocated the status bar in the nametable every few frames, but again this is a really advanced thing to do! The Hiatus Ward demo also had horizontal mirroring, Crystalis style. - Rainwarrior (talk) 11:49, 18 May 2015 (MDT)
Well, you are correct, but vertical scrolling + status bar + vertical mirroring is likely even more difficult. Jungle Book and Krusty's Fun House does that (using 2 radically different techniques). Single-screen mirroring is the only "easy" way to have free-bidectional with status bar. As for $2006, you are correct it is not a problem today, but it appears that when the NES was released it took time for the developpers to start using this trick, it wasn't used before Zelda I believe. Using it for a status bar at the top is harder, but if the status bar is at the bottom it makes it harder to combine with a sprite zero hit on a unknown playfield, and to combine with gameplay's program. With IRQ capable mapper it's no problem indeed. Not related, but you should look into Kirby's Adventure, Double Dragon series, Gradius II and Gargoyle's Quest if you are interested in games with free-directional scrolling with horizontal mirroring and status bar. (neededless to say, all uses radically different techniques).Bregalad (talk) 12:30, 18 May 2015 (MDT)
Both single screen and horizontal mirroring is perfect for vertical-only scrolling with a status bar. Glitches hidden by the bar, easy to implement, etc. I don't know any games that do it, though, I've only seen it with 2D scrolling. An example would be good, but maybe this is what should be said in the chart. - Rainwarrior (talk) 13:43, 18 May 2015 (MDT)
Oh yeah, you are right (assuming you meant vertical mirroring), Life force does that in it's even levels, and Guardian force in spaceship shooter mode for example. It's hard to word what exactly is "difficult", and it's completely subjective after all. The only really difficult part is to "get the trick done", and even in the worst case it's still not the most difficult part of writing a complete working game.Bregalad (talk) 01:21, 19 May 2015 (MDT)

Explaining this reversion: 10848 - Limited 2-screen (Gyromite, Wrecking Crew, etc.) I deliberately left out of the chart, because this is an issue of scrolling, not mirroring. The simple case for mirroring is exactly the same as if you are doing unlimited 1-axis scrolling. Mega Man does not actually use switching H/V, check it with a debugger. Zelda and Ducktales are also complicated. Just because these games do screen-locked scrolling doesn't mean they're doing it the naive way; the status bar especially throws a monkey wrench into it. - Rainwarrior (talk) 11:08, 19 May 2015 (MDT)

Mirroring images

Bregalad complained that he doesn't like the lettering on the mirroring images. I actually like them a lot, but I have my own bone to pick with them, which is the addressing on the side. The base address of each nametable is the most important address, and it only appears on the left side tables. Everything else is just noise, like the 24CF at the end of a row isn't helpful to anybody trying to learn. (It's clear what it is to someone who already understands nametables, but it's useless to that person.) Here's a proposal for a new style:

Mirroring proposal.png

  1. Removed the address columns in favour of larger embedded base addresses.
  2. More standard lettering.

Any thoughts about it? - Rainwarrior (talk) 18:44, 17 May 2015 (MDT)

For me, it's way better.Bregalad (talk) 01:32, 18 May 2015 (MDT)

Finally got around to this. If the new style isn't to someone's liking feel free to take another crack at it. Here's the python program that generated the new set: pastebin link - Rainwarrior (talk) 01:26, 5 March 2017 (MST)

Games that depend on WRAM mirroring?

Apparently, there's 3, but no one can seem to remember them. They likely use a page# index and take advantage of ignoring higher bits and just increment infinite loop 0...FF without bothering to reset to 0 after 7, so go through 8-1F (ANDed with #$1F)? But that makes no sense as you could have just ANDed with #$07. Anyone know for sure what they did and why? alphamule (talk) 00:44, 15 February 2017 (MST)

Well, I intentionally used WRAM mirroring in Driar's NROM port to move the stack relative to the self-modifying code in RAM—Lidnariq (talk) 11:01, 15 February 2017 (MST)

MMC5 and "four screen memory"

Let's not have an edit war. If Bregalad wants to discuss this, we'll discuss this here. But until such time as we come to an agreement here, neither of us should edit the page.

Fact of the matter is, MMC5 does support four distinct renderable nametables at the same time. Arguing that it doesn't count because one is only 10 bits instead of 8160 doesn't change that it is a distinct thing. I just can't come up with any argument for why ROM nametables are allowed to count but the fill-mode nametable isn't. — Lidnariq (talk) 13:33, 4 March 2017 (MST)

I think fill mode counts, and it's fully disclosed by the description so I don't see anything misleading about having it in the list. - Rainwarrior (talk) 19:26, 4 March 2017 (MST)

Definition of 4-screen mirroring according to Rainwarrior on this very talk page :

I think any mapper that can map 4 different 1k pages into the 4 nametable regions is relevant to 4-screen mirroring
(this is what I consider the definition of 4-screen mirroring).

and acording to the wiki page

With additional RAM and/or PPU address mapping present on the cartridge, 4 unique nametables can be addressed through the PPU bus,
creating a 64x60 tilemap, allowing for more flexible screen layouts. Very few games made use of this type of mirroring.

MMC5 fits neither of those definitions. MMC5 supports 4 different modes for each nametable, but does not support 4-screen mirroring, even if each of the name tables is set to a different mode (leading to the 4 nametables having a different mode each) it won't work as the name table in the fill mode is not a 1k page of data, but a single repeated tile instead. This does not create a 64x60 tilemap. Bregalad (talk) 01:45, 5 March 2017 (MST)

I think it does fit the current definition in the wiki? It creates 4 different nametable pages. Yes one of them is a single repeated tile, but the important thing is that it's different from the other 3, and that since it's a strange case it should explain that (which it does). It's not like it just says "MMC5" in some misleading way, it explains the whole thing. - Rainwarrior (talk) 01:54, 5 March 2017 (MST)
Just because the fill-mode nametable is algorithmically generated instead of RAM doesn't mean that it's not a nametable. —Lidnariq (talk) 12:37, 5 March 2017 (MST)
I should say, though, that I think it's something that should be mentioned as an oddball case whether or not you think we should use a definition of 4-screen that is strictly exclusive or inclusive to it. It's s special case worthy of a special mention, IMO, and is related enough to 4-screen mirroring at any rate. If you think it's muddling the definition somehow or should be worded differently I'm open to suggestions, but my hope when I wrote the current wording was that it would be clear exactly what it is and isn't from reading it. - Rainwarrior (talk) 02:10, 5 March 2017 (MST)

Castlevania 3

The article claims (since March 2010) that "Castlevania 3 uses the third nametable RAM available on the MMC5". Given that the Japanese version did not have 3 nametables at its disposal, I find this claim to be highly suspect - exactly where in the game is ExRAM used as a nametable? --Quietust (talk) 07:34, 5 March 2017 (MST)

I just searched through the entire game data; the game seems to reliably copy ZP $25 to $5105 in the NMI, and it seems to always set that using LDA #im / STA $25. The only immediate bytes I found were $44, $50, and $55. Seems likely that that's wrong... —Lidnariq (talk) 13:06, 5 March 2017 (MST)
It's used in the Aquarius level where the water rises - the difference between the VRC6 version and MMC5 version is major here. In the japanese version, the game switch to horizontal mirroring, enables left-8 column hide and has a glitchy scrolling for that part. The MMC5 version uses the 3rd nametable for the rising water and leaves the mirroring and scrolling engine to normal operation, resulting in clean scrolling.69.20.131.234 02:44, 6 March 2017 (MST)