Espozo wrote:
I am just thinking about how 93143 said that I would take over 9 frames to update an entire 8bpp screen, but some Super FX games I know , like Doom, are 8bpp and run at a (somewhat) reasonable speed. Does the Super FX chip have anything to do with the fast DMA transfers, or am I crazy and they actually only run at about 10 frames per second?
My "9 frames" number is for a standard full-screen display, where the active region is 256 dots wide and takes up 224 lines out of 262, giving you about (262-224)*(1364-40)/8 = 6,289 bytes of DMA per frame to transfer 57,344 bytes of graphical data. If you want to refresh the entire screen, that's about six and a half frames per second, with visible tearing because the screen is too big for any paging strategy.
Doom seems to run at 216x176, with a 32-pixel-high status display at the bottom reducing the actual rendered area to 216x144. This means that in principle up to (262-176)*1324/8 = 14,233 bytes of DMA per frame is available to transfer 31,104 bytes of graphical data. That's plenty for 20 frames per second, with ample headroom for OAM and CGRAM updates, so you can use 5/3 buffering regardless of frame rate as long as the Super FX has enough RAM to hold up its end (a 30 kB layer still seems a little big to naïvely double buffer if you want anything else on screen)...
3gengames wrote:
SuperFX is replacing the 3Mhz 65816 with a 10Mhz 65816, and later 21Mhz, so that's why games run better and needed it for the complex graphics and 3D math.
Uh, the Super FX was a custom RISC chip by Argonaut. The SA-1 was a 65816 at 10.74 MHz, but it was never (so far as I know) upgraded to 21 MHz as the Super FX was.
Also, while I believe Super FX games tended to leave the SNES CPU mostly idle, the SA-1 was designed to cooperate with the CPU rather than outright replace it.
Sik wrote:
in theory scaling in mode 7 would work (thereby reducing memory usage even less), but no idea if Doom is doing that.
I think it's using Mode 3. Actually, I've seen no evidence that the Super FX's PLOT instruction even knows about Mode 7; it seems to be only for bitplanes. You could always render normally in software, I suppose...
Quote:
I suppose mosaic can be used to make the SNES skip every other pixel, so that'd mean even less bandwidth needed if you can make it transfer into every other byte, right?
That's not how bitplanes work, unfortunately. Each byte contains data for all eight pixels in the row.
As a matter of fact, the VRAM port is two bytes wide, and you
can set the word address to increment after writing either the low or high byte. This doesn't really help with the cunning plan I had a while back re: DMAing only the first two bitplanes of a sprite table (if anyone has any great ideas on how to do that without having to reset the DMA every 16 bytes, I'm all ears), but it does mean you can write to either the tilemap or the tiledata in Mode 7 without wasting bandwidth writing to both...