supercat wrote:How did such mappers control when the counters ran so as to allow them to generate interrupts at the proper places?
They're not free-running. They usually are something like "latch output connected to 4020 asynchronous clear; some high bit of counter connected via inverter to /IRQ".
Since 1024 cycles is almost exactly 9 scanlines (plus 3 pixels) it's not too bad of a constraint.
Licensed PAL (2A07) is a lot less convenient, but I don't know how many unlicensed games showed up in those regions for play on the 2A07 instead of a Famiclone.
I was more interested in whether anyone had used any sort of address-triggered approach, than in the exact chips they might have used.
Not beyond the MMC2/MMC4 tile-based bankswtiching.
The logic you suggest fits nicely inside a GreenPAK ... could just check for the top two scanlines of one tile. Say $FE, to be like MMC2.
That said, I don't usually look as high as qty 2k when I'm eyeballing BOM prices for NES things. I don't think very many games sell more than a couple hundred.
What do you think of the concept from an ease-of-programming standpoint? If nobody's implemented such a thing yet, would you see any particular problem?
It's "easier" than most IRQs in that you just have to make sure to put a sprite in the right place. But...
Each IRQ per retrace uses up one of the not-very-many 64 entries
You have to make sure there's no chance of it getting bumped out of the 8-per-scanline limit, and it consumes some of the very limited overdraw if you do.
I personally think those compromises make it kinda tough to swallow. I think I'd prefer MMC3, even with the flaw you've identified.
Incidentally, I'm new to the NES, but I've done some rather interesting 6502 mappers for the Atari 2600.
I see your name in the credits for the Harmony Cart. I'm confident you have interesting thoughts to share
I'd like to do smooth vertical and horizontal scrolling, but that would pose some interesting challenges given the need to redraw all of the tiles every "gametick" (four animation frames).
The NES answer is "just use CHR bankswitching for that".
When using 8x16 sprite mode, 128 tiles will be in one bank and 128 in the other. So games needing ready access to more than 128 sprites might need to take them from both halves of the address space.
But you can only display 128 total tiles of sprites in 8x16 at a time anyway. And your overdraw is very limited - a lot of games used 8x8 sprites even though that consumed more OAM entries, because it both reduced the scanlines of overdraw constraint and because it means that there aren't tons of empty spots in the CHR table.
There aren't a ton of circumstances where MMC3 CHR bankswitching is available and you need many different possible sprites and you don't want to set CHR banks to overlap where they refer to in CHR. The only one that comes to mind is deliberately only using three 1 KiB banks for backgrounds, and using the last 1 KiB plus the other two 2KiB ... but that's kinda contrived. It'd be better just to use a mapper that actually gave you eight 1 KiB banks instead, like VRC4 or RAMBO-1.
Any mapper that supports CHR bankswitching comes extremely close to making two bits in $2000 irrelevant.
In any case, my question was whether a simple banking approach could minimize the amount of circuitry required for raster effects.
Maybe? I mean, it lets you avoid having the counter on the cart, because it's hidden in the OAM evaluation. But it's not usually the counter that's the hard part.
nesrocks wrote:I'm going to say that I don't know how to choose a mapper. I wish there was some program where we could check or choose mapper features and then it would tell you which mappers matched those features.
I have a
table, but it might be too full of jargon.
Tepples had written a selector, but it was written before various modern homebrew designs hit mass production, so I don't know if he'd revise that now.