Originally posted by: Aaendi
Originally posted by: Guntz
I think the OP means "off-the-shelf", opposite of Nintendo's habit of using 100% proprietary hardware in their consoles, including the SNES. The S-PPU is a special one-off graphic processor, made only for the SNES and any derivative hardware.
Pretty much. It doesn't have to be 100% off the shelves, but similar to off-the-shelf-chips or chips used from competiting companies. It seems like Nintendo went out of their way to be different from Sega.
Originally posted by: 3GenGames
Well what would be more standard? Those Yamaha PSG's? It has a set of PSG's too. It doesn't really matter though honestly, they had teams just to program them alone.
And SNES's PPU is pretty darn like the NES's, can't get more standard on that either really.
The near backwards compatibilty with the NES's PPU is what ruined it.
On the NES, sprite attributes tables use 4 bytes per sprite entry, with 8-bit X and Y coordinates. This wasn't a big problem for the NES because sprites were only 8x8, so "popping" wasn't that noticeable. The SNES also uses 4 bytes per sprite entry, and 8-bit X and Y coordinates, but there's a problem with that. In the last minute, Nintendo decided to add support for larger sprite sizes, and because larger sprites would have more noticeable "popping" artifacts, they needed an extra 9th bit for X coordinates. So what they did was add an extra 32 bytes to the end of the sprite attributes table, just to fit in the 2 extra bits.
They should've just used 16-bit X and Y coordinates from the start.
SNES isn't backwards compatible, they scrapped that. We only know because some of the memory map is set up the same way. I'm sure it did not affect the final product in any way really.
As for the coords, that's not that huge of a deal. Update your sprites natrually, and then before finishing it off for an object have it bulk write the needed bits for the extra coord. IMO, they did it that way because it saves RAM, not because of any other reason. Even the unused sprite bits on NES don't work. It'd cost more to add them in to do nothing, so why add them at all?
ETA: Check out the SNES OAM layout:
First 4 bytes:
OAMObject*4+0:xxxx.xxxx
OAMObject*4+1:yyyy.yyyy
OAMObject*4+2:cccc.cccc
OAMObject*4+3:vhoo.pppn
They have every bit used. They have two extra bits for X and S the the size and X coord of the screen. They didn't have the bits available anywhere. Making it count by 5 bytes per each entry (to store the extra 2 bits needed for OAM) involve adding more circuity that wasn't cheaper than adding 32 bytes and having a seperate counter/lookup for that data. It might not be the best for the programmer, but it makes perfect sense if you can understand what they were trying to do. Make it cheaper to make.